OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/services/catalog/catalog.h" | 5 #include "mojo/services/catalog/catalog.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/json/json_file_value_serializer.h" | 8 #include "base/json/json_file_value_serializer.h" |
9 #include "base/strings/string_split.h" | 9 #include "base/strings/string_split.h" |
10 #include "base/task_runner_util.h" | 10 #include "base/task_runner_util.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 JSONFileValueDeserializer deserializer(manifest_path); | 23 JSONFileValueDeserializer deserializer(manifest_path); |
24 int error = 0; | 24 int error = 0; |
25 std::string message; | 25 std::string message; |
26 // TODO(beng): probably want to do more detailed error checking. This should | 26 // TODO(beng): probably want to do more detailed error checking. This should |
27 // be done when figuring out if to unblock connection completion. | 27 // be done when figuring out if to unblock connection completion. |
28 return deserializer.Deserialize(&error, &message); | 28 return deserializer.Deserialize(&error, &message); |
29 } | 29 } |
30 | 30 |
31 } // namespace | 31 } // namespace |
32 | 32 |
33 Catalog::Catalog(base::TaskRunner* blocking_pool, | 33 //////////////////////////////////////////////////////////////////////////////// |
34 scoped_ptr<Store> catalog) | 34 // Catalog, public: |
| 35 |
| 36 Catalog::Catalog(base::TaskRunner* blocking_pool, scoped_ptr<Store> store) |
35 : blocking_pool_(blocking_pool), | 37 : blocking_pool_(blocking_pool), |
36 store_(std::move(catalog)), | 38 store_(std::move(store)), |
37 weak_factory_(this) { | 39 weak_factory_(this) { |
38 base::FilePath shell_dir; | 40 base::FilePath shell_dir; |
39 PathService::Get(base::DIR_MODULE, &shell_dir); | 41 PathService::Get(base::DIR_MODULE, &shell_dir); |
40 | 42 |
41 system_package_dir_ = | 43 system_package_dir_ = |
42 mojo::util::FilePathToFileURL(shell_dir).Resolve(std::string()); | 44 mojo::util::FilePathToFileURL(shell_dir).Resolve(std::string()); |
43 system_package_dir_ = | 45 system_package_dir_ = |
44 mojo::util::AddTrailingSlashIfNeeded(system_package_dir_); | 46 mojo::util::AddTrailingSlashIfNeeded(system_package_dir_); |
45 | 47 |
46 DeserializeCatalog(); | 48 DeserializeCatalog(); |
47 } | 49 } |
| 50 |
48 Catalog::~Catalog() {} | 51 Catalog::~Catalog() {} |
49 | 52 |
50 bool Catalog::AcceptConnection(mojo::Connection* connection) { | 53 void Catalog::BindResolver(mojom::ResolverRequest request) { |
51 connection->AddInterface<mojom::Catalog>(this); | |
52 connection->AddInterface<mojom::Resolver>(this); | |
53 if (connection->GetRemoteIdentity().name() == "mojo:shell") | |
54 connection->AddInterface<mojo::shell::mojom::ShellResolver>(this); | |
55 return true; | |
56 } | |
57 | |
58 void Catalog::Create(mojo::Connection* connection, | |
59 mojom::ResolverRequest request) { | |
60 resolver_bindings_.AddBinding(this, std::move(request)); | 54 resolver_bindings_.AddBinding(this, std::move(request)); |
61 } | 55 } |
62 | 56 |
63 void Catalog::Create(mojo::Connection* connection, | 57 void Catalog::BindShellResolver( |
64 mojo::shell::mojom::ShellResolverRequest request) { | 58 mojo::shell::mojom::ShellResolverRequest request) { |
65 shell_resolver_bindings_.AddBinding(this, std::move(request)); | 59 shell_resolver_bindings_.AddBinding(this, std::move(request)); |
66 } | 60 } |
67 | 61 |
68 void Catalog::Create(mojo::Connection* connection, | 62 void Catalog::BindCatalog(mojom::CatalogRequest request) { |
69 mojom::CatalogRequest request) { | |
70 catalog_bindings_.AddBinding(this, std::move(request)); | 63 catalog_bindings_.AddBinding(this, std::move(request)); |
71 } | 64 } |
72 | 65 |
| 66 //////////////////////////////////////////////////////////////////////////////// |
| 67 // Catalog, mojom::Resolver: |
| 68 |
73 void Catalog::ResolveResponse(mojo::URLResponsePtr response, | 69 void Catalog::ResolveResponse(mojo::URLResponsePtr response, |
74 const ResolveResponseCallback& callback) { | 70 const ResolveResponseCallback& callback) { |
75 // TODO(beng): implement. | 71 // TODO(beng): implement. |
76 } | 72 } |
77 | 73 |
78 void Catalog::ResolveInterfaces(mojo::Array<mojo::String> interfaces, | 74 void Catalog::ResolveInterfaces(mojo::Array<mojo::String> interfaces, |
79 const ResolveInterfacesCallback& callback) { | 75 const ResolveInterfacesCallback& callback) { |
80 // TODO(beng): implement. | 76 // TODO(beng): implement. |
81 } | 77 } |
82 | 78 |
83 void Catalog::ResolveMIMEType(const mojo::String& mime_type, | 79 void Catalog::ResolveMIMEType(const mojo::String& mime_type, |
84 const ResolveMIMETypeCallback& callback) { | 80 const ResolveMIMETypeCallback& callback) { |
85 // TODO(beng): implement. | 81 // TODO(beng): implement. |
86 } | 82 } |
87 | 83 |
88 void Catalog::ResolveProtocolScheme( | 84 void Catalog::ResolveProtocolScheme( |
89 const mojo::String& scheme, | 85 const mojo::String& scheme, |
90 const ResolveProtocolSchemeCallback& callback) { | 86 const ResolveProtocolSchemeCallback& callback) { |
91 // TODO(beng): implement. | 87 // TODO(beng): implement. |
92 } | 88 } |
93 | 89 |
| 90 //////////////////////////////////////////////////////////////////////////////// |
| 91 // Catalog, mojo::shell::mojom::ShellResolver: |
| 92 |
94 void Catalog::ResolveMojoName(const mojo::String& mojo_name, | 93 void Catalog::ResolveMojoName(const mojo::String& mojo_name, |
95 const ResolveMojoNameCallback& callback) { | 94 const ResolveMojoNameCallback& callback) { |
96 std::string resolved_name = mojo_name; | 95 std::string resolved_name = mojo_name; |
97 auto alias_iter = mojo_name_aliases_.find(resolved_name); | 96 auto alias_iter = mojo_name_aliases_.find(resolved_name); |
98 if (alias_iter != mojo_name_aliases_.end()) | 97 if (alias_iter != mojo_name_aliases_.end()) |
99 resolved_name = alias_iter->second.first; | 98 resolved_name = alias_iter->second.first; |
100 | 99 |
101 std::string qualifier = mojo::GetNamePath(resolved_name); | 100 std::string qualifier = mojo::GetNamePath(resolved_name); |
102 auto qualifier_iter = qualifiers_.find(resolved_name); | 101 auto qualifier_iter = qualifiers_.find(resolved_name); |
103 if (qualifier_iter != qualifiers_.end()) | 102 if (qualifier_iter != qualifiers_.end()) |
104 qualifier = qualifier_iter->second; | 103 qualifier = qualifier_iter->second; |
105 | 104 |
106 if (IsNameInCatalog(resolved_name)) | 105 if (IsNameInCatalog(resolved_name)) |
107 CompleteResolveMojoName(resolved_name, qualifier, callback); | 106 CompleteResolveMojoName(resolved_name, qualifier, callback); |
108 else | 107 else |
109 AddNameToCatalog(resolved_name, callback); | 108 AddNameToCatalog(resolved_name, callback); |
110 } | 109 } |
111 | 110 |
| 111 //////////////////////////////////////////////////////////////////////////////// |
| 112 // Catalog, mojom::Catalog: |
| 113 |
112 void Catalog::GetEntries(mojo::Array<mojo::String> names, | 114 void Catalog::GetEntries(mojo::Array<mojo::String> names, |
113 const GetEntriesCallback& callback) { | 115 const GetEntriesCallback& callback) { |
114 mojo::Map<mojo::String, mojom::CatalogEntryPtr> entries; | 116 mojo::Map<mojo::String, mojom::CatalogEntryPtr> entries; |
115 std::vector<mojo::String> names_vec = names.PassStorage(); | 117 std::vector<mojo::String> names_vec = names.PassStorage(); |
116 for (const std::string& name : names_vec) { | 118 for (const std::string& name : names_vec) { |
117 if (catalog_.find(name) == catalog_.end()) | 119 if (catalog_.find(name) == catalog_.end()) |
118 continue; | 120 continue; |
119 const Entry& entry = catalog_[name]; | 121 const Entry& entry = catalog_[name]; |
120 mojom::CatalogEntryPtr entry_ptr(mojom::CatalogEntry::New()); | 122 mojom::CatalogEntryPtr entry_ptr(mojom::CatalogEntry::New()); |
121 entry_ptr->display_name = entry.display_name; | 123 entry_ptr->display_name = entry.display_name; |
122 entries[entry.name] = std::move(entry_ptr); | 124 entries[entry.name] = std::move(entry_ptr); |
123 } | 125 } |
124 callback.Run(std::move(entries)); | 126 callback.Run(std::move(entries)); |
125 } | 127 } |
126 | 128 |
| 129 //////////////////////////////////////////////////////////////////////////////// |
| 130 // Catalog, private: |
| 131 |
127 void Catalog::CompleteResolveMojoName( | 132 void Catalog::CompleteResolveMojoName( |
128 const std::string& resolved_name, | 133 const std::string& resolved_name, |
129 const std::string& qualifier, | 134 const std::string& qualifier, |
130 const ResolveMojoNameCallback& callback) { | 135 const ResolveMojoNameCallback& callback) { |
131 auto entry_iter = catalog_.find(resolved_name); | 136 auto entry_iter = catalog_.find(resolved_name); |
132 CHECK(entry_iter != catalog_.end()); | 137 CHECK(entry_iter != catalog_.end()); |
133 | 138 |
134 GURL file_url; | 139 GURL file_url; |
135 std::string type = mojo::GetNameType(resolved_name); | 140 std::string type = mojo::GetNameType(resolved_name); |
136 if (type == "mojo") { | 141 if (type == "mojo") { |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 } | 269 } |
265 SerializeCatalog(); | 270 SerializeCatalog(); |
266 | 271 |
267 auto qualifier_iter = qualifiers_.find(name); | 272 auto qualifier_iter = qualifiers_.find(name); |
268 DCHECK(qualifier_iter != qualifiers_.end()); | 273 DCHECK(qualifier_iter != qualifiers_.end()); |
269 std::string qualifier = qualifier_iter->second; | 274 std::string qualifier = qualifier_iter->second; |
270 CompleteResolveMojoName(name, qualifier, callback); | 275 CompleteResolveMojoName(name, qualifier, callback); |
271 } | 276 } |
272 | 277 |
273 } // namespace catalog | 278 } // namespace catalog |
OLD | NEW |