summaryrefslogtreecommitdiff
path: root/Source/WebCore/plugins/DOMPluginArray.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/plugins/DOMPluginArray.cpp')
-rw-r--r--Source/WebCore/plugins/DOMPluginArray.cpp82
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