OLD | NEW |
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 "content/browser/browser_child_process_host_impl.h" | 5 #include "content/browser/browser_child_process_host_impl.h" |
6 | 6 |
7 #include "base/base_switches.h" | 7 #include "base/base_switches.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/debug/dump_without_crashing.h" | 10 #include "base/debug/dump_without_crashing.h" |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 void NotifyProcessKilled(const ChildProcessData& data, int exit_code) { | 75 void NotifyProcessKilled(const ChildProcessData& data, int exit_code) { |
76 FOR_EACH_OBSERVER(BrowserChildProcessObserver, g_observers.Get(), | 76 FOR_EACH_OBSERVER(BrowserChildProcessObserver, g_observers.Get(), |
77 BrowserChildProcessKilled(data, exit_code)); | 77 BrowserChildProcessKilled(data, exit_code)); |
78 } | 78 } |
79 | 79 |
80 } // namespace | 80 } // namespace |
81 | 81 |
82 BrowserChildProcessHost* BrowserChildProcessHost::Create( | 82 BrowserChildProcessHost* BrowserChildProcessHost::Create( |
83 content::ProcessType process_type, | 83 content::ProcessType process_type, |
84 BrowserChildProcessHostDelegate* delegate) { | 84 BrowserChildProcessHostDelegate* delegate) { |
85 return new BrowserChildProcessHostImpl(process_type, delegate); | 85 return new BrowserChildProcessHostImpl( |
| 86 process_type, delegate, mojo::edk::GenerateRandomToken()); |
| 87 } |
| 88 |
| 89 BrowserChildProcessHost* BrowserChildProcessHost::Create( |
| 90 content::ProcessType process_type, |
| 91 BrowserChildProcessHostDelegate* delegate, |
| 92 const std::string& mojo_child_token) { |
| 93 return new BrowserChildProcessHostImpl( |
| 94 process_type, delegate, mojo_child_token); |
86 } | 95 } |
87 | 96 |
88 BrowserChildProcessHost* BrowserChildProcessHost::FromID(int child_process_id) { | 97 BrowserChildProcessHost* BrowserChildProcessHost::FromID(int child_process_id) { |
89 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 98 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
90 BrowserChildProcessHostImpl::BrowserChildProcessList* process_list = | 99 BrowserChildProcessHostImpl::BrowserChildProcessList* process_list = |
91 g_child_process_list.Pointer(); | 100 g_child_process_list.Pointer(); |
92 for (BrowserChildProcessHostImpl* host : *process_list) { | 101 for (BrowserChildProcessHostImpl* host : *process_list) { |
93 if (host->GetData().id == child_process_id) | 102 if (host->GetData().id == child_process_id) |
94 return host; | 103 return host; |
95 } | 104 } |
(...skipping 21 matching lines...) Expand all Loading... |
117 | 126 |
118 // static | 127 // static |
119 void BrowserChildProcessHostImpl::RemoveObserver( | 128 void BrowserChildProcessHostImpl::RemoveObserver( |
120 BrowserChildProcessObserver* observer) { | 129 BrowserChildProcessObserver* observer) { |
121 // TODO(phajdan.jr): Check thread after fixing http://crbug.com/167126. | 130 // TODO(phajdan.jr): Check thread after fixing http://crbug.com/167126. |
122 g_observers.Get().RemoveObserver(observer); | 131 g_observers.Get().RemoveObserver(observer); |
123 } | 132 } |
124 | 133 |
125 BrowserChildProcessHostImpl::BrowserChildProcessHostImpl( | 134 BrowserChildProcessHostImpl::BrowserChildProcessHostImpl( |
126 content::ProcessType process_type, | 135 content::ProcessType process_type, |
127 BrowserChildProcessHostDelegate* delegate) | 136 BrowserChildProcessHostDelegate* delegate, |
| 137 const std::string& mojo_child_token) |
128 : data_(process_type), | 138 : data_(process_type), |
129 delegate_(delegate), | 139 delegate_(delegate), |
| 140 mojo_child_token_(mojo_child_token), |
130 power_monitor_message_broadcaster_(this), | 141 power_monitor_message_broadcaster_(this), |
131 is_channel_connected_(false), | 142 is_channel_connected_(false), |
132 notify_child_disconnected_(false) { | 143 notify_child_disconnected_(false) { |
133 data_.id = ChildProcessHostImpl::GenerateChildProcessUniqueId(); | 144 data_.id = ChildProcessHostImpl::GenerateChildProcessUniqueId(); |
134 | 145 |
135 #if USE_ATTACHMENT_BROKER | 146 #if USE_ATTACHMENT_BROKER |
136 // Construct the privileged attachment broker early in the life cycle of a | 147 // Construct the privileged attachment broker early in the life cycle of a |
137 // child process. This ensures that when a test is being run in one of the | 148 // child process. This ensures that when a test is being run in one of the |
138 // single process modes, the global attachment broker is the privileged | 149 // single process modes, the global attachment broker is the privileged |
139 // attachment broker, rather than an unprivileged attachment broker. | 150 // attachment broker, rather than an unprivileged attachment broker. |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 }; | 233 }; |
223 cmd_line->CopySwitchesFrom(browser_command_line, kForwardSwitches, | 234 cmd_line->CopySwitchesFrom(browser_command_line, kForwardSwitches, |
224 arraysize(kForwardSwitches)); | 235 arraysize(kForwardSwitches)); |
225 | 236 |
226 notify_child_disconnected_ = true; | 237 notify_child_disconnected_ = true; |
227 child_process_.reset(new ChildProcessLauncher( | 238 child_process_.reset(new ChildProcessLauncher( |
228 delegate, | 239 delegate, |
229 cmd_line, | 240 cmd_line, |
230 data_.id, | 241 data_.id, |
231 this, | 242 this, |
| 243 mojo_child_token_, |
232 terminate_on_shutdown)); | 244 terminate_on_shutdown)); |
233 } | 245 } |
234 | 246 |
235 const ChildProcessData& BrowserChildProcessHostImpl::GetData() const { | 247 const ChildProcessData& BrowserChildProcessHostImpl::GetData() const { |
236 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 248 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
237 return data_; | 249 return data_; |
238 } | 250 } |
239 | 251 |
240 ChildProcessHost* BrowserChildProcessHostImpl::GetHost() const { | 252 ChildProcessHost* BrowserChildProcessHostImpl::GetHost() const { |
241 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 253 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 | 471 |
460 #if defined(OS_WIN) | 472 #if defined(OS_WIN) |
461 | 473 |
462 void BrowserChildProcessHostImpl::OnObjectSignaled(HANDLE object) { | 474 void BrowserChildProcessHostImpl::OnObjectSignaled(HANDLE object) { |
463 OnChildDisconnected(); | 475 OnChildDisconnected(); |
464 } | 476 } |
465 | 477 |
466 #endif | 478 #endif |
467 | 479 |
468 } // namespace content | 480 } // namespace content |
OLD | NEW |