[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 13:52:09 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 02ebec14d24cacb83509eff34cfd8d7a8ffd00ee
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Sep 28 16:54:02 2010 +0000

    Implement PluginControllerProxy::initialize and have it create a plug-in
    https://bugs.webkit.org/show_bug.cgi?id=46731
    
    Reviewed by Adam Roben.
    
    * PluginProcess/PluginControllerProxy.cpp:
    (WebKit::PluginControllerProxy::initialize):
    Create the plug-in and try to initialize it.
    
    (WebKit::PluginControllerProxy::destroy):
    Destroy the plug-in.
    
    * PluginProcess/WebProcessConnection.cpp:
    (WebKit::WebProcessConnection::addPluginControllerProxy):
    Add the given plug-in controller proxy to the map and assume ownership of it.
    
    (WebKit::WebProcessConnection::removePluginControllerProxy):
    Remove the given plug-in controller proxy from the map and delete it.
    
    (WebKit::WebProcessConnection::createPlugin):
    Create a plug-in controller proxy and try to initialize it.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68531 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 8bb73f7..659d13b 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -2,6 +2,30 @@
 
         Reviewed by Adam Roben.
 
+        Implement PluginControllerProxy::initialize and have it create a plug-in
+        https://bugs.webkit.org/show_bug.cgi?id=46731
+
+        * PluginProcess/PluginControllerProxy.cpp:
+        (WebKit::PluginControllerProxy::initialize):
+        Create the plug-in and try to initialize it.
+
+        (WebKit::PluginControllerProxy::destroy):
+        Destroy the plug-in.
+
+        * PluginProcess/WebProcessConnection.cpp:
+        (WebKit::WebProcessConnection::addPluginControllerProxy):
+        Add the given plug-in controller proxy to the map and assume ownership of it.
+
+        (WebKit::WebProcessConnection::removePluginControllerProxy):
+        Remove the given plug-in controller proxy from the map and delete it.
+
+        (WebKit::WebProcessConnection::createPlugin):
+        Create a plug-in controller proxy and try to initialize it.
+
+2010-09-28  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Adam Roben.
+
         Add PluginControllerProxy class
         https://bugs.webkit.org/show_bug.cgi?id=46728
 
diff --git a/WebKit2/PluginProcess/PluginControllerProxy.cpp b/WebKit2/PluginProcess/PluginControllerProxy.cpp
index 73fe4e6..6c91cc0 100644
--- a/WebKit2/PluginProcess/PluginControllerProxy.cpp
+++ b/WebKit2/PluginProcess/PluginControllerProxy.cpp
@@ -27,7 +27,9 @@
 
 #include "PluginControllerProxy.h"
 
+#include "NetscapePlugin.h"
 #include "NotImplemented.h"
+#include "PluginProcess.h"
 #include <wtf/text/WTFString.h>
 
 using namespace WebCore;
@@ -50,6 +52,27 @@ PluginControllerProxy::~PluginControllerProxy()
     ASSERT(!m_plugin);
 }
 
+bool PluginControllerProxy::initialize(const Plugin::Parameters& parameters)
+{
+    ASSERT(!m_plugin);
+
+    m_plugin = NetscapePlugin::create(PluginProcess::shared().netscapePluginModule());
+    if (!m_plugin->initialize(this, parameters)) {
+        m_plugin = 0;
+        return false;
+    }
+
+    return true;
+}
+
+void PluginControllerProxy::destroy()
+{
+    ASSERT(m_plugin);
+
+    m_plugin->destroy();
+    m_plugin = 0;
+}
+
 void PluginControllerProxy::invalidate(const IntRect&)
 {
     notImplemented();
diff --git a/WebKit2/PluginProcess/PluginControllerProxy.h b/WebKit2/PluginProcess/PluginControllerProxy.h
index a1a28b6..7066202 100644
--- a/WebKit2/PluginProcess/PluginControllerProxy.h
+++ b/WebKit2/PluginProcess/PluginControllerProxy.h
@@ -46,6 +46,9 @@ public:
 
     uint64_t pluginInstanceID() const { return m_pluginInstanceID; }
 
+    bool initialize(const Plugin::Parameters&);
+    void destroy();
+
 private:
     PluginControllerProxy(WebProcessConnection* connection, uint64_t pluginInstanceID);
 
diff --git a/WebKit2/PluginProcess/WebProcessConnection.cpp b/WebKit2/PluginProcess/WebProcessConnection.cpp
index a5acfa4..b97cedc 100644
--- a/WebKit2/PluginProcess/WebProcessConnection.cpp
+++ b/WebKit2/PluginProcess/WebProcessConnection.cpp
@@ -49,17 +49,23 @@ WebProcessConnection::WebProcessConnection(CoreIPC::Connection::Identifier conne
     m_connection->open();
 }
 
-void WebProcessConnection::addPluginControllerProxy(PluginControllerProxy* pluginController)
+void WebProcessConnection::addPluginControllerProxy(PassOwnPtr<PluginControllerProxy> pluginController)
 {
-    ASSERT(!m_pluginControllers.contains(pluginController->pluginInstanceID()));
-    m_pluginControllers.set(pluginController->pluginInstanceID(), pluginController);
+    uint64_t pluginInstanceID = pluginController->pluginInstanceID();
+
+    ASSERT(!m_pluginControllers.contains(pluginInstanceID));
+    m_pluginControllers.set(pluginInstanceID, pluginController.leakPtr());
 }
 
 void WebProcessConnection::removePluginControllerProxy(PluginControllerProxy* pluginController)
 {
-    ASSERT(m_pluginControllers.contains(pluginController->pluginInstanceID()));
-    m_pluginControllers.remove(pluginController->pluginInstanceID());
+    {
+        ASSERT(m_pluginControllers.contains(pluginController->pluginInstanceID()));
 
+        OwnPtr<PluginControllerProxy> pluginControllerOwnPtr = adoptPtr(m_pluginControllers.take(pluginController->pluginInstanceID()));
+        ASSERT(pluginControllerOwnPtr == pluginController);
+    }
+    
     if (!m_pluginControllers.isEmpty())
         return;
 
@@ -91,8 +97,23 @@ void WebProcessConnection::didReceiveInvalidMessage(CoreIPC::Connection*, CoreIP
     // FIXME: Implement.
 }
 
-void WebProcessConnection::createPlugin(uint64_t pluginInstanceID, const Plugin::Parameters&, bool& result)
+void WebProcessConnection::createPlugin(uint64_t pluginInstanceID, const Plugin::Parameters& parameters, bool& result)
 {
+    OwnPtr<PluginControllerProxy> pluginControllerProxy = PluginControllerProxy::create(this, pluginInstanceID);
+
+    PluginControllerProxy* pluginControllerProxyPtr = pluginControllerProxy.get();
+
+    // Make sure to add the proxy to the map before initializing it, since the plug-in might call out to the web process from 
+    // its NPP_New function. This will hand over ownership of the proxy to the web process connection.
+    addPluginControllerProxy(pluginControllerProxy.release());
+
+    // Now try to initialize the plug-in.
+    result = pluginControllerProxyPtr->initialize(parameters);
+
+    if (!result) {
+        // We failed to initialize, remove the plug-in controller. This could cause us to be deleted.
+        removePluginControllerProxy(pluginControllerProxyPtr);
+    }
 }
 
 } // namespace WebKit
diff --git a/WebKit2/PluginProcess/WebProcessConnection.h b/WebKit2/PluginProcess/WebProcessConnection.h
index 08b6e91..a8600c1 100644
--- a/WebKit2/PluginProcess/WebProcessConnection.h
+++ b/WebKit2/PluginProcess/WebProcessConnection.h
@@ -45,12 +45,12 @@ public:
 
     CoreIPC::Connection* connection() const { return m_connection.get(); }
 
-    void addPluginControllerProxy(PluginControllerProxy*);
-    void removePluginControllerProxy(PluginControllerProxy*);
-
 private:
     WebProcessConnection(CoreIPC::Connection::Identifier);
 
+    void addPluginControllerProxy(PassOwnPtr<PluginControllerProxy>);
+    void removePluginControllerProxy(PluginControllerProxy*);
+
     // CoreIPC::Connection::Client
     virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
     virtual CoreIPC::SyncReplyMode didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list