| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/extension.h" | 5 #include "chrome/common/extensions/extension.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 | 216 |
| 217 // Test invalid privacy blacklists list item. | 217 // Test invalid privacy blacklists list item. |
| 218 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); | 218 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); |
| 219 ListValue* privacy_blacklists = NULL; | 219 ListValue* privacy_blacklists = NULL; |
| 220 input_value->GetList(keys::kPrivacyBlacklists, &privacy_blacklists); | 220 input_value->GetList(keys::kPrivacyBlacklists, &privacy_blacklists); |
| 221 ASSERT_FALSE(NULL == privacy_blacklists); | 221 ASSERT_FALSE(NULL == privacy_blacklists); |
| 222 privacy_blacklists->Set(0, Value::CreateIntegerValue(42)); | 222 privacy_blacklists->Set(0, Value::CreateIntegerValue(42)); |
| 223 EXPECT_FALSE(extension.InitFromValue(*input_value, true, &error)); | 223 EXPECT_FALSE(extension.InitFromValue(*input_value, true, &error)); |
| 224 EXPECT_TRUE(MatchPatternASCII(error, errors::kInvalidPrivacyBlacklistsPath)); | 224 EXPECT_TRUE(MatchPatternASCII(error, errors::kInvalidPrivacyBlacklistsPath)); |
| 225 | 225 |
| 226 // Test invalid UI surface count (both page action and browser action). | 226 // Multiple page actions are not allowed. |
| 227 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); | 227 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); |
| 228 DictionaryValue* action = new DictionaryValue; | 228 DictionaryValue* action = new DictionaryValue; |
| 229 action->SetString(keys::kPageActionId, "MyExtensionActionId"); | 229 action->SetString(keys::kPageActionId, "MyExtensionActionId"); |
| 230 action->SetString(keys::kName, "MyExtensionActionName"); | 230 action->SetString(keys::kName, "MyExtensionActionName"); |
| 231 ListValue* action_list = new ListValue; | 231 ListValue* action_list = new ListValue; |
| 232 action_list->Append(action->DeepCopy()); | 232 action_list->Append(action->DeepCopy()); |
| 233 action_list->Append(action); |
| 234 input_value->Set(keys::kPageActions, action_list); |
| 235 EXPECT_FALSE(extension.InitFromValue(*input_value, true, &error)); |
| 236 EXPECT_STREQ(errors::kInvalidPageActionsListSize, error.c_str()); |
| 237 |
| 238 // Test invalid UI surface count (both page action and browser action). |
| 239 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); |
| 240 action = new DictionaryValue; |
| 241 action->SetString(keys::kPageActionId, "MyExtensionActionId"); |
| 242 action->SetString(keys::kName, "MyExtensionActionName"); |
| 243 action_list = new ListValue; |
| 244 action_list->Append(action->DeepCopy()); |
| 233 input_value->Set(keys::kPageActions, action_list); | 245 input_value->Set(keys::kPageActions, action_list); |
| 234 input_value->Set(keys::kBrowserAction, action); | 246 input_value->Set(keys::kBrowserAction, action); |
| 235 EXPECT_FALSE(extension.InitFromValue(*input_value, true, &error)); | 247 EXPECT_FALSE(extension.InitFromValue(*input_value, true, &error)); |
| 236 EXPECT_STREQ(error.c_str(), errors::kOneUISurfaceOnly); | 248 EXPECT_STREQ(errors::kOneUISurfaceOnly, error.c_str()); |
| 237 | 249 |
| 238 // Test invalid options page url. | 250 // Test invalid options page url. |
| 239 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); | 251 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); |
| 240 input_value->Set(keys::kOptionsPage, Value::CreateNullValue()); | 252 input_value->Set(keys::kOptionsPage, Value::CreateNullValue()); |
| 241 EXPECT_FALSE(extension.InitFromValue(*input_value, true, &error)); | 253 EXPECT_FALSE(extension.InitFromValue(*input_value, true, &error)); |
| 242 EXPECT_TRUE(MatchPatternASCII(error, errors::kInvalidOptionsPage)); | 254 EXPECT_TRUE(MatchPatternASCII(error, errors::kInvalidOptionsPage)); |
| 243 | 255 |
| 244 // Test invalid/empty default locale. | 256 // Test invalid/empty default locale. |
| 245 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); | 257 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); |
| 246 input_value->Set(keys::kDefaultLocale, Value::CreateIntegerValue(5)); | 258 input_value->Set(keys::kDefaultLocale, Value::CreateIntegerValue(5)); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 EXPECT_EQ(extension.id(), extension.url().host()); | 300 EXPECT_EQ(extension.id(), extension.url().host()); |
| 289 EXPECT_EQ(path.value(), extension.path().value()); | 301 EXPECT_EQ(path.value(), extension.path().value()); |
| 290 | 302 |
| 291 // Test with an options page. | 303 // Test with an options page. |
| 292 input_value.SetString(keys::kOptionsPage, "options.html"); | 304 input_value.SetString(keys::kOptionsPage, "options.html"); |
| 293 EXPECT_TRUE(extension.InitFromValue(input_value, false, &error)); | 305 EXPECT_TRUE(extension.InitFromValue(input_value, false, &error)); |
| 294 EXPECT_EQ("", error); | 306 EXPECT_EQ("", error); |
| 295 EXPECT_EQ("chrome-extension", extension.options_url().scheme()); | 307 EXPECT_EQ("chrome-extension", extension.options_url().scheme()); |
| 296 EXPECT_EQ("/options.html", extension.options_url().path()); | 308 EXPECT_EQ("/options.html", extension.options_url().path()); |
| 297 | 309 |
| 310 // Test that an empty list of page actions does not stop a browser action |
| 311 // from being loaded. |
| 312 ListValue* empty_list = new ListValue; |
| 313 input_value.Set(keys::kPageActions, empty_list); |
| 314 EXPECT_TRUE(extension.InitFromValue(input_value, false, &error)); |
| 315 EXPECT_EQ("", error); |
| 316 |
| 298 #if !defined(OS_MACOSX) | 317 #if !defined(OS_MACOSX) |
| 299 // TODO(aa): The version isn't stamped into the unit test binary on mac. | 318 // TODO(aa): The version isn't stamped into the unit test binary on mac. |
| 300 // Test with a minimum_chrome_version. | 319 // Test with a minimum_chrome_version. |
| 301 input_value.SetString(keys::kMinimumChromeVersion, "1.0"); | 320 input_value.SetString(keys::kMinimumChromeVersion, "1.0"); |
| 302 EXPECT_TRUE(extension.InitFromValue(input_value, false, &error)); | 321 EXPECT_TRUE(extension.InitFromValue(input_value, false, &error)); |
| 303 EXPECT_EQ("", error); | 322 EXPECT_EQ("", error); |
| 304 // The minimum chrome version is not stored in the Extension object. | 323 // The minimum chrome version is not stored in the Extension object. |
| 305 #endif | 324 #endif |
| 306 } | 325 } |
| 307 | 326 |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 689 scoped_ptr<Extension> new_extension( | 708 scoped_ptr<Extension> new_extension( |
| 690 LoadManifest("allow_silent_upgrade", | 709 LoadManifest("allow_silent_upgrade", |
| 691 std::string(kTests[i].base_name) + "_new.json")); | 710 std::string(kTests[i].base_name) + "_new.json")); |
| 692 | 711 |
| 693 EXPECT_EQ(kTests[i].expect_success, | 712 EXPECT_EQ(kTests[i].expect_success, |
| 694 Extension::IsPrivilegeIncrease(old_extension.get(), | 713 Extension::IsPrivilegeIncrease(old_extension.get(), |
| 695 new_extension.get())) | 714 new_extension.get())) |
| 696 << kTests[i].base_name; | 715 << kTests[i].base_name; |
| 697 } | 716 } |
| 698 } | 717 } |
| OLD | NEW |