Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1136)

Unified Diff: Source/core/html/HTMLPlugInElement.cpp

Issue 23618022: BrowserPlugin/WebView - Move plugin lifetime to DOM (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Cleaned up. Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/html/HTMLPlugInElement.cpp
diff --git a/Source/core/html/HTMLPlugInElement.cpp b/Source/core/html/HTMLPlugInElement.cpp
index 9af98d1fab565b2b0c90ccc829aa9367897b7dc7..9e7da9c730270ecc92010678bddb5e80948b5f19 100644
--- a/Source/core/html/HTMLPlugInElement.cpp
+++ b/Source/core/html/HTMLPlugInElement.cpp
@@ -29,6 +29,7 @@
#include "bindings/v8/npruntime_impl.h"
#include "core/dom/Document.h"
#include "core/events/Event.h"
+#include "core/loader/FrameLoaderClient.h"
#include "core/page/EventHandler.h"
#include "core/page/Frame.h"
#include "core/platform/Widget.h"
@@ -88,6 +89,41 @@ void HTMLPlugInElement::removeAllEventListeners()
}
}
+void HTMLPlugInElement::createPluginWithoutRenderer(const String& mimeType)
+{
+ if (m_plugin && (mimeType == m_pluginMimeType))
+ return;
+
+ Frame* frame = document().frame();
+ if (!frame->loader()->client()->canCreatePluginWithoutRenderer(mimeType))
+ return;
+
+ KURL url;
+ Vector<String> paramNames;
+ Vector<String> paramValues;
+
+ paramNames.append(String("type"));
+ paramValues.append(mimeType);
+
+ m_plugin = frame->loader()->client()->createPlugin(IntSize(), this, url, paramNames, paramValues, mimeType, false, true);
+
+ // Register the bindings with V8 as a scriptable object; normally this is
+ // done in getInstance(), but that is only called after a renderer has been
+ // assigned.
+ if (m_plugin) {
+ m_pluginMimeType = mimeType;
+ // We require a V8 context in order to be able to create the script
+ // instance, but since this may occur during loading we need to create
+ // one here to ensure it exists.
+ v8::HandleScope handleScope(v8::Isolate::GetCurrent());
+ v8::Local<v8::Context> context = ScriptController::mainWorldContext(frame);
+ v8::Context::Scope contextScope(context);
+ m_instance = frame->script()->createScriptInstanceForWidget(m_plugin.get());
+ } else {
+ m_pluginMimeType = String();
+ }
+}
+
void HTMLPlugInElement::detach(const AttachContext& context)
{
m_instance.clear();
@@ -250,4 +286,14 @@ NPObject* HTMLPlugInElement::getNPObject()
return m_NPObject;
}
+void HTMLPlugInElement::setPlugin(PassRefPtr<Widget> plugin)
+{
+ m_plugin = plugin;
+}
+
+PassRefPtr<Widget> HTMLPlugInElement::plugin()
+{
+ return m_plugin;
+}
+
}

Powered by Google App Engine
This is Rietveld 408576698