| OLD | NEW | 
|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "chrome/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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 107   std::stable_sort(ret_val.begin(), ret_val.end()); | 107   std::stable_sort(ret_val.begin(), ret_val.end()); | 
| 108 | 108 | 
| 109   return ret_val; | 109   return ret_val; | 
| 110 } | 110 } | 
| 111 | 111 | 
| 112 static void AddPattern(URLPatternSet* extent, const std::string& pattern) { | 112 static void AddPattern(URLPatternSet* extent, const std::string& pattern) { | 
| 113   int schemes = URLPattern::SCHEME_ALL; | 113   int schemes = URLPattern::SCHEME_ALL; | 
| 114   extent->AddPattern(URLPattern(schemes, pattern)); | 114   extent->AddPattern(URLPattern(schemes, pattern)); | 
| 115 } | 115 } | 
| 116 | 116 | 
| 117 static void AssertEqualExtents(URLPatternSet* extent1, | 117 static void AssertEqualExtents(const URLPatternSet& extent1, | 
| 118                                URLPatternSet* extent2) { | 118                                const URLPatternSet& extent2) { | 
| 119   URLPatternList patterns1 = extent1->patterns(); | 119   URLPatternList patterns1 = extent1.patterns(); | 
| 120   URLPatternList patterns2 = extent2->patterns(); | 120   URLPatternList patterns2 = extent2.patterns(); | 
| 121   std::set<std::string> strings1; | 121   std::set<std::string> strings1; | 
| 122   EXPECT_EQ(patterns1.size(), patterns2.size()); | 122   EXPECT_EQ(patterns1.size(), patterns2.size()); | 
| 123 | 123 | 
| 124   for (size_t i = 0; i < patterns1.size(); ++i) | 124   for (size_t i = 0; i < patterns1.size(); ++i) | 
| 125     strings1.insert(patterns1.at(i).GetAsString()); | 125     strings1.insert(patterns1.at(i).GetAsString()); | 
| 126 | 126 | 
| 127   std::set<std::string> strings2; | 127   std::set<std::string> strings2; | 
| 128   for (size_t i = 0; i < patterns2.size(); ++i) | 128   for (size_t i = 0; i < patterns2.size(); ++i) | 
| 129     strings2.insert(patterns2.at(i).GetAsString()); | 129     strings2.insert(patterns2.at(i).GetAsString()); | 
| 130 | 130 | 
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 481 | 481 | 
| 482 // static | 482 // static | 
| 483 void ExtensionServiceTestBase::SetUpTestCase() { | 483 void ExtensionServiceTestBase::SetUpTestCase() { | 
| 484   ExtensionErrorReporter::Init(false);  // no noisy errors | 484   ExtensionErrorReporter::Init(false);  // no noisy errors | 
| 485 } | 485 } | 
| 486 | 486 | 
| 487 void ExtensionServiceTestBase::SetUp() { | 487 void ExtensionServiceTestBase::SetUp() { | 
| 488   ExtensionErrorReporter::GetInstance()->ClearErrors(); | 488   ExtensionErrorReporter::GetInstance()->ClearErrors(); | 
| 489 } | 489 } | 
| 490 | 490 | 
|  | 491 class MockAutoConfirmExtensionInstallUI : public ExtensionInstallUI { | 
|  | 492  public: | 
|  | 493   explicit MockAutoConfirmExtensionInstallUI(Profile* profile) : | 
|  | 494       ExtensionInstallUI(profile) {} | 
|  | 495 | 
|  | 496   // Proceed without confirmation prompt. | 
|  | 497   virtual void ConfirmInstall(Delegate* delegate, const Extension* extension) { | 
|  | 498     delegate->InstallUIProceed(); | 
|  | 499   } | 
|  | 500 | 
|  | 501   virtual void OnInstallSuccess(const Extension* extension, SkBitmap* icon) {} | 
|  | 502 }; | 
|  | 503 | 
| 491 class ExtensionServiceTest | 504 class ExtensionServiceTest | 
| 492   : public ExtensionServiceTestBase, public NotificationObserver { | 505   : public ExtensionServiceTestBase, public NotificationObserver { | 
| 493  public: | 506  public: | 
| 494   ExtensionServiceTest() : installed_(NULL) { | 507   ExtensionServiceTest() : installed_(NULL) { | 
| 495     registrar_.Add(this, NotificationType::EXTENSION_LOADED, | 508     registrar_.Add(this, NotificationType::EXTENSION_LOADED, | 
| 496                    NotificationService::AllSources()); | 509                    NotificationService::AllSources()); | 
| 497     registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, | 510     registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, | 
| 498                    NotificationService::AllSources()); | 511                    NotificationService::AllSources()); | 
| 499     registrar_.Add(this, NotificationType::EXTENSION_INSTALLED, | 512     registrar_.Add(this, NotificationType::EXTENSION_INSTALLED, | 
| 500                    NotificationService::AllSources()); | 513                    NotificationService::AllSources()); | 
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 562 | 575 | 
| 563     ASSERT_TRUE(file_util::Delete(crx_path, false)); | 576     ASSERT_TRUE(file_util::Delete(crx_path, false)); | 
| 564 | 577 | 
| 565     scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); | 578     scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); | 
| 566     ASSERT_TRUE(creator->Run(dir_path, | 579     ASSERT_TRUE(creator->Run(dir_path, | 
| 567                              crx_path, | 580                              crx_path, | 
| 568                              pem_path, | 581                              pem_path, | 
| 569                              pem_output_path)); | 582                              pem_output_path)); | 
| 570 | 583 | 
| 571     ASSERT_TRUE(file_util::PathExists(crx_path)); | 584     ASSERT_TRUE(file_util::PathExists(crx_path)); | 
| 572 |  | 
| 573     InstallCrx(crx_path, should_succeed); | 585     InstallCrx(crx_path, should_succeed); | 
| 574   } | 586   } | 
| 575 | 587 | 
| 576   void PackAndInstallCrx(const FilePath& dir_path, | 588   void PackAndInstallCrx(const FilePath& dir_path, | 
| 577                          bool should_succeed) { | 589                          bool should_succeed) { | 
| 578     PackAndInstallCrx(dir_path, FilePath(), should_succeed); | 590     PackAndInstallCrx(dir_path, FilePath(), should_succeed); | 
| 579   } | 591   } | 
| 580 | 592 | 
| 581   // Create a CrxInstaller and start installation. To allow the install | 593   // Create a CrxInstaller and start installation. To allow the install | 
| 582   // to happen, use loop_.RunAllPending();. Most tests will not use this | 594   // to happen, use loop_.RunAllPending();. Most tests will not use this | 
| 583   // method directly.  Instead, use InstallCrx(), which waits for | 595   // method directly.  Instead, use InstallCrx(), which waits for | 
| 584   // the crx to be installed and does extra error checking. | 596   // the crx to be installed and does extra error checking. | 
| 585   void StartCrxInstall(const FilePath& crx_path) { | 597   void StartCrxInstall(const FilePath& crx_path) { | 
| 586     ASSERT_TRUE(file_util::PathExists(crx_path)) | 598     ASSERT_TRUE(file_util::PathExists(crx_path)) | 
| 587         << "Path does not exist: "<< crx_path.value().c_str(); | 599         << "Path does not exist: "<< crx_path.value().c_str(); | 
| 588     // no client (silent install) | 600     MockAutoConfirmExtensionInstallUI* install_ui = | 
| 589     scoped_refptr<CrxInstaller> installer(service_->MakeCrxInstaller(NULL)); | 601         new MockAutoConfirmExtensionInstallUI(profile_.get()); | 
|  | 602     scoped_refptr<CrxInstaller> installer( | 
|  | 603         service_->MakeCrxInstaller(install_ui)); | 
| 590     installer->InstallCrx(crx_path); | 604     installer->InstallCrx(crx_path); | 
| 591   } | 605   } | 
| 592 | 606 | 
| 593   void InstallCrx(const FilePath& path, | 607   void InstallCrx(const FilePath& path, | 
| 594                         bool should_succeed) { | 608                         bool should_succeed) { | 
| 595     StartCrxInstall(path); | 609     StartCrxInstall(path); | 
| 596     WaitForCrxInstall(path, should_succeed); | 610     WaitForCrxInstall(path, should_succeed); | 
| 597   } | 611   } | 
| 598 | 612 | 
| 599   void InstallCrxWithLocation(const FilePath& crx_path, | 613   void InstallCrxWithLocation(const FilePath& crx_path, | 
| (...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1026   EXPECT_TRUE(extension->plugins().empty()); | 1040   EXPECT_TRUE(extension->plugins().empty()); | 
| 1027   EXPECT_EQ(1u, scripts[1].url_patterns().size()); | 1041   EXPECT_EQ(1u, scripts[1].url_patterns().size()); | 
| 1028   EXPECT_EQ("http://*.news.com/*", scripts[1].url_patterns()[0].GetAsString()); | 1042   EXPECT_EQ("http://*.news.com/*", scripts[1].url_patterns()[0].GetAsString()); | 
| 1029   ExtensionResource resource10(extension->id(), | 1043   ExtensionResource resource10(extension->id(), | 
| 1030                                scripts[1].js_scripts()[0].extension_root(), | 1044                                scripts[1].js_scripts()[0].extension_root(), | 
| 1031                                scripts[1].js_scripts()[0].relative_path()); | 1045                                scripts[1].js_scripts()[0].relative_path()); | 
| 1032   expected_path = | 1046   expected_path = | 
| 1033       extension->path().AppendASCII("js_files").AppendASCII("script3.js"); | 1047       extension->path().AppendASCII("js_files").AppendASCII("script3.js"); | 
| 1034   ASSERT_TRUE(file_util::AbsolutePath(&expected_path)); | 1048   ASSERT_TRUE(file_util::AbsolutePath(&expected_path)); | 
| 1035   EXPECT_TRUE(resource10.ComparePathWithDefault(expected_path)); | 1049   EXPECT_TRUE(resource10.ComparePathWithDefault(expected_path)); | 
| 1036   const URLPatternList permissions = extension->host_permissions(); | 1050   const URLPatternList permissions = | 
|  | 1051       extension->permission_set()->explicit_hosts().patterns(); | 
| 1037   ASSERT_EQ(2u, permissions.size()); | 1052   ASSERT_EQ(2u, permissions.size()); | 
| 1038   EXPECT_EQ("http://*.google.com/*", permissions[0].GetAsString()); | 1053   EXPECT_EQ("http://*.google.com/*", permissions[0].GetAsString()); | 
| 1039   EXPECT_EQ("https://*.google.com/*", permissions[1].GetAsString()); | 1054   EXPECT_EQ("https://*.google.com/*", permissions[1].GetAsString()); | 
| 1040 | 1055 | 
| 1041   EXPECT_EQ(std::string(good1), loaded_[1]->id()); | 1056   EXPECT_EQ(std::string(good1), loaded_[1]->id()); | 
| 1042   EXPECT_EQ(std::string("My extension 2"), loaded_[1]->name()); | 1057   EXPECT_EQ(std::string("My extension 2"), loaded_[1]->name()); | 
| 1043   EXPECT_EQ(std::string(""), loaded_[1]->description()); | 1058   EXPECT_EQ(std::string(""), loaded_[1]->description()); | 
| 1044   EXPECT_EQ(loaded_[1]->GetResourceURL("background.html"), | 1059   EXPECT_EQ(loaded_[1]->GetResourceURL("background.html"), | 
| 1045             loaded_[1]->background_url()); | 1060             loaded_[1]->background_url()); | 
| 1046   EXPECT_EQ(0u, loaded_[1]->content_scripts().size()); | 1061   EXPECT_EQ(0u, loaded_[1]->content_scripts().size()); | 
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1329 // Install a user script (they get converted automatically to an extension) | 1344 // Install a user script (they get converted automatically to an extension) | 
| 1330 TEST_F(ExtensionServiceTest, InstallUserScript) { | 1345 TEST_F(ExtensionServiceTest, InstallUserScript) { | 
| 1331   // The details of script conversion are tested elsewhere, this just tests | 1346   // The details of script conversion are tested elsewhere, this just tests | 
| 1332   // integration with ExtensionService. | 1347   // integration with ExtensionService. | 
| 1333   InitializeEmptyExtensionService(); | 1348   InitializeEmptyExtensionService(); | 
| 1334 | 1349 | 
| 1335   FilePath path = data_dir_ | 1350   FilePath path = data_dir_ | 
| 1336              .AppendASCII("user_script_basic.user.js"); | 1351              .AppendASCII("user_script_basic.user.js"); | 
| 1337 | 1352 | 
| 1338   ASSERT_TRUE(file_util::PathExists(path)); | 1353   ASSERT_TRUE(file_util::PathExists(path)); | 
| 1339   // Pass NULL to install silently. | 1354   // Use the MockAutoConfirmExtensionInstallUI to silently install. | 
| 1340   scoped_refptr<CrxInstaller> installer(service_->MakeCrxInstaller(NULL)); | 1355   MockAutoConfirmExtensionInstallUI* install_ui = | 
|  | 1356       new MockAutoConfirmExtensionInstallUI(profile_.get()); | 
|  | 1357   scoped_refptr<CrxInstaller> installer( | 
|  | 1358       service_->MakeCrxInstaller(install_ui)); | 
| 1341   installer->InstallUserScript( | 1359   installer->InstallUserScript( | 
| 1342       path, | 1360       path, | 
| 1343       GURL("http://www.aaronboodman.com/scripts/user_script_basic.user.js")); | 1361       GURL("http://www.aaronboodman.com/scripts/user_script_basic.user.js")); | 
| 1344 | 1362 | 
| 1345   loop_.RunAllPending(); | 1363   loop_.RunAllPending(); | 
| 1346   std::vector<std::string> errors = GetErrors(); | 1364   std::vector<std::string> errors = GetErrors(); | 
| 1347   EXPECT_TRUE(installed_) << "Nothing was installed."; | 1365   EXPECT_TRUE(installed_) << "Nothing was installed."; | 
| 1348   ASSERT_EQ(1u, loaded_.size()) << "Nothing was loaded."; | 1366   ASSERT_EQ(1u, loaded_.size()) << "Nothing was loaded."; | 
| 1349   EXPECT_EQ(0u, errors.size()) << "There were errors: " | 1367   EXPECT_EQ(0u, errors.size()) << "There were errors: " | 
| 1350                                << JoinString(errors, ','); | 1368                                << JoinString(errors, ','); | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 1364       .AppendASCII("permissions"); | 1382       .AppendASCII("permissions"); | 
| 1365 | 1383 | 
| 1366   FilePath pem_path = path.AppendASCII("unknown.pem"); | 1384   FilePath pem_path = path.AppendASCII("unknown.pem"); | 
| 1367   path = path.AppendASCII("unknown"); | 1385   path = path.AppendASCII("unknown"); | 
| 1368 | 1386 | 
| 1369   ASSERT_TRUE(file_util::PathExists(pem_path)); | 1387   ASSERT_TRUE(file_util::PathExists(pem_path)); | 
| 1370   ASSERT_TRUE(file_util::PathExists(path)); | 1388   ASSERT_TRUE(file_util::PathExists(path)); | 
| 1371 | 1389 | 
| 1372   ExtensionPrefs* prefs = service_->extension_prefs(); | 1390   ExtensionPrefs* prefs = service_->extension_prefs(); | 
| 1373 | 1391 | 
| 1374   std::set<std::string> expected_api_perms; | 1392   ExtensionAPIPermissionSet expected_api_perms; | 
| 1375   std::set<std::string> known_api_perms; |  | 
| 1376   bool full_access; |  | 
| 1377   URLPatternSet expected_host_perms; | 1393   URLPatternSet expected_host_perms; | 
| 1378   URLPatternSet known_host_perms; |  | 
| 1379 | 1394 | 
| 1380   // Make sure there aren't any granted permissions before the | 1395   // Make sure there aren't any granted permissions before the | 
| 1381   // extension is installed. | 1396   // extension is installed. | 
| 1382   EXPECT_FALSE(prefs->GetGrantedPermissions( | 1397   scoped_ptr<ExtensionPermissionSet> known_perms( | 
| 1383       permissions_crx, &full_access, &known_api_perms, &known_host_perms)); | 1398       prefs->GetGrantedPermissions(permissions_crx)); | 
| 1384   EXPECT_TRUE(known_api_perms.empty()); | 1399   EXPECT_FALSE(known_perms.get()); | 
| 1385   EXPECT_TRUE(known_host_perms.is_empty()); |  | 
| 1386 | 1400 | 
| 1387   PackAndInstallCrx(path, pem_path, true); | 1401   PackAndInstallCrx(path, pem_path, true); | 
| 1388 | 1402 | 
| 1389   EXPECT_EQ(0u, GetErrors().size()); | 1403   EXPECT_EQ(0u, GetErrors().size()); | 
| 1390   ASSERT_EQ(1u, service_->extensions()->size()); | 1404   ASSERT_EQ(1u, service_->extensions()->size()); | 
| 1391   std::string extension_id = service_->extensions()->at(0)->id(); | 1405   std::string extension_id = service_->extensions()->at(0)->id(); | 
| 1392   EXPECT_EQ(permissions_crx, extension_id); | 1406   EXPECT_EQ(permissions_crx, extension_id); | 
| 1393 | 1407 | 
| 1394 |  | 
| 1395   // Verify that the valid API permissions have been recognized. | 1408   // Verify that the valid API permissions have been recognized. | 
| 1396   expected_api_perms.insert("tabs"); | 1409   expected_api_perms.insert(ExtensionAPIPermission::kTab); | 
| 1397 | 1410 | 
| 1398   AddPattern(&expected_host_perms, "http://*.google.com/*"); | 1411   AddPattern(&expected_host_perms, "http://*.google.com/*"); | 
| 1399   AddPattern(&expected_host_perms, "https://*.google.com/*"); | 1412   AddPattern(&expected_host_perms, "https://*.google.com/*"); | 
| 1400   AddPattern(&expected_host_perms, "http://*.google.com.hk/*"); | 1413   AddPattern(&expected_host_perms, "http://*.google.com.hk/*"); | 
| 1401   AddPattern(&expected_host_perms, "http://www.example.com/*"); | 1414   AddPattern(&expected_host_perms, "http://www.example.com/*"); | 
| 1402 | 1415 | 
| 1403   EXPECT_TRUE(prefs->GetGrantedPermissions(extension_id, | 1416   known_perms.reset(prefs->GetGrantedPermissions(extension_id)); | 
| 1404                                            &full_access, | 1417   EXPECT_TRUE(known_perms.get()); | 
| 1405                                            &known_api_perms, | 1418   EXPECT_FALSE(known_perms->IsEmpty()); | 
| 1406                                            &known_host_perms)); | 1419   EXPECT_EQ(expected_api_perms, known_perms->apis()); | 
| 1407 | 1420   EXPECT_FALSE(known_perms->HasEffectiveFullAccess()); | 
| 1408   EXPECT_EQ(expected_api_perms, known_api_perms); | 1421   AssertEqualExtents(expected_host_perms, known_perms->effective_hosts()); | 
| 1409   EXPECT_FALSE(full_access); |  | 
| 1410   AssertEqualExtents(&expected_host_perms, &known_host_perms); |  | 
| 1411 } | 1422 } | 
| 1412 | 1423 | 
| 1413 #if !defined(OS_CHROMEOS) | 1424 #if !defined(OS_CHROMEOS) | 
| 1414 // Tests that the granted permissions full_access bit gets set correctly when | 1425 // Tests that the granted permissions full_access bit gets set correctly when | 
| 1415 // an extension contains an NPAPI plugin. Don't run this test on Chrome OS | 1426 // an extension contains an NPAPI plugin. Don't run this test on Chrome OS | 
| 1416 // since they don't support plugins. | 1427 // since they don't support plugins. | 
| 1417 TEST_F(ExtensionServiceTest, GrantedFullAccessPermissions) { | 1428 TEST_F(ExtensionServiceTest, GrantedFullAccessPermissions) { | 
| 1418   InitializeEmptyExtensionService(); | 1429   InitializeEmptyExtensionService(); | 
| 1419 | 1430 | 
| 1420   FilePath path = data_dir_ | 1431   FilePath path = data_dir_ | 
| 1421       .AppendASCII("good") | 1432       .AppendASCII("good") | 
| 1422       .AppendASCII("Extensions") | 1433       .AppendASCII("Extensions") | 
| 1423       .AppendASCII(good1) | 1434       .AppendASCII(good1) | 
| 1424       .AppendASCII("2"); | 1435       .AppendASCII("2"); | 
| 1425 | 1436 | 
| 1426   ASSERT_TRUE(file_util::PathExists(path)); | 1437   ASSERT_TRUE(file_util::PathExists(path)); | 
| 1427 |  | 
| 1428   PackAndInstallCrx(path, true); | 1438   PackAndInstallCrx(path, true); | 
| 1429 |  | 
| 1430   EXPECT_EQ(0u, GetErrors().size()); | 1439   EXPECT_EQ(0u, GetErrors().size()); | 
| 1431   EXPECT_EQ(1u, service_->extensions()->size()); | 1440   EXPECT_EQ(1u, service_->extensions()->size()); | 
| 1432   const Extension* extension = service_->extensions()->at(0); | 1441   const Extension* extension = service_->extensions()->at(0); | 
| 1433   std::string extension_id = extension->id(); | 1442   std::string extension_id = extension->id(); | 
| 1434   ExtensionPrefs* prefs = service_->extension_prefs(); | 1443   ExtensionPrefs* prefs = service_->extension_prefs(); | 
| 1435 | 1444 | 
| 1436   bool full_access; | 1445   scoped_ptr<ExtensionPermissionSet> permissions( | 
| 1437   std::set<std::string> api_permissions; | 1446       prefs->GetGrantedPermissions(extension_id)); | 
| 1438   URLPatternSet host_permissions; | 1447   EXPECT_FALSE(permissions->IsEmpty()); | 
| 1439   EXPECT_TRUE(prefs->GetGrantedPermissions( | 1448   EXPECT_TRUE(permissions->HasEffectiveFullAccess()); | 
| 1440       extension_id, &full_access, &api_permissions, &host_permissions)); | 1449   EXPECT_FALSE(permissions->apis().empty()); | 
|  | 1450   EXPECT_TRUE(permissions->HasAPIPermission(ExtensionAPIPermission::kPlugin)); | 
| 1441 | 1451 | 
| 1442   EXPECT_TRUE(full_access); | 1452   // Full access implies full host access too... | 
| 1443   EXPECT_TRUE(api_permissions.empty()); | 1453   EXPECT_TRUE(permissions->HasEffectiveAccessToAllHosts()); | 
| 1444   EXPECT_TRUE(host_permissions.is_empty()); |  | 
| 1445 } | 1454 } | 
| 1446 #endif | 1455 #endif | 
| 1447 | 1456 | 
| 1448 // Tests that the extension is disabled when permissions are missing from | 1457 // Tests that the extension is disabled when permissions are missing from | 
| 1449 // the extension's granted permissions preferences. (This simulates updating | 1458 // the extension's granted permissions preferences. (This simulates updating | 
| 1450 // the browser to a version which recognizes more permissions). | 1459 // the browser to a version which recognizes more permissions). | 
| 1451 TEST_F(ExtensionServiceTest, GrantedAPIAndHostPermissions) { | 1460 TEST_F(ExtensionServiceTest, GrantedAPIAndHostPermissions) { | 
| 1452   InitializeEmptyExtensionService(); | 1461   InitializeEmptyExtensionService(); | 
| 1453 | 1462 | 
| 1454   FilePath path = data_dir_ | 1463   FilePath path = data_dir_ | 
| 1455       .AppendASCII("permissions") | 1464       .AppendASCII("permissions") | 
| 1456       .AppendASCII("unknown"); | 1465       .AppendASCII("unknown"); | 
| 1457 | 1466 | 
| 1458   ASSERT_TRUE(file_util::PathExists(path)); | 1467   ASSERT_TRUE(file_util::PathExists(path)); | 
| 1459 | 1468 | 
| 1460   PackAndInstallCrx(path, true); | 1469   PackAndInstallCrx(path, true); | 
| 1461 | 1470 | 
| 1462   EXPECT_EQ(0u, GetErrors().size()); | 1471   EXPECT_EQ(0u, GetErrors().size()); | 
| 1463   EXPECT_EQ(1u, service_->extensions()->size()); | 1472   EXPECT_EQ(1u, service_->extensions()->size()); | 
| 1464   const Extension* extension = service_->extensions()->at(0); | 1473   const Extension* extension = service_->extensions()->at(0); | 
| 1465   std::string extension_id = extension->id(); | 1474   std::string extension_id = extension->id(); | 
| 1466 | 1475 | 
| 1467   ExtensionPrefs* prefs = service_->extension_prefs(); | 1476   ExtensionPrefs* prefs = service_->extension_prefs(); | 
| 1468 | 1477 | 
| 1469   std::set<std::string> expected_api_permissions; | 1478   ExtensionAPIPermissionSet expected_api_permissions; | 
| 1470   URLPatternSet expected_host_permissions; | 1479   URLPatternSet expected_host_permissions; | 
| 1471 | 1480 | 
| 1472   expected_api_permissions.insert("tabs"); | 1481   expected_api_permissions.insert(ExtensionAPIPermission::kTab); | 
| 1473   AddPattern(&expected_host_permissions, "http://*.google.com/*"); | 1482   AddPattern(&expected_host_permissions, "http://*.google.com/*"); | 
| 1474   AddPattern(&expected_host_permissions, "https://*.google.com/*"); | 1483   AddPattern(&expected_host_permissions, "https://*.google.com/*"); | 
| 1475   AddPattern(&expected_host_permissions, "http://*.google.com.hk/*"); | 1484   AddPattern(&expected_host_permissions, "http://*.google.com.hk/*"); | 
| 1476   AddPattern(&expected_host_permissions, "http://www.example.com/*"); | 1485   AddPattern(&expected_host_permissions, "http://www.example.com/*"); | 
| 1477 | 1486 | 
| 1478   std::set<std::string> api_permissions; |  | 
| 1479   std::set<std::string> host_permissions; | 1487   std::set<std::string> host_permissions; | 
| 1480 | 1488 | 
| 1481   // Test that the extension is disabled when an API permission is missing from | 1489   // Test that the extension is disabled when an API permission is missing from | 
| 1482   // the extension's granted api permissions preference. (This simulates | 1490   // the extension's granted api permissions preference. (This simulates | 
| 1483   // updating the browser to a version which recognizes a new API permission). | 1491   // updating the browser to a version which recognizes a new API permission). | 
| 1484   SetPrefStringSet(extension_id, "granted_permissions.api", api_permissions); | 1492   SetPref(extension_id, "granted_permissions.api", | 
| 1485 | 1493           new ListValue(), "granted_permissions.api"); | 
| 1486   service_->ReloadExtensions(); | 1494   service_->ReloadExtensions(); | 
| 1487 | 1495 | 
| 1488   EXPECT_EQ(1u, service_->disabled_extensions()->size()); | 1496   EXPECT_EQ(1u, service_->disabled_extensions()->size()); | 
| 1489   extension = service_->disabled_extensions()->at(0); | 1497   extension = service_->disabled_extensions()->at(0); | 
| 1490 | 1498 | 
| 1491   ASSERT_TRUE(prefs->GetExtensionState(extension_id) == Extension::DISABLED); | 1499   ASSERT_TRUE(prefs->GetExtensionState(extension_id) == Extension::DISABLED); | 
| 1492   ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); | 1500   ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); | 
| 1493 | 1501 | 
| 1494   // Now grant and re-enable the extension, making sure the prefs are updated. | 1502   // Now grant and re-enable the extension, making sure the prefs are updated. | 
| 1495   service_->GrantPermissionsAndEnableExtension(extension); | 1503   service_->GrantPermissionsAndEnableExtension(extension); | 
| 1496 | 1504 | 
| 1497   ASSERT_TRUE(prefs->GetExtensionState(extension_id) == Extension::ENABLED); | 1505   ASSERT_TRUE(prefs->GetExtensionState(extension_id) == Extension::ENABLED); | 
| 1498   ASSERT_FALSE(prefs->DidExtensionEscalatePermissions(extension_id)); | 1506   ASSERT_FALSE(prefs->DidExtensionEscalatePermissions(extension_id)); | 
| 1499 | 1507 | 
| 1500   std::set<std::string> current_api_permissions; | 1508   scoped_ptr<ExtensionPermissionSet> current_perms( | 
| 1501   URLPatternSet current_host_permissions; | 1509       prefs->GetGrantedPermissions(extension_id)); | 
| 1502   bool current_full_access; | 1510   ASSERT_TRUE(current_perms.get()); | 
| 1503 | 1511   ASSERT_FALSE(current_perms->IsEmpty()); | 
| 1504   ASSERT_TRUE(prefs->GetGrantedPermissions(extension_id, | 1512   ASSERT_FALSE(current_perms->HasEffectiveFullAccess()); | 
| 1505                                            ¤t_full_access, | 1513   ASSERT_EQ(expected_api_permissions, current_perms->apis()); | 
| 1506                                            ¤t_api_permissions, | 1514   AssertEqualExtents(expected_host_permissions, | 
| 1507                                            ¤t_host_permissions)); | 1515                      current_perms->effective_hosts()); | 
| 1508 |  | 
| 1509   ASSERT_FALSE(current_full_access); |  | 
| 1510   ASSERT_EQ(expected_api_permissions, current_api_permissions); |  | 
| 1511   AssertEqualExtents(&expected_host_permissions, ¤t_host_permissions); |  | 
| 1512 | 1516 | 
| 1513   // Tests that the extension is disabled when a host permission is missing from | 1517   // Tests that the extension is disabled when a host permission is missing from | 
| 1514   // the extension's granted host permissions preference. (This simulates | 1518   // the extension's granted host permissions preference. (This simulates | 
| 1515   // updating the browser to a version which recognizes additional host | 1519   // updating the browser to a version which recognizes additional host | 
| 1516   // permissions). | 1520   // permissions). | 
| 1517   api_permissions.clear(); |  | 
| 1518   host_permissions.clear(); | 1521   host_permissions.clear(); | 
| 1519   current_api_permissions.clear(); | 1522   current_perms.reset(); | 
| 1520   current_host_permissions.ClearPatterns(); |  | 
| 1521 | 1523 | 
| 1522   api_permissions.insert("tabs"); |  | 
| 1523   host_permissions.insert("http://*.google.com/*"); | 1524   host_permissions.insert("http://*.google.com/*"); | 
| 1524   host_permissions.insert("https://*.google.com/*"); | 1525   host_permissions.insert("https://*.google.com/*"); | 
| 1525   host_permissions.insert("http://*.google.com.hk/*"); | 1526   host_permissions.insert("http://*.google.com.hk/*"); | 
| 1526 | 1527 | 
| 1527   SetPrefStringSet(extension_id, "granted_permissions.api", api_permissions); | 1528   ListValue* api_permissions = new ListValue(); | 
| 1528   SetPrefStringSet(extension_id, "granted_permissions.host", host_permissions); | 1529   api_permissions->Append( | 
|  | 1530       Value::CreateIntegerValue(ExtensionAPIPermission::kTab)); | 
|  | 1531   SetPref(extension_id, "granted_permissions.api", | 
|  | 1532           api_permissions, "granted_permissions.api"); | 
|  | 1533   SetPrefStringSet( | 
|  | 1534       extension_id, "granted_permissions.scriptable_host", host_permissions); | 
| 1529 | 1535 | 
| 1530   service_->ReloadExtensions(); | 1536   service_->ReloadExtensions(); | 
| 1531 | 1537 | 
| 1532   EXPECT_EQ(1u, service_->disabled_extensions()->size()); | 1538   EXPECT_EQ(1u, service_->disabled_extensions()->size()); | 
| 1533   extension = service_->disabled_extensions()->at(0); | 1539   extension = service_->disabled_extensions()->at(0); | 
| 1534 | 1540 | 
| 1535   ASSERT_TRUE(prefs->GetExtensionState(extension_id) == Extension::DISABLED); | 1541   ASSERT_TRUE(prefs->GetExtensionState(extension_id) == Extension::DISABLED); | 
| 1536   ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); | 1542   ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); | 
| 1537 | 1543 | 
| 1538   // Now grant and re-enable the extension, making sure the prefs are updated. | 1544   // Now grant and re-enable the extension, making sure the prefs are updated. | 
| 1539   service_->GrantPermissionsAndEnableExtension(extension); | 1545   service_->GrantPermissionsAndEnableExtension(extension); | 
| 1540 | 1546 | 
| 1541   ASSERT_TRUE(prefs->GetExtensionState(extension_id) == Extension::ENABLED); | 1547   ASSERT_TRUE(prefs->GetExtensionState(extension_id) == Extension::ENABLED); | 
| 1542   ASSERT_FALSE(prefs->DidExtensionEscalatePermissions(extension_id)); | 1548   ASSERT_FALSE(prefs->DidExtensionEscalatePermissions(extension_id)); | 
| 1543 | 1549 | 
| 1544   ASSERT_TRUE(prefs->GetGrantedPermissions(extension_id, | 1550   current_perms.reset(prefs->GetGrantedPermissions(extension_id)); | 
| 1545                                            ¤t_full_access, | 1551   ASSERT_TRUE(current_perms.get()); | 
| 1546                                            ¤t_api_permissions, | 1552   ASSERT_FALSE(current_perms->IsEmpty()); | 
| 1547                                            ¤t_host_permissions)); | 1553   ASSERT_FALSE(current_perms->HasEffectiveFullAccess()); | 
| 1548 | 1554   ASSERT_EQ(expected_api_permissions, current_perms->apis()); | 
| 1549   ASSERT_FALSE(current_full_access); | 1555   AssertEqualExtents(expected_host_permissions, | 
| 1550   ASSERT_EQ(expected_api_permissions, current_api_permissions); | 1556                      current_perms->effective_hosts()); | 
| 1551   AssertEqualExtents(&expected_host_permissions, ¤t_host_permissions); |  | 
| 1552 |  | 
| 1553   // Tests that the granted permissions preferences are initialized when |  | 
| 1554   // migrating from the old pref schema. |  | 
| 1555   current_api_permissions.clear(); |  | 
| 1556   current_host_permissions.ClearPatterns(); |  | 
| 1557 |  | 
| 1558   ClearPref(extension_id, "granted_permissions"); |  | 
| 1559 |  | 
| 1560   service_->ReloadExtensions(); |  | 
| 1561 |  | 
| 1562   EXPECT_EQ(1u, service_->extensions()->size()); |  | 
| 1563   extension = service_->extensions()->at(0); |  | 
| 1564 |  | 
| 1565   ASSERT_TRUE(prefs->GetExtensionState(extension_id) == Extension::ENABLED); |  | 
| 1566   ASSERT_FALSE(prefs->DidExtensionEscalatePermissions(extension_id)); |  | 
| 1567 |  | 
| 1568   ASSERT_TRUE(prefs->GetGrantedPermissions(extension_id, |  | 
| 1569                                            ¤t_full_access, |  | 
| 1570                                            ¤t_api_permissions, |  | 
| 1571                                            ¤t_host_permissions)); |  | 
| 1572 |  | 
| 1573   ASSERT_FALSE(current_full_access); |  | 
| 1574   ASSERT_EQ(expected_api_permissions, current_api_permissions); |  | 
| 1575   AssertEqualExtents(&expected_host_permissions, ¤t_host_permissions); |  | 
| 1576 } | 1557 } | 
| 1577 | 1558 | 
| 1578 // Test Packaging and installing an extension. | 1559 // Test Packaging and installing an extension. | 
| 1579 TEST_F(ExtensionServiceTest, PackExtension) { | 1560 TEST_F(ExtensionServiceTest, PackExtension) { | 
| 1580   InitializeEmptyExtensionService(); | 1561   InitializeEmptyExtensionService(); | 
| 1581   FilePath input_directory = data_dir_ | 1562   FilePath input_directory = data_dir_ | 
| 1582       .AppendASCII("good") | 1563       .AppendASCII("good") | 
| 1583       .AppendASCII("Extensions") | 1564       .AppendASCII("Extensions") | 
| 1584       .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 1565       .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 
| 1585       .AppendASCII("1.0.0.0"); | 1566       .AppendASCII("1.0.0.0"); | 
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1827   EXPECT_TRUE(service_->extensions()->empty()); | 1808   EXPECT_TRUE(service_->extensions()->empty()); | 
| 1828 | 1809 | 
| 1829   int pref_count = 0; | 1810   int pref_count = 0; | 
| 1830 | 1811 | 
| 1831   // Install app1 with unlimited storage. | 1812   // Install app1 with unlimited storage. | 
| 1832   PackAndInstallCrx(data_dir_.AppendASCII("app1"), true); | 1813   PackAndInstallCrx(data_dir_.AppendASCII("app1"), true); | 
| 1833   ValidatePrefKeyCount(++pref_count); | 1814   ValidatePrefKeyCount(++pref_count); | 
| 1834   ASSERT_EQ(1u, service_->extensions()->size()); | 1815   ASSERT_EQ(1u, service_->extensions()->size()); | 
| 1835   const Extension* extension = service_->extensions()->at(0); | 1816   const Extension* extension = service_->extensions()->at(0); | 
| 1836   const std::string id1 = extension->id(); | 1817   const std::string id1 = extension->id(); | 
| 1837   EXPECT_TRUE(extension->HasApiPermission( | 1818   EXPECT_TRUE(extension->HasAPIPermission( | 
| 1838                   Extension::kUnlimitedStoragePermission)); | 1819       ExtensionAPIPermission::kUnlimitedStorage)); | 
| 1839   EXPECT_TRUE(extension->web_extent().MatchesURL( | 1820   EXPECT_TRUE(extension->web_extent().MatchesURL( | 
| 1840                   extension->GetFullLaunchURL())); | 1821                   extension->GetFullLaunchURL())); | 
| 1841   const GURL origin1(extension->GetFullLaunchURL().GetOrigin()); | 1822   const GURL origin1(extension->GetFullLaunchURL().GetOrigin()); | 
| 1842   EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 1823   EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 
| 1843       IsStorageUnlimited(origin1)); | 1824       IsStorageUnlimited(origin1)); | 
| 1844 | 1825 | 
| 1845   // Install app2 from the same origin with unlimited storage. | 1826   // Install app2 from the same origin with unlimited storage. | 
| 1846   PackAndInstallCrx(data_dir_.AppendASCII("app2"), true); | 1827   PackAndInstallCrx(data_dir_.AppendASCII("app2"), true); | 
| 1847   ValidatePrefKeyCount(++pref_count); | 1828   ValidatePrefKeyCount(++pref_count); | 
| 1848   ASSERT_EQ(2u, service_->extensions()->size()); | 1829   ASSERT_EQ(2u, service_->extensions()->size()); | 
| 1849   extension = service_->extensions()->at(1); | 1830   extension = service_->extensions()->at(1); | 
| 1850   const std::string id2 = extension->id(); | 1831   const std::string id2 = extension->id(); | 
| 1851   EXPECT_TRUE(extension->HasApiPermission( | 1832   EXPECT_TRUE(extension->HasAPIPermission( | 
| 1852                   Extension::kUnlimitedStoragePermission)); | 1833       ExtensionAPIPermission::kUnlimitedStorage)); | 
| 1853   EXPECT_TRUE(extension->web_extent().MatchesURL( | 1834   EXPECT_TRUE(extension->web_extent().MatchesURL( | 
| 1854                   extension->GetFullLaunchURL())); | 1835                   extension->GetFullLaunchURL())); | 
| 1855   const GURL origin2(extension->GetFullLaunchURL().GetOrigin()); | 1836   const GURL origin2(extension->GetFullLaunchURL().GetOrigin()); | 
| 1856   EXPECT_EQ(origin1, origin2); | 1837   EXPECT_EQ(origin1, origin2); | 
| 1857   EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 1838   EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 
| 1858       IsStorageUnlimited(origin2)); | 1839       IsStorageUnlimited(origin2)); | 
| 1859 | 1840 | 
| 1860 | 1841 | 
| 1861   // Uninstall one of them, unlimited storage should still be granted | 1842   // Uninstall one of them, unlimited storage should still be granted | 
| 1862   // to the origin. | 1843   // to the origin. | 
| (...skipping 1937 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3800   ASSERT_FALSE(AddPendingSyncInstall()); | 3781   ASSERT_FALSE(AddPendingSyncInstall()); | 
| 3801 | 3782 | 
| 3802   // Wait for the external source to install. | 3783   // Wait for the external source to install. | 
| 3803   WaitForCrxInstall(crx_path_, true); | 3784   WaitForCrxInstall(crx_path_, true); | 
| 3804   ASSERT_TRUE(IsCrxInstalled()); | 3785   ASSERT_TRUE(IsCrxInstalled()); | 
| 3805 | 3786 | 
| 3806   // Now that the extension is installed, sync request should fail | 3787   // Now that the extension is installed, sync request should fail | 
| 3807   // because the extension is already installed. | 3788   // because the extension is already installed. | 
| 3808   ASSERT_FALSE(AddPendingSyncInstall()); | 3789   ASSERT_FALSE(AddPendingSyncInstall()); | 
| 3809 } | 3790 } | 
| OLD | NEW | 
|---|