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

Unified Diff: mojo/shell/dynamic_application_loader.cc

Issue 687433002: Remove mojo/shell and (most) service implementations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove mojo/gles2, disable mojo apps in component build Created 6 years, 2 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
« no previous file with comments | « mojo/shell/dynamic_application_loader.h ('k') | mojo/shell/dynamic_application_loader_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/shell/dynamic_application_loader.cc
diff --git a/mojo/shell/dynamic_application_loader.cc b/mojo/shell/dynamic_application_loader.cc
deleted file mode 100644
index 1627aa99a00c8f2405b6f030564fa3fad070cf69..0000000000000000000000000000000000000000
--- a/mojo/shell/dynamic_application_loader.cc
+++ /dev/null
@@ -1,259 +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/shell/dynamic_application_loader.h"
-
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "base/strings/utf_string_conversions.h"
-#include "mojo/common/common_type_converters.h"
-#include "mojo/common/data_pipe_utils.h"
-#include "mojo/services/public/interfaces/network/url_loader.mojom.h"
-#include "mojo/shell/context.h"
-#include "mojo/shell/filename_util.h"
-#include "mojo/shell/switches.h"
-#include "url/url_util.h"
-
-namespace mojo {
-namespace shell {
-
-// Encapsulates loading and running one individual application.
-//
-// Loaders are owned by DynamicApplicationLoader. DynamicApplicationLoader must
-// ensure that all the parameters passed to Loader subclasses stay valid through
-// Loader's lifetime.
-//
-// Async operations are done with WeakPtr to protect against
-// DynamicApplicationLoader going away (and taking all the Loaders with it)
-// while the async operation is outstanding.
-class DynamicApplicationLoader::Loader {
- public:
- Loader(Context* context,
- DynamicServiceRunnerFactory* runner_factory,
- scoped_refptr<ApplicationLoader::LoadCallbacks> load_callbacks,
- const LoaderCompleteCallback& loader_complete_callback)
- : load_callbacks_(load_callbacks),
- loader_complete_callback_(loader_complete_callback),
- context_(context),
- runner_factory_(runner_factory),
- weak_ptr_factory_(this) {}
-
- virtual ~Loader() {}
-
- protected:
- void RunLibrary(const base::FilePath& path, bool path_exists) {
- ScopedMessagePipeHandle shell_handle =
- load_callbacks_->RegisterApplication();
- if (!shell_handle.is_valid()) {
- LoaderComplete();
- return;
- }
-
- if (!path_exists) {
- DVLOG(1) << "Library not started because library path '" << path.value()
- << "' does not exist.";
- LoaderComplete();
- return;
- }
-
- runner_ = runner_factory_->Create(context_);
- runner_->Start(
- path,
- shell_handle.Pass(),
- base::Bind(&Loader::LoaderComplete, weak_ptr_factory_.GetWeakPtr()));
- }
-
- void LoaderComplete() { loader_complete_callback_.Run(this); }
-
- scoped_refptr<ApplicationLoader::LoadCallbacks> load_callbacks_;
- LoaderCompleteCallback loader_complete_callback_;
- Context* context_;
-
- private:
- DynamicServiceRunnerFactory* runner_factory_;
- scoped_ptr<DynamicServiceRunner> runner_;
- base::WeakPtrFactory<Loader> weak_ptr_factory_;
-};
-
-// A loader for local files.
-class DynamicApplicationLoader::LocalLoader : public Loader {
- public:
- LocalLoader(const GURL& url,
- Context* context,
- DynamicServiceRunnerFactory* runner_factory,
- scoped_refptr<ApplicationLoader::LoadCallbacks> load_callbacks,
- const LoaderCompleteCallback& loader_complete_callback)
- : Loader(context,
- runner_factory,
- load_callbacks,
- loader_complete_callback),
- weak_ptr_factory_(this) {
- DCHECK(url.SchemeIsFile());
- url::RawCanonOutputW<1024> output;
- url::DecodeURLEscapeSequences(
- url.path().data(), static_cast<int>(url.path().length()), &output);
- base::string16 decoded_path =
- base::string16(output.data(), output.length());
-#if defined(OS_WIN)
- base::FilePath path(decoded_path);
-#else
- base::FilePath path(base::UTF16ToUTF8(decoded_path));
-#endif
-
- // Async for consistency with network case.
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&LocalLoader::RunLibrary,
- weak_ptr_factory_.GetWeakPtr(),
- path,
- base::PathExists(path)));
- }
-
- ~LocalLoader() override {}
-
- private:
- base::WeakPtrFactory<LocalLoader> weak_ptr_factory_;
-};
-
-// A loader for network files.
-class DynamicApplicationLoader::NetworkLoader : public Loader {
- public:
- NetworkLoader(const GURL& url,
- MimeTypeToURLMap* mime_type_to_url,
- Context* context,
- DynamicServiceRunnerFactory* runner_factory,
- NetworkService* network_service,
- scoped_refptr<ApplicationLoader::LoadCallbacks> load_callbacks,
- const LoaderCompleteCallback& loader_complete_callback)
- : Loader(context,
- runner_factory,
- load_callbacks,
- loader_complete_callback),
- mime_type_to_url_(mime_type_to_url),
- weak_ptr_factory_(this) {
- URLRequestPtr request(URLRequest::New());
- request->url = String::From(url);
- request->auto_follow_redirects = true;
-
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kDisableCache)) {
- request->bypass_cache = true;
- }
-
- network_service->CreateURLLoader(GetProxy(&url_loader_));
- url_loader_->Start(request.Pass(),
- base::Bind(&NetworkLoader::OnLoadComplete,
- weak_ptr_factory_.GetWeakPtr()));
- }
-
- ~NetworkLoader() override {
- if (!file_.empty())
- base::DeleteFile(file_, false);
- }
-
- private:
- void OnLoadComplete(URLResponsePtr response) {
- if (response->error) {
- LOG(ERROR) << "Error (" << response->error->code << ": "
- << response->error->description << ") while fetching "
- << response->url;
- LoaderComplete();
- return;
- }
-
- MimeTypeToURLMap::iterator iter =
- mime_type_to_url_->find(response->mime_type);
- if (iter != mime_type_to_url_->end()) {
- load_callbacks_->LoadWithContentHandler(iter->second, response.Pass());
- return;
- }
-
- base::CreateTemporaryFile(&file_);
- common::CopyToFile(
- response->body.Pass(),
- file_,
- context_->task_runners()->blocking_pool(),
- base::Bind(
- &NetworkLoader::RunLibrary, weak_ptr_factory_.GetWeakPtr(), file_));
- }
-
- MimeTypeToURLMap* mime_type_to_url_;
- URLLoaderPtr url_loader_;
- base::FilePath file_;
- base::WeakPtrFactory<NetworkLoader> weak_ptr_factory_;
-};
-
-DynamicApplicationLoader::DynamicApplicationLoader(
- Context* context,
- scoped_ptr<DynamicServiceRunnerFactory> runner_factory)
- : context_(context),
- runner_factory_(runner_factory.Pass()),
-
- // Unretained() is correct here because DynamicApplicationLoader owns the
- // loaders that we pass this callback to.
- loader_complete_callback_(
- base::Bind(&DynamicApplicationLoader::LoaderComplete,
- base::Unretained(this))) {
-}
-
-DynamicApplicationLoader::~DynamicApplicationLoader() {
-}
-
-void DynamicApplicationLoader::RegisterContentHandler(
- const std::string& mime_type,
- const GURL& content_handler_url) {
- mime_type_to_url_[mime_type] = content_handler_url;
-}
-
-void DynamicApplicationLoader::Load(
- ApplicationManager* manager,
- const GURL& url,
- scoped_refptr<LoadCallbacks> load_callbacks) {
- GURL resolved_url;
- if (url.SchemeIs("mojo")) {
- resolved_url = context_->mojo_url_resolver()->Resolve(url);
- } else {
- resolved_url = url;
- }
-
- if (resolved_url.SchemeIsFile()) {
- loaders_.push_back(new LocalLoader(resolved_url,
- context_,
- runner_factory_.get(),
- load_callbacks,
- loader_complete_callback_));
- return;
- }
-
- if (!network_service_) {
- context_->application_manager()->ConnectToService(
- GURL("mojo:network_service"), &network_service_);
- }
-
- loaders_.push_back(new NetworkLoader(resolved_url,
- &mime_type_to_url_,
- context_,
- runner_factory_.get(),
- network_service_.get(),
- load_callbacks,
- loader_complete_callback_));
-}
-
-void DynamicApplicationLoader::OnApplicationError(ApplicationManager* manager,
- const GURL& url) {
- // TODO(darin): What should we do about service errors? This implies that
- // the app closed its handle to the service manager. Maybe we don't care?
-}
-
-void DynamicApplicationLoader::LoaderComplete(Loader* loader) {
- loaders_.erase(std::find(loaders_.begin(), loaders_.end(), loader));
-}
-
-} // namespace shell
-} // namespace mojo
« no previous file with comments | « mojo/shell/dynamic_application_loader.h ('k') | mojo/shell/dynamic_application_loader_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698