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

Unified Diff: mojo/services/catalog/catalog.cc

Issue 1878893002: Move //mojo/services tracing & catalog to //services (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@63move
Patch Set: . Created 4 years, 8 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/services/catalog/catalog.h ('k') | mojo/services/catalog/data/capabilities » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/services/catalog/catalog.cc
diff --git a/mojo/services/catalog/catalog.cc b/mojo/services/catalog/catalog.cc
deleted file mode 100644
index dd679f975d7c2022442ef6f66d43a9284241873c..0000000000000000000000000000000000000000
--- a/mojo/services/catalog/catalog.cc
+++ /dev/null
@@ -1,282 +0,0 @@
-// Copyright 2016 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/services/catalog/catalog.h"
-
-#include "base/bind.h"
-#include "base/json/json_file_value_serializer.h"
-#include "base/json/json_reader.h"
-#include "base/strings/string_split.h"
-#include "base/task_runner_util.h"
-#include "base/thread_task_runner_handle.h"
-#include "mojo/common/url_type_converters.h"
-#include "mojo/services/catalog/entry.h"
-#include "mojo/services/catalog/manifest_provider.h"
-#include "mojo/services/catalog/store.h"
-#include "services/shell/public/cpp/names.h"
-#include "url/gurl.h"
-#include "url/url_util.h"
-
-namespace catalog {
-namespace {
-
-base::FilePath GetManifestPath(const base::FilePath& package_dir,
- const std::string& name) {
- // TODO(beng): think more about how this should be done for exe targets.
- std::string type = mojo::GetNameType(name);
- std::string path = mojo::GetNamePath(name);
- if (type == mojo::kNameType_Mojo) {
- return package_dir.AppendASCII("Mojo Applications").AppendASCII(
- path + "/manifest.json");
- }
- if (type == mojo::kNameType_Exe)
- return package_dir.AppendASCII(path + "_manifest.json");
- return base::FilePath();
-}
-
-base::FilePath GetPackagePath(const base::FilePath& package_dir,
- const std::string& name) {
- std::string type = mojo::GetNameType(name);
- if (type == mojo::kNameType_Mojo) {
- // It's still a mojo: URL, use the default mapping scheme.
- const std::string host = mojo::GetNamePath(name);
- return package_dir.AppendASCII("Mojo Applications").AppendASCII(
- host + "/" + host + ".mojo");
- }
- if (type == mojo::kNameType_Exe) {
-#if defined OS_WIN
- std::string extension = ".exe";
-#else
- std::string extension;
-#endif
- return package_dir.AppendASCII(mojo::GetNamePath(name) + extension);
- }
- return base::FilePath();
-}
-
-scoped_ptr<ReadManifestResult> ProcessManifest(
- const base::FilePath& user_package_dir,
- const base::FilePath& system_package_dir,
- const std::string& name,
- scoped_ptr<base::Value> manifest_root) {
- scoped_ptr<Entry> entry(new Entry(name));
- if (manifest_root) {
- const base::DictionaryValue* dictionary = nullptr;
- CHECK(manifest_root->GetAsDictionary(&dictionary));
- entry = Entry::Deserialize(*dictionary);
- }
- entry->set_path(GetPackagePath(system_package_dir, name));
-
- scoped_ptr<ReadManifestResult> result(new ReadManifestResult);
- // NOTE: This TypeConverter must run on a thread which allows IO.
- result->resolve_result = mojo::shell::mojom::ResolveResult::From(*entry);
- result->catalog_entry = std::move(entry);
- result->package_dir = system_package_dir;
- return result;
-}
-
-scoped_ptr<ReadManifestResult> ReadManifest(
- const base::FilePath& user_package_dir,
- const base::FilePath& system_package_dir,
- const std::string& name) {
- base::FilePath manifest_path = GetManifestPath(system_package_dir, name);
- JSONFileValueDeserializer deserializer(manifest_path);
- int error = 0;
- std::string message;
-
- // TODO(beng): probably want to do more detailed error checking. This should
- // be done when figuring out if to unblock connection completion.
- return ProcessManifest(user_package_dir, system_package_dir, name,
- deserializer.Deserialize(&error, &message));
-}
-
-void AddEntryToMap(const Entry& entry,
- mojo::Map<mojo::String, mojom::CatalogEntryPtr>* map) {
- mojom::CatalogEntryPtr entry_ptr(mojom::CatalogEntry::New());
- entry_ptr->display_name = entry.display_name();
- (*map)[entry.name()] = std::move(entry_ptr);
-}
-
-} // namespace
-
-ReadManifestResult::ReadManifestResult() {}
-ReadManifestResult::~ReadManifestResult() {}
-
-////////////////////////////////////////////////////////////////////////////////
-// Catalog, public:
-
-Catalog::Catalog(scoped_ptr<Store> store,
- base::TaskRunner* file_task_runner,
- EntryCache* system_catalog,
- ManifestProvider* manifest_provider)
- : manifest_provider_(manifest_provider),
- store_(std::move(store)),
- file_task_runner_(file_task_runner),
- system_catalog_(system_catalog),
- weak_factory_(this) {
- PathService::Get(base::DIR_MODULE, &system_package_dir_);
- DeserializeCatalog();
-}
-
-Catalog::~Catalog() {}
-
-void Catalog::BindResolver(mojom::ResolverRequest request) {
- resolver_bindings_.AddBinding(this, std::move(request));
-}
-
-void Catalog::BindShellResolver(
- mojo::shell::mojom::ShellResolverRequest request) {
- shell_resolver_bindings_.AddBinding(this, std::move(request));
-}
-
-void Catalog::BindCatalog(mojom::CatalogRequest request) {
- catalog_bindings_.AddBinding(this, std::move(request));
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Catalog, mojom::Resolver:
-
-void Catalog::ResolveInterfaces(mojo::Array<mojo::String> interfaces,
- const ResolveInterfacesCallback& callback) {
- // TODO(beng): implement.
-}
-
-void Catalog::ResolveMIMEType(const mojo::String& mime_type,
- const ResolveMIMETypeCallback& callback) {
- // TODO(beng): implement.
-}
-
-void Catalog::ResolveProtocolScheme(
- const mojo::String& scheme,
- const ResolveProtocolSchemeCallback& callback) {
- // TODO(beng): implement.
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Catalog, mojo::shell::mojom::ShellResolver:
-
-void Catalog::ResolveMojoName(const mojo::String& mojo_name,
- const ResolveMojoNameCallback& callback) {
- std::string type = mojo::GetNameType(mojo_name);
- if (type != "mojo" && type != "exe") {
- scoped_ptr<Entry> entry(new Entry(mojo_name));
- callback.Run(mojo::shell::mojom::ResolveResult::From(*entry));
- return;
- }
-
- auto entry = user_catalog_.find(mojo_name);
- if (entry != user_catalog_.end()) {
- callback.Run(mojo::shell::mojom::ResolveResult::From(*entry->second));
- return;
- }
- entry = system_catalog_->find(mojo_name);
- if (entry != system_catalog_->end()) {
- callback.Run(mojo::shell::mojom::ResolveResult::From(*entry->second));
- return;
- }
-
- std::string manifest_contents;
- if (manifest_provider_ &&
- manifest_provider_->GetApplicationManifest(mojo_name.To<std::string>(),
- &manifest_contents)) {
- scoped_ptr<base::Value> manifest_root =
- base::JSONReader::Read(manifest_contents);
- base::PostTaskAndReplyWithResult(
- file_task_runner_, FROM_HERE,
- base::Bind(&ProcessManifest, user_package_dir_, system_package_dir_,
- mojo_name, base::Passed(&manifest_root)),
- base::Bind(&Catalog::OnReadManifest, weak_factory_.GetWeakPtr(),
- mojo_name, callback));
- } else {
- base::PostTaskAndReplyWithResult(
- file_task_runner_, FROM_HERE,
- base::Bind(&ReadManifest, user_package_dir_, system_package_dir_,
- mojo_name),
- base::Bind(&Catalog::OnReadManifest, weak_factory_.GetWeakPtr(),
- mojo_name, callback));
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Catalog, mojom::Catalog:
-
-void Catalog::GetEntries(mojo::Array<mojo::String> names,
- const GetEntriesCallback& callback) {
- mojo::Map<mojo::String, mojom::CatalogEntryPtr> entries;
- if (names.is_null()) {
- for (const auto& entry : user_catalog_)
- AddEntryToMap(*entry.second, &entries);
- for (const auto& entry : *system_catalog_)
- AddEntryToMap(*entry.second, &entries);
- } else {
- std::vector<mojo::String> names_vec = names.PassStorage();
- for (const std::string& name : names_vec) {
- Entry* entry = nullptr;
- if (user_catalog_.find(name) != user_catalog_.end())
- entry = user_catalog_[name].get();
- else if (system_catalog_->find(name) != system_catalog_->end())
- entry = (*system_catalog_)[name].get();
- else
- continue;
- AddEntryToMap(*entry, &entries);
- }
- }
- callback.Run(std::move(entries));
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Catalog, private:
-
-void Catalog::DeserializeCatalog() {
- if (!store_)
- return;
- const base::ListValue* catalog = store_->GetStore();
- CHECK(catalog);
- // TODO(sky): make this handle aliases.
- // TODO(beng): implement this properly!
- for (auto it = catalog->begin(); it != catalog->end(); ++it) {
- const base::DictionaryValue* dictionary = nullptr;
- const base::Value* v = *it;
- CHECK(v->GetAsDictionary(&dictionary));
- scoped_ptr<Entry> entry = Entry::Deserialize(*dictionary);
- if (entry)
- user_catalog_[entry->name()] = std::move(entry);
- }
-}
-
-void Catalog::SerializeCatalog() {
- // TODO(beng): system catalog?
- scoped_ptr<base::ListValue> catalog(new base::ListValue);
- for (const auto& entry : user_catalog_)
- catalog->Append(entry.second->Serialize());
- if (store_)
- store_->UpdateStore(std::move(catalog));
-}
-
-// static
-void Catalog::OnReadManifest(base::WeakPtr<Catalog> catalog,
- const std::string& name,
- const ResolveMojoNameCallback& callback,
- scoped_ptr<ReadManifestResult> result) {
- callback.Run(std::move(result ->resolve_result));
- if (catalog) {
- catalog->AddEntryToCatalog(
- std::move(result->catalog_entry),
- result->package_dir == catalog->system_package_dir_);
- }
-}
-
-void Catalog::AddEntryToCatalog(scoped_ptr<Entry> entry,
- bool is_system_catalog) {
- DCHECK(entry);
- EntryCache* catalog = is_system_catalog ? system_catalog_ : &user_catalog_;
- if (catalog->end() != catalog->find(entry->name()))
- return;
- for (auto child : entry->applications())
- AddEntryToCatalog(make_scoped_ptr(child), is_system_catalog);
- (*catalog)[entry->name()] = std::move(entry);
- SerializeCatalog();
-}
-
-} // namespace catalog
« no previous file with comments | « mojo/services/catalog/catalog.h ('k') | mojo/services/catalog/data/capabilities » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698