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

Unified Diff: shell/application_manager/application_manager.cc

Issue 930243006: Simplify the ApplicationLoader interface in preparation for changes. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: ptal Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: shell/application_manager/application_manager.cc
diff --git a/shell/application_manager/application_manager.cc b/shell/application_manager/application_manager.cc
index f0c4bac91d2d1e031750b61db2ab00761e1c8a0f..255c0935590a2d7de975dc515f65450f98ea8d3e 100644
--- a/shell/application_manager/application_manager.cc
+++ b/shell/application_manager/application_manager.cc
@@ -104,37 +104,48 @@ void ApplicationManager::ConnectToApplication(
InterfaceRequest<ServiceProvider> services,
ServiceProviderPtr exposed_services) {
DCHECK(requested_url.is_valid());
- GURL mapped_url = delegate_->ResolveMappings(requested_url);
// We check both the mapped and resolved urls for existing shell_impls because
// external applications can be registered for the unresolved mojo:foo urls.
- ShellImpl* shell_impl = GetShellImpl(mapped_url);
- if (shell_impl) {
- ConnectToClient(shell_impl, mapped_url, requestor_url, services.Pass(),
- exposed_services.Pass());
+
+ GURL mapped_url = delegate_->ResolveMappings(requested_url);
+ if (ConnectToRunningApplication(mapped_url, requestor_url, &services,
+ &exposed_services)) {
return;
}
GURL resolved_url = delegate_->ResolveURL(mapped_url);
- shell_impl = GetShellImpl(resolved_url);
- if (shell_impl) {
- ConnectToClient(shell_impl, resolved_url, requestor_url, services.Pass(),
- exposed_services.Pass());
+ if (ConnectToRunningApplication(resolved_url, requestor_url, &services,
+ &exposed_services)) {
+ return;
+ }
+
+ if (ConnectToApplicationWithLoader(requested_url, mapped_url, requestor_url,
+ &services, &exposed_services,
+ GetLoaderForURL(mapped_url))) {
return;
}
- ApplicationLoader* loader =
- GetLoaderForURL(mapped_url, DONT_INCLUDE_DEFAULT_LOADER);
- if (loader) {
- ConnectToApplicationImpl(requested_url, mapped_url, requestor_url,
- services.Pass(), exposed_services.Pass(), loader);
+ if (ConnectToApplicationWithLoader(requested_url, resolved_url, requestor_url,
+ &services, &exposed_services,
+ GetLoaderForURL(resolved_url))) {
return;
}
- loader = GetLoaderForURL(resolved_url, INCLUDE_DEFAULT_LOADER);
- if (loader) {
- ConnectToApplicationImpl(requested_url, resolved_url, requestor_url,
- services.Pass(), exposed_services.Pass(), loader);
+ if (ConnectToApplicationWithLoader(requested_url, resolved_url, requestor_url,
+ &services, &exposed_services,
+ default_loader_.get())) {
+ return;
+ }
+
+ // TODO(aa): This case should go away, see comments in
+ // NativeApplicationLoader.
+ if (native_application_loader_.get()) {
+ native_application_loader_->Load(
+ resolved_url, RegisterShell(requested_url, resolved_url, requestor_url,
+ services.Pass(), exposed_services.Pass()),
+ base::Bind(&ApplicationManager::LoadWithContentHandler,
+ weak_ptr_factory_.GetWeakPtr()));
return;
}
@@ -142,25 +153,51 @@ void ApplicationManager::ConnectToApplication(
<< requested_url.spec();
}
-void ApplicationManager::ConnectToApplicationImpl(
+bool ApplicationManager::ConnectToRunningApplication(
+ const GURL& application_url,
+ const GURL& requestor_url,
+ InterfaceRequest<ServiceProvider>* services,
+ ServiceProviderPtr* exposed_services) {
+ ShellImpl* shell_impl = GetShellImpl(application_url);
+ if (!shell_impl)
+ return false;
+
+ ConnectToClient(shell_impl, application_url, requestor_url, services->Pass(),
+ exposed_services->Pass());
+ return true;
+}
+
+bool ApplicationManager::ConnectToApplicationWithLoader(
const GURL& requested_url,
const GURL& resolved_url,
const GURL& requestor_url,
- InterfaceRequest<ServiceProvider> services,
- ServiceProviderPtr exposed_services,
+ InterfaceRequest<ServiceProvider>* services,
+ ServiceProviderPtr* exposed_services,
ApplicationLoader* loader) {
+ if (!loader)
+ return false;
+
+ loader->Load(resolved_url,
+ RegisterShell(requested_url, resolved_url, requestor_url,
+ services->Pass(), exposed_services->Pass()));
+ return true;
+}
+
+InterfaceRequest<Application> ApplicationManager::RegisterShell(
+ const GURL& requested_url,
+ const GURL& resolved_url,
+ const GURL& requestor_url,
+ InterfaceRequest<ServiceProvider> services,
+ ServiceProviderPtr exposed_services) {
ApplicationPtr application;
InterfaceRequest<Application> application_request = GetProxy(&application);
ShellImpl* shell =
new ShellImpl(application.Pass(), this, requested_url, resolved_url);
url_to_shell_impl_[resolved_url] = shell;
shell->InitializeApplication(GetArgsForURL(requested_url));
-
- loader->Load(this, resolved_url, application_request.Pass(),
- base::Bind(&ApplicationManager::LoadWithContentHandler,
- weak_ptr_factory_.GetWeakPtr()));
ConnectToClient(shell, resolved_url, requestor_url, services.Pass(),
exposed_services.Pass());
+ return application_request.Pass();
}
ShellImpl* ApplicationManager::GetShellImpl(const GURL& url) {
@@ -234,17 +271,13 @@ void ApplicationManager::SetArgsForURL(const std::vector<std::string>& args,
url_to_args_[url] = args;
}
-ApplicationLoader* ApplicationManager::GetLoaderForURL(
- const GURL& url,
- IncludeDefaultLoader include_default_loader) {
+ApplicationLoader* ApplicationManager::GetLoaderForURL(const GURL& url) {
auto url_it = url_to_loader_.find(url);
if (url_it != url_to_loader_.end())
return url_it->second;
auto scheme_it = scheme_to_loader_.find(url.scheme());
if (scheme_it != scheme_to_loader_.end())
return scheme_it->second;
- if (include_default_loader == INCLUDE_DEFAULT_LOADER)
- return default_loader_.get();
return NULL;
}
@@ -257,10 +290,6 @@ void ApplicationManager::OnShellImplError(ShellImpl* shell_impl) {
DCHECK(it != url_to_shell_impl_.end());
delete it->second;
url_to_shell_impl_.erase(it);
- ApplicationLoader* loader =
- GetLoaderForURL(requested_url, INCLUDE_DEFAULT_LOADER);
- if (loader)
- loader->OnApplicationError(this, url);
delegate_->OnApplicationError(requested_url);
}
« no previous file with comments | « shell/application_manager/application_manager.h ('k') | shell/application_manager/application_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698