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

Side by Side Diff: content/child/child_thread_impl.cc

Issue 1883323002: Reland of Use a token to initialise ChannelMojo and MojoApplication everywhere. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « content/child/child_thread_impl.h ('k') | content/child/mojo/mojo_application.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "content/child/child_thread_impl.h" 5 #include "content/child/child_thread_impl.h"
6 6
7 #include <signal.h> 7 #include <signal.h>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 } 258 }
259 259
260 ChildThreadImpl::Options::Builder::Builder() { 260 ChildThreadImpl::Options::Builder::Builder() {
261 } 261 }
262 262
263 ChildThreadImpl::Options::Builder& 263 ChildThreadImpl::Options::Builder&
264 ChildThreadImpl::Options::Builder::InBrowserProcess( 264 ChildThreadImpl::Options::Builder::InBrowserProcess(
265 const InProcessChildThreadParams& params) { 265 const InProcessChildThreadParams& params) {
266 options_.browser_process_io_runner = params.io_runner(); 266 options_.browser_process_io_runner = params.io_runner();
267 options_.channel_name = params.channel_name(); 267 options_.channel_name = params.channel_name();
268 options_.in_process_message_pipe_handle = params.handle(); 268 options_.in_process_ipc_token = params.ipc_token();
269 options_.in_process_application_token = params.application_token(); 269 options_.in_process_application_token = params.application_token();
270 return *this; 270 return *this;
271 } 271 }
272 272
273 ChildThreadImpl::Options::Builder& 273 ChildThreadImpl::Options::Builder&
274 ChildThreadImpl::Options::Builder::UseMojoChannel(bool use_mojo_channel) { 274 ChildThreadImpl::Options::Builder::UseMojoChannel(bool use_mojo_channel) {
275 options_.use_mojo_channel = use_mojo_channel; 275 options_.use_mojo_channel = use_mojo_channel;
276 return *this; 276 return *this;
277 } 277 }
278 278
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 Init(options); 328 Init(options);
329 } 329 }
330 330
331 scoped_refptr<base::SequencedTaskRunner> ChildThreadImpl::GetIOTaskRunner() { 331 scoped_refptr<base::SequencedTaskRunner> ChildThreadImpl::GetIOTaskRunner() {
332 if (IsInBrowserProcess()) 332 if (IsInBrowserProcess())
333 return browser_process_io_runner_; 333 return browser_process_io_runner_;
334 return ChildProcess::current()->io_task_runner(); 334 return ChildProcess::current()->io_task_runner();
335 } 335 }
336 336
337 void ChildThreadImpl::ConnectChannel(bool use_mojo_channel, 337 void ChildThreadImpl::ConnectChannel(bool use_mojo_channel,
338 mojo::ScopedMessagePipeHandle handle) { 338 const std::string& ipc_token) {
339 bool create_pipe_now = true; 339 bool create_pipe_now = true;
340 if (use_mojo_channel) { 340 if (use_mojo_channel) {
341 VLOG(1) << "Mojo is enabled on child"; 341 VLOG(1) << "Mojo is enabled on child";
342 mojo::ScopedMessagePipeHandle handle;
342 if (!IsInBrowserProcess()) { 343 if (!IsInBrowserProcess()) {
343 DCHECK(!handle.is_valid()); 344 DCHECK(!handle.is_valid());
344 handle = mojo::edk::CreateChildMessagePipe( 345 handle = mojo::edk::CreateChildMessagePipe(
345 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 346 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
346 switches::kMojoChannelToken)); 347 switches::kMojoChannelToken));
348 } else {
349 handle = mojo::edk::CreateChildMessagePipe(ipc_token);
347 } 350 }
348 DCHECK(handle.is_valid()); 351 DCHECK(handle.is_valid());
349 channel_->Init(IPC::ChannelMojo::CreateClientFactory(std::move(handle)), 352 channel_->Init(IPC::ChannelMojo::CreateClientFactory(std::move(handle)),
350 create_pipe_now); 353 create_pipe_now);
351 return; 354 return;
352 } 355 }
353 356
354 VLOG(1) << "Mojo is disabled on child"; 357 VLOG(1) << "Mojo is disabled on child";
355 channel_->Init(channel_name_, IPC::Channel::MODE_CLIENT, create_pipe_now); 358 channel_->Init(channel_name_, IPC::Channel::MODE_CLIENT, create_pipe_now);
356 } 359 }
(...skipping 26 matching lines...) Expand all
383 mojo_ipc_support_.reset(new IPC::ScopedIPCSupport(GetIOTaskRunner())); 386 mojo_ipc_support_.reset(new IPC::ScopedIPCSupport(GetIOTaskRunner()));
384 InitializeMojoIPCChannel(); 387 InitializeMojoIPCChannel();
385 } 388 }
386 389
387 if (MojoShellConnectionImpl::Get()) { 390 if (MojoShellConnectionImpl::Get()) {
388 base::ElapsedTimer timer; 391 base::ElapsedTimer timer;
389 MojoShellConnectionImpl::Get()->BindToRequestFromCommandLine(); 392 MojoShellConnectionImpl::Get()->BindToRequestFromCommandLine();
390 UMA_HISTOGRAM_TIMES("Mojo.Shell.ChildConnectionTime", timer.Elapsed()); 393 UMA_HISTOGRAM_TIMES("Mojo.Shell.ChildConnectionTime", timer.Elapsed());
391 } 394 }
392 395
393 mojo_application_.reset(new MojoApplication(GetIOTaskRunner())); 396 mojo_application_.reset(new MojoApplication());
394 std::string mojo_application_token; 397 std::string mojo_application_token;
395 if (!IsInBrowserProcess()) { 398 if (!IsInBrowserProcess()) {
396 mojo_application_token = 399 mojo_application_token =
397 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 400 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
398 switches::kMojoApplicationChannelToken); 401 switches::kMojoApplicationChannelToken);
399 } else { 402 } else {
400 mojo_application_token = options.in_process_application_token; 403 mojo_application_token = options.in_process_application_token;
401 } 404 }
402 if (!mojo_application_token.empty()) 405 if (!mojo_application_token.empty())
403 mojo_application_->InitWithToken(mojo_application_token); 406 mojo_application_->InitWithToken(mojo_application_token);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 // and single-process mode. 462 // and single-process mode.
460 if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kProcessType)) 463 if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kProcessType))
461 channel_->AddFilter(new SuicideOnChannelErrorFilter()); 464 channel_->AddFilter(new SuicideOnChannelErrorFilter());
462 #endif 465 #endif
463 466
464 // Add filters passed here via options. 467 // Add filters passed here via options.
465 for (auto startup_filter : options.startup_filters) { 468 for (auto startup_filter : options.startup_filters) {
466 channel_->AddFilter(startup_filter); 469 channel_->AddFilter(startup_filter);
467 } 470 }
468 471
469 ConnectChannel( 472 ConnectChannel(options.use_mojo_channel, options.in_process_ipc_token);
470 options.use_mojo_channel,
471 mojo::MakeScopedHandle(options.in_process_message_pipe_handle));
472 IPC::AttachmentBroker* broker = IPC::AttachmentBroker::GetGlobal(); 473 IPC::AttachmentBroker* broker = IPC::AttachmentBroker::GetGlobal();
473 if (broker && !broker->IsPrivilegedBroker()) 474 if (broker && !broker->IsPrivilegedBroker())
474 broker->RegisterBrokerCommunicationChannel(channel_.get()); 475 broker->RegisterBrokerCommunicationChannel(channel_.get());
475 476
476 int connection_timeout = kConnectionTimeoutS; 477 int connection_timeout = kConnectionTimeoutS;
477 std::string connection_override = 478 std::string connection_override =
478 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 479 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
479 switches::kIPCConnectionTimeout); 480 switches::kIPCConnectionTimeout);
480 if (!connection_override.empty()) { 481 if (!connection_override.empty()) {
481 int temp; 482 int temp;
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 return nullptr; 604 return nullptr;
604 } 605 }
605 } else { 606 } else {
606 // Send is allowed to fail during shutdown. Return null in this case. 607 // Send is allowed to fail during shutdown. Return null in this case.
607 return nullptr; 608 return nullptr;
608 } 609 }
609 return shared_buf; 610 return shared_buf;
610 } 611 }
611 612
612 bool ChildThreadImpl::OnMessageReceived(const IPC::Message& msg) { 613 bool ChildThreadImpl::OnMessageReceived(const IPC::Message& msg) {
613 if (mojo_application_->OnMessageReceived(msg))
614 return true;
615
616 // Resource responses are sent to the resource dispatcher. 614 // Resource responses are sent to the resource dispatcher.
617 if (resource_dispatcher_->OnMessageReceived(msg)) 615 if (resource_dispatcher_->OnMessageReceived(msg))
618 return true; 616 return true;
619 if (websocket_dispatcher_->OnMessageReceived(msg)) 617 if (websocket_dispatcher_->OnMessageReceived(msg))
620 return true; 618 return true;
621 if (file_system_dispatcher_->OnMessageReceived(msg)) 619 if (file_system_dispatcher_->OnMessageReceived(msg))
622 return true; 620 return true;
623 621
624 bool handled = true; 622 bool handled = true;
625 IPC_BEGIN_MESSAGE_MAP(ChildThreadImpl, msg) 623 IPC_BEGIN_MESSAGE_MAP(ChildThreadImpl, msg)
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 void ChildThreadImpl::EnsureConnected() { 718 void ChildThreadImpl::EnsureConnected() {
721 VLOG(0) << "ChildThreadImpl::EnsureConnected()"; 719 VLOG(0) << "ChildThreadImpl::EnsureConnected()";
722 base::Process::Current().Terminate(0, false); 720 base::Process::Current().Terminate(0, false);
723 } 721 }
724 722
725 bool ChildThreadImpl::IsInBrowserProcess() const { 723 bool ChildThreadImpl::IsInBrowserProcess() const {
726 return browser_process_io_runner_; 724 return browser_process_io_runner_;
727 } 725 }
728 726
729 } // namespace content 727 } // namespace content
OLDNEW
« no previous file with comments | « content/child/child_thread_impl.h ('k') | content/child/mojo/mojo_application.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698