summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions/extension_manifests_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/common/extensions/extension_manifests_unittest.cc')
-rw-r--r--chrome/common/extensions/extension_manifests_unittest.cc131
1 files changed, 80 insertions, 51 deletions
diff --git a/chrome/common/extensions/extension_manifests_unittest.cc b/chrome/common/extensions/extension_manifests_unittest.cc
index ac56f70..3a89166 100644
--- a/chrome/common/extensions/extension_manifests_unittest.cc
+++ b/chrome/common/extensions/extension_manifests_unittest.cc
@@ -37,53 +37,48 @@ class ExtensionManifestTest : public testing::Test {
return static_cast<DictionaryValue*>(serializer.Deserialize(NULL, error));
}
- Extension* LoadExtensionWithLocation(DictionaryValue* value,
- Extension::Location location,
- std::string* error) {
+ scoped_refptr<Extension> LoadExtensionWithLocation(
+ DictionaryValue* value,
+ Extension::Location location,
+ std::string* error) {
FilePath path;
PathService::Get(chrome::DIR_TEST_DATA, &path);
path = path.AppendASCII("extensions").AppendASCII("manifest_tests");
-
- scoped_ptr<Extension> extension(new Extension(path.DirName()));
- extension->set_location(location);
-
- if (!extension->InitFromValue(*value, false, error))
- return NULL;
-
- return extension.release();
+ return Extension::Create(path.DirName(), location, *value, false, error);
}
- Extension* LoadExtension(const std::string& name,
- std::string* error) {
+ scoped_refptr<Extension> LoadExtension(const std::string& name,
+ std::string* error) {
return LoadExtensionWithLocation(name, Extension::INTERNAL, error);
}
- Extension* LoadExtension(DictionaryValue* value,
- std::string* error) {
+ scoped_refptr<Extension> LoadExtension(DictionaryValue* value,
+ std::string* error) {
return LoadExtensionWithLocation(value, Extension::INTERNAL, error);
}
- Extension* LoadExtensionWithLocation(const std::string& name,
- Extension::Location location,
- std::string* error) {
+ scoped_refptr<Extension> LoadExtensionWithLocation(
+ const std::string& name,
+ Extension::Location location,
+ std::string* error) {
scoped_ptr<DictionaryValue> value(LoadManifestFile(name, error));
if (!value.get())
return NULL;
return LoadExtensionWithLocation(value.get(), location, error);
}
- Extension* LoadAndExpectSuccess(const std::string& name) {
+ scoped_refptr<Extension> LoadAndExpectSuccess(const std::string& name) {
std::string error;
- Extension* extension = LoadExtension(name, &error);
+ scoped_refptr<Extension> extension = LoadExtension(name, &error);
EXPECT_TRUE(extension) << name;
EXPECT_EQ("", error) << name;
return extension;
}
- Extension* LoadAndExpectSuccess(DictionaryValue* manifest,
- const std::string& name) {
+ scoped_refptr<Extension> LoadAndExpectSuccess(DictionaryValue* manifest,
+ const std::string& name) {
std::string error;
- Extension* extension = LoadExtension(manifest, &error);
+ scoped_refptr<Extension> extension = LoadExtension(manifest, &error);
EXPECT_TRUE(extension) << "Unexpected success for " << name;
EXPECT_EQ("", error) << "Unexpected no error for " << name;
return extension;
@@ -103,7 +98,7 @@ class ExtensionManifestTest : public testing::Test {
void LoadAndExpectError(const std::string& name,
const std::string& expected_error) {
std::string error;
- scoped_ptr<Extension> extension(LoadExtension(name, &error));
+ scoped_refptr<Extension> extension(LoadExtension(name, &error));
VerifyExpectedError(extension.get(), name, error, expected_error);
}
@@ -111,7 +106,7 @@ class ExtensionManifestTest : public testing::Test {
const std::string& name,
const std::string& expected_error) {
std::string error;
- scoped_ptr<Extension> extension(LoadExtension(manifest, &error));
+ scoped_refptr<Extension> extension(LoadExtension(manifest, &error));
VerifyExpectedError(extension.get(), name, error, expected_error);
}
@@ -119,7 +114,7 @@ class ExtensionManifestTest : public testing::Test {
};
TEST_F(ExtensionManifestTest, ValidApp) {
- scoped_ptr<Extension> extension(LoadAndExpectSuccess("valid_app.json"));
+ scoped_refptr<Extension> extension(LoadAndExpectSuccess("valid_app.json"));
ASSERT_EQ(2u, extension->web_extent().patterns().size());
EXPECT_EQ("http://www.google.com/mail/*",
extension->web_extent().patterns()[0].GetAsString());
@@ -145,7 +140,7 @@ TEST_F(ExtensionManifestTest, AppWebUrls) {
ExtensionErrorUtils::FormatErrorMessage(
errors::kInvalidWebURL, "0"));
- scoped_ptr<Extension> extension(
+ scoped_refptr<Extension> extension(
LoadAndExpectSuccess("web_urls_default.json"));
ASSERT_EQ(1u, extension->web_extent().patterns().size());
EXPECT_EQ("*://www.google.com/*",
@@ -153,21 +148,21 @@ TEST_F(ExtensionManifestTest, AppWebUrls) {
}
TEST_F(ExtensionManifestTest, AppLaunchContainer) {
- scoped_ptr<Extension> extension;
+ scoped_refptr<Extension> extension;
- extension.reset(LoadAndExpectSuccess("launch_tab.json"));
+ extension = LoadAndExpectSuccess("launch_tab.json");
EXPECT_EQ(extension_misc::LAUNCH_TAB, extension->launch_container());
- extension.reset(LoadAndExpectSuccess("launch_panel.json"));
+ extension = LoadAndExpectSuccess("launch_panel.json");
EXPECT_EQ(extension_misc::LAUNCH_PANEL, extension->launch_container());
- extension.reset(LoadAndExpectSuccess("launch_default.json"));
+ extension = LoadAndExpectSuccess("launch_default.json");
EXPECT_EQ(extension_misc::LAUNCH_TAB, extension->launch_container());
- extension.reset(LoadAndExpectSuccess("launch_width.json"));
+ extension = LoadAndExpectSuccess("launch_width.json");
EXPECT_EQ(640, extension->launch_width());
- extension.reset(LoadAndExpectSuccess("launch_height.json"));
+ extension = LoadAndExpectSuccess("launch_height.json");
EXPECT_EQ(480, extension->launch_height());
LoadAndExpectError("launch_window.json",
@@ -198,15 +193,15 @@ TEST_F(ExtensionManifestTest, AppLaunchURL) {
LoadAndExpectError("launch_url_invalid_type.json",
errors::kInvalidLaunchWebURL);
- scoped_ptr<Extension> extension;
- extension.reset(LoadAndExpectSuccess("launch_local_path.json"));
+ scoped_refptr<Extension> extension;
+ extension = LoadAndExpectSuccess("launch_local_path.json");
EXPECT_EQ(extension->url().spec() + "launch.html",
extension->GetFullLaunchURL().spec());
LoadAndExpectError("launch_web_url_relative.json",
errors::kInvalidLaunchWebURL);
- extension.reset(LoadAndExpectSuccess("launch_web_url_absolute.json"));
+ extension = LoadAndExpectSuccess("launch_web_url_absolute.json");
EXPECT_EQ(GURL("http://www.google.com/launch.html"),
extension->GetFullLaunchURL());
}
@@ -217,13 +212,13 @@ TEST_F(ExtensionManifestTest, Override) {
LoadAndExpectError("override_invalid_page.json",
errors::kInvalidChromeURLOverrides);
- scoped_ptr<Extension> extension;
+ scoped_refptr<Extension> extension;
- extension.reset(LoadAndExpectSuccess("override_new_tab.json"));
+ extension = LoadAndExpectSuccess("override_new_tab.json");
EXPECT_EQ(extension->url().spec() + "newtab.html",
extension->GetChromeURLOverrides().find("newtab")->second.spec());
- extension.reset(LoadAndExpectSuccess("override_history.json"));
+ extension = LoadAndExpectSuccess("override_history.json");
EXPECT_EQ(extension->url().spec() + "history.html",
extension->GetChromeURLOverrides().find("history")->second.spec());
}
@@ -237,11 +232,11 @@ TEST_F(ExtensionManifestTest, ChromeResourcesPermissionValidOnlyForComponents) {
LoadAndExpectError("permission_chrome_resources_url.json",
errors::kInvalidPermissionScheme);
std::string error;
- scoped_ptr<Extension> extension;
- extension.reset(LoadExtensionWithLocation(
+ scoped_refptr<Extension> extension;
+ extension = LoadExtensionWithLocation(
"permission_chrome_resources_url.json",
Extension::COMPONENT,
- &error));
+ &error);
EXPECT_EQ("", error);
}
@@ -260,8 +255,8 @@ TEST_F(ExtensionManifestTest, DevToolsExtensions) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
- scoped_ptr<Extension> extension;
- extension.reset(LoadAndExpectSuccess("devtools_extension.json"));
+ scoped_refptr<Extension> extension;
+ extension = LoadAndExpectSuccess("devtools_extension.json");
EXPECT_EQ(extension->url().spec() + "devtools.html",
extension->devtools_url().spec());
*CommandLine::ForCurrentProcess() = old_command_line;
@@ -275,11 +270,10 @@ TEST_F(ExtensionManifestTest, DisallowHybridApps) {
}
TEST_F(ExtensionManifestTest, OptionsPageInApps) {
- scoped_ptr<Extension> extension;
+ scoped_refptr<Extension> extension;
// Allow options page with absolute URL in hosed apps.
- extension.reset(
- LoadAndExpectSuccess("hosted_app_absolute_options.json"));
+ extension = LoadAndExpectSuccess("hosted_app_absolute_options.json");
EXPECT_STREQ("http",
extension->options_url().scheme().c_str());
EXPECT_STREQ("example.com",
@@ -313,10 +307,10 @@ TEST_F(ExtensionManifestTest, DisallowExtensionPermissions) {
StringValue* p = new StringValue(name);
permissions->Clear();
permissions->Append(p);
- std::string message_name = StringPrintf("permission-%s", name);
+ std::string message_name = base::StringPrintf("permission-%s", name);
if (Extension::IsHostedAppPermission(name)) {
- scoped_ptr<Extension> extension;
- extension.reset(LoadAndExpectSuccess(manifest.get(), message_name));
+ scoped_refptr<Extension> extension;
+ extension = LoadAndExpectSuccess(manifest.get(), message_name);
} else {
LoadAndExpectError(manifest.get(), message_name,
errors::kInvalidPermission);
@@ -325,7 +319,7 @@ TEST_F(ExtensionManifestTest, DisallowExtensionPermissions) {
}
TEST_F(ExtensionManifestTest, NormalizeIconPaths) {
- scoped_ptr<Extension> extension(
+ scoped_refptr<Extension> extension(
LoadAndExpectSuccess("normalize_icon_paths.json"));
EXPECT_EQ("16.png",
extension->icons().Get(16, ExtensionIconSet::MATCH_EXACTLY));
@@ -338,3 +332,38 @@ TEST_F(ExtensionManifestTest, DisallowMultipleUISurfaces) {
LoadAndExpectError("multiple_ui_surfaces_2.json", errors::kOneUISurfaceOnly);
LoadAndExpectError("multiple_ui_surfaces_3.json", errors::kOneUISurfaceOnly);
}
+
+TEST_F(ExtensionManifestTest, ParseHomepageURLs) {
+ scoped_refptr<Extension> extension(
+ LoadAndExpectSuccess("homepage_valid.json"));
+ LoadAndExpectError("homepage_empty.json",
+ extension_manifest_errors::kInvalidHomepageURL);
+ LoadAndExpectError("homepage_invalid.json",
+ extension_manifest_errors::kInvalidHomepageURL);
+}
+
+TEST_F(ExtensionManifestTest, GetHomepageURL) {
+ scoped_refptr<Extension> extension(
+ LoadAndExpectSuccess("homepage_valid.json"));
+ EXPECT_EQ(GURL("http://foo.com#bar"), extension->GetHomepageURL());
+
+ // The Google Gallery URL ends with the id, which depends on the path, which
+ // can be different in testing, so we just check the part before id.
+ extension = LoadAndExpectSuccess("homepage_google_hosted.json");
+ EXPECT_TRUE(StartsWithASCII(extension->GetHomepageURL().spec(),
+ "https://chrome.google.com/extensions/detail/",
+ false));
+
+ extension = LoadAndExpectSuccess("homepage_externally_hosted.json");
+ EXPECT_EQ(GURL(), extension->GetHomepageURL());
+}
+
+TEST_F(ExtensionManifestTest, DefaultPathForExtent) {
+ scoped_refptr<Extension> extension(
+ LoadAndExpectSuccess("default_path_for_extent.json"));
+
+ ASSERT_EQ(1u, extension->web_extent().patterns().size());
+ EXPECT_EQ("/*", extension->web_extent().patterns()[0].path());
+ EXPECT_TRUE(extension->web_extent().ContainsURL(
+ GURL("http://www.google.com/monkey")));
+}