summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorbbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-03 18:56:58 +0000
committerbbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-03 18:56:58 +0000
commit81e32e3b31de29ec7b82a444e9467a62e957a4f0 (patch)
tree2ed9a5627f199d7f9cf49e7ffe6d62a8cf0558a7 /webkit
parent3f69d6e61ffaed3aa654b43aa48c535702012ef6 (diff)
downloadchromium_src-81e32e3b31de29ec7b82a444e9467a62e957a4f0.zip
chromium_src-81e32e3b31de29ec7b82a444e9467a62e957a4f0.tar.gz
chromium_src-81e32e3b31de29ec7b82a444e9467a62e957a4f0.tar.bz2
Change PluginInstance so it shuts down the NaCl Plugin when it uses the IPC PPAPI proxy.
BUG=116317 TEST=manual Review URL: https://chromiumcodereview.appspot.com/10837086 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149885 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.cc7
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.h4
2 files changed, 11 insertions, 0 deletions
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
index 3aef548..f012793 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
@@ -403,6 +403,8 @@ void PluginInstance::Delete() {
// destructor of the instance object tries to use the instance.
message_channel_->SetPassthroughObject(NULL);
instance_interface_->DidDestroy(pp_instance());
+ if (nacl_plugin_instance_interface_.get())
+ nacl_plugin_instance_interface_->DidDestroy(pp_instance());
if (fullscreen_container_) {
fullscreen_container_->Destroy();
@@ -2133,6 +2135,11 @@ PP_Var PluginInstance::GetPluginInstanceURL(
}
bool PluginInstance::ResetAsProxied() {
+ // Remember the existing instance interface, so we can call DidDestroy in
+ // our Delete() method. This will delete the NaCl plugin instance, which
+ // will shut down the NaCl process.
+ nacl_plugin_instance_interface_.reset(instance_interface_.release());
+
base::Callback<const void*(const char*)> get_plugin_interface_func =
base::Bind(&PluginModule::GetPluginInterface, module_.get());
PPP_Instance_Combined* ppp_instance_combined =
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.h b/webkit/plugins/ppapi/ppapi_plugin_instance.h
index 048cce4..24eb715 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.h
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.h
@@ -506,6 +506,10 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance :
PluginDelegate* delegate_;
scoped_refptr<PluginModule> module_;
scoped_ptr< ::ppapi::PPP_Instance_Combined> instance_interface_;
+ // If this is the NaCl plugin, store its instance interface so we can shut
+ // it down properly when using the IPC-based PPAPI proxy.
+ // TODO(bbudge) Remove this when the proxy switch is complete.
+ scoped_ptr< ::ppapi::PPP_Instance_Combined> nacl_plugin_instance_interface_;
PP_Instance pp_instance_;