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