Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Unified Diff: chrome/common/extensions/manifest_unittest.cc

Issue 10217017: Allow features to refer to subkeys in _manifest_features.json. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix theme test Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698