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

Side by Side Diff: chrome/test/base/mojo_test_connector.cc

Issue 2019973002: [mojo-edk] Bind a child token to child launches and port reservations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 6 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/test/base/mojo_test_connector.h" 5 #include "chrome/test/base/mojo_test_connector.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 std::move(required_shell_classes)); 70 std::move(required_shell_classes));
71 required_capabilities->Set("mojo:shell", std::move(shell_caps)); 71 required_capabilities->Set("mojo:shell", std::move(shell_caps));
72 apps->Append(std::move(test_app_config)); 72 apps->Append(std::move(test_app_config));
73 return base::WrapUnique(new shell::TestCatalogStore(std::move(apps))); 73 return base::WrapUnique(new shell::TestCatalogStore(std::move(apps)));
74 } 74 }
75 75
76 // BackgroundTestState maintains all the state necessary to bind the test to 76 // BackgroundTestState maintains all the state necessary to bind the test to
77 // mojo. This class is only used on the thread created by BackgroundShell. 77 // mojo. This class is only used on the thread created by BackgroundShell.
78 class BackgroundTestState { 78 class BackgroundTestState {
79 public: 79 public:
80 BackgroundTestState() {} 80 BackgroundTestState() : child_token_(mojo::edk::GenerateRandomToken()) {}
81 ~BackgroundTestState() {} 81 ~BackgroundTestState() {}
82 82
83 // Prepares the command line and other setup for connecting the test to mojo. 83 // Prepares the command line and other setup for connecting the test to mojo.
84 // Must be paired with a clal to ChildProcessLaunched(). 84 // Must be paired with a call to ChildProcessLaunched().
85 void Connect(base::CommandLine* command_line, 85 void Connect(base::CommandLine* command_line,
86 shell::Shell* shell, 86 shell::Shell* shell,
87 const std::string& instance, 87 const std::string& instance,
88 base::TestLauncher::LaunchOptions* test_launch_options) { 88 base::TestLauncher::LaunchOptions* test_launch_options) {
89 command_line->AppendSwitch(MojoTestConnector::kTestSwitch); 89 command_line->AppendSwitch(MojoTestConnector::kTestSwitch);
90 command_line->AppendSwitch(switches::kChildProcess); 90 command_line->AppendSwitch(switches::kChildProcess);
91 mojo_ipc_channel_.reset(new mojo::edk::PlatformChannelPair); 91 mojo_ipc_channel_.reset(new mojo::edk::PlatformChannelPair);
92 mojo_ipc_channel_->PrepareToPassClientHandleToChildProcess( 92 mojo_ipc_channel_->PrepareToPassClientHandleToChildProcess(
93 command_line, &handle_passing_info_); 93 command_line, &handle_passing_info_);
94 #if defined(OS_WIN) 94 #if defined(OS_WIN)
95 test_launch_options->inherit_handles = true; 95 test_launch_options->inherit_handles = true;
96 test_launch_options->handles_to_inherit = &handle_passing_info_; 96 test_launch_options->handles_to_inherit = &handle_passing_info_;
97 #if defined(OFFICIAL_BUILD) 97 #if defined(OFFICIAL_BUILD)
98 CHECK(false) << "Launching mojo process with inherit_handles is insecure!"; 98 CHECK(false) << "Launching mojo process with inherit_handles is insecure!";
99 #endif 99 #endif
100 #elif defined(OS_POSIX) 100 #elif defined(OS_POSIX)
101 test_launch_options->fds_to_remap = &handle_passing_info_; 101 test_launch_options->fds_to_remap = &handle_passing_info_;
102 #else 102 #else
103 #error "Unsupported" 103 #error "Unsupported"
104 #endif 104 #endif
105 shell::mojom::ShellClientPtr client = 105 shell::mojom::ShellClientPtr client =
106 shell::PassShellClientRequestOnCommandLine(command_line); 106 shell::PassShellClientRequestOnCommandLine(command_line, child_token_);
107 107
108 std::unique_ptr<shell::ConnectParams> params(new shell::ConnectParams); 108 std::unique_ptr<shell::ConnectParams> params(new shell::ConnectParams);
109 params->set_source(shell::CreateShellIdentity()); 109 params->set_source(shell::CreateShellIdentity());
110 params->set_target( 110 params->set_target(
111 shell::Identity(kTestName, shell::mojom::kRootUserID, instance)); 111 shell::Identity(kTestName, shell::mojom::kRootUserID, instance));
112 112
113 shell::mojom::ClientProcessConnectionPtr client_process_connection = 113 shell::mojom::ClientProcessConnectionPtr client_process_connection =
114 shell::mojom::ClientProcessConnection::New(); 114 shell::mojom::ClientProcessConnection::New();
115 client_process_connection->shell_client = 115 client_process_connection->shell_client =
116 client.PassInterface().PassHandle(); 116 client.PassInterface().PassHandle();
117 client_process_connection->pid_receiver_request = 117 client_process_connection->pid_receiver_request =
118 mojo::GetProxy(&pid_receiver_).PassMessagePipe(); 118 mojo::GetProxy(&pid_receiver_).PassMessagePipe();
119 params->set_client_process_connection(std::move(client_process_connection)); 119 params->set_client_process_connection(std::move(client_process_connection));
120 shell->Connect(std::move(params)); 120 shell->Connect(std::move(params));
121 } 121 }
122 122
123 // Called after the test process has launched. Completes the registration done 123 // Called after the test process has launched. Completes the registration done
124 // in Connect(). 124 // in Connect().
125 void ChildProcessLaunched(base::ProcessHandle handle, base::ProcessId pid) { 125 void ChildProcessLaunched(base::ProcessHandle handle, base::ProcessId pid) {
126 pid_receiver_->SetPID(pid); 126 pid_receiver_->SetPID(pid);
127 mojo_ipc_channel_->ChildProcessLaunched(); 127 mojo_ipc_channel_->ChildProcessLaunched();
128 mojo::edk::ChildProcessLaunched( 128 mojo::edk::ChildProcessLaunched(
129 handle, mojo::edk::ScopedPlatformHandle(mojo::edk::PlatformHandle( 129 handle, mojo::edk::ScopedPlatformHandle(mojo::edk::PlatformHandle(
130 mojo_ipc_channel_->PassServerHandle().release().handle))); 130 mojo_ipc_channel_->PassServerHandle().release().handle)),
131 child_token_);
131 } 132 }
132 133
133 private: 134 private:
134 // Used to back the NodeChannel between the parent and child node. 135 // Used to back the NodeChannel between the parent and child node.
136 const std::string child_token_;
135 std::unique_ptr<mojo::edk::PlatformChannelPair> mojo_ipc_channel_; 137 std::unique_ptr<mojo::edk::PlatformChannelPair> mojo_ipc_channel_;
136 138
137 mojo::edk::HandlePassingInformation handle_passing_info_; 139 mojo::edk::HandlePassingInformation handle_passing_info_;
138 140
139 shell::mojom::PIDReceiverPtr pid_receiver_; 141 shell::mojom::PIDReceiverPtr pid_receiver_;
140 142
141 DISALLOW_COPY_AND_ASSIGN(BackgroundTestState); 143 DISALLOW_COPY_AND_ASSIGN(BackgroundTestState);
142 }; 144 };
143 145
144 // Called used destroy BackgroundTestState on the background thread. 146 // Called used destroy BackgroundTestState on the background thread.
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 MojoTestConnector::~MojoTestConnector() {} 240 MojoTestConnector::~MojoTestConnector() {}
239 241
240 std::unique_ptr<content::TestState> MojoTestConnector::PrepareForTest( 242 std::unique_ptr<content::TestState> MojoTestConnector::PrepareForTest(
241 base::CommandLine* command_line, 243 base::CommandLine* command_line,
242 base::TestLauncher::LaunchOptions* test_launch_options) { 244 base::TestLauncher::LaunchOptions* test_launch_options) {
243 std::unique_ptr<MojoTestState> test_state( 245 std::unique_ptr<MojoTestState> test_state(
244 new MojoTestState(&background_shell_)); 246 new MojoTestState(&background_shell_));
245 test_state->Init(command_line, test_launch_options); 247 test_state->Init(command_line, test_launch_options);
246 return std::move(test_state); 248 return std::move(test_state);
247 } 249 }
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/arc/gpu_arc_video_service_host.cc ('k') | components/arc/arc_bridge_bootstrap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698