Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(187)

Side by Side Diff: components/nacl/loader/nacl_listener.cc

Issue 2151153002: Use ChannelMojo for NaCl IRT channels in non-sfi mode. Base URL: https://chromium.googlesource.com/chromium/src.git@mojo-nacl-channel-mojo
Patch Set: rebase Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "base/run_loop.h" 5 #include "base/run_loop.h"
6 #include "components/nacl/loader/nacl_listener.h" 6 #include "components/nacl/loader/nacl_listener.h"
7 7
8 #include <errno.h> 8 #include <errno.h>
9 #include <fcntl.h> 9 #include <fcntl.h>
10 #include <stdlib.h> 10 #include <stdlib.h>
(...skipping 24 matching lines...) Expand all
35 #include "ipc/ipc_switches.h" 35 #include "ipc/ipc_switches.h"
36 #include "ipc/ipc_sync_channel.h" 36 #include "ipc/ipc_sync_channel.h"
37 #include "ipc/ipc_sync_message_filter.h" 37 #include "ipc/ipc_sync_message_filter.h"
38 #include "mojo/edk/embedder/embedder.h" 38 #include "mojo/edk/embedder/embedder.h"
39 #include "mojo/edk/embedder/scoped_ipc_support.h" 39 #include "mojo/edk/embedder/scoped_ipc_support.h"
40 #include "native_client/src/public/chrome_main.h" 40 #include "native_client/src/public/chrome_main.h"
41 #include "native_client/src/public/nacl_app.h" 41 #include "native_client/src/public/nacl_app.h"
42 #include "native_client/src/public/nacl_desc.h" 42 #include "native_client/src/public/nacl_desc.h"
43 43
44 #if defined(OS_POSIX) 44 #if defined(OS_POSIX)
45 #include "base/file_descriptor_posix.h"
46 #include "base/posix/global_descriptors.h" 45 #include "base/posix/global_descriptors.h"
47 #include "content/public/common/content_descriptors.h" 46 #include "content/public/common/content_descriptors.h"
48 #endif 47 #endif
49 48
50 #if defined(OS_LINUX) 49 #if defined(OS_LINUX)
51 #include "content/public/common/child_process_sandbox_support_linux.h" 50 #include "content/public/common/child_process_sandbox_support_linux.h"
52 #endif 51 #endif
53 52
54 #if defined(OS_WIN) 53 #if defined(OS_WIN)
55 #include <io.h> 54 #include <io.h>
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 // the given task runner runs. 109 // the given task runner runs.
111 // Also, creates and sets the corresponding NaClDesc to the given nap with 110 // Also, creates and sets the corresponding NaClDesc to the given nap with
112 // the FD #. 111 // the FD #.
113 void SetUpIPCAdapter( 112 void SetUpIPCAdapter(
114 IPC::ChannelHandle* handle, 113 IPC::ChannelHandle* handle,
115 scoped_refptr<base::SingleThreadTaskRunner> task_runner, 114 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
116 struct NaClApp* nap, 115 struct NaClApp* nap,
117 int nacl_fd, 116 int nacl_fd,
118 NaClIPCAdapter::ResolveFileTokenCallback resolve_file_token_cb, 117 NaClIPCAdapter::ResolveFileTokenCallback resolve_file_token_cb,
119 NaClIPCAdapter::OpenResourceCallback open_resource_cb) { 118 NaClIPCAdapter::OpenResourceCallback open_resource_cb) {
119 IPC::ChannelHandle client_handle;
120 IPC::Channel::GenerateMojoChannelHandlePair(
121 "nacl", handle, &client_handle);
120 scoped_refptr<NaClIPCAdapter> ipc_adapter(new NaClIPCAdapter( 122 scoped_refptr<NaClIPCAdapter> ipc_adapter(new NaClIPCAdapter(
121 *handle, task_runner.get(), resolve_file_token_cb, open_resource_cb)); 123 *handle, task_runner.get(), resolve_file_token_cb, open_resource_cb));
122 ipc_adapter->ConnectChannel(); 124 ipc_adapter->ConnectChannel();
123 #if defined(OS_POSIX) 125 *handle = client_handle;
124 handle->socket =
125 base::FileDescriptor(ipc_adapter->TakeClientFileDescriptor());
126 #endif
127 126
128 // Pass a NaClDesc to the untrusted side. This will hold a ref to the 127 // Pass a NaClDesc to the untrusted side. This will hold a ref to the
129 // NaClIPCAdapter. 128 // NaClIPCAdapter.
130 NaClAppSetDesc(nap, nacl_fd, ipc_adapter->MakeNaClDesc()); 129 NaClAppSetDesc(nap, nacl_fd, ipc_adapter->MakeNaClDesc());
131 } 130 }
132 131
133 } // namespace 132 } // namespace
134 133
135 class BrowserValidationDBProxy : public NaClValidationDB { 134 class BrowserValidationDBProxy : public NaClValidationDB {
136 public: 135 public:
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 crash_info_shmem_.reset(new base::SharedMemory( 328 crash_info_shmem_.reset(new base::SharedMemory(
330 params.crash_info_shmem_handle, false /* not readonly */)); 329 params.crash_info_shmem_handle, false /* not readonly */));
331 CHECK(crash_info_shmem_->Map(nacl::kNaClCrashInfoShmemSize)); 330 CHECK(crash_info_shmem_->Map(nacl::kNaClCrashInfoShmemSize));
332 NaClSetFatalErrorCallback(&FatalLogHandler); 331 NaClSetFatalErrorCallback(&FatalLogHandler);
333 332
334 nap = NaClAppCreate(); 333 nap = NaClAppCreate();
335 if (nap == NULL) { 334 if (nap == NULL) {
336 LOG(FATAL) << "NaClAppCreate() failed"; 335 LOG(FATAL) << "NaClAppCreate() failed";
337 } 336 }
338 337
339 IPC::ChannelHandle browser_handle = 338 IPC::ChannelHandle browser_handle;
340 IPC::Channel::GenerateVerifiedChannelID("nacl"); 339 IPC::ChannelHandle ppapi_renderer_handle;
341 IPC::ChannelHandle ppapi_renderer_handle = 340 IPC::ChannelHandle manifest_service_handle;
342 IPC::Channel::GenerateVerifiedChannelID("nacl");
343 IPC::ChannelHandle manifest_service_handle =
344 IPC::Channel::GenerateVerifiedChannelID("nacl");
345 341
346 // Create the PPAPI IPC channels between the NaCl IRT and the host 342 // Create the PPAPI IPC channels between the NaCl IRT and the host
347 // (browser/renderer) processes. The IRT uses these channels to 343 // (browser/renderer) processes. The IRT uses these channels to
348 // communicate with the host and to initialize the IPC dispatchers. 344 // communicate with the host and to initialize the IPC dispatchers.
349 SetUpIPCAdapter(&browser_handle, io_thread_.task_runner(), nap, 345 SetUpIPCAdapter(&browser_handle, io_thread_.task_runner(), nap,
350 NACL_CHROME_DESC_BASE, 346 NACL_CHROME_DESC_BASE,
351 NaClIPCAdapter::ResolveFileTokenCallback(), 347 NaClIPCAdapter::ResolveFileTokenCallback(),
352 NaClIPCAdapter::OpenResourceCallback()); 348 NaClIPCAdapter::OpenResourceCallback());
353 SetUpIPCAdapter(&ppapi_renderer_handle, io_thread_.task_runner(), nap, 349 SetUpIPCAdapter(&ppapi_renderer_handle, io_thread_.task_runner(), nap,
354 NACL_CHROME_DESC_BASE + 1, 350 NACL_CHROME_DESC_BASE + 1,
355 NaClIPCAdapter::ResolveFileTokenCallback(), 351 NaClIPCAdapter::ResolveFileTokenCallback(),
356 NaClIPCAdapter::OpenResourceCallback()); 352 NaClIPCAdapter::OpenResourceCallback());
357 SetUpIPCAdapter( 353 SetUpIPCAdapter(
358 &manifest_service_handle, io_thread_.task_runner(), nap, 354 &manifest_service_handle, io_thread_.task_runner(), nap,
359 NACL_CHROME_DESC_BASE + 2, 355 NACL_CHROME_DESC_BASE + 2,
360 base::Bind(&NaClListener::ResolveFileToken, base::Unretained(this)), 356 base::Bind(&NaClListener::ResolveFileToken, base::Unretained(this)),
361 base::Bind(&NaClListener::OnOpenResource, base::Unretained(this))); 357 base::Bind(&NaClListener::OnOpenResource, base::Unretained(this)));
362 358
359 IPC::ChannelHandle trusted_client;
360 IPC::ChannelHandle trusted_server;
361 IPC::Channel::GenerateMojoChannelHandlePair("NaCl-trusted-listener",
362 &trusted_client, &trusted_server);
363 trusted_listener_ = 363 trusted_listener_ =
364 new NaClTrustedListener(IPC::Channel::GenerateVerifiedChannelID("nacl"), 364 new NaClTrustedListener(trusted_server,
365 io_thread_.task_runner().get(), &shutdown_event_); 365 io_thread_.task_runner().get(), &shutdown_event_);
366 if (!Send(new NaClProcessHostMsg_PpapiChannelsCreated( 366 if (!Send(new NaClProcessHostMsg_PpapiChannelsCreated(
367 browser_handle, 367 browser_handle,
368 ppapi_renderer_handle, 368 ppapi_renderer_handle,
369 trusted_listener_->TakeClientChannelHandle(), 369 trusted_client,
370 manifest_service_handle))) 370 manifest_service_handle)))
371 LOG(FATAL) << "Failed to send IPC channel handle to NaClProcessHost."; 371 LOG(FATAL) << "Failed to send IPC channel handle to NaClProcessHost.";
372 372
373 struct NaClChromeMainArgs* args = NaClChromeMainArgsCreate(); 373 struct NaClChromeMainArgs* args = NaClChromeMainArgsCreate();
374 if (args == NULL) { 374 if (args == NULL) {
375 LOG(FATAL) << "NaClChromeMainArgsCreate() failed"; 375 LOG(FATAL) << "NaClChromeMainArgsCreate() failed";
376 } 376 }
377 377
378 #if defined(OS_POSIX) 378 #if defined(OS_POSIX)
379 args->number_of_cores = number_of_cores_; 379 args->number_of_cores = number_of_cores_;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 } 474 }
475 475
476 void NaClListener::OnFileTokenResolved( 476 void NaClListener::OnFileTokenResolved(
477 uint64_t token_lo, 477 uint64_t token_lo,
478 uint64_t token_hi, 478 uint64_t token_hi,
479 IPC::PlatformFileForTransit ipc_fd, 479 IPC::PlatformFileForTransit ipc_fd,
480 base::FilePath file_path) { 480 base::FilePath file_path) {
481 resolved_cb_.Run(ipc_fd, file_path); 481 resolved_cb_.Run(ipc_fd, file_path);
482 resolved_cb_.Reset(); 482 resolved_cb_.Reset();
483 } 483 }
OLDNEW
« no previous file with comments | « components/nacl/browser/nacl_process_host.cc ('k') | components/nacl/loader/nonsfi/nonsfi_listener.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698