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

Side by Side Diff: components/nacl/browser/nacl_process_host.cc

Issue 2501913002: Change the NaCl loader and broker processes to use the ServiceManager. (Closed)
Patch Set: Created 4 years 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "components/nacl/browser/nacl_process_host.h" 5 #include "components/nacl/browser/nacl_process_host.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 19 matching lines...) Expand all
30 #include "base/strings/utf_string_conversions.h" 30 #include "base/strings/utf_string_conversions.h"
31 #include "base/sys_byteorder.h" 31 #include "base/sys_byteorder.h"
32 #include "base/threading/sequenced_worker_pool.h" 32 #include "base/threading/sequenced_worker_pool.h"
33 #include "base/threading/thread_task_runner_handle.h" 33 #include "base/threading/thread_task_runner_handle.h"
34 #include "base/win/windows_version.h" 34 #include "base/win/windows_version.h"
35 #include "build/build_config.h" 35 #include "build/build_config.h"
36 #include "components/nacl/browser/nacl_browser.h" 36 #include "components/nacl/browser/nacl_browser.h"
37 #include "components/nacl/browser/nacl_browser_delegate.h" 37 #include "components/nacl/browser/nacl_browser_delegate.h"
38 #include "components/nacl/browser/nacl_host_message_filter.h" 38 #include "components/nacl/browser/nacl_host_message_filter.h"
39 #include "components/nacl/common/nacl_cmd_line.h" 39 #include "components/nacl/common/nacl_cmd_line.h"
40 #include "components/nacl/common/nacl_constants.h"
40 #include "components/nacl/common/nacl_host_messages.h" 41 #include "components/nacl/common/nacl_host_messages.h"
41 #include "components/nacl/common/nacl_messages.h" 42 #include "components/nacl/common/nacl_messages.h"
42 #include "components/nacl/common/nacl_process_type.h" 43 #include "components/nacl/common/nacl_process_type.h"
43 #include "components/nacl/common/nacl_switches.h" 44 #include "components/nacl/common/nacl_switches.h"
44 #include "components/url_formatter/url_formatter.h" 45 #include "components/url_formatter/url_formatter.h"
45 #include "content/public/browser/browser_child_process_host.h" 46 #include "content/public/browser/browser_child_process_host.h"
46 #include "content/public/browser/browser_ppapi_host.h" 47 #include "content/public/browser/browser_ppapi_host.h"
47 #include "content/public/browser/child_process_data.h" 48 #include "content/public/browser/child_process_data.h"
48 #include "content/public/browser/plugin_service.h" 49 #include "content/public/browser/plugin_service.h"
49 #include "content/public/browser/render_process_host.h" 50 #include "content/public/browser/render_process_host.h"
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 #if defined(OS_WIN) 222 #if defined(OS_WIN)
222 debug_exception_handler_requested_(false), 223 debug_exception_handler_requested_(false),
223 #endif 224 #endif
224 uses_nonsfi_mode_(uses_nonsfi_mode), 225 uses_nonsfi_mode_(uses_nonsfi_mode),
225 enable_debug_stub_(false), 226 enable_debug_stub_(false),
226 enable_crash_throttling_(false), 227 enable_crash_throttling_(false),
227 off_the_record_(off_the_record), 228 off_the_record_(off_the_record),
228 process_type_(process_type), 229 process_type_(process_type),
229 profile_directory_(profile_directory), 230 profile_directory_(profile_directory),
230 render_view_id_(render_view_id), 231 render_view_id_(render_view_id),
231 mojo_child_token_(mojo::edk::GenerateRandomToken()),
232 weak_factory_(this) { 232 weak_factory_(this) {
233 process_.reset(content::BrowserChildProcessHost::Create( 233 process_.reset(content::BrowserChildProcessHost::Create(
234 static_cast<content::ProcessType>(PROCESS_TYPE_NACL_LOADER), this, 234 static_cast<content::ProcessType>(PROCESS_TYPE_NACL_LOADER), this,
235 mojo_child_token_)); 235 kNaClLoaderServiceName));
236 236
237 // Set the display name so the user knows what plugin the process is running. 237 // Set the display name so the user knows what plugin the process is running.
238 // We aren't on the UI thread so getting the pref locale for language 238 // We aren't on the UI thread so getting the pref locale for language
239 // formatting isn't possible, so IDN will be lost, but this is probably OK 239 // formatting isn't possible, so IDN will be lost, but this is probably OK
240 // for this use case. 240 // for this use case.
241 process_->SetName(url_formatter::FormatUrl(manifest_url_)); 241 process_->SetName(url_formatter::FormatUrl(manifest_url_));
242 242
243 enable_debug_stub_ = base::CommandLine::ForCurrentProcess()->HasSwitch( 243 enable_debug_stub_ = base::CommandLine::ForCurrentProcess()->HasSwitch(
244 switches::kEnableNaClDebug); 244 switches::kEnableNaClDebug);
245 DCHECK(process_type_ != kUnknownNaClProcessType); 245 DCHECK(process_type_ != kUnknownNaClProcessType);
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 base::FilePath script = 493 base::FilePath script =
494 command_line.GetSwitchValuePath(switches::kNaClGdbScript); 494 command_line.GetSwitchValuePath(switches::kNaClGdbScript);
495 if (!script.empty()) { 495 if (!script.empty()) {
496 cmd_line.AppendArg("--command"); 496 cmd_line.AppendArg("--command");
497 cmd_line.AppendArgNative(script.value()); 497 cmd_line.AppendArgNative(script.value());
498 } 498 }
499 base::LaunchProcess(cmd_line, base::LaunchOptions()); 499 base::LaunchProcess(cmd_line, base::LaunchOptions());
500 } 500 }
501 501
502 bool NaClProcessHost::LaunchSelLdr() { 502 bool NaClProcessHost::LaunchSelLdr() {
503 DCHECK(!mojo_child_token_.empty()); 503 process_->GetHost()->CreateChannelMojo();
504 std::string mojo_channel_token =
505 process_->GetHost()->CreateChannelMojo(mojo_child_token_);
506 // |mojo_child_token_| is no longer used.
507 base::STLClearObject(&mojo_child_token_);
508 if (mojo_channel_token.empty()) {
509 SendErrorToRenderer("CreateChannelMojo() failed");
510 return false;
511 }
512 504
513 // Build command line for nacl. 505 // Build command line for nacl.
514 506
515 #if defined(OS_LINUX) 507 #if defined(OS_LINUX)
516 int flags = ChildProcessHost::CHILD_ALLOW_SELF; 508 int flags = ChildProcessHost::CHILD_ALLOW_SELF;
517 #else 509 #else
518 int flags = ChildProcessHost::CHILD_NORMAL; 510 int flags = ChildProcessHost::CHILD_NORMAL;
519 #endif 511 #endif
520 512
521 base::FilePath exe_path = ChildProcessHost::GetChildPath(flags); 513 base::FilePath exe_path = ChildProcessHost::GetChildPath(flags);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 } 551 }
560 #endif 552 #endif
561 553
562 std::unique_ptr<base::CommandLine> cmd_line(new base::CommandLine(exe_path)); 554 std::unique_ptr<base::CommandLine> cmd_line(new base::CommandLine(exe_path));
563 CopyNaClCommandLineArguments(cmd_line.get()); 555 CopyNaClCommandLineArguments(cmd_line.get());
564 556
565 cmd_line->AppendSwitchASCII(switches::kProcessType, 557 cmd_line->AppendSwitchASCII(switches::kProcessType,
566 (uses_nonsfi_mode_ ? 558 (uses_nonsfi_mode_ ?
567 switches::kNaClLoaderNonSfiProcess : 559 switches::kNaClLoaderNonSfiProcess :
568 switches::kNaClLoaderProcess)); 560 switches::kNaClLoaderProcess));
569 cmd_line->AppendSwitchASCII(switches::kMojoChannelToken, mojo_channel_token);
570 if (NaClBrowser::GetDelegate()->DialogsAreSuppressed()) 561 if (NaClBrowser::GetDelegate()->DialogsAreSuppressed())
571 cmd_line->AppendSwitch(switches::kNoErrorDialogs); 562 cmd_line->AppendSwitch(switches::kNoErrorDialogs);
572 563
573 #if defined(OS_WIN) 564 #if defined(OS_WIN)
574 cmd_line->AppendArg(switches::kPrefetchArgumentOther); 565 cmd_line->AppendArg(switches::kPrefetchArgumentOther);
575 #endif // defined(OS_WIN) 566 #endif // defined(OS_WIN)
576 567
577 // On Windows we might need to start the broker process to launch a new loader 568 // On Windows we might need to start the broker process to launch a new loader
578 #if defined(OS_WIN) 569 #if defined(OS_WIN)
579 if (RunningOnWOW64()) { 570 if (RunningOnWOW64()) {
580 if (!NaClBrokerService::GetInstance()->LaunchLoader( 571 if (!NaClBrokerService::GetInstance()->LaunchLoader(
581 weak_factory_.GetWeakPtr(), mojo_channel_token)) { 572 weak_factory_.GetWeakPtr(),
573 process_->GetServiceRequestChannelToken())) {
582 SendErrorToRenderer("broker service did not launch process"); 574 SendErrorToRenderer("broker service did not launch process");
583 return false; 575 return false;
584 } 576 }
585 return true; 577 return true;
586 } 578 }
587 #endif 579 #endif
588 process_->Launch(new NaClSandboxedProcessLauncherDelegate(), 580 process_->Launch(new NaClSandboxedProcessLauncherDelegate(),
589 cmd_line.release(), true); 581 cmd_line.release(), true);
590 return true; 582 return true;
591 } 583 }
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
1172 NaClStartDebugExceptionHandlerThread( 1164 NaClStartDebugExceptionHandlerThread(
1173 std::move(process), info, base::ThreadTaskRunnerHandle::Get(), 1165 std::move(process), info, base::ThreadTaskRunnerHandle::Get(),
1174 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, 1166 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker,
1175 weak_factory_.GetWeakPtr())); 1167 weak_factory_.GetWeakPtr()));
1176 return true; 1168 return true;
1177 } 1169 }
1178 } 1170 }
1179 #endif 1171 #endif
1180 1172
1181 } // namespace nacl 1173 } // namespace nacl
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698