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 "core/plugins/DOMPluginArray.h"
22
23#include "core/frame/LocalFrame.h"
24#include "core/page/Page.h"
25#include "platform/plugins/PluginData.h"
26#include "wtf/Vector.h"
27#include "wtf/text/AtomicString.h"
28
29namespace blink {
30
31DOMPluginArray::DOMPluginArray(LocalFrame* frame)
32    : DOMWindowProperty(frame)
33{
34}
35
36void DOMPluginArray::trace(Visitor* visitor)
37{
38    DOMWindowProperty::trace(visitor);
39}
40
41unsigned DOMPluginArray::length() const
42{
43    PluginData* data = pluginData();
44    if (!data)
45        return 0;
46    return data->plugins().size();
47}
48
49PassRefPtrWillBeRawPtr<DOMPlugin> DOMPluginArray::item(unsigned index)
50{
51    PluginData* data = pluginData();
52    if (!data)
53        return nullptr;
54    const Vector<PluginInfo>& plugins = data->plugins();
55    if (index >= plugins.size())
56        return nullptr;
57    return DOMPlugin::create(data, m_frame, index).get();
58}
59
60bool DOMPluginArray::canGetItemsForName(const AtomicString& propertyName)
61{
62    PluginData* data = pluginData();
63    if (!data)
64        return 0;
65    const Vector<PluginInfo>& plugins = data->plugins();
66    for (unsigned i = 0; i < plugins.size(); ++i) {
67        if (plugins[i].name == propertyName)
68            return true;
69    }
70    return false;
71}
72
73PassRefPtrWillBeRawPtr<DOMPlugin> DOMPluginArray::namedItem(const AtomicString& propertyName)
74{
75    PluginData* data = pluginData();
76    if (!data)
77        return nullptr;
78    const Vector<PluginInfo>& plugins = data->plugins();
79    for (unsigned i = 0; i < plugins.size(); ++i) {
80        if (plugins[i].name == propertyName)
81            return DOMPlugin::create(data, m_frame, i).get();
82    }
83    return nullptr;
84}
85
86void DOMPluginArray::refresh(bool reload)
87{
88    Page::refreshPlugins(reload);
89}
90
91PluginData* DOMPluginArray::pluginData() const
92{
93    if (!m_frame)
94        return 0;
95    Page* page = m_frame->page();
96    if (!page)
97        return 0;
98    return page->pluginData();
99}
100
101} // namespace blink
102