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

Side by Side Diff: chrome/browser/extensions/extension_service_unittest.cc

Issue 18286004: Move PathExists to base namespace. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/browser/extensions/extension_service_unittest.h" 5 #include "chrome/browser/extensions/extension_service_unittest.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 Manifest::Location location); 668 Manifest::Location location);
669 669
670 void PackCRX(const base::FilePath& dir_path, 670 void PackCRX(const base::FilePath& dir_path,
671 const base::FilePath& pem_path, 671 const base::FilePath& pem_path,
672 const base::FilePath& crx_path) { 672 const base::FilePath& crx_path) {
673 // Use the existing pem key, if provided. 673 // Use the existing pem key, if provided.
674 base::FilePath pem_output_path; 674 base::FilePath pem_output_path;
675 if (pem_path.value().empty()) { 675 if (pem_path.value().empty()) {
676 pem_output_path = crx_path.DirName().AppendASCII("temp.pem"); 676 pem_output_path = crx_path.DirName().AppendASCII("temp.pem");
677 } else { 677 } else {
678 ASSERT_TRUE(file_util::PathExists(pem_path)); 678 ASSERT_TRUE(base::PathExists(pem_path));
679 } 679 }
680 680
681 ASSERT_TRUE(base::Delete(crx_path, false)); 681 ASSERT_TRUE(base::Delete(crx_path, false));
682 682
683 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); 683 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator());
684 ASSERT_TRUE(creator->Run(dir_path, 684 ASSERT_TRUE(creator->Run(dir_path,
685 crx_path, 685 crx_path,
686 pem_path, 686 pem_path,
687 pem_output_path, 687 pem_output_path,
688 ExtensionCreator::kOverwriteCRX)); 688 ExtensionCreator::kOverwriteCRX));
689 689
690 ASSERT_TRUE(file_util::PathExists(crx_path)); 690 ASSERT_TRUE(base::PathExists(crx_path));
691 } 691 }
692 692
693 // Create a CrxInstaller and start installation. To allow the install 693 // Create a CrxInstaller and start installation. To allow the install
694 // to happen, use loop_.RunUntilIdle();. Most tests will not use this 694 // to happen, use loop_.RunUntilIdle();. Most tests will not use this
695 // method directly. Instead, use InstallCrx(), which waits for 695 // method directly. Instead, use InstallCrx(), which waits for
696 // the crx to be installed and does extra error checking. 696 // the crx to be installed and does extra error checking.
697 void StartCRXInstall(const base::FilePath& crx_path) { 697 void StartCRXInstall(const base::FilePath& crx_path) {
698 StartCRXInstall(crx_path, Extension::NO_FLAGS); 698 StartCRXInstall(crx_path, Extension::NO_FLAGS);
699 } 699 }
700 700
701 void StartCRXInstall(const base::FilePath& crx_path, int creation_flags) { 701 void StartCRXInstall(const base::FilePath& crx_path, int creation_flags) {
702 ASSERT_TRUE(file_util::PathExists(crx_path)) 702 ASSERT_TRUE(base::PathExists(crx_path))
703 << "Path does not exist: "<< crx_path.value().c_str(); 703 << "Path does not exist: "<< crx_path.value().c_str();
704 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL)); 704 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL));
705 installer->set_creation_flags(creation_flags); 705 installer->set_creation_flags(creation_flags);
706 if (!(creation_flags & Extension::WAS_INSTALLED_BY_DEFAULT)) { 706 if (!(creation_flags & Extension::WAS_INSTALLED_BY_DEFAULT)) {
707 installer->set_allow_silent_install(true); 707 installer->set_allow_silent_install(true);
708 } 708 }
709 709
710 content::WindowedNotificationObserver windowed_observer( 710 content::WindowedNotificationObserver windowed_observer(
711 chrome::NOTIFICATION_CRX_INSTALLER_DONE, 711 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
712 content::Source<extensions::CrxInstaller>(installer)); 712 content::Source<extensions::CrxInstaller>(installer));
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 777
778 const Extension* InstallCRXFromWebStore(const base::FilePath& path, 778 const Extension* InstallCRXFromWebStore(const base::FilePath& path,
779 InstallState install_state) { 779 InstallState install_state) {
780 StartCRXInstall(path, Extension::FROM_WEBSTORE); 780 StartCRXInstall(path, Extension::FROM_WEBSTORE);
781 return WaitForCrxInstall(path, install_state); 781 return WaitForCrxInstall(path, install_state);
782 } 782 }
783 783
784 const Extension* InstallCRXWithLocation(const base::FilePath& crx_path, 784 const Extension* InstallCRXWithLocation(const base::FilePath& crx_path,
785 Manifest::Location install_location, 785 Manifest::Location install_location,
786 InstallState install_state) { 786 InstallState install_state) {
787 EXPECT_TRUE(file_util::PathExists(crx_path)) 787 EXPECT_TRUE(base::PathExists(crx_path))
788 << "Path does not exist: "<< crx_path.value().c_str(); 788 << "Path does not exist: "<< crx_path.value().c_str();
789 // no client (silent install) 789 // no client (silent install)
790 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL)); 790 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL));
791 installer->set_install_source(install_location); 791 installer->set_install_source(install_location);
792 installer->InstallCrx(crx_path); 792 installer->InstallCrx(crx_path);
793 793
794 return WaitForCrxInstall(crx_path, install_state); 794 return WaitForCrxInstall(crx_path, install_state);
795 } 795 }
796 796
797 // Wait for a CrxInstaller to finish. Used by InstallCRX. Set the 797 // Wait for a CrxInstaller to finish. Used by InstallCRX. Set the
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
879 " }\n" 879 " }\n"
880 " ]\n" 880 " ]\n"
881 "}"; 881 "}";
882 gpu::GPUInfo gpu_info; 882 gpu::GPUInfo gpu_info;
883 content::GpuDataManager::GetInstance()->InitializeForTesting( 883 content::GpuDataManager::GetInstance()->InitializeForTesting(
884 json_blacklist, gpu_info); 884 json_blacklist, gpu_info);
885 } 885 }
886 886
887 void UpdateExtension(const std::string& id, const base::FilePath& in_path, 887 void UpdateExtension(const std::string& id, const base::FilePath& in_path,
888 UpdateState expected_state) { 888 UpdateState expected_state) {
889 ASSERT_TRUE(file_util::PathExists(in_path)); 889 ASSERT_TRUE(base::PathExists(in_path));
890 890
891 // We need to copy this to a temporary location because Update() will delete 891 // We need to copy this to a temporary location because Update() will delete
892 // it. 892 // it.
893 base::FilePath path = temp_dir_.path(); 893 base::FilePath path = temp_dir_.path();
894 path = path.Append(in_path.BaseName()); 894 path = path.Append(in_path.BaseName());
895 ASSERT_TRUE(base::CopyFile(in_path, path)); 895 ASSERT_TRUE(base::CopyFile(in_path, path));
896 896
897 int previous_enabled_extension_count = 897 int previous_enabled_extension_count =
898 service_->extensions()->size(); 898 service_->extensions()->size();
899 int previous_installed_extension_count = 899 int previous_installed_extension_count =
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 (expected_state >= INSTALLED) ? 1 : 0; 931 (expected_state >= INSTALLED) ? 1 : 0;
932 int expected_enabled_extension_count = 932 int expected_enabled_extension_count =
933 (expected_state >= ENABLED) ? 1 : 0; 933 (expected_state >= ENABLED) ? 1 : 0;
934 EXPECT_EQ(expected_installed_extension_count, 934 EXPECT_EQ(expected_installed_extension_count,
935 installed_extension_count); 935 installed_extension_count);
936 EXPECT_EQ(expected_enabled_extension_count, 936 EXPECT_EQ(expected_enabled_extension_count,
937 enabled_extension_count); 937 enabled_extension_count);
938 } 938 }
939 939
940 // Update() should the temporary input file. 940 // Update() should the temporary input file.
941 EXPECT_FALSE(file_util::PathExists(path)); 941 EXPECT_FALSE(base::PathExists(path));
942 } 942 }
943 943
944 void TerminateExtension(const std::string& id) { 944 void TerminateExtension(const std::string& id) {
945 const Extension* extension = service_->GetInstalledExtension(id); 945 const Extension* extension = service_->GetInstalledExtension(id);
946 if (!extension) { 946 if (!extension) {
947 ADD_FAILURE(); 947 ADD_FAILURE();
948 return; 948 return;
949 } 949 }
950 service_->TrackTerminatedExtensionForTest(extension); 950 service_->TrackTerminatedExtensionForTest(extension);
951 } 951 }
952 952
953 size_t GetPrefKeyCount() { 953 size_t GetPrefKeyCount() {
954 const DictionaryValue* dict = 954 const DictionaryValue* dict =
955 profile_->GetPrefs()->GetDictionary("extensions.settings"); 955 profile_->GetPrefs()->GetDictionary("extensions.settings");
956 if (!dict) { 956 if (!dict) {
957 ADD_FAILURE(); 957 ADD_FAILURE();
958 return 0; 958 return 0;
959 } 959 }
960 return dict->size(); 960 return dict->size();
961 } 961 }
962 962
963 void UninstallExtension(const std::string& id, bool use_helper) { 963 void UninstallExtension(const std::string& id, bool use_helper) {
964 // Verify that the extension is installed. 964 // Verify that the extension is installed.
965 base::FilePath extension_path = extensions_install_dir_.AppendASCII(id); 965 base::FilePath extension_path = extensions_install_dir_.AppendASCII(id);
966 EXPECT_TRUE(file_util::PathExists(extension_path)); 966 EXPECT_TRUE(base::PathExists(extension_path));
967 size_t pref_key_count = GetPrefKeyCount(); 967 size_t pref_key_count = GetPrefKeyCount();
968 EXPECT_GT(pref_key_count, 0u); 968 EXPECT_GT(pref_key_count, 0u);
969 ValidateIntegerPref(id, "state", Extension::ENABLED); 969 ValidateIntegerPref(id, "state", Extension::ENABLED);
970 970
971 // Uninstall it. 971 // Uninstall it.
972 if (use_helper) { 972 if (use_helper) {
973 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper(service_, id)); 973 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper(service_, id));
974 } else { 974 } else {
975 EXPECT_TRUE(service_->UninstallExtension(id, false, NULL)); 975 EXPECT_TRUE(service_->UninstallExtension(id, false, NULL));
976 } 976 }
(...skipping 10 matching lines...) Expand all
987 Extension::EXTERNAL_EXTENSION_UNINSTALLED); 987 Extension::EXTERNAL_EXTENSION_UNINSTALLED);
988 } else { 988 } else {
989 EXPECT_EQ(new_pref_key_count, pref_key_count - 1); 989 EXPECT_EQ(new_pref_key_count, pref_key_count - 1);
990 } 990 }
991 991
992 // The extension should not be in the service anymore. 992 // The extension should not be in the service anymore.
993 EXPECT_FALSE(service_->GetInstalledExtension(id)); 993 EXPECT_FALSE(service_->GetInstalledExtension(id));
994 loop_.RunUntilIdle(); 994 loop_.RunUntilIdle();
995 995
996 // The directory should be gone. 996 // The directory should be gone.
997 EXPECT_FALSE(file_util::PathExists(extension_path)); 997 EXPECT_FALSE(base::PathExists(extension_path));
998 } 998 }
999 999
1000 void ValidatePrefKeyCount(size_t count) { 1000 void ValidatePrefKeyCount(size_t count) {
1001 EXPECT_EQ(count, GetPrefKeyCount()); 1001 EXPECT_EQ(count, GetPrefKeyCount());
1002 } 1002 }
1003 1003
1004 void ValidateBooleanPref(const std::string& extension_id, 1004 void ValidateBooleanPref(const std::string& extension_id,
1005 const std::string& pref_path, 1005 const std::string& pref_path,
1006 bool expected_val) { 1006 bool expected_val) {
1007 std::string msg = " while checking: "; 1007 std::string msg = " while checking: ";
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1198 const base::FilePath& crx_path, 1198 const base::FilePath& crx_path,
1199 const base::FilePath& private_key_path) { 1199 const base::FilePath& private_key_path) {
1200 // We got the notification and processed it; we don't expect any further tasks 1200 // We got the notification and processed it; we don't expect any further tasks
1201 // to be posted to the current thread, so we should stop blocking and continue 1201 // to be posted to the current thread, so we should stop blocking and continue
1202 // on with the rest of the test. 1202 // on with the rest of the test.
1203 // This call to |Quit()| matches the call to |Run()| in the 1203 // This call to |Quit()| matches the call to |Run()| in the
1204 // |PackPunctuatedExtension| test. 1204 // |PackPunctuatedExtension| test.
1205 base::MessageLoop::current()->Quit(); 1205 base::MessageLoop::current()->Quit();
1206 EXPECT_EQ(expected_crx_path_.value(), crx_path.value()); 1206 EXPECT_EQ(expected_crx_path_.value(), crx_path.value());
1207 EXPECT_EQ(expected_private_key_path_.value(), private_key_path.value()); 1207 EXPECT_EQ(expected_private_key_path_.value(), private_key_path.value());
1208 ASSERT_TRUE(file_util::PathExists(private_key_path)); 1208 ASSERT_TRUE(base::PathExists(private_key_path));
1209 } 1209 }
1210 1210
1211 // The tests are designed so that we never expect to see a packing error. 1211 // The tests are designed so that we never expect to see a packing error.
1212 void PackExtensionTestClient::OnPackFailure(const std::string& error_message, 1212 void PackExtensionTestClient::OnPackFailure(const std::string& error_message,
1213 ExtensionCreator::ErrorType type) { 1213 ExtensionCreator::ErrorType type) {
1214 if (type == ExtensionCreator::kCRXExists) 1214 if (type == ExtensionCreator::kCRXExists)
1215 FAIL() << "Packing should not fail."; 1215 FAIL() << "Packing should not fail.";
1216 else 1216 else
1217 FAIL() << "Existing CRX should have been overwritten."; 1217 FAIL() << "Existing CRX should have been overwritten.";
1218 } 1218 }
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
1403 size_t count = 0; 1403 size_t count = 0;
1404 while (!dirs.Next().empty()) 1404 while (!dirs.Next().empty())
1405 count++; 1405 count++;
1406 1406
1407 // We should have only gotten two extensions now. 1407 // We should have only gotten two extensions now.
1408 EXPECT_EQ(2u, count); 1408 EXPECT_EQ(2u, count);
1409 1409
1410 // And extension1 dir should now be toast. 1410 // And extension1 dir should now be toast.
1411 base::FilePath extension_dir = extensions_install_dir_ 1411 base::FilePath extension_dir = extensions_install_dir_
1412 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj"); 1412 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj");
1413 ASSERT_FALSE(file_util::PathExists(extension_dir)); 1413 ASSERT_FALSE(base::PathExists(extension_dir));
1414 } 1414 }
1415 1415
1416 // Test that GarbageCollectExtensions deletes the right versions of an 1416 // Test that GarbageCollectExtensions deletes the right versions of an
1417 // extension. 1417 // extension.
1418 TEST_F(ExtensionServiceTest, GarbageCollectWithPendingUpdates) { 1418 TEST_F(ExtensionServiceTest, GarbageCollectWithPendingUpdates) {
1419 InitPluginService(); 1419 InitPluginService();
1420 1420
1421 base::FilePath source_install_dir = data_dir_ 1421 base::FilePath source_install_dir = data_dir_
1422 .AppendASCII("pending_updates") 1422 .AppendASCII("pending_updates")
1423 .AppendASCII("Extensions"); 1423 .AppendASCII("Extensions");
1424 base::FilePath pref_path = source_install_dir 1424 base::FilePath pref_path = source_install_dir
1425 .DirName() 1425 .DirName()
1426 .AppendASCII("Preferences"); 1426 .AppendASCII("Preferences");
1427 1427
1428 InitializeInstalledExtensionService(pref_path, source_install_dir); 1428 InitializeInstalledExtensionService(pref_path, source_install_dir);
1429 1429
1430 // This is the directory that is going to be deleted, so make sure it actually 1430 // This is the directory that is going to be deleted, so make sure it actually
1431 // is there before the garbage collection. 1431 // is there before the garbage collection.
1432 ASSERT_TRUE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1432 ASSERT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII(
1433 "hpiknbiabeeppbpihjehijgoemciehgk/3"))); 1433 "hpiknbiabeeppbpihjehijgoemciehgk/3")));
1434 1434
1435 service_->GarbageCollectExtensions(); 1435 service_->GarbageCollectExtensions();
1436 // Wait for GarbageCollectExtensions task to complete. 1436 // Wait for GarbageCollectExtensions task to complete.
1437 loop_.RunUntilIdle(); 1437 loop_.RunUntilIdle();
1438 1438
1439 // Verify that the pending update for the first extension didn't get 1439 // Verify that the pending update for the first extension didn't get
1440 // deleted. 1440 // deleted.
1441 EXPECT_TRUE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1441 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII(
1442 "bjafgdebaacbbbecmhlhpofkepfkgcpa/1.0"))); 1442 "bjafgdebaacbbbecmhlhpofkepfkgcpa/1.0")));
1443 EXPECT_TRUE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1443 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII(
1444 "bjafgdebaacbbbecmhlhpofkepfkgcpa/2.0"))); 1444 "bjafgdebaacbbbecmhlhpofkepfkgcpa/2.0")));
1445 EXPECT_TRUE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1445 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII(
1446 "hpiknbiabeeppbpihjehijgoemciehgk/2"))); 1446 "hpiknbiabeeppbpihjehijgoemciehgk/2")));
1447 EXPECT_FALSE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1447 EXPECT_FALSE(base::PathExists(extensions_install_dir_.AppendASCII(
1448 "hpiknbiabeeppbpihjehijgoemciehgk/3"))); 1448 "hpiknbiabeeppbpihjehijgoemciehgk/3")));
1449 } 1449 }
1450 1450
1451 // Test that pending updates are properly handled on startup. 1451 // Test that pending updates are properly handled on startup.
1452 TEST_F(ExtensionServiceTest, UpdateOnStartup) { 1452 TEST_F(ExtensionServiceTest, UpdateOnStartup) {
1453 InitPluginService(); 1453 InitPluginService();
1454 1454
1455 base::FilePath source_install_dir = data_dir_ 1455 base::FilePath source_install_dir = data_dir_
1456 .AppendASCII("pending_updates") 1456 .AppendASCII("pending_updates")
1457 .AppendASCII("Extensions"); 1457 .AppendASCII("Extensions");
1458 base::FilePath pref_path = source_install_dir 1458 base::FilePath pref_path = source_install_dir
1459 .DirName() 1459 .DirName()
1460 .AppendASCII("Preferences"); 1460 .AppendASCII("Preferences");
1461 1461
1462 InitializeInstalledExtensionService(pref_path, source_install_dir); 1462 InitializeInstalledExtensionService(pref_path, source_install_dir);
1463 1463
1464 // This is the directory that is going to be deleted, so make sure it actually 1464 // This is the directory that is going to be deleted, so make sure it actually
1465 // is there before the garbage collection. 1465 // is there before the garbage collection.
1466 ASSERT_TRUE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1466 ASSERT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII(
1467 "hpiknbiabeeppbpihjehijgoemciehgk/3"))); 1467 "hpiknbiabeeppbpihjehijgoemciehgk/3")));
1468 1468
1469 service_->Init(); 1469 service_->Init();
1470 // A delayed task to call GarbageCollectExtensions is posted by 1470 // A delayed task to call GarbageCollectExtensions is posted by
1471 // ExtensionService::Init. As the test won't wait for the delayed task to 1471 // ExtensionService::Init. As the test won't wait for the delayed task to
1472 // be called, call it manually instead. 1472 // be called, call it manually instead.
1473 service_->GarbageCollectExtensions(); 1473 service_->GarbageCollectExtensions();
1474 // Wait for GarbageCollectExtensions task to complete. 1474 // Wait for GarbageCollectExtensions task to complete.
1475 loop_.RunUntilIdle(); 1475 loop_.RunUntilIdle();
1476 1476
1477 // Verify that the pending update for the first extension got installed. 1477 // Verify that the pending update for the first extension got installed.
1478 EXPECT_FALSE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1478 EXPECT_FALSE(base::PathExists(extensions_install_dir_.AppendASCII(
1479 "bjafgdebaacbbbecmhlhpofkepfkgcpa/1.0"))); 1479 "bjafgdebaacbbbecmhlhpofkepfkgcpa/1.0")));
1480 EXPECT_TRUE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1480 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII(
1481 "bjafgdebaacbbbecmhlhpofkepfkgcpa/2.0"))); 1481 "bjafgdebaacbbbecmhlhpofkepfkgcpa/2.0")));
1482 EXPECT_TRUE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1482 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII(
1483 "hpiknbiabeeppbpihjehijgoemciehgk/2"))); 1483 "hpiknbiabeeppbpihjehijgoemciehgk/2")));
1484 EXPECT_FALSE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1484 EXPECT_FALSE(base::PathExists(extensions_install_dir_.AppendASCII(
1485 "hpiknbiabeeppbpihjehijgoemciehgk/3"))); 1485 "hpiknbiabeeppbpihjehijgoemciehgk/3")));
1486 1486
1487 // Make sure update information got deleted. 1487 // Make sure update information got deleted.
1488 ExtensionPrefs* prefs = service_->extension_prefs(); 1488 ExtensionPrefs* prefs = service_->extension_prefs();
1489 EXPECT_FALSE( 1489 EXPECT_FALSE(
1490 prefs->GetDelayedInstallInfo("bjafgdebaacbbbecmhlhpofkepfkgcpa")); 1490 prefs->GetDelayedInstallInfo("bjafgdebaacbbbecmhlhpofkepfkgcpa"));
1491 } 1491 }
1492 1492
1493 // Test various cases for delayed install because of missing imports. 1493 // Test various cases for delayed install because of missing imports.
1494 TEST_F(ExtensionServiceTest, PendingImports) { 1494 TEST_F(ExtensionServiceTest, PendingImports) {
(...skipping 10 matching lines...) Expand all
1505 1505
1506 // Verify there are no pending extensions initially. 1506 // Verify there are no pending extensions initially.
1507 EXPECT_FALSE(service_->pending_extension_manager()->HasPendingExtensions()); 1507 EXPECT_FALSE(service_->pending_extension_manager()->HasPendingExtensions());
1508 1508
1509 service_->Init(); 1509 service_->Init();
1510 // Wait for GarbageCollectExtensions task to complete. 1510 // Wait for GarbageCollectExtensions task to complete.
1511 loop_.RunUntilIdle(); 1511 loop_.RunUntilIdle();
1512 1512
1513 // These extensions are used by the extensions we test below, they must be 1513 // These extensions are used by the extensions we test below, they must be
1514 // installed. 1514 // installed.
1515 EXPECT_TRUE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1515 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII(
1516 "bjafgdebaacbbbecmhlhpofkepfkgcpa/1.0"))); 1516 "bjafgdebaacbbbecmhlhpofkepfkgcpa/1.0")));
1517 EXPECT_TRUE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1517 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII(
1518 "hpiknbiabeeppbpihjehijgoemciehgk/2"))); 1518 "hpiknbiabeeppbpihjehijgoemciehgk/2")));
1519 1519
1520 // Each of these extensions should have been rejected because of dependencies 1520 // Each of these extensions should have been rejected because of dependencies
1521 // that cannot be satisfied. 1521 // that cannot be satisfied.
1522 ExtensionPrefs* prefs = service_->extension_prefs(); 1522 ExtensionPrefs* prefs = service_->extension_prefs();
1523 EXPECT_FALSE( 1523 EXPECT_FALSE(
1524 prefs->GetDelayedInstallInfo("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); 1524 prefs->GetDelayedInstallInfo("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
1525 EXPECT_FALSE( 1525 EXPECT_FALSE(
1526 prefs->GetInstalledExtensionInfo("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); 1526 prefs->GetInstalledExtensionInfo("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
1527 EXPECT_FALSE( 1527 EXPECT_FALSE(
1528 prefs->GetDelayedInstallInfo("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")); 1528 prefs->GetDelayedInstallInfo("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"));
1529 EXPECT_FALSE( 1529 EXPECT_FALSE(
1530 prefs->GetInstalledExtensionInfo("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")); 1530 prefs->GetInstalledExtensionInfo("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"));
1531 EXPECT_FALSE( 1531 EXPECT_FALSE(
1532 prefs->GetDelayedInstallInfo("cccccccccccccccccccccccccccccccc")); 1532 prefs->GetDelayedInstallInfo("cccccccccccccccccccccccccccccccc"));
1533 EXPECT_FALSE( 1533 EXPECT_FALSE(
1534 prefs->GetInstalledExtensionInfo("cccccccccccccccccccccccccccccccc")); 1534 prefs->GetInstalledExtensionInfo("cccccccccccccccccccccccccccccccc"));
1535 1535
1536 // Make sure the import started for the extension with a dependency. 1536 // Make sure the import started for the extension with a dependency.
1537 EXPECT_TRUE( 1537 EXPECT_TRUE(
1538 prefs->GetDelayedInstallInfo("behllobkkfkfnphdnhnkndlbkcpglgmj")); 1538 prefs->GetDelayedInstallInfo("behllobkkfkfnphdnhnkndlbkcpglgmj"));
1539 EXPECT_EQ(ExtensionPrefs::DELAY_REASON_WAIT_FOR_IMPORTS, 1539 EXPECT_EQ(ExtensionPrefs::DELAY_REASON_WAIT_FOR_IMPORTS,
1540 prefs->GetDelayedInstallReason("behllobkkfkfnphdnhnkndlbkcpglgmj")); 1540 prefs->GetDelayedInstallReason("behllobkkfkfnphdnhnkndlbkcpglgmj"));
1541 1541
1542 EXPECT_FALSE(file_util::PathExists(extensions_install_dir_.AppendASCII( 1542 EXPECT_FALSE(base::PathExists(extensions_install_dir_.AppendASCII(
1543 "behllobkkfkfnphdnhnkndlbkcpglgmj/1.0.0.0"))); 1543 "behllobkkfkfnphdnhnkndlbkcpglgmj/1.0.0.0")));
1544 1544
1545 EXPECT_TRUE(service_->pending_extension_manager()->HasPendingExtensions()); 1545 EXPECT_TRUE(service_->pending_extension_manager()->HasPendingExtensions());
1546 std::string pending_id("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); 1546 std::string pending_id("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
1547 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(pending_id)); 1547 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(pending_id));
1548 // Remove it because we are not testing the pending extension manager's 1548 // Remove it because we are not testing the pending extension manager's
1549 // ability to download and install extensions. 1549 // ability to download and install extensions.
1550 EXPECT_TRUE(service_->pending_extension_manager()->Remove(pending_id)); 1550 EXPECT_TRUE(service_->pending_extension_manager()->Remove(pending_id));
1551 } 1551 }
1552 1552
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1794 1794
1795 // Install a user script (they get converted automatically to an extension) 1795 // Install a user script (they get converted automatically to an extension)
1796 TEST_F(ExtensionServiceTest, InstallUserScript) { 1796 TEST_F(ExtensionServiceTest, InstallUserScript) {
1797 // The details of script conversion are tested elsewhere, this just tests 1797 // The details of script conversion are tested elsewhere, this just tests
1798 // integration with ExtensionService. 1798 // integration with ExtensionService.
1799 InitializeEmptyExtensionService(); 1799 InitializeEmptyExtensionService();
1800 1800
1801 base::FilePath path = data_dir_ 1801 base::FilePath path = data_dir_
1802 .AppendASCII("user_script_basic.user.js"); 1802 .AppendASCII("user_script_basic.user.js");
1803 1803
1804 ASSERT_TRUE(file_util::PathExists(path)); 1804 ASSERT_TRUE(base::PathExists(path));
1805 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL)); 1805 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL));
1806 installer->set_allow_silent_install(true); 1806 installer->set_allow_silent_install(true);
1807 installer->InstallUserScript( 1807 installer->InstallUserScript(
1808 path, 1808 path,
1809 GURL("http://www.aaronboodman.com/scripts/user_script_basic.user.js")); 1809 GURL("http://www.aaronboodman.com/scripts/user_script_basic.user.js"));
1810 1810
1811 loop_.RunUntilIdle(); 1811 loop_.RunUntilIdle();
1812 std::vector<string16> errors = GetErrors(); 1812 std::vector<string16> errors = GetErrors();
1813 EXPECT_TRUE(installed_) << "Nothing was installed."; 1813 EXPECT_TRUE(installed_) << "Nothing was installed.";
1814 EXPECT_FALSE(was_update_) << path.value(); 1814 EXPECT_FALSE(was_update_) << path.value();
(...skipping 29 matching lines...) Expand all
1844 // This tests that the granted permissions preferences are correctly set when 1844 // This tests that the granted permissions preferences are correctly set when
1845 // installing an extension. 1845 // installing an extension.
1846 TEST_F(ExtensionServiceTest, GrantedPermissions) { 1846 TEST_F(ExtensionServiceTest, GrantedPermissions) {
1847 InitializeEmptyExtensionService(); 1847 InitializeEmptyExtensionService();
1848 base::FilePath path = data_dir_ 1848 base::FilePath path = data_dir_
1849 .AppendASCII("permissions"); 1849 .AppendASCII("permissions");
1850 1850
1851 base::FilePath pem_path = path.AppendASCII("unknown.pem"); 1851 base::FilePath pem_path = path.AppendASCII("unknown.pem");
1852 path = path.AppendASCII("unknown"); 1852 path = path.AppendASCII("unknown");
1853 1853
1854 ASSERT_TRUE(file_util::PathExists(pem_path)); 1854 ASSERT_TRUE(base::PathExists(pem_path));
1855 ASSERT_TRUE(file_util::PathExists(path)); 1855 ASSERT_TRUE(base::PathExists(path));
1856 1856
1857 ExtensionPrefs* prefs = service_->extension_prefs(); 1857 ExtensionPrefs* prefs = service_->extension_prefs();
1858 1858
1859 APIPermissionSet expected_api_perms; 1859 APIPermissionSet expected_api_perms;
1860 URLPatternSet expected_host_perms; 1860 URLPatternSet expected_host_perms;
1861 1861
1862 // Make sure there aren't any granted permissions before the 1862 // Make sure there aren't any granted permissions before the
1863 // extension is installed. 1863 // extension is installed.
1864 scoped_refptr<PermissionSet> known_perms( 1864 scoped_refptr<PermissionSet> known_perms(
1865 prefs->GetGrantedPermissions(permissions_crx)); 1865 prefs->GetGrantedPermissions(permissions_crx));
(...skipping 27 matching lines...) Expand all
1893 // default apps. 1893 // default apps.
1894 TEST_F(ExtensionServiceTest, DefaultAppsGrantedPermissions) { 1894 TEST_F(ExtensionServiceTest, DefaultAppsGrantedPermissions) {
1895 InitializeEmptyExtensionService(); 1895 InitializeEmptyExtensionService();
1896 InitializeRequestContext(); 1896 InitializeRequestContext();
1897 base::FilePath path = data_dir_ 1897 base::FilePath path = data_dir_
1898 .AppendASCII("permissions"); 1898 .AppendASCII("permissions");
1899 1899
1900 base::FilePath pem_path = path.AppendASCII("unknown.pem"); 1900 base::FilePath pem_path = path.AppendASCII("unknown.pem");
1901 path = path.AppendASCII("unknown"); 1901 path = path.AppendASCII("unknown");
1902 1902
1903 ASSERT_TRUE(file_util::PathExists(pem_path)); 1903 ASSERT_TRUE(base::PathExists(pem_path));
1904 ASSERT_TRUE(file_util::PathExists(path)); 1904 ASSERT_TRUE(base::PathExists(path));
1905 1905
1906 ExtensionPrefs* prefs = service_->extension_prefs(); 1906 ExtensionPrefs* prefs = service_->extension_prefs();
1907 1907
1908 APIPermissionSet expected_api_perms; 1908 APIPermissionSet expected_api_perms;
1909 URLPatternSet expected_host_perms; 1909 URLPatternSet expected_host_perms;
1910 1910
1911 // Make sure there aren't any granted permissions before the 1911 // Make sure there aren't any granted permissions before the
1912 // extension is installed. 1912 // extension is installed.
1913 scoped_refptr<PermissionSet> known_perms( 1913 scoped_refptr<PermissionSet> known_perms(
1914 prefs->GetGrantedPermissions(permissions_crx)); 1914 prefs->GetGrantedPermissions(permissions_crx));
(...skipping 25 matching lines...) Expand all
1940 InitPluginService(); 1940 InitPluginService();
1941 1941
1942 InitializeEmptyExtensionService(); 1942 InitializeEmptyExtensionService();
1943 1943
1944 base::FilePath path = data_dir_ 1944 base::FilePath path = data_dir_
1945 .AppendASCII("good") 1945 .AppendASCII("good")
1946 .AppendASCII("Extensions") 1946 .AppendASCII("Extensions")
1947 .AppendASCII(good1) 1947 .AppendASCII(good1)
1948 .AppendASCII("2"); 1948 .AppendASCII("2");
1949 1949
1950 ASSERT_TRUE(file_util::PathExists(path)); 1950 ASSERT_TRUE(base::PathExists(path));
1951 const Extension* extension = PackAndInstallCRX(path, INSTALL_NEW); 1951 const Extension* extension = PackAndInstallCRX(path, INSTALL_NEW);
1952 EXPECT_EQ(0u, GetErrors().size()); 1952 EXPECT_EQ(0u, GetErrors().size());
1953 EXPECT_EQ(1u, service_->extensions()->size()); 1953 EXPECT_EQ(1u, service_->extensions()->size());
1954 ExtensionPrefs* prefs = service_->extension_prefs(); 1954 ExtensionPrefs* prefs = service_->extension_prefs();
1955 1955
1956 scoped_refptr<PermissionSet> permissions( 1956 scoped_refptr<PermissionSet> permissions(
1957 prefs->GetGrantedPermissions(extension->id())); 1957 prefs->GetGrantedPermissions(extension->id()));
1958 EXPECT_FALSE(permissions->IsEmpty()); 1958 EXPECT_FALSE(permissions->IsEmpty());
1959 EXPECT_TRUE(permissions->HasEffectiveFullAccess()); 1959 EXPECT_TRUE(permissions->HasEffectiveFullAccess());
1960 EXPECT_FALSE(permissions->apis().empty()); 1960 EXPECT_FALSE(permissions->apis().empty());
1961 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kPlugin)); 1961 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kPlugin));
1962 1962
1963 // Full access implies full host access too... 1963 // Full access implies full host access too...
1964 EXPECT_TRUE(permissions->HasEffectiveAccessToAllHosts()); 1964 EXPECT_TRUE(permissions->HasEffectiveAccessToAllHosts());
1965 } 1965 }
1966 #endif 1966 #endif
1967 1967
1968 // Tests that the extension is disabled when permissions are missing from 1968 // Tests that the extension is disabled when permissions are missing from
1969 // the extension's granted permissions preferences. (This simulates updating 1969 // the extension's granted permissions preferences. (This simulates updating
1970 // the browser to a version which recognizes more permissions). 1970 // the browser to a version which recognizes more permissions).
1971 TEST_F(ExtensionServiceTest, GrantedAPIAndHostPermissions) { 1971 TEST_F(ExtensionServiceTest, GrantedAPIAndHostPermissions) {
1972 InitializeEmptyExtensionService(); 1972 InitializeEmptyExtensionService();
1973 1973
1974 base::FilePath path = data_dir_ 1974 base::FilePath path = data_dir_
1975 .AppendASCII("permissions") 1975 .AppendASCII("permissions")
1976 .AppendASCII("unknown"); 1976 .AppendASCII("unknown");
1977 1977
1978 ASSERT_TRUE(file_util::PathExists(path)); 1978 ASSERT_TRUE(base::PathExists(path));
1979 1979
1980 const Extension* extension = PackAndInstallCRX(path, INSTALL_NEW); 1980 const Extension* extension = PackAndInstallCRX(path, INSTALL_NEW);
1981 1981
1982 EXPECT_EQ(0u, GetErrors().size()); 1982 EXPECT_EQ(0u, GetErrors().size());
1983 EXPECT_EQ(1u, service_->extensions()->size()); 1983 EXPECT_EQ(1u, service_->extensions()->size());
1984 std::string extension_id = extension->id(); 1984 std::string extension_id = extension->id();
1985 1985
1986 ExtensionPrefs* prefs = service_->extension_prefs(); 1986 ExtensionPrefs* prefs = service_->extension_prefs();
1987 1987
1988 APIPermissionSet expected_api_permissions; 1988 APIPermissionSet expected_api_permissions;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
2079 base::ScopedTempDir temp_dir; 2079 base::ScopedTempDir temp_dir;
2080 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 2080 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
2081 base::FilePath output_directory = temp_dir.path(); 2081 base::FilePath output_directory = temp_dir.path();
2082 2082
2083 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); 2083 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx"));
2084 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem")); 2084 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem"));
2085 2085
2086 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); 2086 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator());
2087 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(), 2087 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(),
2088 privkey_path, ExtensionCreator::kNoRunFlags)); 2088 privkey_path, ExtensionCreator::kNoRunFlags));
2089 ASSERT_TRUE(file_util::PathExists(crx_path)); 2089 ASSERT_TRUE(base::PathExists(crx_path));
2090 ASSERT_TRUE(file_util::PathExists(privkey_path)); 2090 ASSERT_TRUE(base::PathExists(privkey_path));
2091 2091
2092 // Repeat the run with the pem file gone, and no special flags 2092 // Repeat the run with the pem file gone, and no special flags
2093 // Should refuse to overwrite the existing crx. 2093 // Should refuse to overwrite the existing crx.
2094 base::Delete(privkey_path, false); 2094 base::Delete(privkey_path, false);
2095 ASSERT_FALSE(creator->Run(input_directory, crx_path, base::FilePath(), 2095 ASSERT_FALSE(creator->Run(input_directory, crx_path, base::FilePath(),
2096 privkey_path, ExtensionCreator::kNoRunFlags)); 2096 privkey_path, ExtensionCreator::kNoRunFlags));
2097 2097
2098 // OK, now try it with a flag to overwrite existing crx. Should work. 2098 // OK, now try it with a flag to overwrite existing crx. Should work.
2099 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(), 2099 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(),
2100 privkey_path, ExtensionCreator::kOverwriteCRX)); 2100 privkey_path, ExtensionCreator::kOverwriteCRX));
2101 2101
2102 // Repeat the run allowing existing crx, but the existing pem is still 2102 // Repeat the run allowing existing crx, but the existing pem is still
2103 // an error. Should fail. 2103 // an error. Should fail.
2104 ASSERT_FALSE(creator->Run(input_directory, crx_path, base::FilePath(), 2104 ASSERT_FALSE(creator->Run(input_directory, crx_path, base::FilePath(),
2105 privkey_path, ExtensionCreator::kOverwriteCRX)); 2105 privkey_path, ExtensionCreator::kOverwriteCRX));
2106 2106
2107 ASSERT_TRUE(file_util::PathExists(privkey_path)); 2107 ASSERT_TRUE(base::PathExists(privkey_path));
2108 InstallCRX(crx_path, INSTALL_NEW); 2108 InstallCRX(crx_path, INSTALL_NEW);
2109 2109
2110 // Try packing with invalid paths. 2110 // Try packing with invalid paths.
2111 creator.reset(new ExtensionCreator()); 2111 creator.reset(new ExtensionCreator());
2112 ASSERT_FALSE( 2112 ASSERT_FALSE(
2113 creator->Run(base::FilePath(), base::FilePath(), base::FilePath(), 2113 creator->Run(base::FilePath(), base::FilePath(), base::FilePath(),
2114 base::FilePath(), ExtensionCreator::kOverwriteCRX)); 2114 base::FilePath(), ExtensionCreator::kOverwriteCRX));
2115 2115
2116 // Try packing an empty directory. Should fail because an empty directory is 2116 // Try packing an empty directory. Should fail because an empty directory is
2117 // not a valid extension. 2117 // not a valid extension.
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
2218 base::FilePath output_directory = output_temp_dir.path(); 2218 base::FilePath output_directory = output_temp_dir.path();
2219 2219
2220 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); 2220 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx"));
2221 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem")); 2221 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem"));
2222 2222
2223 // Pack the extension once to get a private key. 2223 // Pack the extension once to get a private key.
2224 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); 2224 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator());
2225 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(), 2225 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(),
2226 privkey_path, ExtensionCreator::kNoRunFlags)) 2226 privkey_path, ExtensionCreator::kNoRunFlags))
2227 << creator->error_message(); 2227 << creator->error_message();
2228 ASSERT_TRUE(file_util::PathExists(crx_path)); 2228 ASSERT_TRUE(base::PathExists(crx_path));
2229 ASSERT_TRUE(file_util::PathExists(privkey_path)); 2229 ASSERT_TRUE(base::PathExists(privkey_path));
2230 2230
2231 base::Delete(crx_path, false); 2231 base::Delete(crx_path, false);
2232 // Move the pem file into the extension. 2232 // Move the pem file into the extension.
2233 base::Move(privkey_path, 2233 base::Move(privkey_path,
2234 input_directory.AppendASCII("privkey.pem")); 2234 input_directory.AppendASCII("privkey.pem"));
2235 2235
2236 // This pack should fail because of the contained private key. 2236 // This pack should fail because of the contained private key.
2237 EXPECT_FALSE(creator->Run(input_directory, crx_path, base::FilePath(), 2237 EXPECT_FALSE(creator->Run(input_directory, crx_path, base::FilePath(),
2238 privkey_path, ExtensionCreator::kNoRunFlags)); 2238 privkey_path, ExtensionCreator::kNoRunFlags));
2239 EXPECT_THAT(creator->error_message(), 2239 EXPECT_THAT(creator->error_message(),
2240 testing::ContainsRegex( 2240 testing::ContainsRegex(
2241 "extension includes the key file.*privkey.pem")); 2241 "extension includes the key file.*privkey.pem"));
2242 } 2242 }
2243 2243
2244 // Test Packaging and installing an extension using an openssl generated key. 2244 // Test Packaging and installing an extension using an openssl generated key.
2245 // The openssl is generated with the following: 2245 // The openssl is generated with the following:
2246 // > openssl genrsa -out privkey.pem 1024 2246 // > openssl genrsa -out privkey.pem 1024
2247 // > openssl pkcs8 -topk8 -nocrypt -in privkey.pem -out privkey_asn1.pem 2247 // > openssl pkcs8 -topk8 -nocrypt -in privkey.pem -out privkey_asn1.pem
2248 // The privkey.pem is a PrivateKey, and the pcks8 -topk8 creates a 2248 // The privkey.pem is a PrivateKey, and the pcks8 -topk8 creates a
2249 // PrivateKeyInfo ASN.1 structure, we our RSAPrivateKey expects. 2249 // PrivateKeyInfo ASN.1 structure, we our RSAPrivateKey expects.
2250 TEST_F(ExtensionServiceTest, PackExtensionOpenSSLKey) { 2250 TEST_F(ExtensionServiceTest, PackExtensionOpenSSLKey) {
2251 InitializeEmptyExtensionService(); 2251 InitializeEmptyExtensionService();
2252 base::FilePath input_directory = data_dir_ 2252 base::FilePath input_directory = data_dir_
2253 .AppendASCII("good") 2253 .AppendASCII("good")
2254 .AppendASCII("Extensions") 2254 .AppendASCII("Extensions")
2255 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 2255 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj")
2256 .AppendASCII("1.0.0.0"); 2256 .AppendASCII("1.0.0.0");
2257 base::FilePath privkey_path(data_dir_.AppendASCII( 2257 base::FilePath privkey_path(data_dir_.AppendASCII(
2258 "openssl_privkey_asn1.pem")); 2258 "openssl_privkey_asn1.pem"));
2259 ASSERT_TRUE(file_util::PathExists(privkey_path)); 2259 ASSERT_TRUE(base::PathExists(privkey_path));
2260 2260
2261 base::ScopedTempDir temp_dir; 2261 base::ScopedTempDir temp_dir;
2262 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 2262 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
2263 base::FilePath output_directory = temp_dir.path(); 2263 base::FilePath output_directory = temp_dir.path();
2264 2264
2265 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); 2265 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx"));
2266 2266
2267 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); 2267 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator());
2268 ASSERT_TRUE(creator->Run(input_directory, crx_path, privkey_path, 2268 ASSERT_TRUE(creator->Run(input_directory, crx_path, privkey_path,
2269 base::FilePath(), ExtensionCreator::kOverwriteCRX)); 2269 base::FilePath(), ExtensionCreator::kOverwriteCRX));
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
2323 ASSERT_EQ(1u, loaded_.size()); 2323 ASSERT_EQ(1u, loaded_.size());
2324 EXPECT_EQ(1u, service_->extensions()->size()); 2324 EXPECT_EQ(1u, service_->extensions()->size());
2325 const Extension* theme = service_->extensions()->begin()->get(); 2325 const Extension* theme = service_->extensions()->begin()->get();
2326 EXPECT_EQ("name", theme->name()); 2326 EXPECT_EQ("name", theme->name());
2327 EXPECT_EQ("description", theme->description()); 2327 EXPECT_EQ("description", theme->description());
2328 2328
2329 // Cleanup the "Cached Theme.pak" file. Ideally, this would be installed in a 2329 // Cleanup the "Cached Theme.pak" file. Ideally, this would be installed in a
2330 // temporary directory, but it automatically installs to the extension's 2330 // temporary directory, but it automatically installs to the extension's
2331 // directory, and we don't want to copy the whole extension for a unittest. 2331 // directory, and we don't want to copy the whole extension for a unittest.
2332 base::FilePath theme_file = extension_path.Append(chrome::kThemePackFilename); 2332 base::FilePath theme_file = extension_path.Append(chrome::kThemePackFilename);
2333 ASSERT_TRUE(file_util::PathExists(theme_file)); 2333 ASSERT_TRUE(base::PathExists(theme_file));
2334 ASSERT_TRUE(base::Delete(theme_file, false)); // Not recursive. 2334 ASSERT_TRUE(base::Delete(theme_file, false)); // Not recursive.
2335 } 2335 }
2336 2336
2337 // Tests that we can change the ID of an unpacked extension by adding a key 2337 // Tests that we can change the ID of an unpacked extension by adding a key
2338 // to its manifest. 2338 // to its manifest.
2339 TEST_F(ExtensionServiceTest, UnpackedExtensionCanChangeID) { 2339 TEST_F(ExtensionServiceTest, UnpackedExtensionCanChangeID) {
2340 InitializeEmptyExtensionService(); 2340 InitializeEmptyExtensionService();
2341 2341
2342 base::ScopedTempDir temp; 2342 base::ScopedTempDir temp;
2343 ASSERT_TRUE(temp.CreateUniqueTempDir()); 2343 ASSERT_TRUE(temp.CreateUniqueTempDir());
2344 2344
2345 base::FilePath extension_path = temp.path(); 2345 base::FilePath extension_path = temp.path();
2346 base::FilePath manifest_path = 2346 base::FilePath manifest_path =
2347 extension_path.Append(extensions::kManifestFilename); 2347 extension_path.Append(extensions::kManifestFilename);
2348 base::FilePath manifest_no_key = data_dir_. 2348 base::FilePath manifest_no_key = data_dir_.
2349 AppendASCII("unpacked"). 2349 AppendASCII("unpacked").
2350 AppendASCII("manifest_no_key.json"); 2350 AppendASCII("manifest_no_key.json");
2351 2351
2352 base::FilePath manifest_with_key = data_dir_. 2352 base::FilePath manifest_with_key = data_dir_.
2353 AppendASCII("unpacked"). 2353 AppendASCII("unpacked").
2354 AppendASCII("manifest_with_key.json"); 2354 AppendASCII("manifest_with_key.json");
2355 2355
2356 ASSERT_TRUE(file_util::PathExists(manifest_no_key)); 2356 ASSERT_TRUE(base::PathExists(manifest_no_key));
2357 ASSERT_TRUE(file_util::PathExists(manifest_with_key)); 2357 ASSERT_TRUE(base::PathExists(manifest_with_key));
2358 2358
2359 // Load the unpacked extension with no key. 2359 // Load the unpacked extension with no key.
2360 base::CopyFile(manifest_no_key, manifest_path); 2360 base::CopyFile(manifest_no_key, manifest_path);
2361 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); 2361 extensions::UnpackedInstaller::Create(service_)->Load(extension_path);
2362 2362
2363 loop_.RunUntilIdle(); 2363 loop_.RunUntilIdle();
2364 EXPECT_EQ(0u, GetErrors().size()); 2364 EXPECT_EQ(0u, GetErrors().size());
2365 ASSERT_EQ(1u, loaded_.size()); 2365 ASSERT_EQ(1u, loaded_.size());
2366 EXPECT_EQ(1u, service_->extensions()->size()); 2366 EXPECT_EQ(1u, service_->extensions()->size());
2367 2367
(...skipping 12 matching lines...) Expand all
2380 } 2380 }
2381 2381
2382 #if defined(OS_POSIX) 2382 #if defined(OS_POSIX)
2383 TEST_F(ExtensionServiceTest, UnpackedExtensionMayContainSymlinkedFiles) { 2383 TEST_F(ExtensionServiceTest, UnpackedExtensionMayContainSymlinkedFiles) {
2384 base::FilePath source_data_dir = data_dir_. 2384 base::FilePath source_data_dir = data_dir_.
2385 AppendASCII("unpacked"). 2385 AppendASCII("unpacked").
2386 AppendASCII("symlinks_allowed"); 2386 AppendASCII("symlinks_allowed");
2387 2387
2388 // Paths to test data files. 2388 // Paths to test data files.
2389 base::FilePath source_manifest = source_data_dir.AppendASCII("manifest.json"); 2389 base::FilePath source_manifest = source_data_dir.AppendASCII("manifest.json");
2390 ASSERT_TRUE(file_util::PathExists(source_manifest)); 2390 ASSERT_TRUE(base::PathExists(source_manifest));
2391 base::FilePath source_icon = source_data_dir.AppendASCII("icon.png"); 2391 base::FilePath source_icon = source_data_dir.AppendASCII("icon.png");
2392 ASSERT_TRUE(file_util::PathExists(source_icon)); 2392 ASSERT_TRUE(base::PathExists(source_icon));
2393 2393
2394 // Set up the temporary extension directory. 2394 // Set up the temporary extension directory.
2395 base::ScopedTempDir temp; 2395 base::ScopedTempDir temp;
2396 ASSERT_TRUE(temp.CreateUniqueTempDir()); 2396 ASSERT_TRUE(temp.CreateUniqueTempDir());
2397 base::FilePath extension_path = temp.path(); 2397 base::FilePath extension_path = temp.path();
2398 base::FilePath manifest = extension_path.Append( 2398 base::FilePath manifest = extension_path.Append(
2399 extensions::kManifestFilename); 2399 extensions::kManifestFilename);
2400 base::FilePath icon_symlink = extension_path.AppendASCII("icon.png"); 2400 base::FilePath icon_symlink = extension_path.AppendASCII("icon.png");
2401 base::CopyFile(source_manifest, manifest); 2401 base::CopyFile(source_manifest, manifest);
2402 file_util::CreateSymbolicLink(source_icon, icon_symlink); 2402 file_util::CreateSymbolicLink(source_icon, icon_symlink);
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
2835 InitializeEmptyExtensionService(); 2835 InitializeEmptyExtensionService();
2836 2836
2837 base::ScopedTempDir temp; 2837 base::ScopedTempDir temp;
2838 ASSERT_TRUE(temp.CreateUniqueTempDir()); 2838 ASSERT_TRUE(temp.CreateUniqueTempDir());
2839 2839
2840 // We'll write the extension manifest dynamically to a temporary path 2840 // We'll write the extension manifest dynamically to a temporary path
2841 // to make it easier to change the version number. 2841 // to make it easier to change the version number.
2842 base::FilePath extension_path = temp.path(); 2842 base::FilePath extension_path = temp.path();
2843 base::FilePath manifest_path = 2843 base::FilePath manifest_path =
2844 extension_path.Append(extensions::kManifestFilename); 2844 extension_path.Append(extensions::kManifestFilename);
2845 ASSERT_FALSE(file_util::PathExists(manifest_path)); 2845 ASSERT_FALSE(base::PathExists(manifest_path));
2846 2846
2847 // Start with version 2.0. 2847 // Start with version 2.0.
2848 DictionaryValue manifest; 2848 DictionaryValue manifest;
2849 manifest.SetString("version", "2.0"); 2849 manifest.SetString("version", "2.0");
2850 manifest.SetString("name", "LOAD Downgrade Test"); 2850 manifest.SetString("name", "LOAD Downgrade Test");
2851 manifest.SetInteger("manifest_version", 2); 2851 manifest.SetInteger("manifest_version", 2);
2852 2852
2853 JSONFileValueSerializer serializer(manifest_path); 2853 JSONFileValueSerializer serializer(manifest_path);
2854 ASSERT_TRUE(serializer.Serialize(manifest)); 2854 ASSERT_TRUE(serializer.Serialize(manifest));
2855 2855
(...skipping 1198 matching lines...) Expand 10 before | Expand all | Expand 10 after
4054 4054
4055 // Create local storage. We only simulate this by creating the backing files. 4055 // Create local storage. We only simulate this by creating the backing files.
4056 // Note: This test depends on details of how the dom_storage library 4056 // Note: This test depends on details of how the dom_storage library
4057 // stores data in the host file system. 4057 // stores data in the host file system.
4058 base::FilePath lso_dir_path = 4058 base::FilePath lso_dir_path =
4059 profile_->GetPath().AppendASCII("Local Storage"); 4059 profile_->GetPath().AppendASCII("Local Storage");
4060 base::FilePath lso_file_path = lso_dir_path.AppendASCII(origin_id) 4060 base::FilePath lso_file_path = lso_dir_path.AppendASCII(origin_id)
4061 .AddExtension(FILE_PATH_LITERAL(".localstorage")); 4061 .AddExtension(FILE_PATH_LITERAL(".localstorage"));
4062 EXPECT_TRUE(file_util::CreateDirectory(lso_dir_path)); 4062 EXPECT_TRUE(file_util::CreateDirectory(lso_dir_path));
4063 EXPECT_EQ(0, file_util::WriteFile(lso_file_path, NULL, 0)); 4063 EXPECT_EQ(0, file_util::WriteFile(lso_file_path, NULL, 0));
4064 EXPECT_TRUE(file_util::PathExists(lso_file_path)); 4064 EXPECT_TRUE(base::PathExists(lso_file_path));
4065 4065
4066 // Create indexed db. Similarly, it is enough to only simulate this by 4066 // Create indexed db. Similarly, it is enough to only simulate this by
4067 // creating the directory on the disk. 4067 // creating the directory on the disk.
4068 IndexedDBContext* idb_context = 4068 IndexedDBContext* idb_context =
4069 BrowserContext::GetDefaultStoragePartition(profile_.get())-> 4069 BrowserContext::GetDefaultStoragePartition(profile_.get())->
4070 GetIndexedDBContext(); 4070 GetIndexedDBContext();
4071 idb_context->SetTaskRunnerForTesting( 4071 idb_context->SetTaskRunnerForTesting(
4072 base::MessageLoop::current()->message_loop_proxy().get()); 4072 base::MessageLoop::current()->message_loop_proxy().get());
4073 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); 4073 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id);
4074 EXPECT_TRUE(file_util::CreateDirectory(idb_path)); 4074 EXPECT_TRUE(file_util::CreateDirectory(idb_path));
(...skipping 10 matching lines...) Expand all
4085 base::Unretained(&callback))); 4085 base::Unretained(&callback)));
4086 loop_.RunUntilIdle(); 4086 loop_.RunUntilIdle();
4087 EXPECT_EQ(0U, callback.list_.size()); 4087 EXPECT_EQ(0U, callback.list_.size());
4088 4088
4089 // The database should have vanished as well. 4089 // The database should have vanished as well.
4090 origins.clear(); 4090 origins.clear();
4091 db_tracker->GetAllOriginsInfo(&origins); 4091 db_tracker->GetAllOriginsInfo(&origins);
4092 EXPECT_EQ(0U, origins.size()); 4092 EXPECT_EQ(0U, origins.size());
4093 4093
4094 // Check that the LSO file has been removed. 4094 // Check that the LSO file has been removed.
4095 EXPECT_FALSE(file_util::PathExists(lso_file_path)); 4095 EXPECT_FALSE(base::PathExists(lso_file_path));
4096 4096
4097 // Check if the indexed db has disappeared too. 4097 // Check if the indexed db has disappeared too.
4098 EXPECT_FALSE(file_util::DirectoryExists(idb_path)); 4098 EXPECT_FALSE(file_util::DirectoryExists(idb_path));
4099 } 4099 }
4100 4100
4101 // Verifies app state is removed upon uninstall. 4101 // Verifies app state is removed upon uninstall.
4102 TEST_F(ExtensionServiceTest, ClearAppData) { 4102 TEST_F(ExtensionServiceTest, ClearAppData) {
4103 InitializeEmptyExtensionService(); 4103 InitializeEmptyExtensionService();
4104 InitializeRequestContext(); 4104 InitializeRequestContext();
4105 ExtensionCookieCallback callback; 4105 ExtensionCookieCallback callback;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
4171 4171
4172 // Create local storage. We only simulate this by creating the backing files. 4172 // Create local storage. We only simulate this by creating the backing files.
4173 // Note: This test depends on details of how the dom_storage library 4173 // Note: This test depends on details of how the dom_storage library
4174 // stores data in the host file system. 4174 // stores data in the host file system.
4175 base::FilePath lso_dir_path = 4175 base::FilePath lso_dir_path =
4176 profile_->GetPath().AppendASCII("Local Storage"); 4176 profile_->GetPath().AppendASCII("Local Storage");
4177 base::FilePath lso_file_path = lso_dir_path.AppendASCII(origin_id) 4177 base::FilePath lso_file_path = lso_dir_path.AppendASCII(origin_id)
4178 .AddExtension(FILE_PATH_LITERAL(".localstorage")); 4178 .AddExtension(FILE_PATH_LITERAL(".localstorage"));
4179 EXPECT_TRUE(file_util::CreateDirectory(lso_dir_path)); 4179 EXPECT_TRUE(file_util::CreateDirectory(lso_dir_path));
4180 EXPECT_EQ(0, file_util::WriteFile(lso_file_path, NULL, 0)); 4180 EXPECT_EQ(0, file_util::WriteFile(lso_file_path, NULL, 0));
4181 EXPECT_TRUE(file_util::PathExists(lso_file_path)); 4181 EXPECT_TRUE(base::PathExists(lso_file_path));
4182 4182
4183 // Create indexed db. Similarly, it is enough to only simulate this by 4183 // Create indexed db. Similarly, it is enough to only simulate this by
4184 // creating the directory on the disk. 4184 // creating the directory on the disk.
4185 IndexedDBContext* idb_context = 4185 IndexedDBContext* idb_context =
4186 BrowserContext::GetDefaultStoragePartition(profile_.get())-> 4186 BrowserContext::GetDefaultStoragePartition(profile_.get())->
4187 GetIndexedDBContext(); 4187 GetIndexedDBContext();
4188 idb_context->SetTaskRunnerForTesting( 4188 idb_context->SetTaskRunnerForTesting(
4189 base::MessageLoop::current()->message_loop_proxy().get()); 4189 base::MessageLoop::current()->message_loop_proxy().get());
4190 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); 4190 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id);
4191 EXPECT_TRUE(file_util::CreateDirectory(idb_path)); 4191 EXPECT_TRUE(file_util::CreateDirectory(idb_path));
(...skipping 27 matching lines...) Expand all
4219 base::Unretained(&callback))); 4219 base::Unretained(&callback)));
4220 loop_.RunUntilIdle(); 4220 loop_.RunUntilIdle();
4221 EXPECT_EQ(0U, callback.list_.size()); 4221 EXPECT_EQ(0U, callback.list_.size());
4222 4222
4223 // The database should have vanished as well. 4223 // The database should have vanished as well.
4224 origins.clear(); 4224 origins.clear();
4225 db_tracker->GetAllOriginsInfo(&origins); 4225 db_tracker->GetAllOriginsInfo(&origins);
4226 EXPECT_EQ(0U, origins.size()); 4226 EXPECT_EQ(0U, origins.size());
4227 4227
4228 // Check that the LSO file has been removed. 4228 // Check that the LSO file has been removed.
4229 EXPECT_FALSE(file_util::PathExists(lso_file_path)); 4229 EXPECT_FALSE(base::PathExists(lso_file_path));
4230 4230
4231 // Check if the indexed db has disappeared too. 4231 // Check if the indexed db has disappeared too.
4232 EXPECT_FALSE(file_util::DirectoryExists(idb_path)); 4232 EXPECT_FALSE(file_util::DirectoryExists(idb_path));
4233 } 4233 }
4234 4234
4235 // Tests loading single extensions (like --load-extension) 4235 // Tests loading single extensions (like --load-extension)
4236 // Flaky crashes. http://crbug.com/231806 4236 // Flaky crashes. http://crbug.com/231806
4237 TEST_F(ExtensionServiceTest, DISABLED_LoadExtension) { 4237 TEST_F(ExtensionServiceTest, DISABLED_LoadExtension) {
4238 InitializeEmptyExtensionService(); 4238 InitializeEmptyExtensionService();
4239 4239
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
4356 // preference should prevent us from reinstalling. 4356 // preference should prevent us from reinstalling.
4357 std::string id = loaded_[0]->id(); 4357 std::string id = loaded_[0]->id();
4358 bool no_uninstall = 4358 bool no_uninstall =
4359 management_policy_->MustRemainEnabled(loaded_[0].get(), NULL); 4359 management_policy_->MustRemainEnabled(loaded_[0].get(), NULL);
4360 service_->UninstallExtension(id, false, NULL); 4360 service_->UninstallExtension(id, false, NULL);
4361 loop_.RunUntilIdle(); 4361 loop_.RunUntilIdle();
4362 4362
4363 base::FilePath install_path = extensions_install_dir_.AppendASCII(id); 4363 base::FilePath install_path = extensions_install_dir_.AppendASCII(id);
4364 if (no_uninstall) { 4364 if (no_uninstall) {
4365 // Policy controlled extensions should not have been touched by uninstall. 4365 // Policy controlled extensions should not have been touched by uninstall.
4366 ASSERT_TRUE(file_util::PathExists(install_path)); 4366 ASSERT_TRUE(base::PathExists(install_path));
4367 } else { 4367 } else {
4368 // The extension should also be gone from the install directory. 4368 // The extension should also be gone from the install directory.
4369 ASSERT_FALSE(file_util::PathExists(install_path)); 4369 ASSERT_FALSE(base::PathExists(install_path));
4370 loaded_.clear(); 4370 loaded_.clear();
4371 service_->CheckForExternalUpdates(); 4371 service_->CheckForExternalUpdates();
4372 loop_.RunUntilIdle(); 4372 loop_.RunUntilIdle();
4373 ASSERT_EQ(0u, loaded_.size()); 4373 ASSERT_EQ(0u, loaded_.size());
4374 ValidatePrefKeyCount(1); 4374 ValidatePrefKeyCount(1);
4375 ValidateIntegerPref(good_crx, "state", 4375 ValidateIntegerPref(good_crx, "state",
4376 Extension::EXTERNAL_EXTENSION_UNINSTALLED); 4376 Extension::EXTERNAL_EXTENSION_UNINSTALLED);
4377 ValidateIntegerPref(good_crx, "location", location); 4377 ValidateIntegerPref(good_crx, "location", location);
4378 4378
4379 // Now clear the preference and reinstall. 4379 // Now clear the preference and reinstall.
(...skipping 17 matching lines...) Expand all
4397 // the pref entry). 4397 // the pref entry).
4398 provider->RemoveExtension(good_crx); 4398 provider->RemoveExtension(good_crx);
4399 4399
4400 loaded_.clear(); 4400 loaded_.clear();
4401 service_->OnExternalProviderReady(provider); 4401 service_->OnExternalProviderReady(provider);
4402 loop_.RunUntilIdle(); 4402 loop_.RunUntilIdle();
4403 ASSERT_EQ(0u, loaded_.size()); 4403 ASSERT_EQ(0u, loaded_.size());
4404 ValidatePrefKeyCount(0); 4404 ValidatePrefKeyCount(0);
4405 4405
4406 // The extension should also be gone from the install directory. 4406 // The extension should also be gone from the install directory.
4407 ASSERT_FALSE(file_util::PathExists(install_path)); 4407 ASSERT_FALSE(base::PathExists(install_path));
4408 4408
4409 // Now test the case where user uninstalls and then the extension is removed 4409 // Now test the case where user uninstalls and then the extension is removed
4410 // from the external provider. 4410 // from the external provider.
4411 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); 4411 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path);
4412 service_->CheckForExternalUpdates(); 4412 service_->CheckForExternalUpdates();
4413 content::WindowedNotificationObserver( 4413 content::WindowedNotificationObserver(
4414 chrome::NOTIFICATION_CRX_INSTALLER_DONE, 4414 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
4415 content::NotificationService::AllSources()).Wait(); 4415 content::NotificationService::AllSources()).Wait();
4416 4416
4417 ASSERT_EQ(1u, loaded_.size()); 4417 ASSERT_EQ(1u, loaded_.size());
(...skipping 1854 matching lines...) Expand 10 before | Expand all | Expand 10 after
6272 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); 6272 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path);
6273 6273
6274 service_->CheckForExternalUpdates(); 6274 service_->CheckForExternalUpdates();
6275 content::WindowedNotificationObserver( 6275 content::WindowedNotificationObserver(
6276 chrome::NOTIFICATION_CRX_INSTALLER_DONE, 6276 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
6277 content::NotificationService::AllSources()).Wait(); 6277 content::NotificationService::AllSources()).Wait();
6278 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); 6278 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
6279 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); 6279 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
6280 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); 6280 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore));
6281 } 6281 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_protocols.cc ('k') | chrome/browser/extensions/external_pref_loader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698