Index: third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp |
diff --git a/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp b/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp |
index 41a2aaa9f7a45d2594d77b50b94e509f347094b1..2aed1cb15d2ef50753a3f0d4fd9f15c292c703e3 100644 |
--- a/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp |
+++ b/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp |
@@ -29,6 +29,7 @@ |
#include "core/dom/Node.h" |
#include "core/dom/shadow/ShadowRoot.h" |
#include "core/events/Event.h" |
+#include "core/frame/Frame.h" |
#include "core/frame/FrameView.h" |
#include "core/frame/LocalFrame.h" |
#include "core/frame/Settings.h" |
@@ -45,6 +46,7 @@ |
#include "core/loader/MixedContentChecker.h" |
#include "core/page/Page.h" |
#include "core/page/scrolling/ScrollingCoordinator.h" |
+#include "core/plugins/PluginClient.h" |
#include "core/plugins/PluginView.h" |
#include "platform/Histogram.h" |
#include "platform/Widget.h" |
@@ -93,6 +95,7 @@ HTMLPlugInElement::~HTMLPlugInElement() { |
DEFINE_TRACE(HTMLPlugInElement) { |
visitor->trace(m_imageLoader); |
visitor->trace(m_persistedPluginWidget); |
+ visitor->trace(m_pluginClient); |
HTMLFrameOwnerElement::trace(visitor); |
} |
@@ -136,6 +139,9 @@ bool HTMLPlugInElement::requestObjectInternal( |
return loadOrRedirectSubframe(completedURL, getNameAttribute(), true); |
} |
+ if (loadFrame(completedURL)) |
+ return true; |
+ |
return loadPlugin(completedURL, mimeType, paramNames, paramValues, |
useFallback, true); |
} |
@@ -322,6 +328,11 @@ SharedPersistent<v8::Object>* HTMLPlugInElement::pluginWrapper() { |
// return the cached allocated Bindings::Instance. Not supporting this |
// edge-case is OK. |
if (!m_pluginWrapper) { |
+ if (m_pluginClient) { |
+ m_pluginWrapper = frame->script().createPluginWrapper(m_pluginClient); |
+ return m_pluginWrapper.get(); |
+ } |
+ |
Widget* plugin; |
if (m_persistedPluginWidget) |
@@ -329,8 +340,9 @@ SharedPersistent<v8::Object>* HTMLPlugInElement::pluginWrapper() { |
else |
plugin = pluginWidget(); |
- if (plugin) |
+ if (plugin && plugin->isPluginView()) { |
m_pluginWrapper = frame->script().createPluginWrapper(plugin); |
+ } |
} |
return m_pluginWrapper.get(); |
} |
@@ -498,6 +510,15 @@ bool HTMLPlugInElement::requestObject(const String& url, |
return result; |
} |
+bool HTMLPlugInElement::loadFrame(const KURL& url) { |
+ LocalFrame* frame = document().frame(); |
+ if (!frame) |
+ return false; |
+ m_pluginClient = frame->loader().client()->createPluginClient( |
+ this, url, mimeTypeFromURL(url)); |
+ return m_pluginClient; |
+} |
+ |
bool HTMLPlugInElement::loadPlugin(const KURL& url, |
const String& mimeType, |
const Vector<String>& paramNames, |