Chromium Code Reviews| Index: chrome/renderer/pepper/ppb_nacl_private_impl.cc |
| =================================================================== |
| --- chrome/renderer/pepper/ppb_nacl_private_impl.cc (revision 163205) |
| +++ chrome/renderer/pepper/ppb_nacl_private_impl.cc (working copy) |
| @@ -36,9 +36,15 @@ |
| base::LazyInstance<scoped_refptr<IPC::SyncMessageFilter> > |
| g_background_thread_sender = LAZY_INSTANCE_INITIALIZER; |
| -typedef std::map<PP_Instance, IPC::ChannelHandle> ChannelHandleMap; |
| +struct InstanceInfo { |
| + GURL url; |
| + int plugin_child_id; |
| + IPC::ChannelHandle channel_handle; |
|
dmichael (off chromium)
2012/10/23 19:05:30
How about a default constructor to make sure plugi
bbudge
2012/10/23 19:53:04
Done.
|
| +}; |
| -base::LazyInstance<ChannelHandleMap> g_channel_handle_map = |
| +typedef std::map<PP_Instance, InstanceInfo> InstanceInfoMap; |
| + |
| +base::LazyInstance<InstanceInfoMap> g_instance_info = |
| LAZY_INSTANCE_INITIALIZER; |
| // Launch NaCl's sel_ldr process. |
| @@ -51,23 +57,23 @@ |
| if (sender == NULL) |
| sender = g_background_thread_sender.Pointer()->get(); |
| - IPC::ChannelHandle channel_handle; |
| + InstanceInfo instance_info; |
| + instance_info.url = GURL(alleged_url); |
| if (!sender->Send(new ChromeViewHostMsg_LaunchNaCl( |
| - GURL(alleged_url), socket_count, &sockets, |
| - &channel_handle))) { |
| + instance_info.url, socket_count, &sockets, |
| + &instance_info.channel_handle, |
| + &instance_info.plugin_child_id))) { |
| return PP_FALSE; |
| } |
| - // Don't save invalid channel handles. |
| - bool invalid_handle = channel_handle.name.empty(); |
| - |
| + // Don't save instance_info if channel handle is invalid. |
| + bool invalid_handle = instance_info.channel_handle.name.empty(); |
| #if defined(OS_POSIX) |
| if (!invalid_handle) |
| - invalid_handle = (channel_handle.socket.fd == -1); |
| + invalid_handle = (instance_info.channel_handle.socket.fd == -1); |
| #endif |
| - |
| if (!invalid_handle) |
| - g_channel_handle_map.Get()[instance] = channel_handle; |
| + g_instance_info.Get()[instance] = instance_info; |
| CHECK(static_cast<int>(sockets.size()) == socket_count); |
| for (int i = 0; i < socket_count; i++) { |
| @@ -78,14 +84,15 @@ |
| return PP_TRUE; |
| } |
| -PP_Bool StartPpapiProxy(PP_Instance instance) { |
| +PP_Bool StartPpapiProxy(PP_Instance instance, |
| + bool allow_dev_interfaces) { |
| if (CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kEnableNaClIPCProxy)) { |
| - ChannelHandleMap& map = g_channel_handle_map.Get(); |
| - ChannelHandleMap::iterator it = map.find(instance); |
| + InstanceInfoMap& map = g_instance_info.Get(); |
| + InstanceInfoMap::iterator it = map.find(instance); |
| if (it == map.end()) |
| return PP_FALSE; |
| - IPC::ChannelHandle channel_handle = it->second; |
| + InstanceInfo instance_info = it->second; |
| map.erase(it); |
| webkit::ppapi::PluginInstance* plugin_instance = |
| @@ -101,19 +108,16 @@ |
| scoped_refptr<webkit::ppapi::PluginModule> nacl_plugin_module( |
| plugin_module->CreateModuleForNaClInstance()); |
| - // TODO(brettw) bug 153036 set NaCl permissions to allow dev interface |
| - // usage when necessary. |
| - ppapi::PpapiPermissions permissions; |
| - // TODO(bbudge) fill in place-holder params below with the nexe URL and |
| - // NaCl process id. |
| + ppapi::PpapiPermissions permissions( |
| + allow_dev_interfaces ? ppapi::PERMISSION_DEV : 0); |
|
dmichael (off chromium)
2012/10/23 19:05:30
Just curious, how do we handle white-listed Privat
bbudge
2012/10/23 19:53:04
Right now, the plugin side returns NULL for 'Priva
|
| content::RendererPpapiHost* renderer_ppapi_host = |
| content::RendererPpapiHost::CreateExternalPluginModule( |
| nacl_plugin_module, |
| plugin_instance, |
| - FilePath(FILE_PATH_LITERAL("NaCl")), |
| + FilePath().AppendASCII(instance_info.url.spec()), |
| permissions, |
| - channel_handle, |
| - 0); // plugin_child_id |
| + instance_info.channel_handle, |
| + instance_info.plugin_child_id); |
| if (renderer_ppapi_host) { |
| // Allow the module to reset the instance to the new proxy. |
| nacl_plugin_module->InitAsProxiedNaCl(plugin_instance); |