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

Side by Side Diff: chrome/browser/service_process/service_process_control.cc

Issue 2139643003: Use ChannelMojo between browser and service processes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 3 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 (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 "chrome/browser/service_process/service_process_control.h" 5 #include "chrome/browser/service_process/service_process_control.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 10 matching lines...) Expand all
21 #include "base/threading/thread_restrictions.h" 21 #include "base/threading/thread_restrictions.h"
22 #include "base/threading/thread_task_runner_handle.h" 22 #include "base/threading/thread_task_runner_handle.h"
23 #include "build/build_config.h" 23 #include "build/build_config.h"
24 #include "chrome/browser/browser_process.h" 24 #include "chrome/browser/browser_process.h"
25 #include "chrome/browser/chrome_notification_types.h" 25 #include "chrome/browser/chrome_notification_types.h"
26 #include "chrome/browser/upgrade_detector.h" 26 #include "chrome/browser/upgrade_detector.h"
27 #include "chrome/common/service_messages.h" 27 #include "chrome/common/service_messages.h"
28 #include "chrome/common/service_process_util.h" 28 #include "chrome/common/service_process_util.h"
29 #include "content/public/browser/browser_thread.h" 29 #include "content/public/browser/browser_thread.h"
30 #include "content/public/browser/notification_service.h" 30 #include "content/public/browser/notification_service.h"
31 #include "ipc/ipc_channel_mojo.h"
32 #include "mojo/edk/embedder/embedder.h"
33 #include "mojo/edk/embedder/named_platform_handle.h"
34 #include "mojo/edk/embedder/named_platform_handle_utils.h"
31 35
32 using content::BrowserThread; 36 using content::BrowserThread;
33 37
38 namespace {
39
40 void ConnectOnBlockingPool(mojo::ScopedMessagePipeHandle handle,
41 mojo::edk::NamedPlatformHandle os_pipe) {
42 mojo::edk::ScopedPlatformHandle os_pipe_handle =
43 mojo::edk::CreateClientHandle(os_pipe);
44 if (!os_pipe_handle.is_valid())
45 return;
46
47 mojo::FuseMessagePipes(
48 mojo::edk::ConnectToPeerProcess(std::move(os_pipe_handle)),
49 std::move(handle));
50 }
51
52 } // namespace
53
34 // ServiceProcessControl implementation. 54 // ServiceProcessControl implementation.
35 ServiceProcessControl::ServiceProcessControl() { 55 ServiceProcessControl::ServiceProcessControl() {
36 } 56 }
37 57
38 ServiceProcessControl::~ServiceProcessControl() { 58 ServiceProcessControl::~ServiceProcessControl() {
39 } 59 }
40 60
41 void ServiceProcessControl::ConnectInternal() { 61 void ServiceProcessControl::ConnectInternal() {
42 // If the channel has already been established then we run the task 62 // If the channel has already been established then we run the task
43 // and return. 63 // and return.
44 if (channel_.get()) { 64 if (channel_.get()) {
45 RunConnectDoneTasks(); 65 RunConnectDoneTasks();
46 return; 66 return;
47 } 67 }
48 68
49 // Actually going to connect. 69 // Actually going to connect.
50 DVLOG(1) << "Connecting to Service Process IPC Server"; 70 DVLOG(1) << "Connecting to Service Process IPC Server";
51 71
72 mojo::MessagePipe pipe;
73 BrowserThread::PostBlockingPoolTask(
74 FROM_HERE, base::Bind(&ConnectOnBlockingPool, base::Passed(&pipe.handle1),
75 mojo::edk::NamedPlatformHandle(
76 GetServiceProcessChannel().name)));
52 // TODO(hclam): Handle error connecting to channel. 77 // TODO(hclam): Handle error connecting to channel.
53 const IPC::ChannelHandle channel_id = GetServiceProcessChannel(); 78 auto io_task_runner =
54 SetChannel(IPC::ChannelProxy::Create( 79 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO);
55 channel_id, IPC::Channel::MODE_NAMED_CLIENT, this, 80 SetChannel(
56 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO).get())); 81 IPC::ChannelProxy::Create(IPC::ChannelMojo::CreateClientFactory(
82 std::move(pipe.handle0), io_task_runner),
83 this, io_task_runner));
57 } 84 }
58 85
59 void ServiceProcessControl::SetChannel( 86 void ServiceProcessControl::SetChannel(
60 std::unique_ptr<IPC::ChannelProxy> channel) { 87 std::unique_ptr<IPC::ChannelProxy> channel) {
61 channel_ = std::move(channel); 88 channel_ = std::move(channel);
62 } 89 }
63 90
64 void ServiceProcessControl::RunConnectDoneTasks() { 91 void ServiceProcessControl::RunConnectDoneTasks() {
65 // The tasks executed here may add more tasks to the vector. So copy 92 // The tasks executed here may add more tasks to the vector. So copy
66 // them to the stack before executing them. This way recursion is 93 // them to the stack before executing them. This way recursion is
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 if (process_.IsValid()) { 408 if (process_.IsValid()) {
382 BrowserThread::PostTask( 409 BrowserThread::PostTask(
383 BrowserThread::IO, FROM_HERE, 410 BrowserThread::IO, FROM_HERE,
384 base::Bind(&Launcher::DoDetectLaunched, this)); 411 base::Bind(&Launcher::DoDetectLaunched, this));
385 } else { 412 } else {
386 BrowserThread::PostTask( 413 BrowserThread::PostTask(
387 BrowserThread::UI, FROM_HERE, base::Bind(&Launcher::Notify, this)); 414 BrowserThread::UI, FROM_HERE, base::Bind(&Launcher::Notify, this));
388 } 415 }
389 } 416 }
390 #endif // !OS_MACOSX 417 #endif // !OS_MACOSX
OLDNEW
« no previous file with comments | « chrome/browser/service_process/DEPS ('k') | chrome/browser/service_process/service_process_control_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698