OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_file_util.h" | 5 #include "chrome/common/extensions/extension_file_util.h" |
6 | 6 |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/files/scoped_temp_dir.h" | 8 #include "base/files/scoped_temp_dir.h" |
9 #include "base/json/json_string_value_serializer.h" | 9 #include "base/json/json_string_value_serializer.h" |
10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
11 #include "base/stringprintf.h" | 11 #include "base/stringprintf.h" |
12 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
13 #include "chrome/common/chrome_paths.h" | 13 #include "chrome/common/chrome_paths.h" |
14 #include "chrome/common/extensions/api/extension_action/browser_action_handler.h
" | 14 #include "chrome/common/extensions/api/extension_action/browser_action_handler.h
" |
15 #include "chrome/common/extensions/api/i18n/default_locale_handler.h" | 15 #include "chrome/common/extensions/api/i18n/default_locale_handler.h" |
16 #include "chrome/common/extensions/extension.h" | 16 #include "chrome/common/extensions/extension.h" |
17 #include "chrome/common/extensions/extension_manifest_constants.h" | 17 #include "chrome/common/extensions/extension_manifest_constants.h" |
| 18 #include "chrome/common/extensions/manifest.h" |
18 #include "chrome/common/extensions/manifest_handler.h" | 19 #include "chrome/common/extensions/manifest_handler.h" |
19 #include "grit/generated_resources.h" | 20 #include "grit/generated_resources.h" |
20 #include "testing/gmock/include/gmock/gmock.h" | 21 #include "testing/gmock/include/gmock/gmock.h" |
21 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
22 #include "ui/base/l10n/l10n_util.h" | 23 #include "ui/base/l10n/l10n_util.h" |
23 | 24 |
24 using extensions::Extension; | 25 using extensions::Extension; |
| 26 using extensions::Manifest; |
25 | 27 |
26 namespace keys = extension_manifest_keys; | 28 namespace keys = extension_manifest_keys; |
27 | 29 |
28 class ExtensionFileUtilTest : public testing::Test { | 30 class ExtensionFileUtilTest : public testing::Test { |
29 protected: | 31 protected: |
30 virtual void SetUp() OVERRIDE { | 32 virtual void SetUp() OVERRIDE { |
31 testing::Test::SetUp(); | 33 testing::Test::SetUp(); |
32 extensions::ManifestHandler::Register( | 34 extensions::ManifestHandler::Register( |
33 extension_manifest_keys::kBrowserAction, | 35 extension_manifest_keys::kBrowserAction, |
34 new extensions::BrowserActionHandler); | 36 new extensions::BrowserActionHandler); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 FilePath install_dir; | 119 FilePath install_dir; |
118 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); | 120 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); |
119 install_dir = install_dir.AppendASCII("extensions") | 121 install_dir = install_dir.AppendASCII("extensions") |
120 .AppendASCII("good") | 122 .AppendASCII("good") |
121 .AppendASCII("Extensions") | 123 .AppendASCII("Extensions") |
122 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 124 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
123 .AppendASCII("1.0.0.0"); | 125 .AppendASCII("1.0.0.0"); |
124 | 126 |
125 std::string error; | 127 std::string error; |
126 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( | 128 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( |
127 install_dir, Extension::LOAD, Extension::NO_FLAGS, &error)); | 129 install_dir, Manifest::LOAD, Extension::NO_FLAGS, &error)); |
128 ASSERT_TRUE(extension != NULL); | 130 ASSERT_TRUE(extension != NULL); |
129 EXPECT_EQ("The first extension that I made.", extension->description()); | 131 EXPECT_EQ("The first extension that I made.", extension->description()); |
130 } | 132 } |
131 | 133 |
132 TEST_F(ExtensionFileUtilTest, LoadExtensionWithoutLocalesFolder) { | 134 TEST_F(ExtensionFileUtilTest, LoadExtensionWithoutLocalesFolder) { |
133 FilePath install_dir; | 135 FilePath install_dir; |
134 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); | 136 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); |
135 install_dir = install_dir.AppendASCII("extensions") | 137 install_dir = install_dir.AppendASCII("extensions") |
136 .AppendASCII("good") | 138 .AppendASCII("good") |
137 .AppendASCII("Extensions") | 139 .AppendASCII("Extensions") |
138 .AppendASCII("bjafgdebaacbbbecmhlhpofkepfkgcpa") | 140 .AppendASCII("bjafgdebaacbbbecmhlhpofkepfkgcpa") |
139 .AppendASCII("1.0"); | 141 .AppendASCII("1.0"); |
140 | 142 |
141 std::string error; | 143 std::string error; |
142 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( | 144 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( |
143 install_dir, Extension::LOAD, Extension::NO_FLAGS, &error)); | 145 install_dir, Manifest::LOAD, Extension::NO_FLAGS, &error)); |
144 ASSERT_FALSE(extension == NULL); | 146 ASSERT_FALSE(extension == NULL); |
145 EXPECT_TRUE(error.empty()); | 147 EXPECT_TRUE(error.empty()); |
146 } | 148 } |
147 | 149 |
148 #if defined(OS_WIN) | 150 #if defined(OS_WIN) |
149 // http://crbug.com/106381 | 151 // http://crbug.com/106381 |
150 #define CheckIllegalFilenamesNoUnderscores \ | 152 #define CheckIllegalFilenamesNoUnderscores \ |
151 DISABLED_CheckIllegalFilenamesNoUnderscores | 153 DISABLED_CheckIllegalFilenamesNoUnderscores |
152 #endif | 154 #endif |
153 TEST_F(ExtensionFileUtilTest, CheckIllegalFilenamesNoUnderscores) { | 155 TEST_F(ExtensionFileUtilTest, CheckIllegalFilenamesNoUnderscores) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 FilePath install_dir; | 209 FilePath install_dir; |
208 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); | 210 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); |
209 install_dir = install_dir.AppendASCII("extensions") | 211 install_dir = install_dir.AppendASCII("extensions") |
210 .AppendASCII("bad") | 212 .AppendASCII("bad") |
211 .AppendASCII("Extensions") | 213 .AppendASCII("Extensions") |
212 .AppendASCII("dddddddddddddddddddddddddddddddd") | 214 .AppendASCII("dddddddddddddddddddddddddddddddd") |
213 .AppendASCII("1.0"); | 215 .AppendASCII("1.0"); |
214 | 216 |
215 std::string error; | 217 std::string error; |
216 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( | 218 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( |
217 install_dir, Extension::LOAD, Extension::NO_FLAGS, &error)); | 219 install_dir, Manifest::LOAD, Extension::NO_FLAGS, &error)); |
218 ASSERT_TRUE(extension == NULL); | 220 ASSERT_TRUE(extension == NULL); |
219 ASSERT_FALSE(error.empty()); | 221 ASSERT_FALSE(error.empty()); |
220 ASSERT_STREQ("Manifest file is missing or unreadable.", error.c_str()); | 222 ASSERT_STREQ("Manifest file is missing or unreadable.", error.c_str()); |
221 } | 223 } |
222 | 224 |
223 TEST_F(ExtensionFileUtilTest, LoadExtensionGivesHelpfullErrorOnBadManifest) { | 225 TEST_F(ExtensionFileUtilTest, LoadExtensionGivesHelpfullErrorOnBadManifest) { |
224 FilePath install_dir; | 226 FilePath install_dir; |
225 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); | 227 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); |
226 install_dir = install_dir.AppendASCII("extensions") | 228 install_dir = install_dir.AppendASCII("extensions") |
227 .AppendASCII("bad") | 229 .AppendASCII("bad") |
228 .AppendASCII("Extensions") | 230 .AppendASCII("Extensions") |
229 .AppendASCII("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") | 231 .AppendASCII("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") |
230 .AppendASCII("1.0"); | 232 .AppendASCII("1.0"); |
231 | 233 |
232 std::string error; | 234 std::string error; |
233 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( | 235 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( |
234 install_dir, Extension::LOAD, Extension::NO_FLAGS, &error)); | 236 install_dir, Manifest::LOAD, Extension::NO_FLAGS, &error)); |
235 ASSERT_TRUE(extension == NULL); | 237 ASSERT_TRUE(extension == NULL); |
236 ASSERT_FALSE(error.empty()); | 238 ASSERT_FALSE(error.empty()); |
237 ASSERT_STREQ("Manifest is not valid JSON. " | 239 ASSERT_STREQ("Manifest is not valid JSON. " |
238 "Line: 2, column: 16, Syntax error.", error.c_str()); | 240 "Line: 2, column: 16, Syntax error.", error.c_str()); |
239 } | 241 } |
240 | 242 |
241 TEST_F(ExtensionFileUtilTest, FailLoadingNonUTF8Scripts) { | 243 TEST_F(ExtensionFileUtilTest, FailLoadingNonUTF8Scripts) { |
242 FilePath install_dir; | 244 FilePath install_dir; |
243 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); | 245 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); |
244 install_dir = install_dir.AppendASCII("extensions") | 246 install_dir = install_dir.AppendASCII("extensions") |
245 .AppendASCII("bad") | 247 .AppendASCII("bad") |
246 .AppendASCII("bad_encoding"); | 248 .AppendASCII("bad_encoding"); |
247 | 249 |
248 std::string error; | 250 std::string error; |
249 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( | 251 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( |
250 install_dir, Extension::LOAD, Extension::NO_FLAGS, &error)); | 252 install_dir, Manifest::LOAD, Extension::NO_FLAGS, &error)); |
251 ASSERT_TRUE(extension == NULL); | 253 ASSERT_TRUE(extension == NULL); |
252 ASSERT_STREQ("Could not load file 'bad_encoding.js' for content script. " | 254 ASSERT_STREQ("Could not load file 'bad_encoding.js' for content script. " |
253 "It isn't UTF-8 encoded.", error.c_str()); | 255 "It isn't UTF-8 encoded.", error.c_str()); |
254 } | 256 } |
255 | 257 |
256 TEST_F(ExtensionFileUtilTest, ExtensionURLToRelativeFilePath) { | 258 TEST_F(ExtensionFileUtilTest, ExtensionURLToRelativeFilePath) { |
257 #define URL_PREFIX "chrome-extension://extension-id/" | 259 #define URL_PREFIX "chrome-extension://extension-id/" |
258 struct TestCase { | 260 struct TestCase { |
259 const char* url; | 261 const char* url; |
260 const char* expected_relative_path; | 262 const char* expected_relative_path; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 EXPECT_EQ(expected_path.value(), actual_path.value()) << | 363 EXPECT_EQ(expected_path.value(), actual_path.value()) << |
362 " For the path " << url; | 364 " For the path " << url; |
363 } | 365 } |
364 // Remove temp files. | 366 // Remove temp files. |
365 ASSERT_TRUE(file_util::Delete(root_path, true)); | 367 ASSERT_TRUE(file_util::Delete(root_path, true)); |
366 } | 368 } |
367 | 369 |
368 static scoped_refptr<Extension> LoadExtensionManifest( | 370 static scoped_refptr<Extension> LoadExtensionManifest( |
369 DictionaryValue* manifest, | 371 DictionaryValue* manifest, |
370 const FilePath& manifest_dir, | 372 const FilePath& manifest_dir, |
371 Extension::Location location, | 373 Manifest::Location location, |
372 int extra_flags, | 374 int extra_flags, |
373 std::string* error) { | 375 std::string* error) { |
374 scoped_refptr<Extension> extension = Extension::Create( | 376 scoped_refptr<Extension> extension = Extension::Create( |
375 manifest_dir, location, *manifest, extra_flags, error); | 377 manifest_dir, location, *manifest, extra_flags, error); |
376 return extension; | 378 return extension; |
377 } | 379 } |
378 | 380 |
379 static scoped_refptr<Extension> LoadExtensionManifest( | 381 static scoped_refptr<Extension> LoadExtensionManifest( |
380 const std::string& manifest_value, | 382 const std::string& manifest_value, |
381 const FilePath& manifest_dir, | 383 const FilePath& manifest_dir, |
382 Extension::Location location, | 384 Manifest::Location location, |
383 int extra_flags, | 385 int extra_flags, |
384 std::string* error) { | 386 std::string* error) { |
385 JSONStringValueSerializer serializer(manifest_value); | 387 JSONStringValueSerializer serializer(manifest_value); |
386 scoped_ptr<Value> result(serializer.Deserialize(NULL, error)); | 388 scoped_ptr<Value> result(serializer.Deserialize(NULL, error)); |
387 if (!result.get()) | 389 if (!result.get()) |
388 return NULL; | 390 return NULL; |
389 CHECK_EQ(Value::TYPE_DICTIONARY, result->GetType()); | 391 CHECK_EQ(Value::TYPE_DICTIONARY, result->GetType()); |
390 return LoadExtensionManifest(static_cast<DictionaryValue*>(result.get()), | 392 return LoadExtensionManifest(static_cast<DictionaryValue*>(result.get()), |
391 manifest_dir, | 393 manifest_dir, |
392 location, | 394 location, |
(...skipping 15 matching lines...) Expand all Loading... |
408 non_ascii_file)); | 410 non_ascii_file)); |
409 file_util::WriteFile(non_ascii_path, "", 0); | 411 file_util::WriteFile(non_ascii_path, "", 0); |
410 | 412 |
411 std::string kManifest = | 413 std::string kManifest = |
412 base::StringPrintf( | 414 base::StringPrintf( |
413 "{ \"name\": \"Test\", \"version\": \"1.0\", " | 415 "{ \"name\": \"Test\", \"version\": \"1.0\", " |
414 " \"theme\": { \"images\": { \"theme_frame\": \"%s\" } }" | 416 " \"theme\": { \"images\": { \"theme_frame\": \"%s\" } }" |
415 "}", non_ascii_file.c_str()); | 417 "}", non_ascii_file.c_str()); |
416 std::string error; | 418 std::string error; |
417 scoped_refptr<Extension> extension = LoadExtensionManifest( | 419 scoped_refptr<Extension> extension = LoadExtensionManifest( |
418 kManifest, temp.path(), Extension::LOAD, 0, &error); | 420 kManifest, temp.path(), Manifest::LOAD, 0, &error); |
419 ASSERT_TRUE(extension.get()) << error; | 421 ASSERT_TRUE(extension.get()) << error; |
420 | 422 |
421 Extension::InstallWarningVector warnings; | 423 std::vector<extensions::InstallWarning> warnings; |
422 EXPECT_TRUE(extension_file_util::ValidateExtension(extension, | 424 EXPECT_TRUE(extension_file_util::ValidateExtension(extension, |
423 &error, &warnings)) << | 425 &error, &warnings)) << |
424 error; | 426 error; |
425 EXPECT_EQ(0U, warnings.size()); | 427 EXPECT_EQ(0U, warnings.size()); |
426 } | 428 } |
427 | 429 |
428 #if defined(OS_WIN) | 430 #if defined(OS_WIN) |
429 // This test hangs on Windows sometimes. http://crbug.com/110279 | 431 // This test hangs on Windows sometimes. http://crbug.com/110279 |
430 #define MAYBE_BackgroundScriptsMustExist DISABLED_BackgroundScriptsMustExist | 432 #define MAYBE_BackgroundScriptsMustExist DISABLED_BackgroundScriptsMustExist |
431 #else | 433 #else |
432 #define MAYBE_BackgroundScriptsMustExist BackgroundScriptsMustExist | 434 #define MAYBE_BackgroundScriptsMustExist BackgroundScriptsMustExist |
433 #endif | 435 #endif |
434 TEST_F(ExtensionFileUtilTest, MAYBE_BackgroundScriptsMustExist) { | 436 TEST_F(ExtensionFileUtilTest, MAYBE_BackgroundScriptsMustExist) { |
435 base::ScopedTempDir temp; | 437 base::ScopedTempDir temp; |
436 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 438 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
437 | 439 |
438 scoped_ptr<DictionaryValue> value(new DictionaryValue()); | 440 scoped_ptr<DictionaryValue> value(new DictionaryValue()); |
439 value->SetString("name", "test"); | 441 value->SetString("name", "test"); |
440 value->SetString("version", "1"); | 442 value->SetString("version", "1"); |
441 value->SetInteger("manifest_version", 1); | 443 value->SetInteger("manifest_version", 1); |
442 | 444 |
443 ListValue* scripts = new ListValue(); | 445 ListValue* scripts = new ListValue(); |
444 scripts->Append(Value::CreateStringValue("foo.js")); | 446 scripts->Append(Value::CreateStringValue("foo.js")); |
445 value->Set("background.scripts", scripts); | 447 value->Set("background.scripts", scripts); |
446 | 448 |
447 std::string error; | 449 std::string error; |
448 Extension::InstallWarningVector warnings; | 450 std::vector<extensions::InstallWarning> warnings; |
449 scoped_refptr<Extension> extension = LoadExtensionManifest( | 451 scoped_refptr<Extension> extension = LoadExtensionManifest( |
450 value.get(), temp.path(), Extension::LOAD, 0, &error); | 452 value.get(), temp.path(), Manifest::LOAD, 0, &error); |
451 ASSERT_TRUE(extension.get()) << error; | 453 ASSERT_TRUE(extension.get()) << error; |
452 | 454 |
453 EXPECT_FALSE(extension_file_util::ValidateExtension(extension, | 455 EXPECT_FALSE(extension_file_util::ValidateExtension(extension, |
454 &error, &warnings)); | 456 &error, &warnings)); |
455 EXPECT_EQ(l10n_util::GetStringFUTF8( | 457 EXPECT_EQ(l10n_util::GetStringFUTF8( |
456 IDS_EXTENSION_LOAD_BACKGROUND_SCRIPT_FAILED, ASCIIToUTF16("foo.js")), | 458 IDS_EXTENSION_LOAD_BACKGROUND_SCRIPT_FAILED, ASCIIToUTF16("foo.js")), |
457 error); | 459 error); |
458 EXPECT_EQ(0U, warnings.size()); | 460 EXPECT_EQ(0U, warnings.size()); |
459 | 461 |
460 scripts->Clear(); | 462 scripts->Clear(); |
461 scripts->Append(Value::CreateStringValue("http://google.com/foo.js")); | 463 scripts->Append(Value::CreateStringValue("http://google.com/foo.js")); |
462 | 464 |
463 extension = LoadExtensionManifest(value.get(), temp.path(), Extension::LOAD, | 465 extension = LoadExtensionManifest(value.get(), temp.path(), Manifest::LOAD, |
464 0, &error); | 466 0, &error); |
465 ASSERT_TRUE(extension.get()) << error; | 467 ASSERT_TRUE(extension.get()) << error; |
466 | 468 |
467 warnings.clear(); | 469 warnings.clear(); |
468 EXPECT_FALSE(extension_file_util::ValidateExtension(extension, | 470 EXPECT_FALSE(extension_file_util::ValidateExtension(extension, |
469 &error, &warnings)); | 471 &error, &warnings)); |
470 EXPECT_EQ(l10n_util::GetStringFUTF8( | 472 EXPECT_EQ(l10n_util::GetStringFUTF8( |
471 IDS_EXTENSION_LOAD_BACKGROUND_SCRIPT_FAILED, | 473 IDS_EXTENSION_LOAD_BACKGROUND_SCRIPT_FAILED, |
472 ASCIIToUTF16("http://google.com/foo.js")), | 474 ASCIIToUTF16("http://google.com/foo.js")), |
473 error); | 475 error); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 " \"manifest_version\": 2,\n" | 536 " \"manifest_version\": 2,\n" |
535 " \"description\": \"The first extension that I made.\"\n" | 537 " \"description\": \"The first extension that I made.\"\n" |
536 "}\n"; | 538 "}\n"; |
537 ASSERT_TRUE(file_util::WriteFile(ext_path.AppendASCII("manifest.json"), | 539 ASSERT_TRUE(file_util::WriteFile(ext_path.AppendASCII("manifest.json"), |
538 manifest, strlen(manifest))); | 540 manifest, strlen(manifest))); |
539 ASSERT_TRUE(file_util::WriteFile(ext_path.AppendASCII("a_key.pem"), | 541 ASSERT_TRUE(file_util::WriteFile(ext_path.AppendASCII("a_key.pem"), |
540 private_key, strlen(private_key))); | 542 private_key, strlen(private_key))); |
541 | 543 |
542 std::string error; | 544 std::string error; |
543 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( | 545 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( |
544 ext_path, "the_id", Extension::EXTERNAL_PREF, | 546 ext_path, "the_id", Manifest::EXTERNAL_PREF, |
545 Extension::NO_FLAGS, &error)); | 547 Extension::NO_FLAGS, &error)); |
546 ASSERT_TRUE(extension.get()) << error; | 548 ASSERT_TRUE(extension.get()) << error; |
547 ASSERT_EQ(1u, extension->install_warnings().size()); | 549 ASSERT_EQ(1u, extension->install_warnings().size()); |
548 EXPECT_THAT( | 550 EXPECT_THAT( |
549 extension->install_warnings(), | 551 extension->install_warnings(), |
550 testing::ElementsAre( | 552 testing::ElementsAre( |
551 testing::Field( | 553 testing::Field( |
552 &Extension::InstallWarning::message, | 554 &extensions::InstallWarning::message, |
553 testing::ContainsRegex( | 555 testing::ContainsRegex( |
554 "extension includes the key file.*ext_root.a_key.pem")))); | 556 "extension includes the key file.*ext_root.a_key.pem")))); |
555 | 557 |
556 // Turn the warning into an error with ERROR_ON_PRIVATE_KEY. | 558 // Turn the warning into an error with ERROR_ON_PRIVATE_KEY. |
557 extension = extension_file_util::LoadExtension( | 559 extension = extension_file_util::LoadExtension( |
558 ext_path, "the_id", Extension::EXTERNAL_PREF, | 560 ext_path, "the_id", Manifest::EXTERNAL_PREF, |
559 Extension::ERROR_ON_PRIVATE_KEY, &error); | 561 Extension::ERROR_ON_PRIVATE_KEY, &error); |
560 EXPECT_FALSE(extension.get()); | 562 EXPECT_FALSE(extension.get()); |
561 EXPECT_THAT(error, | 563 EXPECT_THAT(error, |
562 testing::ContainsRegex( | 564 testing::ContainsRegex( |
563 "extension includes the key file.*ext_root.a_key.pem")); | 565 "extension includes the key file.*ext_root.a_key.pem")); |
564 } | 566 } |
565 | 567 |
566 TEST_F(ExtensionFileUtilTest, CheckZeroLengthImageFile) { | 568 TEST_F(ExtensionFileUtilTest, CheckZeroLengthImageFile) { |
567 FilePath install_dir; | 569 FilePath install_dir; |
568 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); | 570 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); |
569 | 571 |
570 // Try to install an extension with a zero-length icon file. | 572 // Try to install an extension with a zero-length icon file. |
571 FilePath ext_dir = install_dir.AppendASCII("extensions") | 573 FilePath ext_dir = install_dir.AppendASCII("extensions") |
572 .AppendASCII("bad") | 574 .AppendASCII("bad") |
573 .AppendASCII("Extensions") | 575 .AppendASCII("Extensions") |
574 .AppendASCII("ffffffffffffffffffffffffffffffff"); | 576 .AppendASCII("ffffffffffffffffffffffffffffffff"); |
575 | 577 |
576 std::string error; | 578 std::string error; |
577 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( | 579 scoped_refptr<Extension> extension(extension_file_util::LoadExtension( |
578 ext_dir, Extension::LOAD, Extension::NO_FLAGS, &error)); | 580 ext_dir, Manifest::LOAD, Extension::NO_FLAGS, &error)); |
579 ASSERT_TRUE(extension == NULL); | 581 ASSERT_TRUE(extension == NULL); |
580 ASSERT_STREQ("Could not load extension icon 'icon.png'.", | 582 ASSERT_STREQ("Could not load extension icon 'icon.png'.", |
581 error.c_str()); | 583 error.c_str()); |
582 | 584 |
583 // Try to install an extension with a zero-length browser action icon file. | 585 // Try to install an extension with a zero-length browser action icon file. |
584 ext_dir = install_dir.AppendASCII("extensions") | 586 ext_dir = install_dir.AppendASCII("extensions") |
585 .AppendASCII("bad") | 587 .AppendASCII("bad") |
586 .AppendASCII("Extensions") | 588 .AppendASCII("Extensions") |
587 .AppendASCII("gggggggggggggggggggggggggggggggg"); | 589 .AppendASCII("gggggggggggggggggggggggggggggggg"); |
588 | 590 |
589 scoped_refptr<Extension> extension2(extension_file_util::LoadExtension( | 591 scoped_refptr<Extension> extension2(extension_file_util::LoadExtension( |
590 ext_dir, Extension::LOAD, Extension::NO_FLAGS, &error)); | 592 ext_dir, Manifest::LOAD, Extension::NO_FLAGS, &error)); |
591 ASSERT_TRUE(extension2 == NULL); | 593 ASSERT_TRUE(extension2 == NULL); |
592 ASSERT_STREQ("Could not load icon 'icon.png' for browser action.", | 594 ASSERT_STREQ("Could not load icon 'icon.png' for browser action.", |
593 error.c_str()); | 595 error.c_str()); |
594 | 596 |
595 // Try to install an extension with a zero-length page action icon file. | 597 // Try to install an extension with a zero-length page action icon file. |
596 ext_dir = install_dir.AppendASCII("extensions") | 598 ext_dir = install_dir.AppendASCII("extensions") |
597 .AppendASCII("bad") | 599 .AppendASCII("bad") |
598 .AppendASCII("Extensions") | 600 .AppendASCII("Extensions") |
599 .AppendASCII("hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"); | 601 .AppendASCII("hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"); |
600 | 602 |
601 scoped_refptr<Extension> extension3(extension_file_util::LoadExtension( | 603 scoped_refptr<Extension> extension3(extension_file_util::LoadExtension( |
602 ext_dir, Extension::LOAD, Extension::NO_FLAGS, &error)); | 604 ext_dir, Manifest::LOAD, Extension::NO_FLAGS, &error)); |
603 ASSERT_TRUE(extension3 == NULL); | 605 ASSERT_TRUE(extension3 == NULL); |
604 ASSERT_STREQ("Could not load icon 'icon.png' for page action.", | 606 ASSERT_STREQ("Could not load icon 'icon.png' for page action.", |
605 error.c_str()); | 607 error.c_str()); |
606 } | 608 } |
607 | 609 |
608 // TODO(aa): More tests as motivation allows. Maybe steal some from | 610 // TODO(aa): More tests as motivation allows. Maybe steal some from |
609 // ExtensionService? Many of them could probably be tested here without the | 611 // ExtensionService? Many of them could probably be tested here without the |
610 // MessageLoop shenanigans. | 612 // MessageLoop shenanigans. |
OLD | NEW |