[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:46:36 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit bee7773a0154136e628c8cdf191d3cd3869f39e8
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sun Sep 26 21:48:05 2010 +0000

    Establish a connection between the plug-in process and the web process
    https://bugs.webkit.org/show_bug.cgi?id=46583
    
    Reviewed by Sam Weinig.
    
    * PluginProcess/PluginProcess.cpp:
    (WebKit::PluginProcess::didReceiveMessage):
    Call the auto-generated didReceivePluginProcessMessage.
    
    * PluginProcess/PluginProcess.h:
    Add didReceivePluginProcessMessage declaration.
    
    * PluginProcess/PluginProcess.messages.in:
    Add new "CreateWebProcessConnection" message.
    
    * PluginProcess/WebProcessConnection.cpp:
    (WebKit::WebProcessConnection::didReceiveMessage):
    (WebKit::WebProcessConnection::didReceiveSyncMessage):
    (WebKit::WebProcessConnection::didClose):
    (WebKit::WebProcessConnection::didReceiveInvalidMessage):
    Add stubbed out member functions.
    
    * UIProcess/Plugins/PluginProcessManager.cpp:
    (WebKit::PluginProcessManager::getPluginProcessConnection):
    Ask the plug-in process proxy to create a connection.
    
    * UIProcess/Plugins/PluginProcessProxy.cpp:
    (WebKit::PluginProcessProxy::createWebProcessConnection):
    Add the WebProcessProxy and the reply encoder to the queue of pending replies.
    If the process is still launching, keep track of how many pending requests we have, otherwise
    just send the request.
    
    (WebKit::PluginProcessProxy::didReceiveMessage):
    Call the auto-generated didReceivePluginProcessMessage.
    
    (WebKit::PluginProcessProxy::didFinishLaunching):
    Send all pending connection requests.
    
    (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
    Get the first pending reply and send it with the mach port.
    
    * WebKit2.xcodeproj/project.pbxproj:
    Actually compile PluginProcessMessageReceiver.
    
    * WebProcess/Plugins/PluginProcessConnection.cpp:
    (WebKit::PluginProcessConnection::PluginProcessConnection):
    Create a CoreIPC connection.
    
    (WebKit::PluginProcessConnection::didReceiveMessage):
    (WebKit::PluginProcessConnection::didClose):
    (WebKit::PluginProcessConnection::didReceiveInvalidMessage):
    Add stubbed out member functions.
    
    * WebProcess/WebPage/WebPage.cpp:
    (WebKit::WebPage::createPlugin):
    Ask the plug-in process connection manager for a connection.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68350 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index c671e0a..beef717 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -2,6 +2,65 @@
 
         Reviewed by Sam Weinig.
 
+        Establish a connection between the plug-in process and the web process
+        https://bugs.webkit.org/show_bug.cgi?id=46583
+
+        * PluginProcess/PluginProcess.cpp:
+        (WebKit::PluginProcess::didReceiveMessage):
+        Call the auto-generated didReceivePluginProcessMessage.
+
+        * PluginProcess/PluginProcess.h:
+        Add didReceivePluginProcessMessage declaration.
+
+        * PluginProcess/PluginProcess.messages.in:
+        Add new "CreateWebProcessConnection" message.
+
+        * PluginProcess/WebProcessConnection.cpp:
+        (WebKit::WebProcessConnection::didReceiveMessage):
+        (WebKit::WebProcessConnection::didReceiveSyncMessage):
+        (WebKit::WebProcessConnection::didClose):
+        (WebKit::WebProcessConnection::didReceiveInvalidMessage):
+        Add stubbed out member functions.
+
+        * UIProcess/Plugins/PluginProcessManager.cpp:
+        (WebKit::PluginProcessManager::getPluginProcessConnection):
+        Ask the plug-in process proxy to create a connection.
+
+        * UIProcess/Plugins/PluginProcessProxy.cpp:
+        (WebKit::PluginProcessProxy::createWebProcessConnection):
+        Add the WebProcessProxy and the reply encoder to the queue of pending replies.
+        If the process is still launching, keep track of how many pending requests we have, otherwise
+        just send the request.
+
+        (WebKit::PluginProcessProxy::didReceiveMessage):
+        Call the auto-generated didReceivePluginProcessMessage.
+
+        (WebKit::PluginProcessProxy::didFinishLaunching):
+        Send all pending connection requests.
+
+        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
+        Get the first pending reply and send it with the mach port.
+
+        * WebKit2.xcodeproj/project.pbxproj:
+        Actually compile PluginProcessMessageReceiver.
+
+        * WebProcess/Plugins/PluginProcessConnection.cpp:
+        (WebKit::PluginProcessConnection::PluginProcessConnection):
+        Create a CoreIPC connection.
+
+        (WebKit::PluginProcessConnection::didReceiveMessage):
+        (WebKit::PluginProcessConnection::didClose):
+        (WebKit::PluginProcessConnection::didReceiveInvalidMessage):
+        Add stubbed out member functions.
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::createPlugin):
+        Ask the plug-in process connection manager for a connection.
+
+2010-09-26  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Sam Weinig.
+
         Generated message handlers should include argument coder headers for some types
         https://bugs.webkit.org/show_bug.cgi?id=46582
 
diff --git a/WebKit2/PluginProcess/PluginProcess.cpp b/WebKit2/PluginProcess/PluginProcess.cpp
index e2551c7..93a41ee 100644
--- a/WebKit2/PluginProcess/PluginProcess.cpp
+++ b/WebKit2/PluginProcess/PluginProcess.cpp
@@ -74,6 +74,7 @@ void PluginProcess::removeWebProcessConnection(WebProcessConnection* webProcessC
 
 void PluginProcess::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
 {
+    didReceivePluginProcessMessage(connection, messageID, arguments);
 }
 
 void PluginProcess::didClose(CoreIPC::Connection*)
diff --git a/WebKit2/PluginProcess/PluginProcess.h b/WebKit2/PluginProcess/PluginProcess.h
index c338b23..35de9c2 100644
--- a/WebKit2/PluginProcess/PluginProcess.h
+++ b/WebKit2/PluginProcess/PluginProcess.h
@@ -56,6 +56,7 @@ private:
     virtual void didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID);
 
     // Message handlers.
+    void didReceivePluginProcessMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
     void initialize(const String& pluginPath);
     void createWebProcessConnection();
     
diff --git a/WebKit2/PluginProcess/PluginProcess.messages.in b/WebKit2/PluginProcess/PluginProcess.messages.in
index 05d5420..7f5500f 100644
--- a/WebKit2/PluginProcess/PluginProcess.messages.in
+++ b/WebKit2/PluginProcess/PluginProcess.messages.in
@@ -23,7 +23,13 @@
 #if ENABLE(PLUGIN_PROCESS)
 
 messages -> PluginProcess {
+    # Initializes the plug-in and specifies the path to the plug-in module.
     Initialize(WTF::String pluginPath)
+    
+    # Creates a web process connection. When the connection has been created,
+    # The plug-in process sends back a DidCreateWebProcessConnection message with
+    # a connection identifier.
+    CreateWebProcessConnection()
 }
 
 #endif
diff --git a/WebKit2/PluginProcess/WebProcessConnection.cpp b/WebKit2/PluginProcess/WebProcessConnection.cpp
index 0949cf0..4251193 100644
--- a/WebKit2/PluginProcess/WebProcessConnection.cpp
+++ b/WebKit2/PluginProcess/WebProcessConnection.cpp
@@ -46,6 +46,28 @@ WebProcessConnection::WebProcessConnection(CoreIPC::Connection::Identifier conne
     m_connection->open();
 }
 
+void WebProcessConnection::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
+{
+    // FIXME: Implement.
+}
+
+CoreIPC::SyncReplyMode WebProcessConnection::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply)
+{
+    // FIXME: Implement.
+    return CoreIPC::AutomaticReply;
+}
+
+void WebProcessConnection::didClose(CoreIPC::Connection*)
+{
+    // FIXME: Implement.
+}
+
+void WebProcessConnection::didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID)
+{
+    // FIXME: Implement.
+}
+
+
 } // namespace WebKit
 
 #endif // ENABLE(PLUGIN_PROCESS)
diff --git a/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp b/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp
index aef0da6..ff44e25 100644
--- a/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp
+++ b/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp
@@ -65,7 +65,7 @@ void PluginProcessManager::getPluginProcessConnection(const String& pluginPath,
         m_pluginProcesses.append(pluginProcess);
     }
 
-    // FIXME: Ask the plug-in process for a connection
+    pluginProcess->createWebProcessConnection(webProcessProxy, reply);
 }
 
 void PluginProcessManager::removePluginProcessProxy(PluginProcessProxy* pluginProcessProxy)
diff --git a/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp b/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
index e53b9d6..931ab91 100644
--- a/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
+++ b/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
@@ -27,10 +27,12 @@
 
 #include "PluginProcessProxy.h"
 
+#include "MachPort.h"
 #include "PluginProcessManager.h"
 #include "PluginProcessMessages.h"
 #include "RunLoop.h"
 #include "WebCoreArgumentCoders.h"
+#include "WebProcessProxy.h"
 
 namespace WebKit {
 
@@ -42,6 +44,7 @@ PassOwnPtr<PluginProcessProxy> PluginProcessProxy::create(PluginProcessManager*
 PluginProcessProxy::PluginProcessProxy(PluginProcessManager* PluginProcessManager, const PluginInfoStore::Plugin& pluginInfo)
     : m_pluginProcessManager(PluginProcessManager)
     , m_pluginInfo(pluginInfo)
+    , m_numPendingConnectionRequests(0)
 {
     ProcessLauncher::LaunchOptions launchOptions;
     launchOptions.processType = ProcessLauncher::PluginProcess;
@@ -52,9 +55,28 @@ PluginProcessProxy::PluginProcessProxy(PluginProcessManager* PluginProcessManage
     m_processLauncher = ProcessLauncher::create(this, launchOptions);
 }
 
-void PluginProcessProxy::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
+PluginProcessProxy::~PluginProcessProxy()
 {
-    // FIXME: Implement.
+}
+
+// Asks the plug-in process to create a new connection to a web process. The connection identifier will be 
+// encoded in the given argument encoder and sent back to the connection of the given web process.
+void PluginProcessProxy::createWebProcessConnection(WebProcessProxy* webProcessProxy, CoreIPC::ArgumentEncoder* reply)
+{
+    m_pendingConnectionReplies.append(make_pair(webProcessProxy, reply));
+
+    if (m_processLauncher->isLaunching()) {
+        m_numPendingConnectionRequests++;
+        return;
+    }
+
+    // Ask the plug-in process to create a connection.
+    m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0);
+}
+    
+void PluginProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
+{
+    didReceivePluginProcessProxyMessage(connection, messageID, arguments);
 }
 
 void PluginProcessProxy::didClose(CoreIPC::Connection*)
@@ -77,11 +99,25 @@ void PluginProcessProxy::didFinishLaunching(ProcessLauncher*, CoreIPC::Connectio
     
     // Initialize the plug-in host process.
     m_connection->send(Messages::PluginProcess::Initialize(m_pluginInfo.path), 0);
+
+    // Send all our pending requests.
+    for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i)
+        m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0);
+    
+    m_numPendingConnectionRequests = 0;
 }
 
-void PluginProcessProxy::didCreateWebProcessConnection(const CoreIPC::MachPort&)
+void PluginProcessProxy::didCreateWebProcessConnection(const CoreIPC::MachPort& machPort)
 {
-    // FIXME: Implement.
+    ASSERT(!m_pendingConnectionReplies.isEmpty());
+
+    // Grab the first pending connection reply.
+    RefPtr<WebProcessProxy> replyWebProcessProxy = m_pendingConnectionReplies.first().first.release();
+    CoreIPC::ArgumentEncoder* reply = m_pendingConnectionReplies.first().second;
+    
+    // FIXME: This is Mac specific.
+    reply->encode(CoreIPC::MachPort(machPort.port(), MACH_MSG_TYPE_MOVE_SEND));
+    replyWebProcessProxy->connection()->sendSyncReply(reply);
 }
 
 } // namespace WebKit
diff --git a/WebKit2/UIProcess/Plugins/PluginProcessProxy.h b/WebKit2/UIProcess/Plugins/PluginProcessProxy.h
index 6da82e1..34c5aa4 100644
--- a/WebKit2/UIProcess/Plugins/PluginProcessProxy.h
+++ b/WebKit2/UIProcess/Plugins/PluginProcessProxy.h
@@ -46,9 +46,14 @@ class WebProcessProxy;
 class PluginProcessProxy : CoreIPC::Connection::Client, ProcessLauncher::Client {
 public:
     static PassOwnPtr<PluginProcessProxy> create(PluginProcessManager*, const PluginInfoStore::Plugin&);
+    ~PluginProcessProxy();
 
     const PluginInfoStore::Plugin& pluginInfo() const { return m_pluginInfo; }
 
+    // Asks the plug-in process to create a new connection to a web process. The connection identifier will be 
+    // encoded in the given argument encoder and sent back to the connection of the given web process.
+    void createWebProcessConnection(WebProcessProxy*, CoreIPC::ArgumentEncoder* reply);
+    
 private:
     PluginProcessProxy(PluginProcessManager*, const PluginInfoStore::Plugin&);
 
@@ -75,6 +80,13 @@ private:
 
     // The process launcher for the plug-in host process.
     RefPtr<ProcessLauncher> m_processLauncher;
+
+    Deque<std::pair<RefPtr<WebProcessProxy>, CoreIPC::ArgumentEncoder*> > m_pendingConnectionReplies;
+
+    // If createPluginConnection is called while the process is still launching we'll keep count of it and send a bunch of requests
+    // when the process finishes launching.
+    unsigned m_numPendingConnectionRequests;
+   
 };
 
 } // namespace WebKit
diff --git a/WebKit2/WebKit2.xcodeproj/project.pbxproj b/WebKit2/WebKit2.xcodeproj/project.pbxproj
index dbfa0ad..2788dd5 100644
--- a/WebKit2/WebKit2.xcodeproj/project.pbxproj
+++ b/WebKit2/WebKit2.xcodeproj/project.pbxproj
@@ -50,6 +50,7 @@
 		1A043B4D124D5E3600FFBFB5 /* PluginProcessProxy.messages.in in Resources */ = {isa = PBXBuildFile; fileRef = 1A043B4C124D5E3600FFBFB5 /* PluginProcessProxy.messages.in */; };
 		1A043B5D124D5E9D00FFBFB5 /* PluginProcessProxyMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A043B5B124D5E9D00FFBFB5 /* PluginProcessProxyMessageReceiver.cpp */; };
 		1A043B5E124D5E9D00FFBFB5 /* PluginProcessProxyMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A043B5C124D5E9D00FFBFB5 /* PluginProcessProxyMessages.h */; };
+		1A043CEB124FE38F00FFBFB5 /* PluginProcessMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0EC6BD124BBD9B007EF4A5 /* PluginProcessMessageReceiver.cpp */; };
 		1A0EC603124A9F2C007EF4A5 /* PluginProcessManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0EC601124A9F2C007EF4A5 /* PluginProcessManager.h */; };
 		1A0EC604124A9F2C007EF4A5 /* PluginProcessManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0EC602124A9F2C007EF4A5 /* PluginProcessManager.cpp */; };
 		1A0EC6C0124BBD9B007EF4A5 /* PluginProcessMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0EC6BE124BBD9B007EF4A5 /* PluginProcessMessages.h */; };
@@ -1872,6 +1873,7 @@
 			isa = PBXProject;
 			buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "WebKit2" */;
 			compatibilityVersion = "Xcode 3.1";
+			developmentRegion = English;
 			hasScannedForEncodings = 1;
 			knownRegions = (
 				English,
@@ -2104,6 +2106,7 @@
 				1A043A0A124D11A900FFBFB5 /* WebProcessConnection.cpp in Sources */,
 				C06C6095124C144B0001682F /* WebPageCreationParameters.cpp in Sources */,
 				1A043B5D124D5E9D00FFBFB5 /* PluginProcessProxyMessageReceiver.cpp in Sources */,
+				1A043CEB124FE38F00FFBFB5 /* PluginProcessMessageReceiver.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp b/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp
index bc1d958..cdc572e 100644
--- a/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp
+++ b/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp
@@ -23,5 +23,40 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#if ENABLE(PLUGIN_PROCESS)
+
 #include "PluginProcessConnection.h"
 
+#include "WebProcess.h"
+
+namespace WebKit {
+
+PluginProcessConnection::PluginProcessConnection(PluginProcessConnectionManager* pluginProcessConnectionManager, const String& pluginPath, CoreIPC::Connection::Identifier connectionIdentifier)
+    : m_pluginProcessConnectionManager(pluginProcessConnectionManager)
+    , m_pluginPath(pluginPath)
+{
+    m_connection = CoreIPC::Connection::createClientConnection(connectionIdentifier, this, WebProcess::shared().runLoop());
+    m_connection->open();
+}
+
+PluginProcessConnection::~PluginProcessConnection()
+{
+}
+
+void PluginProcessConnection::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
+{
+    // FIXME: Implement.
+}
+
+void PluginProcessConnection::didClose(CoreIPC::Connection*)
+{
+    // FIXME: Implement.
+}
+
+void PluginProcessConnection::didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID)
+{
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(PLUGIN_PROCESS)
diff --git a/WebKit2/WebProcess/WebPage/WebPage.cpp b/WebKit2/WebProcess/WebPage/WebPage.cpp
index d3ec1dc..8f7158b 100644
--- a/WebKit2/WebProcess/WebPage/WebPage.cpp
+++ b/WebKit2/WebProcess/WebPage/WebPage.cpp
@@ -30,6 +30,7 @@
 #include "InjectedBundle.h"
 #include "MessageID.h"
 #include "NetscapePlugin.h"
+#include "PluginProcessConnectionManager.h"
 #include "PluginView.h"
 #include "WebBackForwardControllerClient.h"
 #include "WebBackForwardListProxy.h"
@@ -192,15 +193,12 @@ PassRefPtr<Plugin> WebPage::createPlugin(const Plugin::Parameters& parameters)
         return 0;
 
 #if ENABLE(PLUGIN_PROCESS)
-    // FIXME: This is currently Mac specific.
-    CoreIPC::MachPort connectionMachPort;
+    PluginProcessConnection* pluginProcessConnection = PluginProcessConnectionManager::shared().getPluginProcessConnection(pluginPath);
 
-    if (!WebProcess::shared().connection()->sendSync(WebProcessProxyMessage::GetPluginProcessConnection, 0,
-                                                     CoreIPC::In(pluginPath),
-                                                     CoreIPC::Out(connectionMachPort),
-                                                     CoreIPC::Connection::NoTimeout))
+    if (!pluginProcessConnection)
         return 0;
 
+    // FIXME: Create a wrapper plug-in.
     return 0;
 #else
     RefPtr<NetscapePluginModule> pluginModule = NetscapePluginModule::getOrCreate(pluginPath);

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list