diff options
author | sky <sky@chromium.org> | 2016-02-14 10:08:34 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-14 18:10:02 +0000 |
commit | b03560f2f020c4460a2e1b604b563aa852715237 (patch) | |
tree | b95c48ddded3aacd17d13274641142b4aef502fd /mojo/shell | |
parent | 7bf90d0b46086e11a0ba9a73b94ec43d5737d0b6 (diff) | |
download | chromium_src-b03560f2f020c4460a2e1b604b563aa852715237.zip chromium_src-b03560f2f020c4460a2e1b604b563aa852715237.tar.gz chromium_src-b03560f2f020c4460a2e1b604b563aa852715237.tar.bz2 |
Couple of changes to shell:
. Adds PackageManager::BuildinAppLoaded(). This is needed else we
don't attempt to read the manifest for apps loaded via
ApplicationLoaders.
. Replaces CHECK in PackageManagerImpl::DeserializeApplication with
early out. The CHECK is problematic in the case of apps referring to
other apps.
. Adds type to mojo_application_manifest as executables need to be
handled differently.
BUG=581539
TEST=none
R=ben@chromium.org
Review URL: https://codereview.chromium.org/1691213003
Cr-Commit-Position: refs/heads/master@{#375388}
Diffstat (limited to 'mojo/shell')
-rw-r--r-- | mojo/shell/application_manager.cc | 3 | ||||
-rw-r--r-- | mojo/shell/package_manager.h | 3 | ||||
-rw-r--r-- | mojo/shell/package_manager/package_manager_impl.cc | 14 | ||||
-rw-r--r-- | mojo/shell/package_manager/package_manager_impl.h | 1 | ||||
-rw-r--r-- | mojo/shell/test_package_manager.cc | 1 | ||||
-rw-r--r-- | mojo/shell/test_package_manager.h | 1 |
6 files changed, 20 insertions, 3 deletions
diff --git a/mojo/shell/application_manager.cc b/mojo/shell/application_manager.cc index b8dda51..4912803 100644 --- a/mojo/shell/application_manager.cc +++ b/mojo/shell/application_manager.cc @@ -96,7 +96,8 @@ void ApplicationManager::ConnectToApplication( ApplicationLoader* loader = GetLoaderForURL(params->target().url()); if (loader) { - GURL url = params->target().url(); + const GURL url = params->target().url(); + package_manager_->BuiltinAppLoaded(url); loader->Load(url, CreateAndConnectToInstance(std::move(params), nullptr)); return; } diff --git a/mojo/shell/package_manager.h b/mojo/shell/package_manager.h index 80b5b8b..998cc73 100644 --- a/mojo/shell/package_manager.h +++ b/mojo/shell/package_manager.h @@ -31,6 +31,9 @@ class PackageManager { // associated ApplicationManager. virtual void SetApplicationManager(ApplicationManager* manager) = 0; + // Called when an app is loaded via an ApplicationLoader. + virtual void BuiltinAppLoaded(const GURL& url) = 0; + // Asks the delegate to fetch the specified url. // TODO(beng): figure out how not to expose Fetcher at all at this layer. virtual void FetchRequest( diff --git a/mojo/shell/package_manager/package_manager_impl.cc b/mojo/shell/package_manager/package_manager_impl.cc index 21f00a4..c06e9b3 100644 --- a/mojo/shell/package_manager/package_manager_impl.cc +++ b/mojo/shell/package_manager/package_manager_impl.cc @@ -131,6 +131,12 @@ void PackageManagerImpl::SetApplicationManager(ApplicationManager* manager) { application_manager_ = manager; } +void PackageManagerImpl::BuiltinAppLoaded(const GURL& url) { + // TODO(beng): Determine if this is in the right place, and block + // establishing the connection on receiving a complete manifest. + EnsureURLInCatalog(url); +} + void PackageManagerImpl::FetchRequest( URLRequestPtr request, const Fetcher::FetchCallback& loader_callback) { @@ -299,7 +305,7 @@ void PackageManagerImpl::OnContentHandlerConnectionClosed( } void PackageManagerImpl::EnsureURLInCatalog(const GURL& url) { - if (IsURLInCatalog(url.spec())) + if (IsURLInCatalog(url.spec()) || !url_resolver_) return; GURL manifest_url = url_resolver_->ResolveMojoManifest(url); @@ -348,7 +354,11 @@ void PackageManagerImpl::SerializeCatalog() { const ApplicationInfo& PackageManagerImpl::DeserializeApplication( const base::DictionaryValue* dictionary) { ApplicationInfo info = BuildApplicationInfoFromDictionary(*dictionary); - CHECK(catalog_.find(info.url) == catalog_.end()); + // If another app refers to this app, then we already added an entry for + // |info| as a result of reading the first apps manifest. + if (catalog_.count(info.url)) + return catalog_[info.url]; + catalog_[info.url] = info; if (dictionary->HasKey("applications")) { diff --git a/mojo/shell/package_manager/package_manager_impl.h b/mojo/shell/package_manager/package_manager_impl.h index ee215a6..0bbc01c 100644 --- a/mojo/shell/package_manager/package_manager_impl.h +++ b/mojo/shell/package_manager/package_manager_impl.h @@ -90,6 +90,7 @@ class PackageManagerImpl : public PackageManager { // Overridden from PackageManager: void SetApplicationManager(ApplicationManager* manager) override; + void BuiltinAppLoaded(const GURL& url) override; void FetchRequest( URLRequestPtr request, const Fetcher::FetchCallback& loader_callback) override; diff --git a/mojo/shell/test_package_manager.cc b/mojo/shell/test_package_manager.cc index 3947b52..84a9d18 100644 --- a/mojo/shell/test_package_manager.cc +++ b/mojo/shell/test_package_manager.cc @@ -14,6 +14,7 @@ TestPackageManager::TestPackageManager() {} TestPackageManager::~TestPackageManager() {} void TestPackageManager::SetApplicationManager(ApplicationManager* manager) {} +void TestPackageManager::BuiltinAppLoaded(const GURL& url) {} void TestPackageManager::FetchRequest( URLRequestPtr request, const Fetcher::FetchCallback& loader_callback) {} diff --git a/mojo/shell/test_package_manager.h b/mojo/shell/test_package_manager.h index fc05576..267a37a 100644 --- a/mojo/shell/test_package_manager.h +++ b/mojo/shell/test_package_manager.h @@ -22,6 +22,7 @@ class TestPackageManager : public PackageManager { private: // Overridden from PackageManager: void SetApplicationManager(ApplicationManager* manager) override; + void BuiltinAppLoaded(const GURL& url) override; void FetchRequest( URLRequestPtr request, const Fetcher::FetchCallback& loader_callback) override; |