summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/ppapi_plugin/ppapi_thread.cc8
-rw-r--r--chrome/ppapi_plugin/ppapi_thread.h6
-rw-r--r--ppapi/proxy/host_dispatcher.cc3
-rw-r--r--ppapi/proxy/plugin_dispatcher.cc12
-rw-r--r--ppapi/proxy/plugin_dispatcher.h5
-rw-r--r--ppapi/proxy/ppapi_messages_internal.h2
6 files changed, 25 insertions, 11 deletions
diff --git a/chrome/ppapi_plugin/ppapi_thread.cc b/chrome/ppapi_plugin/ppapi_thread.cc
index 8c4da88..7d8eeda 100644
--- a/chrome/ppapi_plugin/ppapi_thread.cc
+++ b/chrome/ppapi_plugin/ppapi_thread.cc
@@ -37,7 +37,7 @@ PpapiThread::~PpapiThread() {
// channel that ends up at Dispatcher::OnMessageReceived.
void PpapiThread::OnMessageReceived(const IPC::Message& msg) {
IPC_BEGIN_MESSAGE_MAP(PpapiThread, msg)
- IPC_MESSAGE_HANDLER(PpapiMsg_LoadPlugin, OnLoadPlugin)
+ IPC_MESSAGE_HANDLER(PpapiMsg_LoadPlugin, OnMsgLoadPlugin)
// The rest of the messages go to the dispatcher.
/*IPC_MESSAGE_UNHANDLED(
@@ -47,9 +47,9 @@ void PpapiThread::OnMessageReceived(const IPC::Message& msg) {
IPC_END_MESSAGE_MAP()
}
-void PpapiThread::OnLoadPlugin(base::ProcessHandle host_process_handle,
- const FilePath& path,
- int renderer_id) {
+void PpapiThread::OnMsgLoadPlugin(base::ProcessHandle host_process_handle,
+ const FilePath& path,
+ int renderer_id) {
IPC::ChannelHandle channel_handle;
if (!LoadPluginLib(host_process_handle, path) ||
!SetupRendererChannel(renderer_id, &channel_handle)) {
diff --git a/chrome/ppapi_plugin/ppapi_thread.h b/chrome/ppapi_plugin/ppapi_thread.h
index cf49c8b..215d1bd 100644
--- a/chrome/ppapi_plugin/ppapi_thread.h
+++ b/chrome/ppapi_plugin/ppapi_thread.h
@@ -35,9 +35,9 @@ class PpapiThread : public ChildThread {
virtual void OnMessageReceived(const IPC::Message& msg);
// Message handlers.
- void OnLoadPlugin(base::ProcessHandle renderer_handle,
- const FilePath& path,
- int renderer_id);
+ void OnMsgLoadPlugin(base::ProcessHandle renderer_handle,
+ const FilePath& path,
+ int renderer_id);
bool LoadPluginLib(base::ProcessHandle host_process_handle,
const FilePath& path);
diff --git a/ppapi/proxy/host_dispatcher.cc b/ppapi/proxy/host_dispatcher.cc
index a717af8..fd9801c 100644
--- a/ppapi/proxy/host_dispatcher.cc
+++ b/ppapi/proxy/host_dispatcher.cc
@@ -8,6 +8,7 @@
#include "base/logging.h"
#include "ppapi/proxy/host_var_serialization_rules.h"
+#include "ppapi/proxy/ppapi_messages.h"
namespace pp {
namespace proxy {
@@ -28,6 +29,8 @@ HostDispatcher::HostDispatcher(base::ProcessHandle remote_process_handle,
}
HostDispatcher::~HostDispatcher() {
+ // Notify the plugin that it should exit.
+ Send(new PpapiMsg_Shutdown());
}
// static
diff --git a/ppapi/proxy/plugin_dispatcher.cc b/ppapi/proxy/plugin_dispatcher.cc
index 4c9adca..037b470 100644
--- a/ppapi/proxy/plugin_dispatcher.cc
+++ b/ppapi/proxy/plugin_dispatcher.cc
@@ -70,7 +70,8 @@ void PluginDispatcher::OnMessageReceived(const IPC::Message& msg) {
if (msg.routing_id() == MSG_ROUTING_CONTROL) {
// Handle some plugin-specific control messages.
IPC_BEGIN_MESSAGE_MAP(PluginDispatcher, msg)
- IPC_MESSAGE_HANDLER(PpapiMsg_InitializeModule, OnInitializeModule)
+ IPC_MESSAGE_HANDLER(PpapiMsg_InitializeModule, OnMsgInitializeModule)
+ IPC_MESSAGE_HANDLER(PpapiMsg_Shutdown, OnMsgShutdown)
// Forward all other control messages to the superclass.
IPC_MESSAGE_UNHANDLED(Dispatcher::OnMessageReceived(msg))
@@ -82,11 +83,18 @@ void PluginDispatcher::OnMessageReceived(const IPC::Message& msg) {
Dispatcher::OnMessageReceived(msg);
}
-void PluginDispatcher::OnInitializeModule(PP_Module pp_module, bool* result) {
+void PluginDispatcher::OnMsgInitializeModule(PP_Module pp_module,
+ bool* result) {
set_pp_module(pp_module);
*result = init_module_(pp_module, &GetInterfaceFromDispatcher) == PP_OK;
}
+void PluginDispatcher::OnMsgShutdown() {
+ if (shutdown_module_)
+ shutdown_module_();
+ MessageLoop::current()->Quit();
+}
+
} // namespace proxy
} // namespace pp
diff --git a/ppapi/proxy/plugin_dispatcher.h b/ppapi/proxy/plugin_dispatcher.h
index 79eafb1..8c75d33 100644
--- a/ppapi/proxy/plugin_dispatcher.h
+++ b/ppapi/proxy/plugin_dispatcher.h
@@ -61,8 +61,9 @@ class PluginDispatcher : public Dispatcher {
}
private:
- // IPC message handler.
- void OnInitializeModule(PP_Module pp_module, bool* result);
+ // IPC message handlers.
+ void OnMsgInitializeModule(PP_Module pp_module, bool* result);
+ void OnMsgShutdown();
InitModuleFunc init_module_;
ShutdownModuleFunc shutdown_module_;
diff --git a/ppapi/proxy/ppapi_messages_internal.h b/ppapi/proxy/ppapi_messages_internal.h
index 1f854af..5259725 100644
--- a/ppapi/proxy/ppapi_messages_internal.h
+++ b/ppapi/proxy/ppapi_messages_internal.h
@@ -22,6 +22,8 @@ IPC_BEGIN_MESSAGES(Ppapi)
PP_Module /* module_id */,
bool /* result */)
+ IPC_MESSAGE_CONTROL0(PpapiMsg_Shutdown)
+
// Sent in both directions to see if the other side supports the given
// interface.
IPC_SYNC_MESSAGE_CONTROL1_1(PpapiMsg_SupportsInterface,