| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/common/extensions/manifest.h" | 5 #include "chrome/common/extensions/manifest.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 EXPECT_EQ(type == Manifest::kTypeHostedApp, manifest->IsHostedApp()); | 137 EXPECT_EQ(type == Manifest::kTypeHostedApp, manifest->IsHostedApp()); |
| 138 } | 138 } |
| 139 | 139 |
| 140 void TestRestrictedKeys(Manifest* manifest, | 140 void TestRestrictedKeys(Manifest* manifest, |
| 141 const char* restricted_keys[], | 141 const char* restricted_keys[], |
| 142 size_t restricted_keys_length) { | 142 size_t restricted_keys_length) { |
| 143 // Verify that the keys on the restricted key list for the given manifest | 143 // Verify that the keys on the restricted key list for the given manifest |
| 144 // fail validation and are filtered out. | 144 // fail validation and are filtered out. |
| 145 DictionaryValue* value = manifest->value(); | 145 DictionaryValue* value = manifest->value(); |
| 146 for (size_t i = 0; i < restricted_keys_length; ++i) { | 146 for (size_t i = 0; i < restricted_keys_length; ++i) { |
| 147 std::string error, str; | 147 std::string str; |
| 148 string16 error; |
| 148 value->Set(restricted_keys[i], Value::CreateStringValue(default_value_)); | 149 value->Set(restricted_keys[i], Value::CreateStringValue(default_value_)); |
| 149 EXPECT_FALSE(manifest->ValidateManifest(&error)); | 150 EXPECT_FALSE(manifest->ValidateManifest(&error)); |
| 150 EXPECT_EQ(error, ExtensionErrorUtils::FormatErrorMessage( | 151 EXPECT_EQ(error, ExtensionErrorUtils::FormatErrorMessageUTF16( |
| 151 errors::kFeatureNotAllowed, restricted_keys[i])); | 152 errors::kFeatureNotAllowed, restricted_keys[i])); |
| 152 EXPECT_FALSE(manifest->GetString(restricted_keys[i], &str)); | 153 EXPECT_FALSE(manifest->GetString(restricted_keys[i], &str)); |
| 153 EXPECT_TRUE(value->Remove(restricted_keys[i], NULL)); | 154 EXPECT_TRUE(value->Remove(restricted_keys[i], NULL)); |
| 154 } | 155 } |
| 155 } | 156 } |
| 156 | 157 |
| 157 std::string default_value_; | 158 std::string default_value_; |
| 158 }; | 159 }; |
| 159 | 160 |
| 160 // Verifies that extensions can access the correct keys. | 161 // Verifies that extensions can access the correct keys. |
| 161 TEST_F(ManifestTest, Extension) { | 162 TEST_F(ManifestTest, Extension) { |
| 162 // Generate the list of keys accessible by extensions. | 163 // Generate the list of keys accessible by extensions. |
| 163 std::set<std::string> extension_keys = GetAccessibleKeys(NULL, 0u); | 164 std::set<std::string> extension_keys = GetAccessibleKeys(NULL, 0u); |
| 164 | 165 |
| 165 // Construct the underlying value using every single key other than those | 166 // Construct the underlying value using every single key other than those |
| 166 // on the restricted list.. We can use the same value for every key because we | 167 // on the restricted list.. We can use the same value for every key because we |
| 167 // validate only by checking the presence of the keys. | 168 // validate only by checking the presence of the keys. |
| 168 DictionaryValue* value = new DictionaryValue(); | 169 DictionaryValue* value = new DictionaryValue(); |
| 169 for (std::set<std::string>::iterator i = extension_keys.begin(); | 170 for (std::set<std::string>::iterator i = extension_keys.begin(); |
| 170 i != extension_keys.end(); ++i) | 171 i != extension_keys.end(); ++i) |
| 171 value->Set(*i, Value::CreateStringValue(default_value_)); | 172 value->Set(*i, Value::CreateStringValue(default_value_)); |
| 172 | 173 |
| 173 scoped_ptr<Manifest> manifest(new Manifest(value)); | 174 scoped_ptr<Manifest> manifest(new Manifest(value)); |
| 174 std::string error; | 175 string16 error; |
| 175 EXPECT_TRUE(manifest->ValidateManifest(&error)); | 176 EXPECT_TRUE(manifest->ValidateManifest(&error)); |
| 176 EXPECT_EQ("", error); | 177 EXPECT_EQ(ASCIIToUTF16(""), error); |
| 177 AssertType(manifest.get(), Manifest::kTypeExtension); | 178 AssertType(manifest.get(), Manifest::kTypeExtension); |
| 178 | 179 |
| 179 // Verify that all the extension keys are accessible. | 180 // Verify that all the extension keys are accessible. |
| 180 for (std::set<std::string>::iterator i = extension_keys.begin(); | 181 for (std::set<std::string>::iterator i = extension_keys.begin(); |
| 181 i != extension_keys.end(); ++i) { | 182 i != extension_keys.end(); ++i) { |
| 182 std::string value; | 183 std::string value; |
| 183 manifest->GetString(*i, &value); | 184 manifest->GetString(*i, &value); |
| 184 EXPECT_EQ(default_value_, value) << *i; | 185 EXPECT_EQ(default_value_, value) << *i; |
| 185 } | 186 } |
| 186 | 187 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 199 | 200 |
| 200 DictionaryValue* value = new DictionaryValue(); | 201 DictionaryValue* value = new DictionaryValue(); |
| 201 for (std::set<std::string>::iterator i = theme_keys.begin(); | 202 for (std::set<std::string>::iterator i = theme_keys.begin(); |
| 202 i != theme_keys.end(); ++i) | 203 i != theme_keys.end(); ++i) |
| 203 value->Set(*i, Value::CreateStringValue(default_value_)); | 204 value->Set(*i, Value::CreateStringValue(default_value_)); |
| 204 | 205 |
| 205 std::string theme_key = keys::kTheme + std::string(".test"); | 206 std::string theme_key = keys::kTheme + std::string(".test"); |
| 206 value->Set(theme_key, Value::CreateStringValue(default_value_)); | 207 value->Set(theme_key, Value::CreateStringValue(default_value_)); |
| 207 | 208 |
| 208 scoped_ptr<Manifest> manifest(new Manifest(value)); | 209 scoped_ptr<Manifest> manifest(new Manifest(value)); |
| 209 std::string error; | 210 string16 error; |
| 210 EXPECT_TRUE(manifest->ValidateManifest(&error)); | 211 EXPECT_TRUE(manifest->ValidateManifest(&error)); |
| 211 EXPECT_EQ("", error); | 212 EXPECT_EQ(ASCIIToUTF16(""), error); |
| 212 AssertType(manifest.get(), Manifest::kTypeTheme); | 213 AssertType(manifest.get(), Manifest::kTypeTheme); |
| 213 | 214 |
| 214 // Verify that all the theme keys are accessible. | 215 // Verify that all the theme keys are accessible. |
| 215 std::string str; | 216 std::string str; |
| 216 for (std::set<std::string>::iterator i = theme_keys.begin(); | 217 for (std::set<std::string>::iterator i = theme_keys.begin(); |
| 217 i != theme_keys.end(); ++i) { | 218 i != theme_keys.end(); ++i) { |
| 218 EXPECT_TRUE(manifest->GetString(*i, &str)); | 219 EXPECT_TRUE(manifest->GetString(*i, &str)); |
| 219 EXPECT_EQ(default_value_, str) << *i; | 220 EXPECT_EQ(default_value_, str) << *i; |
| 220 } | 221 } |
| 221 EXPECT_TRUE(manifest->GetString(theme_key, &str)); | 222 EXPECT_TRUE(manifest->GetString(theme_key, &str)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 233 ARRAYSIZE_UNSAFE(kNotPlatformAppKeys)); | 234 ARRAYSIZE_UNSAFE(kNotPlatformAppKeys)); |
| 234 | 235 |
| 235 DictionaryValue* value = new DictionaryValue(); | 236 DictionaryValue* value = new DictionaryValue(); |
| 236 for (std::set<std::string>::iterator i = platform_keys.begin(); | 237 for (std::set<std::string>::iterator i = platform_keys.begin(); |
| 237 i != platform_keys.end(); ++i) | 238 i != platform_keys.end(); ++i) |
| 238 value->Set(*i, Value::CreateStringValue(default_value_)); | 239 value->Set(*i, Value::CreateStringValue(default_value_)); |
| 239 | 240 |
| 240 value->Set(keys::kPlatformApp, Value::CreateBooleanValue(true)); | 241 value->Set(keys::kPlatformApp, Value::CreateBooleanValue(true)); |
| 241 | 242 |
| 242 scoped_ptr<Manifest> manifest(new Manifest(value)); | 243 scoped_ptr<Manifest> manifest(new Manifest(value)); |
| 243 std::string error; | 244 string16 error; |
| 244 EXPECT_TRUE(manifest->ValidateManifest(&error)); | 245 EXPECT_TRUE(manifest->ValidateManifest(&error)); |
| 245 EXPECT_EQ("", error); | 246 EXPECT_EQ(ASCIIToUTF16(""), error); |
| 246 AssertType(manifest.get(), Manifest::kTypePlatformApp); | 247 AssertType(manifest.get(), Manifest::kTypePlatformApp); |
| 247 | 248 |
| 248 // Verify that all the platform app keys are accessible. | 249 // Verify that all the platform app keys are accessible. |
| 249 std::string str; | 250 std::string str; |
| 250 for (std::set<std::string>::iterator i = platform_keys.begin(); | 251 for (std::set<std::string>::iterator i = platform_keys.begin(); |
| 251 i != platform_keys.end(); ++i) { | 252 i != platform_keys.end(); ++i) { |
| 252 EXPECT_TRUE(manifest->GetString(*i, &str)); | 253 EXPECT_TRUE(manifest->GetString(*i, &str)); |
| 253 EXPECT_EQ(default_value_, str) << *i; | 254 EXPECT_EQ(default_value_, str) << *i; |
| 254 } | 255 } |
| 255 bool is_platform_app = false; | 256 bool is_platform_app = false; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 268 ARRAYSIZE_UNSAFE(kNotHostedAppKeys)); | 269 ARRAYSIZE_UNSAFE(kNotHostedAppKeys)); |
| 269 | 270 |
| 270 DictionaryValue* value = new DictionaryValue(); | 271 DictionaryValue* value = new DictionaryValue(); |
| 271 for (std::set<std::string>::iterator i = keys.begin(); | 272 for (std::set<std::string>::iterator i = keys.begin(); |
| 272 i != keys.end(); ++i) | 273 i != keys.end(); ++i) |
| 273 value->Set(*i, Value::CreateStringValue(default_value_)); | 274 value->Set(*i, Value::CreateStringValue(default_value_)); |
| 274 | 275 |
| 275 value->Set(keys::kWebURLs, Value::CreateStringValue(default_value_)); | 276 value->Set(keys::kWebURLs, Value::CreateStringValue(default_value_)); |
| 276 | 277 |
| 277 scoped_ptr<Manifest> manifest(new Manifest(value)); | 278 scoped_ptr<Manifest> manifest(new Manifest(value)); |
| 278 std::string error; | 279 string16 error; |
| 279 EXPECT_TRUE(manifest->ValidateManifest(&error)); | 280 EXPECT_TRUE(manifest->ValidateManifest(&error)); |
| 280 EXPECT_EQ("", error); | 281 EXPECT_EQ(ASCIIToUTF16(""), error); |
| 281 AssertType(manifest.get(), Manifest::kTypeHostedApp); | 282 AssertType(manifest.get(), Manifest::kTypeHostedApp); |
| 282 | 283 |
| 283 // Verify that all the hosted app keys are accessible. | 284 // Verify that all the hosted app keys are accessible. |
| 284 std::string str; | 285 std::string str; |
| 285 for (std::set<std::string>::iterator i = keys.begin(); | 286 for (std::set<std::string>::iterator i = keys.begin(); |
| 286 i != keys.end(); ++i) { | 287 i != keys.end(); ++i) { |
| 287 EXPECT_TRUE(manifest->GetString(*i, &str)); | 288 EXPECT_TRUE(manifest->GetString(*i, &str)); |
| 288 EXPECT_EQ(default_value_, str) << *i; | 289 EXPECT_EQ(default_value_, str) << *i; |
| 289 } | 290 } |
| 290 EXPECT_TRUE(manifest->GetString(keys::kWebURLs, &str)); | 291 EXPECT_TRUE(manifest->GetString(keys::kWebURLs, &str)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 301 kNotPackagedAppKeys, | 302 kNotPackagedAppKeys, |
| 302 ARRAYSIZE_UNSAFE(kNotPackagedAppKeys)); | 303 ARRAYSIZE_UNSAFE(kNotPackagedAppKeys)); |
| 303 | 304 |
| 304 DictionaryValue* value = new DictionaryValue(); | 305 DictionaryValue* value = new DictionaryValue(); |
| 305 for (std::set<std::string>::iterator i = keys.begin(); | 306 for (std::set<std::string>::iterator i = keys.begin(); |
| 306 i != keys.end(); ++i) | 307 i != keys.end(); ++i) |
| 307 value->Set(*i, Value::CreateStringValue(default_value_)); | 308 value->Set(*i, Value::CreateStringValue(default_value_)); |
| 308 value->Set(keys::kApp, Value::CreateStringValue(default_value_)); | 309 value->Set(keys::kApp, Value::CreateStringValue(default_value_)); |
| 309 | 310 |
| 310 scoped_ptr<Manifest> manifest(new Manifest(value)); | 311 scoped_ptr<Manifest> manifest(new Manifest(value)); |
| 311 std::string error; | 312 string16 error; |
| 312 EXPECT_TRUE(manifest->ValidateManifest(&error)); | 313 EXPECT_TRUE(manifest->ValidateManifest(&error)); |
| 313 EXPECT_EQ("", error); | 314 EXPECT_EQ(ASCIIToUTF16(""), error); |
| 314 AssertType(manifest.get(), Manifest::kTypePackagedApp); | 315 AssertType(manifest.get(), Manifest::kTypePackagedApp); |
| 315 | 316 |
| 316 // Verify that all the packaged app keys are accessible. | 317 // Verify that all the packaged app keys are accessible. |
| 317 std::string str; | 318 std::string str; |
| 318 for (std::set<std::string>::iterator i = keys.begin(); | 319 for (std::set<std::string>::iterator i = keys.begin(); |
| 319 i != keys.end(); ++i) { | 320 i != keys.end(); ++i) { |
| 320 EXPECT_TRUE(manifest->GetString(*i, &str)); | 321 EXPECT_TRUE(manifest->GetString(*i, &str)); |
| 321 EXPECT_EQ(default_value_, str) << *i; | 322 EXPECT_EQ(default_value_, str) << *i; |
| 322 } | 323 } |
| 323 EXPECT_TRUE(manifest->GetString(keys::kApp, &str)); | 324 EXPECT_TRUE(manifest->GetString(keys::kApp, &str)); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 ListValue* expected_list = new ListValue(); | 383 ListValue* expected_list = new ListValue(); |
| 383 ListValue* actual_list = NULL; | 384 ListValue* actual_list = NULL; |
| 384 expected_list->Append(Value::CreateStringValue("blah")); | 385 expected_list->Append(Value::CreateStringValue("blah")); |
| 385 value->Set(unknown_key, expected_list); | 386 value->Set(unknown_key, expected_list); |
| 386 EXPECT_FALSE(manifest->GetList(unknown_key, &actual_list)); | 387 EXPECT_FALSE(manifest->GetList(unknown_key, &actual_list)); |
| 387 EXPECT_EQ(NULL, actual_list); | 388 EXPECT_EQ(NULL, actual_list); |
| 388 EXPECT_TRUE(value->Remove(unknown_key, NULL)); | 389 EXPECT_TRUE(value->Remove(unknown_key, NULL)); |
| 389 } | 390 } |
| 390 | 391 |
| 391 } // namespace extensions | 392 } // namespace extensions |
| OLD | NEW |