| Index: chrome/common/extensions/manifest_unittest.cc
|
| diff --git a/chrome/common/extensions/manifest_unittest.cc b/chrome/common/extensions/manifest_unittest.cc
|
| index 5cabe03e342518c680de4ebe609869f6b5ba6ccc..b03b5d390989553438e95549721b278ba4b5ac57 100644
|
| --- a/chrome/common/extensions/manifest_unittest.cc
|
| +++ b/chrome/common/extensions/manifest_unittest.cc
|
| @@ -48,9 +48,9 @@ TEST_F(ManifestTest, Extension) {
|
|
|
| scoped_ptr<Manifest> manifest(
|
| new Manifest(Extension::INTERNAL, manifest_value.Pass()));
|
| - string16 error;
|
| - EXPECT_TRUE(manifest->ValidateManifest(&error));
|
| - EXPECT_EQ(ASCIIToUTF16(""), error);
|
| + std::vector<std::string> warnings;
|
| + manifest->ValidateManifest(&warnings);
|
| + EXPECT_TRUE(warnings.empty());
|
| AssertType(manifest.get(), Extension::TYPE_EXTENSION);
|
|
|
| // The known key 'background_page' should be accessible.
|
| @@ -58,10 +58,10 @@ TEST_F(ManifestTest, Extension) {
|
| EXPECT_TRUE(manifest->GetString(keys::kBackgroundPageLegacy, &value));
|
| EXPECT_EQ("bg.html", value);
|
|
|
| - // The unknown key 'unknown_key' should be inaccesible.
|
| + // The unknown key 'unknown_key' should be accesible.
|
| value.clear();
|
| - EXPECT_FALSE(manifest->GetString("unknown_key", &value));
|
| - EXPECT_EQ("", value);
|
| + EXPECT_TRUE(manifest->GetString("unknown_key", &value));
|
| + EXPECT_EQ("foo", value);
|
|
|
| // Set the manifest_version to 2; background_page should stop working.
|
| value.clear();
|
| @@ -69,17 +69,16 @@ TEST_F(ManifestTest, Extension) {
|
| EXPECT_FALSE(manifest->GetString("background_page", &value));
|
| EXPECT_EQ("", value);
|
|
|
| - // Validate should also stop working.
|
| - error.clear();
|
| - EXPECT_FALSE(manifest->ValidateManifest(&error));
|
| + // Validate should also give a warning.
|
| + warnings.clear();
|
| + manifest->ValidateManifest(&warnings);
|
| + ASSERT_EQ(1u, warnings.size());
|
| {
|
| Feature feature;
|
| feature.set_name("background_page");
|
| feature.set_max_manifest_version(1);
|
| - EXPECT_EQ(ExtensionErrorUtils::FormatErrorMessageUTF16(
|
| - errors::kFeatureNotAllowed,
|
| - "background_page",
|
| - feature.GetErrorMessage(Feature::INVALID_MAX_MANIFEST_VERSION)), error);
|
| + EXPECT_EQ(feature.GetErrorMessage(Feature::INVALID_MAX_MANIFEST_VERSION),
|
| + warnings[0]);
|
| }
|
|
|
| // Test DeepCopy and Equals.
|
| @@ -98,9 +97,9 @@ TEST_F(ManifestTest, ExtensionTypes) {
|
|
|
| scoped_ptr<Manifest> manifest(
|
| new Manifest(Extension::INTERNAL, value.Pass()));
|
| - string16 error;
|
| - EXPECT_TRUE(manifest->ValidateManifest(&error));
|
| - EXPECT_EQ(ASCIIToUTF16(""), error);
|
| + std::vector<std::string> warnings;
|
| + manifest->ValidateManifest(&warnings);
|
| + EXPECT_TRUE(warnings.empty());
|
|
|
| // By default, the type is Extension.
|
| AssertType(manifest.get(), Extension::TYPE_EXTENSION);
|
| @@ -132,65 +131,39 @@ TEST_F(ManifestTest, ExtensionTypes) {
|
| manifest->value()->Remove(keys::kLaunchWebURL, NULL);
|
| };
|
|
|
| -// Verifies that the various getters filter unknown and restricted keys.
|
| -TEST_F(ManifestTest, Getters) {
|
| +// Verifies that the getters filter restricted keys.
|
| +TEST_F(ManifestTest, RestrictedKeys) {
|
| scoped_ptr<DictionaryValue> value(new DictionaryValue());
|
| + value->SetString(keys::kName, "extension");
|
| + value->SetString(keys::kVersion, "1");
|
| +
|
| scoped_ptr<Manifest> manifest(
|
| new Manifest(Extension::INTERNAL, value.Pass()));
|
| - std::string unknown_key = "asdfaskldjf";
|
| -
|
| - // Verify that the key filtering works for each of the getters.
|
| - // Get and GetBoolean
|
| - bool expected_bool = true, actual_bool = false;
|
| - manifest->value()->Set(unknown_key, Value::CreateBooleanValue(expected_bool));
|
| - EXPECT_FALSE(manifest->HasKey(unknown_key));
|
| - EXPECT_FALSE(manifest->GetBoolean(unknown_key, &actual_bool));
|
| - EXPECT_FALSE(actual_bool);
|
| - Value* actual_value = NULL;
|
| - EXPECT_FALSE(manifest->Get(unknown_key, &actual_value));
|
| - EXPECT_TRUE(manifest->value()->Remove(unknown_key, NULL));
|
| -
|
| - // GetInteger
|
| - int expected_int = 5, actual_int = 0;
|
| - manifest->value()->Set(unknown_key, Value::CreateIntegerValue(expected_int));
|
| - EXPECT_FALSE(manifest->GetInteger(unknown_key, &actual_int));
|
| - EXPECT_NE(expected_int, actual_int);
|
| - EXPECT_TRUE(manifest->value()->Remove(unknown_key, NULL));
|
| -
|
| - // GetString
|
| - std::string expected_str = "hello", actual_str;
|
| - manifest->value()->Set(unknown_key, Value::CreateStringValue(expected_str));
|
| - EXPECT_FALSE(manifest->GetString(unknown_key, &actual_str));
|
| - EXPECT_NE(expected_str, actual_str);
|
| - EXPECT_TRUE(manifest->value()->Remove(unknown_key, NULL));
|
| -
|
| - // GetString (string16)
|
| - string16 expected_str16(UTF8ToUTF16("hello")), actual_str16;
|
| - manifest->value()->Set(unknown_key, Value::CreateStringValue(expected_str16));
|
| - EXPECT_FALSE(manifest->GetString(unknown_key, &actual_str16));
|
| - EXPECT_NE(expected_str16, actual_str16);
|
| - EXPECT_TRUE(manifest->value()->Remove(unknown_key, NULL));
|
| -
|
| - // GetDictionary
|
| - DictionaryValue* expected_dict = new DictionaryValue();
|
| - DictionaryValue* actual_dict = NULL;
|
| - expected_dict->Set("foo", Value::CreateStringValue("bar"));
|
| - manifest->value()->Set(unknown_key, expected_dict);
|
| - EXPECT_FALSE(manifest->GetDictionary(unknown_key, &actual_dict));
|
| - EXPECT_EQ(NULL, actual_dict);
|
| - std::string path = unknown_key + ".foo";
|
| - EXPECT_FALSE(manifest->GetString(path, &actual_str));
|
| - EXPECT_NE("bar", actual_str);
|
| - EXPECT_TRUE(manifest->value()->Remove(unknown_key, NULL));
|
| -
|
| - // GetList
|
| - ListValue* expected_list = new ListValue();
|
| - ListValue* actual_list = NULL;
|
| - expected_list->Append(Value::CreateStringValue("blah"));
|
| - manifest->value()->Set(unknown_key, expected_list);
|
| - EXPECT_FALSE(manifest->GetList(unknown_key, &actual_list));
|
| - EXPECT_EQ(NULL, actual_list);
|
| - EXPECT_TRUE(manifest->value()->Remove(unknown_key, NULL));
|
| -}
|
| + std::vector<std::string> warnings;
|
| + manifest->ValidateManifest(&warnings);
|
| + EXPECT_TRUE(warnings.empty());
|
| +
|
| + // Platform apps cannot have a "page_action" key.
|
| + manifest->value()->Set(keys::kPageAction, new DictionaryValue());
|
| + AssertType(manifest.get(), Extension::TYPE_EXTENSION);
|
| + base::Value* output = NULL;
|
| + EXPECT_TRUE(manifest->HasKey(keys::kPageAction));
|
| + EXPECT_TRUE(manifest->Get(keys::kPageAction, &output));
|
| +
|
| + manifest->value()->SetBoolean(keys::kPlatformApp, true);
|
| + AssertType(manifest.get(), Extension::TYPE_PLATFORM_APP);
|
| + EXPECT_FALSE(manifest->HasKey(keys::kPageAction));
|
| + EXPECT_FALSE(manifest->Get(keys::kPageAction, &output));
|
| + manifest->value()->Remove(keys::kPlatformApp, NULL);
|
| +
|
| + // "commands" is restricted to manifest_version >= 2.
|
| + manifest->value()->Set(keys::kCommands, new DictionaryValue());
|
| + EXPECT_FALSE(manifest->HasKey(keys::kCommands));
|
| + EXPECT_FALSE(manifest->Get(keys::kCommands, &output));
|
| +
|
| + manifest->value()->SetInteger(keys::kManifestVersion, 2);
|
| + EXPECT_TRUE(manifest->HasKey(keys::kCommands));
|
| + EXPECT_TRUE(manifest->Get(keys::kCommands, &output));
|
| +};
|
|
|
| } // namespace extensions
|
|
|