Index: mojo/application_manager/application_manager.cc |
diff --git a/mojo/application_manager/application_manager.cc b/mojo/application_manager/application_manager.cc |
deleted file mode 100644 |
index 2d582160c63e0e687c0e482a16ed1ac77b9a8795..0000000000000000000000000000000000000000 |
--- a/mojo/application_manager/application_manager.cc |
+++ /dev/null |
@@ -1,276 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "mojo/application_manager/application_manager.h" |
- |
-#include <stdio.h> |
- |
-#include "base/bind.h" |
-#include "base/lazy_instance.h" |
-#include "base/logging.h" |
-#include "base/macros.h" |
-#include "base/stl_util.h" |
-#include "mojo/application_manager/application_loader.h" |
-#include "mojo/public/cpp/application/connect.h" |
-#include "mojo/public/cpp/bindings/binding.h" |
-#include "mojo/public/cpp/bindings/error_handler.h" |
-#include "mojo/public/interfaces/application/shell.mojom.h" |
-#include "mojo/services/content_handler/public/interfaces/content_handler.mojom.h" |
- |
-namespace mojo { |
- |
-namespace { |
-// Used by TestAPI. |
-bool has_created_instance = false; |
- |
-class StubServiceProvider : public InterfaceImpl<ServiceProvider> { |
- public: |
- ServiceProvider* GetRemoteServiceProvider() { return client(); } |
- |
- private: |
- void ConnectToService(const String& service_name, |
- ScopedMessagePipeHandle client_handle) override {} |
-}; |
- |
-} // namespace |
- |
- |
-ApplicationManager::Delegate::~Delegate() { |
-} |
- |
-void ApplicationManager::Delegate::OnApplicationError(const GURL& url) { |
- LOG(ERROR) << "Communication error with application: " << url.spec(); |
-} |
- |
-GURL ApplicationManager::Delegate::ResolveURL(const GURL& url) { |
- return url; |
-} |
- |
-class ApplicationManager::ContentHandlerConnection : public ErrorHandler { |
- public: |
- ContentHandlerConnection(ApplicationManager* manager, |
- const GURL& content_handler_url) |
- : manager_(manager), content_handler_url_(content_handler_url) { |
- ServiceProviderPtr services; |
- manager->ConnectToApplication(content_handler_url, GURL(), |
- GetProxy(&services), nullptr); |
- mojo::ConnectToService(services.get(), &content_handler_); |
- content_handler_.set_error_handler(this); |
- } |
- |
- ContentHandler* content_handler() { return content_handler_.get(); } |
- |
- GURL content_handler_url() { return content_handler_url_; } |
- |
- private: |
- // ErrorHandler implementation: |
- void OnConnectionError() override { manager_->OnContentHandlerError(this); } |
- |
- ApplicationManager* manager_; |
- GURL content_handler_url_; |
- ContentHandlerPtr content_handler_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ContentHandlerConnection); |
-}; |
- |
-// static |
-ApplicationManager::TestAPI::TestAPI(ApplicationManager* manager) |
- : manager_(manager) { |
-} |
- |
-ApplicationManager::TestAPI::~TestAPI() { |
-} |
- |
-bool ApplicationManager::TestAPI::HasCreatedInstance() { |
- return has_created_instance; |
-} |
- |
-bool ApplicationManager::TestAPI::HasFactoryForURL(const GURL& url) const { |
- return manager_->url_to_shell_impl_.find(url) != |
- manager_->url_to_shell_impl_.end(); |
-} |
- |
-ApplicationManager::ApplicationManager(Delegate* delegate) |
- : delegate_(delegate), |
- weak_ptr_factory_(this) { |
-} |
- |
-ApplicationManager::~ApplicationManager() { |
- STLDeleteValues(&url_to_content_handler_); |
- TerminateShellConnections(); |
- STLDeleteValues(&url_to_loader_); |
- STLDeleteValues(&scheme_to_loader_); |
-} |
- |
-void ApplicationManager::TerminateShellConnections() { |
- STLDeleteValues(&url_to_shell_impl_); |
-} |
- |
-void ApplicationManager::ConnectToApplication( |
- const GURL& requested_url, |
- const GURL& requestor_url, |
- InterfaceRequest<ServiceProvider> services, |
- ServiceProviderPtr exposed_services) { |
- DCHECK(requested_url.is_valid()); |
- ApplicationLoader* loader = GetLoaderForURL(requested_url, |
- DONT_INCLUDE_DEFAULT_LOADER); |
- if (loader) { |
- ConnectToApplicationImpl(requested_url, requested_url, requestor_url, |
- services.Pass(), exposed_services.Pass(), loader); |
- return; |
- } |
- |
- GURL resolved_url = delegate_->ResolveURL(requested_url); |
- loader = GetLoaderForURL(resolved_url, INCLUDE_DEFAULT_LOADER); |
- if (loader) { |
- ConnectToApplicationImpl(requested_url, resolved_url, requestor_url, |
- services.Pass(), exposed_services.Pass(), loader); |
- return; |
- } |
- |
- LOG(WARNING) << "Could not find loader to load application: " |
- << requested_url.spec(); |
-} |
- |
-void ApplicationManager::ConnectToApplicationImpl( |
- const GURL& requested_url, |
- const GURL& resolved_url, |
- const GURL& requestor_url, |
- InterfaceRequest<ServiceProvider> services, |
- ServiceProviderPtr exposed_services, |
- ApplicationLoader* loader) { |
- ShellImpl* shell = nullptr; |
- URLToShellImplMap::const_iterator shell_it = |
- url_to_shell_impl_.find(resolved_url); |
- if (shell_it != url_to_shell_impl_.end()) { |
- shell = shell_it->second; |
- } else { |
- MessagePipe pipe; |
- shell = |
- new ShellImpl(pipe.handle0.Pass(), this, requested_url, resolved_url); |
- url_to_shell_impl_[resolved_url] = shell; |
- shell->client()->Initialize(GetArgsForURL(requested_url)); |
- |
- loader->Load(this, resolved_url, pipe.handle1.Pass(), |
- base::Bind(&ApplicationManager::LoadWithContentHandler, |
- weak_ptr_factory_.GetWeakPtr())); |
- } |
- ConnectToClient(shell, resolved_url, requestor_url, services.Pass(), |
- exposed_services.Pass()); |
-} |
- |
-void ApplicationManager::ConnectToClient( |
- ShellImpl* shell_impl, |
- const GURL& url, |
- const GURL& requestor_url, |
- InterfaceRequest<ServiceProvider> services, |
- ServiceProviderPtr exposed_services) { |
- shell_impl->ConnectToClient(requestor_url, services.Pass(), |
- exposed_services.Pass()); |
-} |
- |
-void ApplicationManager::RegisterExternalApplication( |
- const GURL& url, |
- ScopedMessagePipeHandle shell_handle) { |
- ShellImpl* shell_impl = new ShellImpl(shell_handle.Pass(), this, url, url); |
- url_to_shell_impl_[url] = shell_impl; |
- shell_impl->client()->Initialize(GetArgsForURL(url)); |
-} |
- |
-void ApplicationManager::LoadWithContentHandler( |
- const GURL& content_handler_url, |
- ScopedMessagePipeHandle shell_handle, |
- URLResponsePtr url_response) { |
- ContentHandlerConnection* connection = NULL; |
- URLToContentHandlerMap::iterator iter = |
- url_to_content_handler_.find(content_handler_url); |
- if (iter != url_to_content_handler_.end()) { |
- connection = iter->second; |
- } else { |
- connection = new ContentHandlerConnection(this, content_handler_url); |
- url_to_content_handler_[content_handler_url] = connection; |
- } |
- |
- connection->content_handler()->StartApplication( |
- MakeProxy<Shell>(shell_handle.Pass()), url_response.Pass()); |
-} |
- |
-void ApplicationManager::SetLoaderForURL(scoped_ptr<ApplicationLoader> loader, |
- const GURL& url) { |
- URLToLoaderMap::iterator it = url_to_loader_.find(url); |
- if (it != url_to_loader_.end()) |
- delete it->second; |
- url_to_loader_[url] = loader.release(); |
-} |
- |
-void ApplicationManager::SetLoaderForScheme( |
- scoped_ptr<ApplicationLoader> loader, |
- const std::string& scheme) { |
- SchemeToLoaderMap::iterator it = scheme_to_loader_.find(scheme); |
- if (it != scheme_to_loader_.end()) |
- delete it->second; |
- scheme_to_loader_[scheme] = loader.release(); |
-} |
- |
-void ApplicationManager::SetArgsForURL(const std::vector<std::string>& args, |
- const GURL& url) { |
- url_to_args_[url] = args; |
-} |
- |
-ApplicationLoader* ApplicationManager::GetLoaderForURL( |
- const GURL& url, IncludeDefaultLoader include_default_loader) { |
- 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; |
-} |
- |
-void ApplicationManager::OnShellImplError(ShellImpl* shell_impl) { |
- // Called from ~ShellImpl, so we do not need to call Destroy here. |
- const GURL url = shell_impl->url(); |
- const GURL requested_url = shell_impl->requested_url(); |
- // Remove the shell. |
- URLToShellImplMap::iterator it = url_to_shell_impl_.find(url); |
- 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); |
-} |
- |
-void ApplicationManager::OnContentHandlerError( |
- ContentHandlerConnection* content_handler) { |
- // Remove the mapping to the content handler. |
- auto it = |
- url_to_content_handler_.find(content_handler->content_handler_url()); |
- DCHECK(it != url_to_content_handler_.end()); |
- delete it->second; |
- url_to_content_handler_.erase(it); |
-} |
- |
-ScopedMessagePipeHandle ApplicationManager::ConnectToServiceByName( |
- const GURL& application_url, |
- const std::string& interface_name) { |
- ServiceProviderPtr services; |
- ConnectToApplication(application_url, GURL(), GetProxy(&services), nullptr); |
- MessagePipe pipe; |
- services->ConnectToService(interface_name, pipe.handle1.Pass()); |
- return pipe.handle0.Pass(); |
-} |
- |
-Array<String> ApplicationManager::GetArgsForURL(const GURL& url) { |
- URLToArgsMap::const_iterator args_it = url_to_args_.find(url); |
- if (args_it != url_to_args_.end()) |
- return Array<String>::From(args_it->second); |
- return Array<String>(); |
-} |
-} // namespace mojo |