| // 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 "shell/network_application_loader.h" |
| |
| #include "base/base_paths.h" |
| #include "base/files/file_path.h" |
| #include "base/path_service.h" |
| #include "mojo/public/cpp/application/application_connection.h" |
| #include "mojo/public/cpp/application/application_delegate.h" |
| #include "mojo/public/cpp/application/application_impl.h" |
| #include "mojo/services/network/network_service_impl.h" |
| |
| namespace { |
| base::FilePath GetBasePath() { |
| base::FilePath path; |
| CHECK(PathService::Get(base::DIR_TEMP, &path)); |
| return path.Append(FILE_PATH_LITERAL("network_service")); |
| } |
| } |
| |
| namespace mojo { |
| namespace shell { |
| |
| NetworkApplicationLoader::NetworkApplicationLoader() { |
| } |
| |
| NetworkApplicationLoader::~NetworkApplicationLoader() { |
| } |
| |
| void NetworkApplicationLoader::Load(ApplicationManager* manager, |
| const GURL& url, |
| ScopedMessagePipeHandle shell_handle, |
| LoadCallback callback) { |
| DCHECK(shell_handle.is_valid()); |
| uintptr_t key = reinterpret_cast<uintptr_t>(manager); |
| if (apps_.find(key) == apps_.end()) { |
| scoped_ptr<ApplicationImpl> app( |
| new ApplicationImpl(this, shell_handle.Pass())); |
| apps_.add(key, app.Pass()); |
| } |
| } |
| |
| void NetworkApplicationLoader::OnApplicationError(ApplicationManager* manager, |
| const GURL& url) { |
| apps_.erase(reinterpret_cast<uintptr_t>(manager)); |
| } |
| |
| void NetworkApplicationLoader::Initialize(ApplicationImpl* app) { |
| // The context must be created on the same thread as the network service. |
| context_.reset(new NetworkContext(GetBasePath())); |
| } |
| |
| bool NetworkApplicationLoader::ConfigureIncomingConnection( |
| ApplicationConnection* connection) { |
| connection->AddService(this); |
| return true; |
| } |
| |
| void NetworkApplicationLoader::Create( |
| ApplicationConnection* connection, |
| InterfaceRequest<NetworkService> request) { |
| BindToRequest(new NetworkServiceImpl(connection, context_.get()), &request); |
| } |
| |
| } // namespace shell |
| } // namespace mojo |