desktop-pwas: Allow clients to set the location and extra install flags
Changes BookmarkAppHelper, CrxInstaller, and ConvertWebAppToExtension
so that clients can set the manifest location and extra install flags
that will be used when creating the extension.
Bug: 852244
Change-Id: I59077e015dc80d9461218f3722942e58e9bc5281
Reviewed-on: https://chromium-review.googlesource.com/1170152
Reviewed-by: Devlin <[email protected]>
Commit-Queue: Giovanni Ortuño Urquidi <[email protected]>
Cr-Commit-Position: refs/heads/master@{#582513}
diff --git a/chrome/browser/extensions/convert_web_app_unittest.cc b/chrome/browser/extensions/convert_web_app_unittest.cc
index 673aa4f..84dbd9c 100644
--- a/chrome/browser/extensions/convert_web_app_unittest.cc
+++ b/chrome/browser/extensions/convert_web_app_unittest.cc
@@ -258,7 +258,8 @@
}
scoped_refptr<Extension> extension = ConvertWebAppToExtension(
- web_app, GetTestTime(1978, 12, 11, 0, 0, 0, 0), extensions_dir.GetPath());
+ web_app, GetTestTime(1978, 12, 11, 0, 0, 0, 0), extensions_dir.GetPath(),
+ Extension::NO_FLAGS, Manifest::INTERNAL);
ASSERT_TRUE(extension.get());
base::ScopedTempDir extension_dir;
@@ -266,8 +267,14 @@
EXPECT_TRUE(extension->is_app());
EXPECT_TRUE(extension->is_hosted_app());
+ EXPECT_TRUE(extension->from_bookmark());
EXPECT_FALSE(extension->is_legacy_packaged_app());
+ EXPECT_FALSE(extension->was_installed_by_default());
+ EXPECT_FALSE(extension->was_installed_by_oem());
+ EXPECT_FALSE(extension->from_webstore());
+ EXPECT_EQ(Manifest::INTERNAL, extension->location());
+
EXPECT_EQ("zVvdNZy3Mp7CFU8JVSyXNlDuHdVLbP7fDO3TGVzj/0w=",
extension->public_key());
EXPECT_EQ("oplhagaaipaimkjlbekcdjkffijdockj", extension->id());
@@ -304,7 +311,8 @@
web_app.app_url = GURL("http://aaronboodman.com/gearpad/");
scoped_refptr<Extension> extension = ConvertWebAppToExtension(
- web_app, GetTestTime(1978, 12, 11, 0, 0, 0, 0), extensions_dir.GetPath());
+ web_app, GetTestTime(1978, 12, 11, 0, 0, 0, 0), extensions_dir.GetPath(),
+ Extension::NO_FLAGS, Manifest::INTERNAL);
ASSERT_TRUE(extension.get());
base::ScopedTempDir extension_dir;
@@ -312,8 +320,14 @@
EXPECT_TRUE(extension->is_app());
EXPECT_TRUE(extension->is_hosted_app());
+ EXPECT_TRUE(extension->from_bookmark());
EXPECT_FALSE(extension->is_legacy_packaged_app());
+ EXPECT_FALSE(extension->was_installed_by_default());
+ EXPECT_FALSE(extension->was_installed_by_oem());
+ EXPECT_FALSE(extension->from_webstore());
+ EXPECT_EQ(Manifest::INTERNAL, extension->location());
+
EXPECT_EQ("zVvdNZy3Mp7CFU8JVSyXNlDuHdVLbP7fDO3TGVzj/0w=",
extension->public_key());
EXPECT_EQ("oplhagaaipaimkjlbekcdjkffijdockj", extension->id());
@@ -328,6 +342,52 @@
ASSERT_EQ(0u, extension->web_extent().patterns().size());
}
+TEST(ExtensionFromWebApp, ExtraInstallationFlags) {
+ base::ScopedTempDir extensions_dir;
+ ASSERT_TRUE(extensions_dir.CreateUniqueTempDir());
+
+ WebApplicationInfo web_app;
+ web_app.title = base::ASCIIToUTF16("Gearpad");
+ web_app.app_url = GURL("http://aaronboodman.com/gearpad/");
+
+ scoped_refptr<Extension> extension = ConvertWebAppToExtension(
+ web_app, GetTestTime(1978, 12, 11, 0, 0, 0, 0), extensions_dir.GetPath(),
+ Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_OEM,
+ Manifest::INTERNAL);
+ ASSERT_TRUE(extension.get());
+
+ EXPECT_TRUE(extension->is_app());
+ EXPECT_TRUE(extension->is_hosted_app());
+ EXPECT_TRUE(extension->from_bookmark());
+ EXPECT_FALSE(extension->is_legacy_packaged_app());
+
+ EXPECT_TRUE(extension->was_installed_by_oem());
+ EXPECT_TRUE(extension->from_webstore());
+ EXPECT_FALSE(extension->was_installed_by_default());
+ EXPECT_EQ(Manifest::INTERNAL, extension->location());
+}
+
+TEST(ExtensionFromWebApp, ExternalPolicyLocation) {
+ base::ScopedTempDir extensions_dir;
+ ASSERT_TRUE(extensions_dir.CreateUniqueTempDir());
+
+ WebApplicationInfo web_app;
+ web_app.title = base::ASCIIToUTF16("Gearpad");
+ web_app.app_url = GURL("http://aaronboodman.com/gearpad/");
+
+ scoped_refptr<Extension> extension = ConvertWebAppToExtension(
+ web_app, GetTestTime(1978, 12, 11, 0, 0, 0, 0), extensions_dir.GetPath(),
+ Extension::NO_FLAGS, Manifest::EXTERNAL_POLICY);
+ ASSERT_TRUE(extension.get());
+
+ EXPECT_TRUE(extension->is_app());
+ EXPECT_TRUE(extension->is_hosted_app());
+ EXPECT_TRUE(extension->from_bookmark());
+ EXPECT_FALSE(extension->is_legacy_packaged_app());
+
+ EXPECT_EQ(Manifest::EXTERNAL_POLICY, extension->location());
+}
+
// Tests that a scope not ending in "/" works correctly.
// The tested behavior is unexpected but is working correctly according
// to the Web Manifest spec. https://github.com/w3c/manifest/issues/554
@@ -343,7 +403,8 @@
web_app.scope = GURL("http://aaronboodman.com/gear");
scoped_refptr<Extension> extension = ConvertWebAppToExtension(
- web_app, GetTestTime(1978, 12, 11, 0, 0, 0, 0), extensions_dir.GetPath());
+ web_app, GetTestTime(1978, 12, 11, 0, 0, 0, 0), extensions_dir.GetPath(),
+ Extension::NO_FLAGS, Manifest::INTERNAL);
ASSERT_TRUE(extension.get());
EXPECT_EQ(web_app.scope, GetScopeURLFromBookmarkApp(extension.get()));
}