| // Copyright 2015 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 "shell/application_manager/shell_impl.h" |
| |
| #include <utility> |
| |
| #include "mojo/converters/url/url_type_converters.h" |
| #include "mojo/services/content_handler/interfaces/content_handler.mojom.h" |
| #include "shell/application_manager/application_manager.h" |
| |
| using mojo::ApplicationConnector; |
| using mojo::ApplicationPtr; |
| using mojo::Array; |
| using mojo::InterfaceRequest; |
| using mojo::InterfaceHandle; |
| using mojo::ServiceProvider; |
| using mojo::ServiceProviderPtr; |
| using mojo::Shell; |
| using mojo::ShellPtr; |
| using mojo::String; |
| |
| namespace shell { |
| |
| // ShellImpl::ApplicationConnectorImpl ----------------------------------------- |
| |
| ShellImpl::ApplicationConnectorImpl::ApplicationConnectorImpl(Shell* shell) |
| : shell_(shell) {} |
| |
| ShellImpl::ApplicationConnectorImpl::~ApplicationConnectorImpl() {} |
| |
| void ShellImpl::ApplicationConnectorImpl::ConnectToApplication( |
| const String& app_url, |
| InterfaceRequest<ServiceProvider> services, |
| InterfaceHandle<mojo::ServiceProvider> exposed_services) { |
| shell_->ConnectToApplication(app_url, std::move(services), |
| std::move(exposed_services)); |
| } |
| |
| void ShellImpl::ApplicationConnectorImpl::Duplicate( |
| InterfaceRequest<ApplicationConnector> application_connector_request) { |
| bindings_.AddBinding(this, std::move(application_connector_request)); |
| } |
| |
| // ShellImpl ------------------------------------------------------------------- |
| |
| ShellImpl::ShellImpl(ApplicationPtr application, |
| ApplicationManager* manager, |
| const Identity& identity, |
| const base::Closure& on_application_end) |
| : manager_(manager), |
| identity_(identity), |
| on_application_end_(on_application_end), |
| application_(std::move(application)), |
| binding_(this), |
| application_connector_impl_(this) { |
| binding_.set_connection_error_handler( |
| [this]() { manager_->OnShellImplError(this); }); |
| } |
| |
| ShellImpl::~ShellImpl() { |
| } |
| |
| void ShellImpl::InitializeApplication(Array<String> args) { |
| ShellPtr shell; |
| binding_.Bind(GetProxy(&shell)); |
| application_->Initialize(std::move(shell), std::move(args), |
| identity_.url.spec()); |
| } |
| |
| void ShellImpl::ConnectToClient(const GURL& requested_url, |
| const GURL& requestor_url, |
| InterfaceRequest<ServiceProvider> services) { |
| application_->AcceptConnection(String::From(requestor_url), |
| std::move(services), nullptr, |
| requested_url.spec()); |
| } |
| |
| void ShellImpl::ConnectToApplication( |
| const String& app_url, |
| InterfaceRequest<ServiceProvider> services, |
| InterfaceHandle<mojo::ServiceProvider> exposed_services) { |
| GURL app_gurl(app_url); |
| if (!app_gurl.is_valid()) { |
| LOG(ERROR) << "Error: invalid URL: " << app_url; |
| return; |
| } |
| LOG_IF(ERROR, exposed_services) << "exposed_services no longer supported!"; |
| manager_->ConnectToApplication(app_gurl, identity_.url, std::move(services), |
| base::Closure()); |
| } |
| |
| void ShellImpl::CreateApplicationConnector( |
| InterfaceRequest<ApplicationConnector> application_connector_request) { |
| application_connector_impl_.Duplicate( |
| std::move(application_connector_request)); |
| } |
| |
| } // namespace shell |