15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  Copyright (C) 2008 Apple Inc. All rights reserved.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  This library is free software; you can redistribute it and/or
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  modify it under the terms of the GNU Lesser General Public
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  License as published by the Free Software Foundation; either
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  version 2 of the License, or (at your option) any later version.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  This library is distributed in the hope that it will be useful,
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  but WITHOUT ANY WARRANTY; without even the implied warranty of
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  Lesser General Public License for more details.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  You should have received a copy of the GNU Lesser General Public
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  License along with this library; if not, write to the Free Software
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
2153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/plugins/DOMPluginArray.h"
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
23d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h"
2453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h"
2551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/plugins/PluginData.h"
26c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "wtf/Vector.h"
277757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch#include "wtf/text/AtomicString.h"
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
29c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
31d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)DOMPluginArray::DOMPluginArray(LocalFrame* frame)
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : DOMWindowProperty(frame)
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid DOMPluginArray::trace(Visitor* visitor)
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DOMWindowProperty::trace(visitor);
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned DOMPluginArray::length() const
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PluginData* data = pluginData();
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!data)
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return data->plugins().size();
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)PassRefPtrWillBeRawPtr<DOMPlugin> DOMPluginArray::item(unsigned index)
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PluginData* data = pluginData();
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!data)
53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return nullptr;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Vector<PluginInfo>& plugins = data->plugins();
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (index >= plugins.size())
56d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return nullptr;
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return DOMPlugin::create(data, m_frame, index).get();
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool DOMPluginArray::canGetItemsForName(const AtomicString& propertyName)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PluginData* data = pluginData();
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!data)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Vector<PluginInfo>& plugins = data->plugins();
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (unsigned i = 0; i < plugins.size(); ++i) {
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (plugins[i].name == propertyName)
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return true;
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)PassRefPtrWillBeRawPtr<DOMPlugin> DOMPluginArray::namedItem(const AtomicString& propertyName)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PluginData* data = pluginData();
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!data)
77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return nullptr;
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Vector<PluginInfo>& plugins = data->plugins();
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (unsigned i = 0; i < plugins.size(); ++i) {
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (plugins[i].name == propertyName)
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return DOMPlugin::create(data, m_frame, i).get();
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
83d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    return nullptr;
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void DOMPluginArray::refresh(bool reload)
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Page::refreshPlugins(reload);
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PluginData* DOMPluginArray::pluginData() const
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_frame)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Page* page = m_frame->page();
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!page)
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return page->pluginData();
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
101c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
102