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

Side by Side Diff: chrome/browser/nacl_host/nacl_broker_host_win.cc

Issue 75463005: Move more files from chrome/browser/nacl_host/ to components/nacl/browser/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/nacl_host/nacl_broker_host_win.h"
6
7 #include "base/base_switches.h"
8 #include "base/command_line.h"
9 #include "base/path_service.h"
10 #include "ipc/ipc_switches.h"
11 #include "chrome/browser/nacl_host/nacl_broker_service_win.h"
12 #include "components/nacl/browser/nacl_browser.h"
13 #include "components/nacl/common/nacl_cmd_line.h"
14 #include "components/nacl/common/nacl_messages.h"
15 #include "components/nacl/common/nacl_process_type.h"
16 #include "components/nacl/common/nacl_switches.h"
17 #include "content/public/browser/browser_child_process_host.h"
18 #include "content/public/browser/child_process_data.h"
19 #include "content/public/common/child_process_host.h"
20 #include "content/public/common/content_switches.h"
21 #include "content/public/common/sandboxed_process_launcher_delegate.h"
22
23 namespace {
24 // NOTE: changes to this class need to be reviewed by the security team.
25 class NaClBrokerSandboxedProcessLauncherDelegate
26 : public content::SandboxedProcessLauncherDelegate {
27 public:
28 NaClBrokerSandboxedProcessLauncherDelegate() {}
29 virtual ~NaClBrokerSandboxedProcessLauncherDelegate() {}
30
31 virtual void ShouldSandbox(bool* in_sandbox) OVERRIDE {
32 *in_sandbox = false;
33 }
34
35 private:
36 DISALLOW_COPY_AND_ASSIGN(NaClBrokerSandboxedProcessLauncherDelegate);
37 };
38 } // namespace
39
40 NaClBrokerHost::NaClBrokerHost() : is_terminating_(false) {
41 process_.reset(content::BrowserChildProcessHost::Create(
42 PROCESS_TYPE_NACL_BROKER, this));
43 }
44
45 NaClBrokerHost::~NaClBrokerHost() {
46 }
47
48 bool NaClBrokerHost::Init() {
49 // Create the channel that will be used for communicating with the broker.
50 std::string channel_id = process_->GetHost()->CreateChannel();
51 if (channel_id.empty())
52 return false;
53
54 // Create the path to the nacl broker/loader executable.
55 base::FilePath nacl_path;
56 if (!nacl::NaClBrowser::GetInstance()->GetNaCl64ExePath(&nacl_path))
57 return false;
58
59 CommandLine* cmd_line = new CommandLine(nacl_path);
60 nacl::CopyNaClCommandLineArguments(cmd_line);
61
62 cmd_line->AppendSwitchASCII(switches::kProcessType,
63 switches::kNaClBrokerProcess);
64 cmd_line->AppendSwitchASCII(switches::kProcessChannelID, channel_id);
65 if (nacl::NaClBrowser::GetDelegate()->DialogsAreSuppressed())
66 cmd_line->AppendSwitch(switches::kNoErrorDialogs);
67
68 process_->Launch(new NaClBrokerSandboxedProcessLauncherDelegate, cmd_line);
69 return true;
70 }
71
72 bool NaClBrokerHost::OnMessageReceived(const IPC::Message& msg) {
73 bool handled = true;
74 IPC_BEGIN_MESSAGE_MAP(NaClBrokerHost, msg)
75 IPC_MESSAGE_HANDLER(NaClProcessMsg_LoaderLaunched, OnLoaderLaunched)
76 IPC_MESSAGE_HANDLER(NaClProcessMsg_DebugExceptionHandlerLaunched,
77 OnDebugExceptionHandlerLaunched)
78 IPC_MESSAGE_UNHANDLED(handled = false)
79 IPC_END_MESSAGE_MAP()
80 return handled;
81 }
82
83 bool NaClBrokerHost::LaunchLoader(const std::string& loader_channel_id) {
84 return process_->Send(
85 new NaClProcessMsg_LaunchLoaderThroughBroker(loader_channel_id));
86 }
87
88 void NaClBrokerHost::OnLoaderLaunched(const std::string& loader_channel_id,
89 base::ProcessHandle handle) {
90 NaClBrokerService::GetInstance()->OnLoaderLaunched(loader_channel_id, handle);
91 }
92
93 bool NaClBrokerHost::LaunchDebugExceptionHandler(
94 int32 pid, base::ProcessHandle process_handle,
95 const std::string& startup_info) {
96 base::ProcessHandle broker_process = process_->GetData().handle;
97 base::ProcessHandle handle_in_broker_process;
98 if (!DuplicateHandle(::GetCurrentProcess(), process_handle,
99 broker_process, &handle_in_broker_process,
100 0, /* bInheritHandle= */ FALSE, DUPLICATE_SAME_ACCESS))
101 return false;
102 return process_->Send(new NaClProcessMsg_LaunchDebugExceptionHandler(
103 pid, handle_in_broker_process, startup_info));
104 }
105
106 void NaClBrokerHost::OnDebugExceptionHandlerLaunched(int32 pid, bool success) {
107 NaClBrokerService::GetInstance()->OnDebugExceptionHandlerLaunched(pid,
108 success);
109 }
110
111 void NaClBrokerHost::StopBroker() {
112 is_terminating_ = true;
113 process_->Send(new NaClProcessMsg_StopBroker());
114 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698