diff options
Diffstat (limited to 'Source/WebCore/plugins/DOMPluginArray.cpp')
-rw-r--r-- | Source/WebCore/plugins/DOMPluginArray.cpp | 82 |
1 files changed, 53 insertions, 29 deletions
diff --git a/Source/WebCore/plugins/DOMPluginArray.cpp b/Source/WebCore/plugins/DOMPluginArray.cpp index cca94b281..c1e4e6fa9 100644 --- a/Source/WebCore/plugins/DOMPluginArray.cpp +++ b/Source/WebCore/plugins/DOMPluginArray.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) - * Copyright (C) 2008 Apple Inc. All rights reserved. + * Copyright (C) 2008, 2015 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -26,6 +26,12 @@ #include "PluginData.h" #include <wtf/text/AtomicString.h> +#if ENABLE(WEB_REPLAY) +#include "Document.h" +#include "WebReplayInputs.h" +#include <replay/InputCursor.h> +#endif + namespace WebCore { DOMPluginArray::DOMPluginArray(Frame* frame) @@ -42,59 +48,77 @@ unsigned DOMPluginArray::length() const PluginData* data = pluginData(); if (!data) return 0; - return data->plugins().size(); + + return data->publiclyVisiblePlugins().size(); } -PassRefPtr<DOMPlugin> DOMPluginArray::item(unsigned index) +RefPtr<DOMPlugin> DOMPluginArray::item(unsigned index) { PluginData* data = pluginData(); if (!data) - return 0; - const Vector<PluginInfo>& plugins = data->plugins(); + return nullptr; + + const Vector<PluginInfo>& plugins = data->publiclyVisiblePlugins(); if (index >= plugins.size()) - return 0; - return DOMPlugin::create(data, m_frame, index).get(); + return nullptr; + return DOMPlugin::create(data, m_frame, plugins[index]); } -bool DOMPluginArray::canGetItemsForName(const AtomicString& propertyName) +RefPtr<DOMPlugin> DOMPluginArray::namedItem(const AtomicString& propertyName) { PluginData* data = pluginData(); if (!data) - return 0; - const Vector<PluginInfo>& plugins = data->plugins(); - for (unsigned i = 0; i < plugins.size(); ++i) { - if (plugins[i].name == propertyName) - return true; + return nullptr; + + for (auto& plugin : data->webVisiblePlugins()) { + if (plugin.name == propertyName) + return DOMPlugin::create(data, m_frame, plugin); } - return false; + return nullptr; } -PassRefPtr<DOMPlugin> DOMPluginArray::namedItem(const AtomicString& propertyName) +Vector<AtomicString> DOMPluginArray::supportedPropertyNames() { - PluginData* data = pluginData(); - if (!data) - return 0; - const Vector<PluginInfo>& plugins = data->plugins(); - for (unsigned i = 0; i < plugins.size(); ++i) { - if (plugins[i].name == propertyName) - return DOMPlugin::create(data, m_frame, i).get(); - } - return 0; + // FIXME: Should be implemented. + return Vector<AtomicString>(); } -void DOMPluginArray::refresh(bool reload) +void DOMPluginArray::refresh(bool reloadPages) { - Page::refreshPlugins(reload); + if (!m_frame) + return; + + if (!m_frame->page()) + return; + + Page::refreshPlugins(reloadPages); } PluginData* DOMPluginArray::pluginData() const { if (!m_frame) - return 0; + return nullptr; + Page* page = m_frame->page(); if (!page) - return 0; - return &page->pluginData(); + return nullptr; + + PluginData* pluginData = &page->pluginData(); + +#if ENABLE(WEB_REPLAY) + if (!m_frame->document()) + return pluginData; + + InputCursor& cursor = m_frame->document()->inputCursor(); + if (cursor.isCapturing()) + cursor.appendInput<FetchPluginData>(pluginData); + else if (cursor.isReplaying()) { + if (FetchPluginData* input = cursor.fetchInput<FetchPluginData>()) + pluginData = input->pluginData().get(); + } +#endif + + return pluginData; } } // namespace WebCore |