[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