| Index: chrome/common/extensions/extension_unittest.cc
|
| diff --git a/chrome/common/extensions/extension_unittest.cc b/chrome/common/extensions/extension_unittest.cc
|
| index f1dc9ed02b8c215e93a6af481615a9a2543dedda..e3d2d4f984f3b5f78f83f6dd396f3a8917acff83 100644
|
| --- a/chrome/common/extensions/extension_unittest.cc
|
| +++ b/chrome/common/extensions/extension_unittest.cc
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -105,7 +105,8 @@ TEST(ExtensionTest, InitFromValueInvalid) {
|
| EXPECT_EQ("", error);
|
| EXPECT_EQ(0, error_code);
|
| ASSERT_TRUE(valid_value.get());
|
| - ASSERT_TRUE(extension.InitFromValue(*valid_value, true, false, &error));
|
| + ASSERT_TRUE(extension.InitFromValue(*valid_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| ASSERT_EQ("", error);
|
| EXPECT_EQ("en_US", extension.default_locale());
|
|
|
| @@ -114,33 +115,39 @@ TEST(ExtensionTest, InitFromValueInvalid) {
|
| // Test missing and invalid versions
|
| input_value.reset(valid_value->DeepCopy());
|
| input_value->Remove(keys::kVersion, NULL);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_EQ(errors::kInvalidVersion, error);
|
|
|
| input_value->SetInteger(keys::kVersion, 42);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_EQ(errors::kInvalidVersion, error);
|
|
|
| // Test missing and invalid names.
|
| input_value.reset(valid_value->DeepCopy());
|
| input_value->Remove(keys::kName, NULL);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_EQ(errors::kInvalidName, error);
|
|
|
| input_value->SetInteger(keys::kName, 42);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_EQ(errors::kInvalidName, error);
|
|
|
| // Test invalid description
|
| input_value.reset(valid_value->DeepCopy());
|
| input_value->SetInteger(keys::kDescription, 42);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_EQ(errors::kInvalidDescription, error);
|
|
|
| // Test invalid icons
|
| input_value.reset(valid_value->DeepCopy());
|
| input_value->SetInteger(keys::kIcons, 42);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_EQ(errors::kInvalidIcons, error);
|
|
|
| // Test invalid icon paths
|
| @@ -149,13 +156,15 @@ TEST(ExtensionTest, InitFromValueInvalid) {
|
| input_value->GetDictionary(keys::kIcons, &icons);
|
| ASSERT_FALSE(NULL == icons);
|
| icons->SetInteger(base::IntToString(128), 42);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidIconPath));
|
|
|
| // Test invalid user scripts list
|
| input_value.reset(valid_value->DeepCopy());
|
| input_value->SetInteger(keys::kContentScripts, 42);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_EQ(errors::kInvalidContentScriptsList, error);
|
|
|
| // Test invalid user script item
|
| @@ -164,7 +173,8 @@ TEST(ExtensionTest, InitFromValueInvalid) {
|
| input_value->GetList(keys::kContentScripts, &content_scripts);
|
| ASSERT_FALSE(NULL == content_scripts);
|
| content_scripts->Set(0, Value::CreateIntegerValue(42));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidContentScript));
|
|
|
| // Test missing and invalid matches array
|
| @@ -173,25 +183,30 @@ TEST(ExtensionTest, InitFromValueInvalid) {
|
| DictionaryValue* user_script = NULL;
|
| content_scripts->GetDictionary(0, &user_script);
|
| user_script->Remove(keys::kMatches, NULL);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatches));
|
|
|
| user_script->Set(keys::kMatches, Value::CreateIntegerValue(42));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatches));
|
|
|
| ListValue* matches = new ListValue;
|
| user_script->Set(keys::kMatches, matches);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatchCount));
|
|
|
| // Test invalid match element
|
| matches->Set(0, Value::CreateIntegerValue(42));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatch));
|
|
|
| matches->Set(0, Value::CreateStringValue("chrome://*/*"));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatch));
|
|
|
| // Test missing and invalid files array
|
| @@ -200,45 +215,53 @@ TEST(ExtensionTest, InitFromValueInvalid) {
|
| content_scripts->GetDictionary(0, &user_script);
|
| user_script->Remove(keys::kJs, NULL);
|
| user_script->Remove(keys::kCss, NULL);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kMissingFile));
|
|
|
| user_script->Set(keys::kJs, Value::CreateIntegerValue(42));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidJsList));
|
|
|
| user_script->Set(keys::kCss, new ListValue);
|
| user_script->Set(keys::kJs, new ListValue);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kMissingFile));
|
| user_script->Remove(keys::kCss, NULL);
|
|
|
| ListValue* files = new ListValue;
|
| user_script->Set(keys::kJs, files);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kMissingFile));
|
|
|
| // Test invalid file element
|
| files->Set(0, Value::CreateIntegerValue(42));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidJs));
|
|
|
| user_script->Remove(keys::kJs, NULL);
|
| // Test the css element
|
| user_script->Set(keys::kCss, Value::CreateIntegerValue(42));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidCssList));
|
|
|
| // Test invalid file element
|
| ListValue* css_files = new ListValue;
|
| user_script->Set(keys::kCss, css_files);
|
| css_files->Set(0, Value::CreateIntegerValue(42));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidCss));
|
|
|
| // Test missing and invalid permissions array
|
| input_value.reset(valid_value->DeepCopy());
|
| - EXPECT_TRUE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_TRUE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
|
|
| ListValue* permissions = NULL;
|
| input_value->GetList(keys::kPermissions, &permissions);
|
| @@ -246,22 +269,26 @@ TEST(ExtensionTest, InitFromValueInvalid) {
|
|
|
| permissions = new ListValue;
|
| input_value->Set(keys::kPermissions, permissions);
|
| - EXPECT_TRUE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_TRUE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
|
|
| input_value->Set(keys::kPermissions, Value::CreateIntegerValue(9));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidPermissions));
|
|
|
| input_value.reset(valid_value->DeepCopy());
|
| input_value->GetList(keys::kPermissions, &permissions);
|
| permissions->Set(0, Value::CreateIntegerValue(24));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidPermission));
|
|
|
| // We allow unknown API permissions, so this will be valid until we better
|
| // distinguish between API and host permissions.
|
| permissions->Set(0, Value::CreateStringValue("www.google.com"));
|
| - EXPECT_TRUE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_TRUE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
|
|
| // Multiple page actions are not allowed.
|
| input_value.reset(valid_value->DeepCopy());
|
| @@ -272,36 +299,42 @@ TEST(ExtensionTest, InitFromValueInvalid) {
|
| action_list->Append(action->DeepCopy());
|
| action_list->Append(action);
|
| input_value->Set(keys::kPageActions, action_list);
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_STREQ(errors::kInvalidPageActionsListSize, error.c_str());
|
|
|
| // Test invalid options page url.
|
| input_value.reset(valid_value->DeepCopy());
|
| input_value->Set(keys::kOptionsPage, Value::CreateNullValue());
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidOptionsPage));
|
|
|
| // Test invalid/empty default locale.
|
| input_value.reset(valid_value->DeepCopy());
|
| input_value->Set(keys::kDefaultLocale, Value::CreateIntegerValue(5));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidDefaultLocale));
|
|
|
| input_value->Set(keys::kDefaultLocale, Value::CreateStringValue(""));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidDefaultLocale));
|
|
|
| // Test invalid minimum_chrome_version.
|
| input_value.reset(valid_value->DeepCopy());
|
| input_value->Set(keys::kMinimumChromeVersion, Value::CreateIntegerValue(42));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidMinimumChromeVersion));
|
|
|
| #if !defined(OS_MACOSX)
|
| // TODO(aa): The version isn't stamped into the unit test binary on mac.
|
| input_value->Set(keys::kMinimumChromeVersion,
|
| Value::CreateStringValue("88.8"));
|
| - EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error));
|
| + EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
|
| + &error));
|
| EXPECT_TRUE(MatchPattern(error, errors::kChromeVersionTooLow));
|
| #endif
|
| }
|
| @@ -322,7 +355,8 @@ TEST(ExtensionTest, InitFromValueValid) {
|
| input_value.SetString(keys::kVersion, "1.0.0.0");
|
| input_value.SetString(keys::kName, "my extension");
|
|
|
| - EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error));
|
| + EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
|
| + &error));
|
| EXPECT_EQ("", error);
|
| EXPECT_TRUE(Extension::IdIsValid(extension.id()));
|
| EXPECT_EQ("1.0.0.0", extension.VersionString());
|
| @@ -337,12 +371,14 @@ TEST(ExtensionTest, InitFromValueValid) {
|
|
|
| // We allow unknown API permissions, so this will be valid until we better
|
| // distinguish between API and host permissions.
|
| - EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error));
|
| + EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
|
| + &error));
|
| input_value.Remove(keys::kPermissions, NULL);
|
|
|
| // Test with an options page.
|
| input_value.SetString(keys::kOptionsPage, "options.html");
|
| - EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error));
|
| + EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
|
| + &error));
|
| EXPECT_EQ("", error);
|
| EXPECT_EQ("chrome-extension", extension.options_url().scheme());
|
| EXPECT_EQ("/options.html", extension.options_url().path());
|
| @@ -351,14 +387,16 @@ TEST(ExtensionTest, InitFromValueValid) {
|
| // from being loaded.
|
| ListValue* empty_list = new ListValue;
|
| input_value.Set(keys::kPageActions, empty_list);
|
| - EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error));
|
| + EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
|
| + &error));
|
| EXPECT_EQ("", error);
|
|
|
| #if !defined(OS_MACOSX)
|
| // TODO(aa): The version isn't stamped into the unit test binary on mac.
|
| // Test with a minimum_chrome_version.
|
| input_value.SetString(keys::kMinimumChromeVersion, "1.0");
|
| - EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error));
|
| + EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
|
| + &error));
|
| EXPECT_EQ("", error);
|
| // The minimum chrome version is not stored in the Extension object.
|
| #endif
|
| @@ -388,7 +426,8 @@ TEST(ExtensionTest, InitFromValueValidNameInRTL) {
|
| // No strong RTL characters in name.
|
| std::wstring name(L"Dictionary (by Google)");
|
| input_value.SetString(keys::kName, WideToUTF16Hack(name));
|
| - EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error));
|
| + EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
|
| + &error));
|
| EXPECT_EQ("", error);
|
| std::wstring localized_name(name);
|
| base::i18n::AdjustStringForLocaleDirection(&localized_name);
|
| @@ -397,7 +436,8 @@ TEST(ExtensionTest, InitFromValueValidNameInRTL) {
|
| // Strong RTL characters in name.
|
| name = L"Dictionary (\x05D1\x05D2"L" Google)";
|
| input_value.SetString(keys::kName, WideToUTF16Hack(name));
|
| - EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error));
|
| + EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
|
| + &error));
|
| EXPECT_EQ("", error);
|
| localized_name = name;
|
| base::i18n::AdjustStringForLocaleDirection(&localized_name);
|
| @@ -420,8 +460,8 @@ TEST(ExtensionTest, GetResourceURLAndPath) {
|
| DictionaryValue input_value;
|
| input_value.SetString(keys::kVersion, "1.0.0.0");
|
| input_value.SetString(keys::kName, "my extension");
|
| - scoped_refptr<Extension> extension(Extension::Create(
|
| - path, Extension::INVALID, input_value, false, true, NULL));
|
| + scoped_refptr<Extension> extension(Extension::Create(path,
|
| + Extension::INVALID, input_value, Extension::STRICT_ERROR_CHECKS, NULL));
|
| EXPECT_TRUE(extension.get());
|
|
|
| EXPECT_EQ(extension->url().spec() + "bar/baz.js",
|
| @@ -680,7 +720,8 @@ TEST(ExtensionTest, UpdateUrls) {
|
| input_value.SetString(keys::kUpdateURL, url.spec());
|
|
|
| scoped_refptr<Extension> extension(Extension::Create(
|
| - path, Extension::INVALID, input_value, false, true, &error));
|
| + path, Extension::INVALID, input_value, Extension::STRICT_ERROR_CHECKS,
|
| + &error));
|
| EXPECT_TRUE(extension.get()) << error;
|
| }
|
|
|
| @@ -704,7 +745,8 @@ TEST(ExtensionTest, UpdateUrls) {
|
| input_value.SetString(keys::kUpdateURL, invalid[i]);
|
|
|
| scoped_refptr<Extension> extension(Extension::Create(
|
| - path, Extension::INVALID, input_value, false, true, &error));
|
| + path, Extension::INVALID, input_value, Extension::STRICT_ERROR_CHECKS,
|
| + &error));
|
| EXPECT_FALSE(extension.get());
|
| EXPECT_TRUE(MatchPattern(error, errors::kInvalidUpdateURL));
|
| }
|
| @@ -752,7 +794,8 @@ static scoped_refptr<Extension> LoadManifest(const std::string& dir,
|
|
|
| scoped_refptr<Extension> extension = Extension::Create(
|
| path.DirName(), Extension::INVALID,
|
| - *static_cast<DictionaryValue*>(result.get()), false, true, &error);
|
| + *static_cast<DictionaryValue*>(result.get()),
|
| + Extension::STRICT_ERROR_CHECKS, &error);
|
| EXPECT_TRUE(extension) << error;
|
| return extension;
|
| }
|
| @@ -979,7 +1022,8 @@ TEST(ExtensionTest, ImageCaching) {
|
| values.SetString(keys::kName, "test");
|
| values.SetString(keys::kVersion, "0.1");
|
| scoped_refptr<Extension> extension(Extension::Create(
|
| - path, Extension::INVALID, values, false, true, &errors));
|
| + path, Extension::INVALID, values, Extension::STRICT_ERROR_CHECKS,
|
| + &errors));
|
| ASSERT_TRUE(extension.get());
|
|
|
| // Create an ExtensionResource pointing at an icon.
|
| @@ -1063,7 +1107,8 @@ TEST(ExtensionTest, OldUnlimitedStoragePermission) {
|
| // is present.
|
| std::string errors;
|
| scoped_refptr<Extension> extension(Extension::Create(
|
| - extension_path, Extension::INVALID, dictionary, false, true, &errors));
|
| + extension_path, Extension::INVALID, dictionary,
|
| + Extension::STRICT_ERROR_CHECKS, &errors));
|
| EXPECT_TRUE(extension.get());
|
| EXPECT_TRUE(extension->HasApiPermission(
|
| Extension::kUnlimitedStoragePermission));
|
|
|