[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