| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/ppapi_plugin/ppapi_thread.h" | 5 #include "chrome/ppapi_plugin/ppapi_thread.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/process_util.h" | 9 #include "base/process_util.h" |
| 10 #include "base/rand_util.h" | 10 #include "base/rand_util.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 // browser process. Messages from the renderer process are sent via a different | 41 // browser process. Messages from the renderer process are sent via a different |
| 42 // channel that ends up at Dispatcher::OnMessageReceived. | 42 // channel that ends up at Dispatcher::OnMessageReceived. |
| 43 bool PpapiThread::OnMessageReceived(const IPC::Message& msg) { | 43 bool PpapiThread::OnMessageReceived(const IPC::Message& msg) { |
| 44 IPC_BEGIN_MESSAGE_MAP(PpapiThread, msg) | 44 IPC_BEGIN_MESSAGE_MAP(PpapiThread, msg) |
| 45 IPC_MESSAGE_HANDLER(PpapiMsg_LoadPlugin, OnMsgLoadPlugin) | 45 IPC_MESSAGE_HANDLER(PpapiMsg_LoadPlugin, OnMsgLoadPlugin) |
| 46 IPC_MESSAGE_HANDLER(PpapiMsg_CreateChannel, OnMsgCreateChannel) | 46 IPC_MESSAGE_HANDLER(PpapiMsg_CreateChannel, OnMsgCreateChannel) |
| 47 IPC_END_MESSAGE_MAP() | 47 IPC_END_MESSAGE_MAP() |
| 48 return true; | 48 return true; |
| 49 } | 49 } |
| 50 | 50 |
| 51 MessageLoop* PpapiThread::GetIPCMessageLoop() { |
| 52 return ChildProcess::current()->io_message_loop(); |
| 53 } |
| 54 |
| 55 base::WaitableEvent* PpapiThread::GetShutdownEvent() { |
| 56 return ChildProcess::current()->GetShutDownEvent(); |
| 57 } |
| 58 |
| 59 std::set<PP_Instance>* PpapiThread::GetGloballySeenInstanceIDSet() { |
| 60 return &globally_seen_instance_ids_; |
| 61 } |
| 62 |
| 51 void PpapiThread::OnMsgLoadPlugin(const FilePath& path) { | 63 void PpapiThread::OnMsgLoadPlugin(const FilePath& path) { |
| 52 base::ScopedNativeLibrary library(base::LoadNativeLibrary(path)); | 64 base::ScopedNativeLibrary library(base::LoadNativeLibrary(path)); |
| 53 if (!library.is_valid()) | 65 if (!library.is_valid()) |
| 54 return; | 66 return; |
| 55 | 67 |
| 56 // Get the GetInterface function (required). | 68 // Get the GetInterface function (required). |
| 57 get_plugin_interface_ = | 69 get_plugin_interface_ = |
| 58 reinterpret_cast<pp::proxy::Dispatcher::GetInterfaceFunc>( | 70 reinterpret_cast<pp::proxy::Dispatcher::GetInterfaceFunc>( |
| 59 library.GetFunctionPointer("PPP_GetInterface")); | 71 library.GetFunctionPointer("PPP_GetInterface")); |
| 60 if (!get_plugin_interface_) { | 72 if (!get_plugin_interface_) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 | 108 |
| 97 bool PpapiThread::SetupRendererChannel(base::ProcessHandle host_process_handle, | 109 bool PpapiThread::SetupRendererChannel(base::ProcessHandle host_process_handle, |
| 98 int renderer_id, | 110 int renderer_id, |
| 99 IPC::ChannelHandle* handle) { | 111 IPC::ChannelHandle* handle) { |
| 100 PluginProcessDispatcher* dispatcher = new PluginProcessDispatcher( | 112 PluginProcessDispatcher* dispatcher = new PluginProcessDispatcher( |
| 101 host_process_handle, get_plugin_interface_); | 113 host_process_handle, get_plugin_interface_); |
| 102 | 114 |
| 103 IPC::ChannelHandle plugin_handle; | 115 IPC::ChannelHandle plugin_handle; |
| 104 plugin_handle.name = StringPrintf("%d.r%d", base::GetCurrentProcId(), | 116 plugin_handle.name = StringPrintf("%d.r%d", base::GetCurrentProcId(), |
| 105 renderer_id); | 117 renderer_id); |
| 106 if (!dispatcher->InitWithChannel( | 118 if (!dispatcher->InitWithChannel(this, plugin_handle, false)) |
| 107 ChildProcess::current()->io_message_loop(), | |
| 108 plugin_handle, false, | |
| 109 ChildProcess::current()->GetShutDownEvent())) | |
| 110 return false; | 119 return false; |
| 111 | 120 |
| 112 handle->name = plugin_handle.name; | 121 handle->name = plugin_handle.name; |
| 113 #if defined(OS_POSIX) | 122 #if defined(OS_POSIX) |
| 114 // On POSIX, pass the renderer-side FD. | 123 // On POSIX, pass the renderer-side FD. |
| 115 handle->socket = base::FileDescriptor(dispatcher->GetRendererFD(), false); | 124 handle->socket = base::FileDescriptor(dispatcher->GetRendererFD(), false); |
| 116 #endif | 125 #endif |
| 117 | 126 |
| 118 return true; | 127 return true; |
| 119 } | 128 } |
| 120 | 129 |
| OLD | NEW |