summaryrefslogtreecommitdiffstats
path: root/mojo/shell
diff options
context:
space:
mode:
authorsky <sky@chromium.org>2016-02-14 10:08:34 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-14 18:10:02 +0000
commitb03560f2f020c4460a2e1b604b563aa852715237 (patch)
treeb95c48ddded3aacd17d13274641142b4aef502fd /mojo/shell
parent7bf90d0b46086e11a0ba9a73b94ec43d5737d0b6 (diff)
downloadchromium_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.cc3
-rw-r--r--mojo/shell/package_manager.h3
-rw-r--r--mojo/shell/package_manager/package_manager_impl.cc14
-rw-r--r--mojo/shell/package_manager/package_manager_impl.h1
-rw-r--r--mojo/shell/test_package_manager.cc1
-rw-r--r--mojo/shell/test_package_manager.h1
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;