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

Side by Side Diff: mojo/shell/application_manager/application_manager.cc

Issue 1057603003: Simplify mojo_shell since it's now only used for Mandoline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update scripts Created 5 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "mojo/shell/application_manager/application_manager.h" 5 #include "mojo/shell/application_manager/application_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 11 matching lines...) Expand all
22 #include "third_party/mojo_services/src/content_handler/public/interfaces/conten t_handler.mojom.h" 22 #include "third_party/mojo_services/src/content_handler/public/interfaces/conten t_handler.mojom.h"
23 23
24 namespace mojo { 24 namespace mojo {
25 namespace shell { 25 namespace shell {
26 26
27 namespace { 27 namespace {
28 28
29 // Used by TestAPI. 29 // Used by TestAPI.
30 bool has_created_instance = false; 30 bool has_created_instance = false;
31 31
32 std::vector<std::string> Concatenate(const std::vector<std::string>& v1,
33 const std::vector<std::string>& v2) {
34 if (!v1.size())
35 return v2;
36 if (!v2.size())
37 return v1;
38 std::vector<std::string> result(v1);
39 result.insert(result.end(), v1.begin(), v1.end());
40 return result;
41 }
42
43 } // namespace 32 } // namespace
44 33
45 ApplicationManager::Delegate::~Delegate() { 34 ApplicationManager::Delegate::~Delegate() {
46 } 35 }
47 36
48 GURL ApplicationManager::Delegate::ResolveURL(const GURL& url) { 37 GURL ApplicationManager::Delegate::ResolveURL(const GURL& url) {
49 return url; 38 return url;
50 } 39 }
51 40
52 GURL ApplicationManager::Delegate::ResolveMappings(const GURL& url) { 41 GURL ApplicationManager::Delegate::ResolveMappings(const GURL& url) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 return; 136 return;
148 } 137 }
149 138
150 GURL resolved_url = delegate_->ResolveURL(mapped_url); 139 GURL resolved_url = delegate_->ResolveURL(mapped_url);
151 if (ConnectToRunningApplication(resolved_url, requestor_url, &services, 140 if (ConnectToRunningApplication(resolved_url, requestor_url, &services,
152 &exposed_services)) { 141 &exposed_services)) {
153 return; 142 return;
154 } 143 }
155 144
156 // The application is not running, let's compute the parameters. 145 // The application is not running, let's compute the parameters.
157 std::vector<std::string> parameters =
158 Concatenate(pre_redirect_parameters, GetArgsForURL(resolved_url));
159
160 if (ConnectToApplicationWithLoader(mapped_url, requestor_url, &services, 146 if (ConnectToApplicationWithLoader(mapped_url, requestor_url, &services,
161 &exposed_services, on_application_end, 147 &exposed_services, on_application_end,
162 parameters, GetLoaderForURL(mapped_url))) { 148 pre_redirect_parameters,
149 GetLoaderForURL(mapped_url))) {
150 return;
151 }
152
153 if (ConnectToApplicationWithLoader(resolved_url, requestor_url, &services,
154 &exposed_services, on_application_end,
155 pre_redirect_parameters,
156 GetLoaderForURL(resolved_url))) {
163 return; 157 return;
164 } 158 }
165 159
166 if (ConnectToApplicationWithLoader( 160 if (ConnectToApplicationWithLoader(
167 resolved_url, requestor_url, &services, &exposed_services, 161 resolved_url, requestor_url, &services, &exposed_services,
168 on_application_end, parameters, GetLoaderForURL(resolved_url))) { 162 on_application_end, pre_redirect_parameters, default_loader_.get())) {
169 return; 163 return;
170 } 164 }
171 165
172 if (ConnectToApplicationWithLoader(resolved_url, requestor_url, &services, 166 auto callback = base::Bind(&ApplicationManager::HandleFetchCallback,
173 &exposed_services, on_application_end, 167 weak_ptr_factory_.GetWeakPtr(), requestor_url,
174 parameters, default_loader_.get())) { 168 base::Passed(services.Pass()),
175 return; 169 base::Passed(exposed_services.Pass()),
176 } 170 on_application_end, pre_redirect_parameters);
177
178 auto callback = base::Bind(
179 &ApplicationManager::HandleFetchCallback, weak_ptr_factory_.GetWeakPtr(),
180 requestor_url, base::Passed(services.Pass()),
181 base::Passed(exposed_services.Pass()), on_application_end,
182 parameters);
183 171
184 if (resolved_url.SchemeIsFile()) { 172 if (resolved_url.SchemeIsFile()) {
185 new LocalFetcher( 173 new LocalFetcher(
186 resolved_url, GetBaseURLAndQuery(resolved_url, nullptr), 174 resolved_url, GetBaseURLAndQuery(resolved_url, nullptr),
187 base::Bind(callback, NativeApplicationCleanup::DONT_DELETE)); 175 base::Bind(callback, NativeApplicationCleanup::DONT_DELETE));
188 return; 176 return;
189 } 177 }
190 178
191 if (!network_service_) 179 if (!network_service_)
192 ConnectToService(GURL("mojo:network_service"), &network_service_); 180 ConnectToService(GURL("mojo:network_service"), &network_service_);
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 356
369 TRACE_EVENT1("mojo_shell", "ApplicationManager::RunNativeApplication", "path", 357 TRACE_EVENT1("mojo_shell", "ApplicationManager::RunNativeApplication", "path",
370 path.AsUTF8Unsafe()); 358 path.AsUTF8Unsafe());
371 NativeRunner* runner = native_runner_factory_->Create(options).release(); 359 NativeRunner* runner = native_runner_factory_->Create(options).release();
372 native_runners_.push_back(runner); 360 native_runners_.push_back(runner);
373 runner->Start(path, cleanup, application_request.Pass(), 361 runner->Start(path, cleanup, application_request.Pass(),
374 base::Bind(&ApplicationManager::CleanupRunner, 362 base::Bind(&ApplicationManager::CleanupRunner,
375 weak_ptr_factory_.GetWeakPtr(), runner)); 363 weak_ptr_factory_.GetWeakPtr(), runner));
376 } 364 }
377 365
378 void ApplicationManager::RegisterExternalApplication(
379 const GURL& url,
380 const std::vector<std::string>& args,
381 ApplicationPtr application) {
382 const auto& args_it = url_to_args_.find(url);
383 if (args_it != url_to_args_.end()) {
384 LOG(WARNING) << "--args-for provided for external application " << url
385 << " <ignored>";
386 }
387 Identity identity(url);
388 ShellImpl* shell_impl =
389 new ShellImpl(application.Pass(), this, identity, base::Closure());
390 identity_to_shell_impl_[identity] = shell_impl;
391 shell_impl->InitializeApplication(Array<String>::From(args));
392 }
393
394 void ApplicationManager::RegisterContentHandler( 366 void ApplicationManager::RegisterContentHandler(
395 const std::string& mime_type, 367 const std::string& mime_type,
396 const GURL& content_handler_url) { 368 const GURL& content_handler_url) {
397 DCHECK(content_handler_url.is_valid()) 369 DCHECK(content_handler_url.is_valid())
398 << "Content handler URL is invalid for mime type " << mime_type; 370 << "Content handler URL is invalid for mime type " << mime_type;
399 mime_type_to_url_[mime_type] = content_handler_url; 371 mime_type_to_url_[mime_type] = content_handler_url;
400 } 372 }
401 373
402 void ApplicationManager::LoadWithContentHandler( 374 void ApplicationManager::LoadWithContentHandler(
403 const GURL& content_handler_url, 375 const GURL& content_handler_url,
(...skipping 23 matching lines...) Expand all
427 399
428 void ApplicationManager::SetLoaderForScheme( 400 void ApplicationManager::SetLoaderForScheme(
429 scoped_ptr<ApplicationLoader> loader, 401 scoped_ptr<ApplicationLoader> loader,
430 const std::string& scheme) { 402 const std::string& scheme) {
431 SchemeToLoaderMap::iterator it = scheme_to_loader_.find(scheme); 403 SchemeToLoaderMap::iterator it = scheme_to_loader_.find(scheme);
432 if (it != scheme_to_loader_.end()) 404 if (it != scheme_to_loader_.end())
433 delete it->second; 405 delete it->second;
434 scheme_to_loader_[scheme] = loader.release(); 406 scheme_to_loader_[scheme] = loader.release();
435 } 407 }
436 408
437 void ApplicationManager::SetArgsForURL(const std::vector<std::string>& args,
438 const GURL& url) {
439 url_to_args_[url].insert(url_to_args_[url].end(), args.begin(), args.end());
440 GURL mapped_url = delegate_->ResolveMappings(url);
441 if (mapped_url != url) {
442 url_to_args_[mapped_url].insert(url_to_args_[mapped_url].end(),
443 args.begin(), args.end());
444 }
445 GURL resolved_url = delegate_->ResolveURL(mapped_url);
446 if (resolved_url != mapped_url) {
447 url_to_args_[resolved_url].insert(url_to_args_[resolved_url].end(),
448 args.begin(), args.end());
449 }
450 }
451
452 void ApplicationManager::SetNativeOptionsForURL( 409 void ApplicationManager::SetNativeOptionsForURL(
453 const NativeRunnerFactory::Options& options, 410 const NativeRunnerFactory::Options& options,
454 const GURL& url) { 411 const GURL& url) {
455 DCHECK(!url.has_query()); // Precondition. 412 DCHECK(!url.has_query()); // Precondition.
456 // Apply mappings and resolution to get the resolved URL. 413 // Apply mappings and resolution to get the resolved URL.
457 GURL resolved_url = delegate_->ResolveURL(delegate_->ResolveMappings(url)); 414 GURL resolved_url = delegate_->ResolveURL(delegate_->ResolveMappings(url));
458 DCHECK(!resolved_url.has_query()); // Still shouldn't have query. 415 DCHECK(!resolved_url.has_query()); // Still shouldn't have query.
459 // TODO(vtl): We should probably also remove/disregard the query string (and 416 // TODO(vtl): We should probably also remove/disregard the query string (and
460 // maybe canonicalize in other ways). 417 // maybe canonicalize in other ways).
461 DVLOG(2) << "Storing native options for resolved URL " << resolved_url 418 DVLOG(2) << "Storing native options for resolved URL " << resolved_url
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 const GURL& application_url, 457 const GURL& application_url,
501 const std::string& interface_name) { 458 const std::string& interface_name) {
502 ServiceProviderPtr services; 459 ServiceProviderPtr services;
503 ConnectToApplication(application_url, GURL(), GetProxy(&services), nullptr, 460 ConnectToApplication(application_url, GURL(), GetProxy(&services), nullptr,
504 base::Closure()); 461 base::Closure());
505 MessagePipe pipe; 462 MessagePipe pipe;
506 services->ConnectToService(interface_name, pipe.handle1.Pass()); 463 services->ConnectToService(interface_name, pipe.handle1.Pass());
507 return pipe.handle0.Pass(); 464 return pipe.handle0.Pass();
508 } 465 }
509 466
510 std::vector<std::string> ApplicationManager::GetArgsForURL(const GURL& url) {
511 const auto& args_it = url_to_args_.find(url);
512 if (args_it != url_to_args_.end())
513 return args_it->second;
514 return std::vector<std::string>();
515 }
516
517 void ApplicationManager::CleanupRunner(NativeRunner* runner) { 467 void ApplicationManager::CleanupRunner(NativeRunner* runner) {
518 native_runners_.erase( 468 native_runners_.erase(
519 std::find(native_runners_.begin(), native_runners_.end(), runner)); 469 std::find(native_runners_.begin(), native_runners_.end(), runner));
520 } 470 }
521 471
522 } // namespace shell 472 } // namespace shell
523 } // namespace mojo 473 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/shell/application_manager/application_manager.h ('k') | mojo/shell/application_manager/application_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698