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

Side by Side Diff: mojo/services/package_manager/package_manager.h

Issue 1743473002: Change Mojo URLs to structured names (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@18collapse
Patch Set: . Created 4 years, 10 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 unified diff | Download patch
OLDNEW
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 #ifndef MOJO_SERVICES_PACKAGE_MANAGER_PACKAGE_MANAGER_H_ 5 #ifndef MOJO_SERVICES_PACKAGE_MANAGER_PACKAGE_MANAGER_H_
6 #define MOJO_SERVICES_PACKAGE_MANAGER_PACKAGE_MANAGER_H_ 6 #define MOJO_SERVICES_PACKAGE_MANAGER_PACKAGE_MANAGER_H_
7 7
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
(...skipping 11 matching lines...) Expand all
22 using AllowedInterfaces = std::set<std::string>; 22 using AllowedInterfaces = std::set<std::string>;
23 // A map of allowed applications to allowed interface sets. See shell.mojom for 23 // A map of allowed applications to allowed interface sets. See shell.mojom for
24 // more details. 24 // more details.
25 using CapabilityFilter = std::map<std::string, AllowedInterfaces>; 25 using CapabilityFilter = std::map<std::string, AllowedInterfaces>;
26 26
27 // Static information about an application package known to the PackageManager. 27 // Static information about an application package known to the PackageManager.
28 struct ApplicationInfo { 28 struct ApplicationInfo {
29 ApplicationInfo(); 29 ApplicationInfo();
30 ~ApplicationInfo(); 30 ~ApplicationInfo();
31 31
32 GURL url;
33 std::string name; 32 std::string name;
33 std::string display_name;
34 CapabilityFilter base_filter; 34 CapabilityFilter base_filter;
35 }; 35 };
36 36
37 // Implemented by an object that provides storage for the application catalog 37 // Implemented by an object that provides storage for the application catalog
38 // (e.g. in Chrome, preferences). The PackageManagerImpl is the canonical owner 38 // (e.g. in Chrome, preferences). The PackageManagerImpl is the canonical owner
39 // of the contents of the store, so no one else must modify its contents. 39 // of the contents of the store, so no one else must modify its contents.
40 class ApplicationCatalogStore { 40 class ApplicationCatalogStore {
41 public: 41 public:
42 // Value is a string. 42 // Value is a string.
43 static const char kUrlKey[]; 43 static const char kNameKey[];
44 // Value is a string. 44 // Value is a string.
45 static const char kNameKey[]; 45 static const char kDisplayNameKey[];
46 // Value is a dictionary that maps from the filter to a list of string 46 // Value is a dictionary that maps from the filter to a list of string
47 // interfaces. 47 // interfaces.
48 static const char kCapabilitiesKey[]; 48 static const char kCapabilitiesKey[];
49 49
50 virtual ~ApplicationCatalogStore() {} 50 virtual ~ApplicationCatalogStore() {}
51 51
52 // Called during initialization to construct the PackageManagerImpl's catalog. 52 // Called during initialization to construct the PackageManagerImpl's catalog.
53 // Returns a serialized list of the apps. Each entry in the returned list 53 // Returns a serialized list of the apps. Each entry in the returned list
54 // corresponds to an app (as a dictionary). Each dictionary has a url, name 54 // corresponds to an app (as a dictionary). Each dictionary has a name,
55 // and capabilities. The return value is owned by the caller. 55 // display name and capabilities. The return value is owned by the caller.
56 virtual const base::ListValue* GetStore() = 0; 56 virtual const base::ListValue* GetStore() = 0;
57 57
58 // Write the catalog to the store. Called when the PackageManagerImpl learns 58 // Write the catalog to the store. Called when the PackageManagerImpl learns
59 // of a newly encountered application. 59 // of a newly encountered application.
60 virtual void UpdateStore(scoped_ptr<base::ListValue> store) = 0; 60 virtual void UpdateStore(scoped_ptr<base::ListValue> store) = 0;
61 }; 61 };
62 62
63 class PackageManager : public mojo::ShellClient, 63 class PackageManager : public mojo::ShellClient,
64 public mojo::InterfaceFactory<mojom::Resolver>, 64 public mojo::InterfaceFactory<mojom::Resolver>,
65 public mojo::InterfaceFactory<mojom::ShellResolver>, 65 public mojo::InterfaceFactory<mojom::ShellResolver>,
66 public mojo::InterfaceFactory<mojom::Catalog>, 66 public mojo::InterfaceFactory<mojom::Catalog>,
67 public mojom::Resolver, 67 public mojom::Resolver,
68 public mojom::ShellResolver, 68 public mojom::ShellResolver,
69 public mojom::Catalog { 69 public mojom::Catalog {
70 public: 70 public:
71 // If |register_schemes| is true, mojo: and exe: schemes are registered as 71 // If |register_schemes| is true, mojo: and exe: schemes are registered as
72 // "standard". 72 // "standard".
73 PackageManager(base::TaskRunner* blocking_pool, 73 PackageManager(base::TaskRunner* blocking_pool,
74 bool register_schemes,
75 scoped_ptr<ApplicationCatalogStore> catalog); 74 scoped_ptr<ApplicationCatalogStore> catalog);
76 ~PackageManager() override; 75 ~PackageManager() override;
77 76
78 private: 77 private:
79 using MojoURLAliasMap = std::map<GURL, std::pair<GURL, std::string>>; 78 using MojoNameAliasMap =
79 std::map<std::string, std::pair<std::string, std::string>>;
80 80
81 // mojo::ShellClient: 81 // mojo::ShellClient:
82 bool AcceptConnection(mojo::Connection* connection) override; 82 bool AcceptConnection(mojo::Connection* connection) override;
83 83
84 // mojo::InterfaceFactory<mojom::Resolver>: 84 // mojo::InterfaceFactory<mojom::Resolver>:
85 void Create(mojo::Connection* connection, 85 void Create(mojo::Connection* connection,
86 mojom::ResolverRequest request) override; 86 mojom::ResolverRequest request) override;
87 87
88 // mojo::InterfaceFactory<mojom::ShellResolver>: 88 // mojo::InterfaceFactory<mojom::ShellResolver>:
89 void Create(mojo::Connection* connection, 89 void Create(mojo::Connection* connection,
90 mojom::ShellResolverRequest request) override; 90 mojom::ShellResolverRequest request) override;
91 91
92 // mojo::InterfaceFactory<mojom::Catalog>: 92 // mojo::InterfaceFactory<mojom::Catalog>:
93 void Create(mojo::Connection* connection, 93 void Create(mojo::Connection* connection,
94 mojom::CatalogRequest request) override; 94 mojom::CatalogRequest request) override;
95 95
96 // mojom::Resolver: 96 // mojom::Resolver:
97 void ResolveResponse( 97 void ResolveResponse(
98 mojo::URLResponsePtr response, 98 mojo::URLResponsePtr response,
99 const ResolveResponseCallback& callback) override; 99 const ResolveResponseCallback& callback) override;
100 void ResolveInterfaces(mojo::Array<mojo::String> interfaces, 100 void ResolveInterfaces(mojo::Array<mojo::String> interfaces,
101 const ResolveInterfacesCallback& callback) override; 101 const ResolveInterfacesCallback& callback) override;
102 void ResolveMIMEType(const mojo::String& mime_type, 102 void ResolveMIMEType(const mojo::String& mime_type,
103 const ResolveMIMETypeCallback& callback) override; 103 const ResolveMIMETypeCallback& callback) override;
104 void ResolveProtocolScheme( 104 void ResolveProtocolScheme(
105 const mojo::String& scheme, 105 const mojo::String& scheme,
106 const ResolveProtocolSchemeCallback& callback) override; 106 const ResolveProtocolSchemeCallback& callback) override;
107 107
108 // mojom::ShellResolver: 108 // mojom::ShellResolver:
109 void ResolveMojoURL(const mojo::String& mojo_url, 109 void ResolveMojoName(const mojo::String& mojo_name,
110 const ResolveMojoURLCallback& callback) override; 110 const ResolveMojoNameCallback& callback) override;
111 111
112 // mojom::Catalog: 112 // mojom::Catalog:
113 void GetEntries(mojo::Array<mojo::String> urls, 113 void GetEntries(mojo::Array<mojo::String> names,
114 const GetEntriesCallback& callback) override; 114 const GetEntriesCallback& callback) override;
115 115
116 // Completes resolving a Mojo URL from the Shell after the resolved URL has 116 // Completes resolving a Mojo name from the Shell after the resolved name has
117 // been added to the catalog and the manifest read. 117 // been added to the catalog and the manifest read.
118 void CompleteResolveMojoURL(const GURL& resolved_url, 118 void CompleteResolveMojoName(const std::string& resolved_name,
119 const std::string& qualifier, 119 const std::string& qualifier,
120 const ResolveMojoURLCallback& callback); 120 const ResolveMojoNameCallback& callback);
121 121
122 bool IsURLInCatalog(const GURL& url) const; 122 bool IsNameInCatalog(const std::string& name) const;
123 123
124 // Called from ResolveMojoURL(). 124 // Called from ResolveMojoName().
125 // If |url| is not in the catalog, attempts to load a manifest for it. 125 // If |name| is not in the catalog, attempts to load a manifest for it.
126 void EnsureURLInCatalog(const GURL& url, 126 void EnsureNameInCatalog(const std::string& name,
127 const std::string& qualifier, 127 const std::string& qualifier,
128 const ResolveMojoURLCallback& callback); 128 const ResolveMojoNameCallback& callback);
129 129
130 // Populate/serialize the catalog from/to the supplied store. 130 // Populate/serialize the catalog from/to the supplied store.
131 void DeserializeCatalog(); 131 void DeserializeCatalog();
132 void SerializeCatalog(); 132 void SerializeCatalog();
133 133
134 // Construct a catalog entry from |dictionary|. 134 // Construct a catalog entry from |dictionary|.
135 const ApplicationInfo& DeserializeApplication( 135 const ApplicationInfo& DeserializeApplication(
136 const base::DictionaryValue* dictionary); 136 const base::DictionaryValue* dictionary);
137 137
138 GURL GetManifestURL(const GURL& url); 138 GURL GetManifestURL(const std::string& name);
139 139
140 // Called once the manifest has been read. |pm| may be null at this point, 140 // Called once the manifest has been read. |pm| may be null at this point,
141 // but |callback| must be run. 141 // but |callback| must be run.
142 static void OnReadManifest(base::WeakPtr<PackageManager> pm, 142 static void OnReadManifest(base::WeakPtr<PackageManager> pm,
143 const GURL& url, 143 const std::string& name,
144 const std::string& qualifier, 144 const std::string& qualifier,
145 const ResolveMojoURLCallback& callback, 145 const ResolveMojoNameCallback& callback,
146 scoped_ptr<base::Value> manifest); 146 scoped_ptr<base::Value> manifest);
147 147
148 // Called once the manifest is read and |this| hasn't been deleted. 148 // Called once the manifest is read and |this| hasn't been deleted.
149 void OnReadManifestImpl(const GURL& url, 149 void OnReadManifestImpl(const std::string& name,
150 const std::string& qualifier, 150 const std::string& qualifier,
151 const ResolveMojoURLCallback& callback, 151 const ResolveMojoNameCallback& callback,
152 scoped_ptr<base::Value> manifest); 152 scoped_ptr<base::Value> manifest);
153 153
154 base::TaskRunner* blocking_pool_; 154 base::TaskRunner* blocking_pool_;
155 GURL system_package_dir_; 155 GURL system_package_dir_;
156 156
157 mojo::BindingSet<mojom::Resolver> resolver_bindings_; 157 mojo::BindingSet<mojom::Resolver> resolver_bindings_;
158 mojo::BindingSet<mojom::ShellResolver> shell_resolver_bindings_; 158 mojo::BindingSet<mojom::ShellResolver> shell_resolver_bindings_;
159 mojo::BindingSet<mojom::Catalog> catalog_bindings_; 159 mojo::BindingSet<mojom::Catalog> catalog_bindings_;
160 160
161 scoped_ptr<ApplicationCatalogStore> catalog_store_; 161 scoped_ptr<ApplicationCatalogStore> catalog_store_;
162 std::map<GURL, ApplicationInfo> catalog_; 162 std::map<std::string, ApplicationInfo> catalog_;
163 163
164 // Used when an app handles multiple urls. Maps from app (as url) to url of 164 // Used when an app handles multiple names. Maps from app (as name) to name of
165 // app that is responsible for handling it. The value is a pair of the 165 // app that is responsible for handling it. The value is a pair of the name of
166 // url of the handler along with a qualifier. 166 // the handler along with a qualifier.
167 MojoURLAliasMap mojo_url_aliases_; 167 MojoNameAliasMap mojo_name_aliases_;
168 168
169 base::WeakPtrFactory<PackageManager> weak_factory_; 169 base::WeakPtrFactory<PackageManager> weak_factory_;
170 170
171 DISALLOW_COPY_AND_ASSIGN(PackageManager); 171 DISALLOW_COPY_AND_ASSIGN(PackageManager);
172 }; 172 };
173 173
174 } // namespace package_manager 174 } // namespace package_manager
175 175
176 #endif // MOJO_SERVICES_PACKAGE_MANAGER_PACKAGE_MANAGER_H_ 176 #endif // MOJO_SERVICES_PACKAGE_MANAGER_PACKAGE_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698