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

Side by Side Diff: content/browser/mojo/mojo_shell_context.cc

Issue 2166953006: Eliminate FrameMojoShell. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 5 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/mojo/mojo_shell_context.h" 5 #include "content/browser/mojo/mojo_shell_context.h"
6 6
7 #include <unordered_map> 7 #include <unordered_map>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 } 166 }
167 return false; 167 return false;
168 } 168 }
169 169
170 std::unordered_map<std::string, int> manifest_resources_; 170 std::unordered_map<std::string, int> manifest_resources_;
171 std::unique_ptr<ContentBrowserClient::MojoApplicationManifestMap> manifests_; 171 std::unique_ptr<ContentBrowserClient::MojoApplicationManifestMap> manifests_;
172 172
173 DISALLOW_COPY_AND_ASSIGN(BuiltinManifestProvider); 173 DISALLOW_COPY_AND_ASSIGN(BuiltinManifestProvider);
174 }; 174 };
175 175
176 // Thread-safe proxy providing access to the shell context from any thread.
177 class MojoShellContext::Proxy {
Ken Rockot(use gerrit already) 2016/07/21 22:34:33 \o/
178 public:
179 Proxy(MojoShellContext* shell_context)
180 : shell_context_(shell_context),
181 task_runner_(base::ThreadTaskRunnerHandle::Get()) {}
182
183 ~Proxy() {}
184
185 void ConnectToApplication(
186 const std::string& user_id,
187 const std::string& name,
188 const std::string& requestor_name,
189 shell::mojom::InterfaceProviderRequest request,
190 shell::mojom::InterfaceProviderPtr exposed_services,
191 const shell::mojom::Connector::ConnectCallback& callback) {
192 if (task_runner_ == base::ThreadTaskRunnerHandle::Get()) {
193 if (shell_context_) {
194 shell_context_->ConnectToApplicationOnOwnThread(
195 user_id, name, requestor_name, std::move(request),
196 std::move(exposed_services), callback);
197 }
198 } else {
199 // |shell_context_| outlives the main MessageLoop, so it's safe for it to
200 // be unretained here.
201 task_runner_->PostTask(
202 FROM_HERE,
203 base::Bind(&MojoShellContext::ConnectToApplicationOnOwnThread,
204 base::Unretained(shell_context_), user_id, name,
205 requestor_name, base::Passed(&request),
206 base::Passed(&exposed_services), callback));
207 }
208 }
209
210 private:
211 MojoShellContext* shell_context_;
212 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
213
214 DISALLOW_COPY_AND_ASSIGN(Proxy);
215 };
216
217 // static
218 base::LazyInstance<std::unique_ptr<MojoShellContext::Proxy>>
219 MojoShellContext::proxy_ = LAZY_INSTANCE_INITIALIZER;
220
221 MojoShellContext::MojoShellContext() { 176 MojoShellContext::MojoShellContext() {
222 proxy_.Get().reset(new Proxy(this));
223
224 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner = 177 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner =
225 BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE); 178 BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE);
226 std::unique_ptr<shell::NativeRunnerFactory> native_runner_factory( 179 std::unique_ptr<shell::NativeRunnerFactory> native_runner_factory(
227 new shell::InProcessNativeRunnerFactory( 180 new shell::InProcessNativeRunnerFactory(
228 BrowserThread::GetBlockingPool())); 181 BrowserThread::GetBlockingPool()));
229 182
230 // Allow the embedder to register additional Mojo application manifests 183 // Allow the embedder to register additional Mojo application manifests
231 // beyond the default ones below. 184 // beyond the default ones below.
232 std::unique_ptr<ContentBrowserClient::MojoApplicationManifestMap> manifests( 185 std::unique_ptr<ContentBrowserClient::MojoApplicationManifestMap> manifests(
233 new ContentBrowserClient::MojoApplicationManifestMap); 186 new ContentBrowserClient::MojoApplicationManifestMap);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 263
311 MojoShellContext::~MojoShellContext() { 264 MojoShellContext::~MojoShellContext() {
312 if (MojoShellConnection::GetForProcess()) 265 if (MojoShellConnection::GetForProcess())
313 MojoShellConnection::DestroyForProcess(); 266 MojoShellConnection::DestroyForProcess();
314 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 267 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
315 base::Bind(&DestroyConnectorOnIOThread)); 268 base::Bind(&DestroyConnectorOnIOThread));
316 catalog_.reset(); 269 catalog_.reset();
317 } 270 }
318 271
319 // static 272 // static
320 void MojoShellContext::ConnectToApplication(
321 const std::string& user_id,
322 const std::string& name,
323 const std::string& requestor_name,
324 shell::mojom::InterfaceProviderRequest request,
325 shell::mojom::InterfaceProviderPtr exposed_services,
326 const shell::mojom::Connector::ConnectCallback& callback) {
327 proxy_.Get()->ConnectToApplication(user_id, name, requestor_name,
328 std::move(request),
329 std::move(exposed_services), callback);
330 }
331
332 // static
333 shell::Connector* MojoShellContext::GetConnectorForIOThread() { 273 shell::Connector* MojoShellContext::GetConnectorForIOThread() {
334 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 274 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
335 return g_io_thread_connector.Get().get(); 275 return g_io_thread_connector.Get().get();
336 } 276 }
337 277
338 void MojoShellContext::ConnectToApplicationOnOwnThread(
339 const std::string& user_id,
340 const std::string& name,
341 const std::string& requestor_name,
342 shell::mojom::InterfaceProviderRequest request,
343 shell::mojom::InterfaceProviderPtr exposed_services,
344 const shell::mojom::Connector::ConnectCallback& callback) {
345 std::unique_ptr<shell::ConnectParams> params(new shell::ConnectParams);
346 shell::Identity source_id(requestor_name, user_id);
347 params->set_source(source_id);
348 params->set_target(shell::Identity(name, user_id));
349 params->set_remote_interfaces(std::move(request));
350 params->set_local_interfaces(std::move(exposed_services));
351 params->set_connect_callback(callback);
352 service_manager_->Connect(std::move(params));
353 }
354
355 } // namespace content 278 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698