[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
andersca at apple.com
andersca at apple.com
Wed Dec 22 11:30:43 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit b955af17d40181f63baecdd7780c1f60e987775a
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Tue Jul 27 20:55:29 2010 +0000
Expose interface for returning the plug-in script JSObject
https://bugs.webkit.org/show_bug.cgi?id=43074
Reviewed by Sam Weinig.
WebCore:
PluginViewBase::scriptObject should be a virtual function.
* plugins/PluginViewBase.h:
(WebCore::PluginViewBase::scriptObject):
WebKit2:
* WebProcess/Plugins/NPRuntimeObjectMap.cpp:
(WebKit::NPRuntimeObjectMap::getOrCreateJSObject):
Add empty stub.
* WebProcess/Plugins/NPRuntimeObjectMap.h:
* WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
(WebKit::NetscapePlugin::pluginScriptableNPObject):
Ask the plug-in for it's scriptable NPObject.
* WebProcess/Plugins/Netscape/NetscapePlugin.h:
* WebProcess/Plugins/Plugin.h:
Add pluginScritableNPObject.
* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::PluginView):
Call PluginViewBase constructor.
(WebKit::PluginView::scriptObject):
Ask the plug-in for its scriptable object and wrap it.
* WebProcess/Plugins/PluginView.h:
PluginView now inherits from PluginViewBase.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@64154 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 0c6b65d..778048a 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,15 @@
+2010-07-27 Anders Carlsson <andersca at apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Expose interface for returning the plug-in script JSObject
+ https://bugs.webkit.org/show_bug.cgi?id=43074
+
+ PluginViewBase::scriptObject should be a virtual function.
+
+ * plugins/PluginViewBase.h:
+ (WebCore::PluginViewBase::scriptObject):
+
2010-07-27 Jian Li <jianli at chromium.org>
Reviewed by David Levin.
diff --git a/WebCore/plugins/PluginViewBase.h b/WebCore/plugins/PluginViewBase.h
index 34b808f..3c43c00 100644
--- a/WebCore/plugins/PluginViewBase.h
+++ b/WebCore/plugins/PluginViewBase.h
@@ -44,7 +44,7 @@ public:
virtual PlatformLayer* platformLayer() const { return 0; }
#endif
- JSC::JSObject* scriptObject(JSC::ExecState*, JSC::JSGlobalObject*) { return 0; }
+ virtual JSC::JSObject* scriptObject(JSC::ExecState*, JSC::JSGlobalObject*) { return 0; }
protected:
PluginViewBase(PlatformWidget widget) : Widget(widget) { }
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 50438fb..725472a 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,5 +1,35 @@
2010-07-27 Anders Carlsson <andersca at apple.com>
+ Reviewed by Sam Weinig.
+
+ Expose interface for returning the plug-in script JSObject
+ https://bugs.webkit.org/show_bug.cgi?id=43074
+
+ * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
+ (WebKit::NPRuntimeObjectMap::getOrCreateJSObject):
+ Add empty stub.
+
+ * WebProcess/Plugins/NPRuntimeObjectMap.h:
+ * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
+ (WebKit::NetscapePlugin::pluginScriptableNPObject):
+ Ask the plug-in for it's scriptable NPObject.
+
+ * WebProcess/Plugins/Netscape/NetscapePlugin.h:
+ * WebProcess/Plugins/Plugin.h:
+ Add pluginScritableNPObject.
+
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::PluginView):
+ Call PluginViewBase constructor.
+
+ (WebKit::PluginView::scriptObject):
+ Ask the plug-in for its scriptable object and wrap it.
+
+ * WebProcess/Plugins/PluginView.h:
+ PluginView now inherits from PluginViewBase.
+
+2010-07-27 Anders Carlsson <andersca at apple.com>
+
Reviewed by Adam Roben.
Move NPJSObject out into separate files
diff --git a/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.cpp b/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.cpp
index e280bc7..d61559b 100644
--- a/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.cpp
+++ b/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.cpp
@@ -62,6 +62,12 @@ void NPRuntimeObjectMap::npJSObjectDestroyed(NPJSObject* npJSObject)
m_objects.remove(npJSObject->jsObject());
}
+JSObject* NPRuntimeObjectMap::getOrCreateJSObject(NPObject*, ExecState*, JSGlobalObject*)
+{
+ // FIXME: Implement.
+ return 0;
+}
+
void NPRuntimeObjectMap::invalidate()
{
Vector<NPJSObject*> npJSObjects;
diff --git a/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.h b/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.h
index 615221d..d0d5f26 100644
--- a/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.h
+++ b/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.h
@@ -32,6 +32,7 @@ struct NPObject;
namespace JSC {
class ExecState;
+ class JSGlobalObject;
class JSObject;
}
@@ -45,12 +46,16 @@ class NPRuntimeObjectMap {
public:
explicit NPRuntimeObjectMap(PluginView*);
- // Returns an NPObject that wraps the given JavaScript object. If there is already an NPObject that wraps this JSObject, it will
+ // Returns an NPObject that wraps the given JSObject object. If there is already an NPObject that wraps this JSObject, it will
// retain it and return it.
NPObject* getOrCreateNPObject(JSC::JSObject*);
void npJSObjectDestroyed(NPJSObject*);
+ // Returns a JSObject object that wraps the given NPObject.
+ JSC::JSObject* getOrCreateJSObject(NPObject*, JSC::ExecState*, JSC::JSGlobalObject*);
+
+
// Called when the plug-in is destroyed. Will invalidate all the NPObjects.
void invalidate();
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
index b026eee..e0f28c1 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
@@ -438,6 +438,16 @@ void NetscapePlugin::setFocus(bool hasFocus)
platformSetFocus(hasFocus);
}
+NPObject* NetscapePlugin::pluginScriptableNPObject()
+{
+ NPObject* scriptableNPObject = 0;
+
+ if (NPP_GetValue(NPPVpluginScriptableNPObject, &scriptableNPObject) != NPERR_NO_ERROR)
+ return 0;
+
+ return scriptableNPObject;
+}
+
PluginController* NetscapePlugin::controller()
{
return m_pluginController;
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
index 05c5b1f..636a059 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
@@ -116,6 +116,7 @@ private:
virtual bool handleMouseEnterEvent(const WebMouseEvent&);
virtual bool handleMouseLeaveEvent(const WebMouseEvent&);
virtual void setFocus(bool);
+ virtual NPObject* pluginScriptableNPObject();
virtual PluginController* controller();
diff --git a/WebKit2/WebProcess/Plugins/Plugin.h b/WebKit2/WebProcess/Plugins/Plugin.h
index 292a516..41c4c71 100644
--- a/WebKit2/WebProcess/Plugins/Plugin.h
+++ b/WebKit2/WebProcess/Plugins/Plugin.h
@@ -30,6 +30,8 @@
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
+struct NPObject;
+
namespace WebCore {
class GraphicsContext;
class IntRect;
@@ -104,6 +106,9 @@ public:
// Tells the focus about focus changes.
virtual void setFocus(bool) = 0;
+ // Get the NPObject that corresponds to the plug-in's scriptable object. Returns a retained object.
+ virtual NPObject* pluginScriptableNPObject() = 0;
+
// Returns the plug-in controller for this plug-in.
// FIXME: We could just have the controller be a member variable of Plugin.
virtual PluginController* controller() = 0;
diff --git a/WebKit2/WebProcess/Plugins/PluginView.cpp b/WebKit2/WebProcess/Plugins/PluginView.cpp
index 8651bb3..0344c73 100644
--- a/WebKit2/WebProcess/Plugins/PluginView.cpp
+++ b/WebKit2/WebProcess/Plugins/PluginView.cpp
@@ -25,6 +25,7 @@
#include "PluginView.h"
+#include "NPRuntimeUtilities.h"
#include "Plugin.h"
#include "WebEvent.h"
#include "WebPage.h"
@@ -209,7 +210,8 @@ void PluginView::Stream::didFinishLoading(NetscapePlugInStreamLoader*)
}
PluginView::PluginView(WebCore::HTMLPlugInElement* pluginElement, PassRefPtr<Plugin> plugin, const Plugin::Parameters& parameters)
- : m_pluginElement(pluginElement)
+ : PluginViewBase(0)
+ , m_pluginElement(pluginElement)
, m_plugin(plugin)
, m_parameters(parameters)
, m_isInitialized(false)
@@ -279,6 +281,18 @@ void PluginView::initializePlugin()
m_isInitialized = true;
}
+JSObject* PluginView::scriptObject(ExecState* exec, JSGlobalObject* globalObject)
+{
+ NPObject* scriptableNPObject = m_plugin->pluginScriptableNPObject();
+ if (!scriptableNPObject)
+ return 0;
+
+ JSObject* jsObject = m_npRuntimeObjectMap.getOrCreateJSObject(scriptableNPObject, exec, globalObject);
+ releaseNPObject(scriptableNPObject);
+
+ return jsObject;
+}
+
void PluginView::setFrameRect(const WebCore::IntRect& rect)
{
Widget::setFrameRect(rect);
diff --git a/WebKit2/WebProcess/Plugins/PluginView.h b/WebKit2/WebProcess/Plugins/PluginView.h
index 056c381..0dd80df 100644
--- a/WebKit2/WebProcess/Plugins/PluginView.h
+++ b/WebKit2/WebProcess/Plugins/PluginView.h
@@ -33,7 +33,7 @@
#include "WebFrame.h"
#include <WebCore/MediaCanStartListener.h>
-#include <WebCore/Widget.h>
+#include <WebCore/PluginViewBase.h>
#include <wtf/Deque.h>
// FIXME: Eventually this should move to WebCore.
@@ -45,7 +45,7 @@ namespace WebCore {
namespace WebKit {
-class PluginView : public WebCore::Widget, WebCore::MediaCanStartListener, PluginController, WebFrame::LoadListener {
+class PluginView : public WebCore::PluginViewBase, WebCore::MediaCanStartListener, PluginController, WebFrame::LoadListener {
public:
static PassRefPtr<PluginView> create(WebCore::HTMLPlugInElement* pluginElement, PassRefPtr<Plugin> plugin, const Plugin::Parameters& parameters)
{
@@ -80,6 +80,9 @@ private:
void removeStream(Stream*);
void cancelAllStreams();
+ // WebCore::PluginViewBase
+ virtual JSC::JSObject* scriptObject(JSC::ExecState*, JSC::JSGlobalObject*);
+
// WebCore::Widget
virtual void setFrameRect(const WebCore::IntRect&);
virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect&);
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list