Object.getOwnPropertyNames() does not return named properties
[WebKit-https.git] / Source / WebCore / plugins / DOMMimeTypeArray.cpp
1 /*
2  *  Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
3  *  Copyright (C) 2008 Apple Inc. All rights reserved.
4  *
5  *  This library is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU Lesser General Public
7  *  License as published by the Free Software Foundation; either
8  *  version 2 of the License, or (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  *  Lesser General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Lesser General Public
16  *  License along with this library; if not, write to the Free Software
17  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18  */
19
20 #include "config.h"
21 #include "DOMMimeTypeArray.h"
22
23 #include "DOMPlugin.h"
24 #include "Frame.h"
25 #include "Page.h"
26 #include "PluginData.h"
27 #include <wtf/text/AtomicString.h>
28
29 #if ENABLE(WEB_REPLAY)
30 #include "Document.h"
31 #include "WebReplayInputs.h"
32 #include <replay/InputCursor.h>
33 #endif
34
35 namespace WebCore {
36
37 DOMMimeTypeArray::DOMMimeTypeArray(Frame* frame)
38     : DOMWindowProperty(frame)
39 {
40 }
41
42 DOMMimeTypeArray::~DOMMimeTypeArray()
43 {
44 }
45
46 unsigned DOMMimeTypeArray::length() const
47 {
48     PluginData* data = getPluginData();
49     if (!data)
50         return 0;
51
52     Vector<MimeClassInfo> mimes;
53     Vector<size_t> mimePluginIndices;
54     data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
55     return mimes.size();
56 }
57
58 RefPtr<DOMMimeType> DOMMimeTypeArray::item(unsigned index)
59 {
60     PluginData* data = getPluginData();
61     if (!data)
62         return nullptr;
63
64     Vector<MimeClassInfo> mimes;
65     Vector<size_t> mimePluginIndices;
66     data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
67
68     if (index >= mimes.size())
69         return nullptr;
70     return DOMMimeType::create(data, m_frame, index);
71 }
72
73 RefPtr<DOMMimeType> DOMMimeTypeArray::namedItem(const AtomicString& propertyName)
74 {
75     PluginData* data = getPluginData();
76     if (!data)
77         return nullptr;
78
79     Vector<MimeClassInfo> mimes;
80     Vector<size_t> mimePluginIndices;
81     data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
82     for (unsigned i = 0; i < mimes.size(); ++i) {
83         if (mimes[i].type == propertyName)
84             return DOMMimeType::create(data, m_frame, i);
85     }
86     return nullptr;
87 }
88
89 Vector<AtomicString> DOMMimeTypeArray::supportedPropertyNames()
90 {
91     // FIXME: Should be implemented.
92     return Vector<AtomicString>();
93 }
94
95 PluginData* DOMMimeTypeArray::getPluginData() const
96 {
97     if (!m_frame)
98         return nullptr;
99
100     Page* page = m_frame->page();
101     if (!page)
102         return nullptr;
103
104     PluginData* pluginData = &page->pluginData();
105
106 #if ENABLE(WEB_REPLAY)
107     if (!m_frame->document())
108         return pluginData;
109
110     InputCursor& cursor = m_frame->document()->inputCursor();
111     if (cursor.isCapturing())
112         cursor.appendInput<FetchPluginData>(pluginData);
113     else if (cursor.isReplaying()) {
114         if (FetchPluginData* input = cursor.fetchInput<FetchPluginData>())
115             pluginData = input->pluginData().get();
116     }
117 #endif
118
119     return pluginData;
120 }
121
122 } // namespace WebCore