| Index: chrome/renderer/pepper/ppb_nacl_private_impl.cc
|
| ===================================================================
|
| --- chrome/renderer/pepper/ppb_nacl_private_impl.cc (revision 163557)
|
| +++ chrome/renderer/pepper/ppb_nacl_private_impl.cc (working copy)
|
| @@ -36,9 +36,16 @@
|
| base::LazyInstance<scoped_refptr<IPC::SyncMessageFilter> >
|
| g_background_thread_sender = LAZY_INSTANCE_INITIALIZER;
|
|
|
| -typedef std::map<PP_Instance, IPC::ChannelHandle> ChannelHandleMap;
|
| +struct InstanceInfo {
|
| + InstanceInfo() : plugin_child_id(0) {}
|
| + GURL url;
|
| + int plugin_child_id;
|
| + IPC::ChannelHandle channel_handle;
|
| +};
|
|
|
| -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 +58,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 +85,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 +109,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);
|
| 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);
|
|
|