diff options
Diffstat (limited to 'mojo/shell/application_manager/shell_impl.cc')
-rw-r--r-- | mojo/shell/application_manager/shell_impl.cc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/mojo/shell/application_manager/shell_impl.cc b/mojo/shell/application_manager/shell_impl.cc new file mode 100644 index 0000000..ed8c5ea --- /dev/null +++ b/mojo/shell/application_manager/shell_impl.cc @@ -0,0 +1,62 @@ +// 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 "mojo/shell/application_manager/shell_impl.h" + +#include "mojo/common/common_type_converters.h" +#include "mojo/common/url_type_converters.h" +#include "mojo/shell/application_manager/application_manager.h" +#include "third_party/mojo_services/src/content_handler/public/interfaces/content_handler.mojom.h" + +namespace mojo { +namespace shell { + +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_(application.Pass()), + binding_(this) { + binding_.set_error_handler(this); +} + +ShellImpl::~ShellImpl() { +} + +void ShellImpl::InitializeApplication(Array<String> args) { + ShellPtr shell; + binding_.Bind(GetProxy(&shell)); + application_->Initialize(shell.Pass(), args.Pass(), identity_.url.spec()); +} + +void ShellImpl::ConnectToClient(const GURL& requested_url, + const GURL& requestor_url, + InterfaceRequest<ServiceProvider> services, + ServiceProviderPtr exposed_services) { + application_->AcceptConnection(String::From(requestor_url), services.Pass(), + exposed_services.Pass(), requested_url.spec()); +} + +// Shell implementation: +void ShellImpl::ConnectToApplication(const String& app_url, + InterfaceRequest<ServiceProvider> services, + ServiceProviderPtr exposed_services) { + GURL app_gurl(app_url); + if (!app_gurl.is_valid()) { + LOG(ERROR) << "Error: invalid URL: " << app_url; + return; + } + manager_->ConnectToApplication(app_gurl, identity_.url, services.Pass(), + exposed_services.Pass(), base::Closure()); +} + +void ShellImpl::OnConnectionError() { + manager_->OnShellImplError(this); +} + +} // namespace shell +} // namespace mojo |