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

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

Issue 10908184: Enforce the 'requirements' field in manifests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "chrome/browser/extensions/external_provider_impl.h" 42 #include "chrome/browser/extensions/external_provider_impl.h"
43 #include "chrome/browser/extensions/external_provider_interface.h" 43 #include "chrome/browser/extensions/external_provider_interface.h"
44 #include "chrome/browser/extensions/installed_loader.h" 44 #include "chrome/browser/extensions/installed_loader.h"
45 #include "chrome/browser/extensions/pack_extension_job.h" 45 #include "chrome/browser/extensions/pack_extension_job.h"
46 #include "chrome/browser/extensions/pending_extension_info.h" 46 #include "chrome/browser/extensions/pending_extension_info.h"
47 #include "chrome/browser/extensions/pending_extension_manager.h" 47 #include "chrome/browser/extensions/pending_extension_manager.h"
48 #include "chrome/browser/extensions/test_extension_system.h" 48 #include "chrome/browser/extensions/test_extension_system.h"
49 #include "chrome/browser/extensions/test_management_policy.h" 49 #include "chrome/browser/extensions/test_management_policy.h"
50 #include "chrome/browser/extensions/unpacked_installer.h" 50 #include "chrome/browser/extensions/unpacked_installer.h"
51 #include "chrome/browser/extensions/updater/extension_updater.h" 51 #include "chrome/browser/extensions/updater/extension_updater.h"
52 #include "chrome/browser/plugin_prefs_factory.h"
52 #include "chrome/browser/prefs/browser_prefs.h" 53 #include "chrome/browser/prefs/browser_prefs.h"
53 #include "chrome/browser/prefs/pref_service_mock_builder.h" 54 #include "chrome/browser/prefs/pref_service_mock_builder.h"
54 #include "chrome/browser/prefs/scoped_user_pref_update.h" 55 #include "chrome/browser/prefs/scoped_user_pref_update.h"
55 #include "chrome/common/chrome_constants.h" 56 #include "chrome/common/chrome_constants.h"
56 #include "chrome/common/chrome_notification_types.h" 57 #include "chrome/common/chrome_notification_types.h"
57 #include "chrome/common/chrome_paths.h" 58 #include "chrome/common/chrome_paths.h"
58 #include "chrome/common/chrome_switches.h" 59 #include "chrome/common/chrome_switches.h"
59 #include "chrome/common/extensions/extension.h" 60 #include "chrome/common/extensions/extension.h"
60 #include "chrome/common/extensions/extension_l10n_util.h" 61 #include "chrome/common/extensions/extension_l10n_util.h"
61 #include "chrome/common/extensions/extension_manifest_constants.h" 62 #include "chrome/common/extensions/extension_manifest_constants.h"
62 #include "chrome/common/extensions/extension_resource.h" 63 #include "chrome/common/extensions/extension_resource.h"
63 #include "chrome/common/extensions/permissions/permission_set.h" 64 #include "chrome/common/extensions/permissions/permission_set.h"
64 #include "chrome/common/extensions/url_pattern.h" 65 #include "chrome/common/extensions/url_pattern.h"
65 #include "chrome/common/pref_names.h" 66 #include "chrome/common/pref_names.h"
66 #include "chrome/common/url_constants.h" 67 #include "chrome/common/url_constants.h"
67 #include "chrome/test/base/testing_profile.h" 68 #include "chrome/test/base/testing_profile.h"
68 #include "content/public/browser/dom_storage_context.h" 69 #include "content/public/browser/dom_storage_context.h"
70 #include "content/public/browser/gpu_data_manager.h"
69 #include "content/public/browser/indexed_db_context.h" 71 #include "content/public/browser/indexed_db_context.h"
70 #include "content/public/browser/notification_registrar.h" 72 #include "content/public/browser/notification_registrar.h"
71 #include "content/public/browser/notification_service.h" 73 #include "content/public/browser/notification_service.h"
72 #include "content/public/browser/plugin_service.h" 74 #include "content/public/browser/plugin_service.h"
73 #include "content/public/browser/storage_partition.h" 75 #include "content/public/browser/storage_partition.h"
74 #include "content/public/common/content_constants.h" 76 #include "content/public/common/content_constants.h"
75 #include "content/public/test/test_browser_thread.h" 77 #include "content/public/test/test_browser_thread.h"
76 #include "googleurl/src/gurl.h" 78 #include "googleurl/src/gurl.h"
77 #include "grit/browser_resources.h" 79 #include "grit/browser_resources.h"
78 #include "net/cookies/canonical_cookie.h" 80 #include "net/cookies/canonical_cookie.h"
(...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 } 712 }
711 713
712 enum UpdateState { 714 enum UpdateState {
713 FAILED_SILENTLY, 715 FAILED_SILENTLY,
714 FAILED, 716 FAILED,
715 UPDATED, 717 UPDATED,
716 INSTALLED, 718 INSTALLED,
717 ENABLED 719 ENABLED
718 }; 720 };
719 721
722 void BlackListWebGL() {
723 static const std::string json_blacklist =
724 "{\n"
725 " \"name\": \"gpu blacklist\",\n"
726 " \"version\": \"1.0\",\n"
727 " \"entries\": [\n"
728 " {\n"
729 " \"id\": 1,\n"
730 " \"blacklist\": [\"webgl\"]\n"
731 " }\n"
732 " ]\n"
733 "}";
734 content::GpuDataManager::GetInstance()->Initialize("0", json_blacklist);
735 }
736
720 void UpdateExtension(const std::string& id, const FilePath& in_path, 737 void UpdateExtension(const std::string& id, const FilePath& in_path,
721 UpdateState expected_state) { 738 UpdateState expected_state) {
722 ASSERT_TRUE(file_util::PathExists(in_path)); 739 ASSERT_TRUE(file_util::PathExists(in_path));
723 740
724 // We need to copy this to a temporary location because Update() will delete 741 // We need to copy this to a temporary location because Update() will delete
725 // it. 742 // it.
726 FilePath path = temp_dir_.path(); 743 FilePath path = temp_dir_.path();
727 path = path.Append(in_path.BaseName()); 744 path = path.Append(in_path.BaseName());
728 ASSERT_TRUE(file_util::CopyFile(in_path, path)); 745 ASSERT_TRUE(file_util::CopyFile(in_path, path));
729 746
(...skipping 1659 matching lines...) Expand 10 before | Expand all | Expand 10 after
2389 ASSERT_EQ(good_crx, good->id()); 2406 ASSERT_EQ(good_crx, good->id());
2390 2407
2391 // Disable it and allow it to run in incognito. These settings should carry 2408 // Disable it and allow it to run in incognito. These settings should carry
2392 // over to the updated version. 2409 // over to the updated version.
2393 service_->DisableExtension(good->id(), Extension::DISABLE_USER_ACTION); 2410 service_->DisableExtension(good->id(), Extension::DISABLE_USER_ACTION);
2394 service_->SetIsIncognitoEnabled(good->id(), true); 2411 service_->SetIsIncognitoEnabled(good->id(), true);
2395 service_->extension_prefs()->SetDidExtensionEscalatePermissions(good, true); 2412 service_->extension_prefs()->SetDidExtensionEscalatePermissions(good, true);
2396 2413
2397 path = data_dir_.AppendASCII("good2.crx"); 2414 path = data_dir_.AppendASCII("good2.crx");
2398 UpdateExtension(good_crx, path, INSTALLED); 2415 UpdateExtension(good_crx, path, INSTALLED);
2399 ASSERT_EQ(1u, service_->disabled_extensions()->size()); 2416 ASSERT_EQ(1u, service_->disabled_extensions()->size());\
2400 const Extension* good2 = service_->GetExtensionById(good_crx, true); 2417 const Extension* good2 = service_->GetExtensionById(good_crx, true);
2401 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); 2418 ASSERT_EQ("1.0.0.1", good2->version()->GetString());
2402 EXPECT_TRUE(service_->IsIncognitoEnabled(good2->id())); 2419 EXPECT_TRUE(service_->IsIncognitoEnabled(good2->id()));
2403 EXPECT_TRUE(service_->extension_prefs()->DidExtensionEscalatePermissions( 2420 EXPECT_TRUE(service_->extension_prefs()->DidExtensionEscalatePermissions(
2404 good2->id())); 2421 good2->id()));
2405 } 2422 }
2406 2423
2407 // Tests that updating preserves extension location. 2424 // Tests that updating preserves extension location.
2408 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesLocation) { 2425 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesLocation) {
2409 InitializeEmptyExtensionService(); 2426 InitializeEmptyExtensionService();
(...skipping 1015 matching lines...) Expand 10 before | Expand all | Expand 10 after
3425 UninstallExtension(good_crx, true); 3442 UninstallExtension(good_crx, true);
3426 } 3443 }
3427 3444
3428 TEST_F(ExtensionServiceTest, UninstallExtensionHelperTerminated) { 3445 TEST_F(ExtensionServiceTest, UninstallExtensionHelperTerminated) {
3429 InitializeEmptyExtensionService(); 3446 InitializeEmptyExtensionService();
3430 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); 3447 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW);
3431 TerminateExtension(good_crx); 3448 TerminateExtension(good_crx);
3432 UninstallExtension(good_crx, true); 3449 UninstallExtension(good_crx, true);
3433 } 3450 }
3434 3451
3452 // An extension disabled because of unsupported requirements should re-enabled
3453 // if updated to a version with supported requirements as long as there are no
3454 // other disable reasons.
3455 TEST_F(ExtensionServiceTest, UpgradingRequirementsEnabled) {
3456 InitializeEmptyExtensionService();
3457 BlackListWebGL();
3458
3459 FilePath path = data_dir_.AppendASCII("requirements");
3460 FilePath pem_path = data_dir_.AppendASCII("requirements")
3461 .AppendASCII("v1_good.pem");
3462 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"),
3463 pem_path,
3464 INSTALL_NEW);
3465 std::string id = extension_v1->id();
3466 EXPECT_TRUE(service_->IsExtensionEnabled(id));
3467
3468 PackCRX(path.AppendASCII("v2_bad_requirements"), pem_path,
3469 path.AppendASCII("v2_bad_requirements.crx"));
3470 UpdateExtension(id, path.AppendASCII("v2_bad_requirements.crx"), INSTALLED);
3471 EXPECT_FALSE(service_->IsExtensionEnabled(id));
3472
3473 PackCRX(path.AppendASCII("v3_good"), pem_path,
3474 path.AppendASCII("v3_good.crx"));
3475 UpdateExtension(id, path.AppendASCII("v3_good.crx"), ENABLED);
3476 EXPECT_TRUE(service_->IsExtensionEnabled(id));
3477 }
3478
3479 // Extensions disabled through user action should stay disabled.
3480 TEST_F(ExtensionServiceTest, UpgradingRequirementsDisabled) {
3481 InitializeEmptyExtensionService();
3482 BlackListWebGL();
3483
3484 FilePath path = data_dir_.AppendASCII("requirements");
3485 FilePath pem_path = data_dir_.AppendASCII("requirements")
3486 .AppendASCII("v1_good.pem");
3487 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"),
3488 pem_path,
3489 INSTALL_NEW);
3490 std::string id = extension_v1->id();
3491 service_->DisableExtension(id, Extension::DISABLE_USER_ACTION);
3492 EXPECT_FALSE(service_->IsExtensionEnabled(id));
3493
3494 PackCRX(path.AppendASCII("v2_bad_requirements"), pem_path,
3495 path.AppendASCII("v2_bad_requirements.crx"));
3496 UpdateExtension(id, path.AppendASCII("v2_bad_requirements.crx"), INSTALLED);
3497 EXPECT_FALSE(service_->IsExtensionEnabled(id));
3498
3499 PackCRX(path.AppendASCII("v3_good"), pem_path,
3500 path.AppendASCII("v3_good.crx"));
3501 UpdateExtension(id, path.AppendASCII("v3_good.crx"), INSTALLED);
3502 EXPECT_FALSE(service_->IsExtensionEnabled(id));
3503 }
3504
3505 // The extension should not re-enabled because it was disabled from a
3506 // permission increase.
3507 TEST_F(ExtensionServiceTest, UpgradingRequirementsPermissions) {
3508 InitializeEmptyExtensionService();
3509 BlackListWebGL();
3510
3511 FilePath path = data_dir_.AppendASCII("requirements");
3512 FilePath pem_path = data_dir_.AppendASCII("requirements")
3513 .AppendASCII("v1_good.pem");
3514 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"),
3515 pem_path,
3516 INSTALL_NEW);
3517 std::string id = extension_v1->id();
3518 EXPECT_TRUE(service_->IsExtensionEnabled(id));
3519
3520 PackCRX(path.AppendASCII("v2_bad_requirements_and_permissions"), pem_path,
3521 path.AppendASCII("v2_bad_requirements_and_permissions.crx"));
3522 UpdateExtension(
3523 id,
3524 path.AppendASCII("v2_bad_requirements_and_permissions.crx"), INSTALLED);
3525 EXPECT_FALSE(service_->IsExtensionEnabled(id));
3526
3527 PackCRX(path.AppendASCII("v3_bad_permissions"), pem_path,
3528 path.AppendASCII("v3_bad_permissions.crx"));
3529 UpdateExtension(id, path.AppendASCII("v3_bad_permissions.crx"), INSTALLED);
3530 EXPECT_FALSE(service_->IsExtensionEnabled(id));
3531 }
3532
3533 // Unpacked extensions are not allowed to be installed if they have unsupported
3534 // requirements.
3535 TEST_F(ExtensionServiceTest, UnpackedRequirements) {
3536 InitializeEmptyExtensionService();
3537 BlackListWebGL();
3538
3539 FilePath path = data_dir_.AppendASCII("requirements")
3540 .AppendASCII("v2_bad_requirements");
3541 extensions::UnpackedInstaller::Create(service_)->Load(path);
3542 loop_.RunAllPending();
3543 EXPECT_EQ(1u, GetErrors().size());
3544 EXPECT_EQ(0u, service_->extensions()->size());
3545 }
3546
3435 class ExtensionCookieCallback { 3547 class ExtensionCookieCallback {
3436 public: 3548 public:
3437 ExtensionCookieCallback() 3549 ExtensionCookieCallback()
3438 : result_(false), 3550 : result_(false),
3439 weak_factory_(MessageLoop::current()) {} 3551 weak_factory_(MessageLoop::current()) {}
3440 3552
3441 void SetCookieCallback(bool result) { 3553 void SetCookieCallback(bool result) {
3442 MessageLoop::current()->PostTask( 3554 MessageLoop::current()->PostTask(
3443 FROM_HERE, base::Bind(&MessageLoop::Quit, weak_factory_.GetWeakPtr())); 3555 FROM_HERE, base::Bind(&MessageLoop::Quit, weak_factory_.GetWeakPtr()));
3444 result_ = result; 3556 result_ = result;
(...skipping 1973 matching lines...) Expand 10 before | Expand all | Expand 10 after
5418 // This should NOT trigger an alert. 5530 // This should NOT trigger an alert.
5419 provider->UpdateOrAddExtension(hosted_app, "1.0.0.0", 5531 provider->UpdateOrAddExtension(hosted_app, "1.0.0.0",
5420 data_dir_.AppendASCII("hosted_app.crx")); 5532 data_dir_.AppendASCII("hosted_app.crx"));
5421 5533
5422 service_->CheckForExternalUpdates(); 5534 service_->CheckForExternalUpdates();
5423 loop_.RunAllPending(); 5535 loop_.RunAllPending();
5424 5536
5425 ASSERT_TRUE(service_->PopulateExtensionErrorUI(extension_error_ui.get())); 5537 ASSERT_TRUE(service_->PopulateExtensionErrorUI(extension_error_ui.get()));
5426 ASSERT_EQ(1u, extension_error_ui->get_external_extension_ids()->size()); 5538 ASSERT_EQ(1u, extension_error_ui->get_external_extension_ids()->size());
5427 } 5539 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.cc ('k') | chrome/browser/extensions/extension_system.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698