| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/bind_helpers.h" | 6 #include "base/bind_helpers.h" |
| 7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "base/prefs/scoped_user_pref_update.h" | 9 #include "base/prefs/scoped_user_pref_update.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| 11 #include "chrome/browser/chrome_notification_types.h" | 11 #include "chrome/browser/chrome_notification_types.h" |
| 12 #include "chrome/browser/extensions/extension_browsertest.h" | 12 #include "chrome/browser/extensions/extension_browsertest.h" |
| 13 #include "chrome/browser/extensions/extension_host.h" | 13 #include "chrome/browser/extensions/extension_host.h" |
| 14 #include "chrome/browser/extensions/extension_service.h" | 14 #include "chrome/browser/extensions/extension_service.h" |
| 15 #include "chrome/browser/extensions/extension_system.h" | 15 #include "chrome/browser/extensions/extension_system.h" |
| 16 #include "chrome/browser/extensions/extension_test_message_listener.h" | 16 #include "chrome/browser/extensions/extension_test_message_listener.h" |
| 17 #include "chrome/browser/extensions/external_policy_loader.h" | 17 #include "chrome/browser/extensions/external_policy_loader.h" |
| 18 #include "chrome/browser/extensions/updater/extension_downloader.h" | 18 #include "chrome/browser/extensions/updater/extension_downloader.h" |
| 19 #include "chrome/browser/extensions/updater/extension_updater.h" | 19 #include "chrome/browser/extensions/updater/extension_updater.h" |
| 20 #include "chrome/browser/profiles/profile.h" | 20 #include "chrome/browser/profiles/profile.h" |
| 21 #include "chrome/browser/ui/browser.h" | 21 #include "chrome/browser/ui/browser.h" |
| 22 #include "chrome/common/pref_names.h" | 22 #include "chrome/common/pref_names.h" |
| 23 #include "chrome/common/url_constants.h" | 23 #include "chrome/common/url_constants.h" |
| 24 #include "chrome/test/base/ui_test_utils.h" | 24 #include "chrome/test/base/ui_test_utils.h" |
| 25 #include "content/public/browser/notification_service.h" | 25 #include "content/public/browser/notification_service.h" |
| 26 #include "content/public/browser/render_view_host.h" | 26 #include "content/public/browser/render_view_host.h" |
| 27 #include "content/public/test/browser_test_utils.h" | 27 #include "content/public/test/browser_test_utils.h" |
| 28 #include "content/test/net/url_request_prepackaged_interceptor.h" | 28 #include "content/test/net/url_request_prepackaged_interceptor.h" |
| 29 #include "extensions/browser/pref_names.h" |
| 29 #include "net/url_request/url_fetcher.h" | 30 #include "net/url_request/url_fetcher.h" |
| 30 | 31 |
| 31 using extensions::Extension; | 32 using extensions::Extension; |
| 32 using extensions::Manifest; | 33 using extensions::Manifest; |
| 33 | 34 |
| 34 class ExtensionManagementTest : public ExtensionBrowserTest { | 35 class ExtensionManagementTest : public ExtensionBrowserTest { |
| 35 protected: | 36 protected: |
| 36 // Helper method that returns whether the extension is at the given version. | 37 // Helper method that returns whether the extension is at the given version. |
| 37 // This calls version(), which must be defined in the extension's bg page, | 38 // This calls version(), which must be defined in the extension's bg page, |
| 38 // as well as asking the extension itself. | 39 // as well as asking the extension itself. |
| (...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 GURL("http://localhost/autoupdate/manifest"), | 490 GURL("http://localhost/autoupdate/manifest"), |
| 490 basedir.AppendASCII("manifest_v2.xml")); | 491 basedir.AppendASCII("manifest_v2.xml")); |
| 491 interceptor.SetResponseIgnoreQuery(GURL("http://localhost/autoupdate/v2.crx"), | 492 interceptor.SetResponseIgnoreQuery(GURL("http://localhost/autoupdate/v2.crx"), |
| 492 basedir.AppendASCII("v2.crx")); | 493 basedir.AppendASCII("v2.crx")); |
| 493 | 494 |
| 494 const size_t size_before = service->extensions()->size(); | 495 const size_t size_before = service->extensions()->size(); |
| 495 ASSERT_TRUE(service->disabled_extensions()->is_empty()); | 496 ASSERT_TRUE(service->disabled_extensions()->is_empty()); |
| 496 | 497 |
| 497 PrefService* prefs = browser()->profile()->GetPrefs(); | 498 PrefService* prefs = browser()->profile()->GetPrefs(); |
| 498 const base::DictionaryValue* forcelist = | 499 const base::DictionaryValue* forcelist = |
| 499 prefs->GetDictionary(prefs::kExtensionInstallForceList); | 500 prefs->GetDictionary(extensions::pref_names::kInstallForceList); |
| 500 ASSERT_TRUE(forcelist->empty()) << kForceInstallNotEmptyHelp; | 501 ASSERT_TRUE(forcelist->empty()) << kForceInstallNotEmptyHelp; |
| 501 | 502 |
| 502 { | 503 { |
| 503 // Set the policy as a user preference and fire notification observers. | 504 // Set the policy as a user preference and fire notification observers. |
| 504 DictionaryPrefUpdate pref_update(prefs, prefs::kExtensionInstallForceList); | 505 DictionaryPrefUpdate pref_update(prefs, |
| 506 extensions::pref_names::kInstallForceList); |
| 505 base::DictionaryValue* forcelist = pref_update.Get(); | 507 base::DictionaryValue* forcelist = pref_update.Get(); |
| 506 extensions::ExternalPolicyLoader::AddExtension( | 508 extensions::ExternalPolicyLoader::AddExtension( |
| 507 forcelist, kExtensionId, "http://localhost/autoupdate/manifest"); | 509 forcelist, kExtensionId, "http://localhost/autoupdate/manifest"); |
| 508 } | 510 } |
| 509 | 511 |
| 510 // Check if the extension got installed. | 512 // Check if the extension got installed. |
| 511 ASSERT_TRUE(WaitForExtensionInstall()); | 513 ASSERT_TRUE(WaitForExtensionInstall()); |
| 512 ASSERT_EQ(size_before + 1, service->extensions()->size()); | 514 ASSERT_EQ(size_before + 1, service->extensions()->size()); |
| 513 const Extension* extension = service->GetExtensionById(kExtensionId, false); | 515 const Extension* extension = service->GetExtensionById(kExtensionId, false); |
| 514 ASSERT_TRUE(extension); | 516 ASSERT_TRUE(extension); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 525 | 527 |
| 526 // Now try to disable it through the management api, again failing. | 528 // Now try to disable it through the management api, again failing. |
| 527 ExtensionTestMessageListener listener1("ready", false); | 529 ExtensionTestMessageListener listener1("ready", false); |
| 528 ASSERT_TRUE(LoadExtension( | 530 ASSERT_TRUE(LoadExtension( |
| 529 test_data_dir_.AppendASCII("management/uninstall_extension"))); | 531 test_data_dir_.AppendASCII("management/uninstall_extension"))); |
| 530 ASSERT_TRUE(listener1.WaitUntilSatisfied()); | 532 ASSERT_TRUE(listener1.WaitUntilSatisfied()); |
| 531 EXPECT_EQ(size_before + 2, service->extensions()->size()); | 533 EXPECT_EQ(size_before + 2, service->extensions()->size()); |
| 532 EXPECT_EQ(0u, service->disabled_extensions()->size()); | 534 EXPECT_EQ(0u, service->disabled_extensions()->size()); |
| 533 | 535 |
| 534 // Check that emptying the list triggers uninstall. | 536 // Check that emptying the list triggers uninstall. |
| 535 prefs->ClearPref(prefs::kExtensionInstallForceList); | 537 prefs->ClearPref(extensions::pref_names::kInstallForceList); |
| 536 EXPECT_EQ(size_before + 1, service->extensions()->size()); | 538 EXPECT_EQ(size_before + 1, service->extensions()->size()); |
| 537 EXPECT_FALSE(service->GetExtensionById(kExtensionId, true)); | 539 EXPECT_FALSE(service->GetExtensionById(kExtensionId, true)); |
| 538 } | 540 } |
| 539 | 541 |
| 540 // See http://crbug.com/103371 and http://crbug.com/120640. | 542 // See http://crbug.com/103371 and http://crbug.com/120640. |
| 541 #if defined(ADDRESS_SANITIZER) || defined(OS_WIN) | 543 #if defined(ADDRESS_SANITIZER) || defined(OS_WIN) |
| 542 #define MAYBE_PolicyOverridesUserInstall DISABLED_PolicyOverridesUserInstall | 544 #define MAYBE_PolicyOverridesUserInstall DISABLED_PolicyOverridesUserInstall |
| 543 #else | 545 #else |
| 544 #define MAYBE_PolicyOverridesUserInstall PolicyOverridesUserInstall | 546 #define MAYBE_PolicyOverridesUserInstall PolicyOverridesUserInstall |
| 545 #endif | 547 #endif |
| (...skipping 15 matching lines...) Expand all Loading... |
| 561 | 563 |
| 562 interceptor.SetResponseIgnoreQuery( | 564 interceptor.SetResponseIgnoreQuery( |
| 563 GURL("http://localhost/autoupdate/manifest"), | 565 GURL("http://localhost/autoupdate/manifest"), |
| 564 basedir.AppendASCII("manifest_v2.xml")); | 566 basedir.AppendASCII("manifest_v2.xml")); |
| 565 interceptor.SetResponseIgnoreQuery(GURL("http://localhost/autoupdate/v2.crx"), | 567 interceptor.SetResponseIgnoreQuery(GURL("http://localhost/autoupdate/v2.crx"), |
| 566 basedir.AppendASCII("v2.crx")); | 568 basedir.AppendASCII("v2.crx")); |
| 567 | 569 |
| 568 // Check that the policy is initially empty. | 570 // Check that the policy is initially empty. |
| 569 PrefService* prefs = browser()->profile()->GetPrefs(); | 571 PrefService* prefs = browser()->profile()->GetPrefs(); |
| 570 const base::DictionaryValue* forcelist = | 572 const base::DictionaryValue* forcelist = |
| 571 prefs->GetDictionary(prefs::kExtensionInstallForceList); | 573 prefs->GetDictionary(extensions::pref_names::kInstallForceList); |
| 572 ASSERT_TRUE(forcelist->empty()) << kForceInstallNotEmptyHelp; | 574 ASSERT_TRUE(forcelist->empty()) << kForceInstallNotEmptyHelp; |
| 573 | 575 |
| 574 // User install of the extension. | 576 // User install of the extension. |
| 575 ASSERT_TRUE(InstallExtension(basedir.AppendASCII("v2.crx"), 1)); | 577 ASSERT_TRUE(InstallExtension(basedir.AppendASCII("v2.crx"), 1)); |
| 576 ASSERT_EQ(size_before + 1, service->extensions()->size()); | 578 ASSERT_EQ(size_before + 1, service->extensions()->size()); |
| 577 const Extension* extension = service->GetExtensionById(kExtensionId, false); | 579 const Extension* extension = service->GetExtensionById(kExtensionId, false); |
| 578 ASSERT_TRUE(extension); | 580 ASSERT_TRUE(extension); |
| 579 EXPECT_EQ(Manifest::INTERNAL, extension->location()); | 581 EXPECT_EQ(Manifest::INTERNAL, extension->location()); |
| 580 EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); | 582 EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); |
| 581 | 583 |
| 582 // Setup the force install policy. It should override the location. | 584 // Setup the force install policy. It should override the location. |
| 583 { | 585 { |
| 584 DictionaryPrefUpdate pref_update(prefs, prefs::kExtensionInstallForceList); | 586 DictionaryPrefUpdate pref_update(prefs, |
| 587 extensions::pref_names::kInstallForceList); |
| 585 extensions::ExternalPolicyLoader::AddExtension( | 588 extensions::ExternalPolicyLoader::AddExtension( |
| 586 pref_update.Get(), kExtensionId, | 589 pref_update.Get(), kExtensionId, |
| 587 "http://localhost/autoupdate/manifest"); | 590 "http://localhost/autoupdate/manifest"); |
| 588 } | 591 } |
| 589 ASSERT_TRUE(WaitForExtensionInstall()); | 592 ASSERT_TRUE(WaitForExtensionInstall()); |
| 590 ASSERT_EQ(size_before + 1, service->extensions()->size()); | 593 ASSERT_EQ(size_before + 1, service->extensions()->size()); |
| 591 extension = service->GetExtensionById(kExtensionId, false); | 594 extension = service->GetExtensionById(kExtensionId, false); |
| 592 ASSERT_TRUE(extension); | 595 ASSERT_TRUE(extension); |
| 593 EXPECT_EQ(Manifest::EXTERNAL_POLICY_DOWNLOAD, extension->location()); | 596 EXPECT_EQ(Manifest::EXTERNAL_POLICY_DOWNLOAD, extension->location()); |
| 594 EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); | 597 EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); |
| 595 | 598 |
| 596 // Remove the policy, and verify that the extension was uninstalled. | 599 // Remove the policy, and verify that the extension was uninstalled. |
| 597 // TODO(joaodasilva): it would be nicer if the extension was kept instead, | 600 // TODO(joaodasilva): it would be nicer if the extension was kept instead, |
| 598 // and reverted location to INTERNAL or whatever it was before the policy | 601 // and reverted location to INTERNAL or whatever it was before the policy |
| 599 // was applied. | 602 // was applied. |
| 600 prefs->ClearPref(prefs::kExtensionInstallForceList); | 603 prefs->ClearPref(extensions::pref_names::kInstallForceList); |
| 601 ASSERT_EQ(size_before, service->extensions()->size()); | 604 ASSERT_EQ(size_before, service->extensions()->size()); |
| 602 extension = service->GetExtensionById(kExtensionId, true); | 605 extension = service->GetExtensionById(kExtensionId, true); |
| 603 EXPECT_FALSE(extension); | 606 EXPECT_FALSE(extension); |
| 604 | 607 |
| 605 // User install again, but have it disabled too before setting the policy. | 608 // User install again, but have it disabled too before setting the policy. |
| 606 ASSERT_TRUE(InstallExtension(basedir.AppendASCII("v2.crx"), 1)); | 609 ASSERT_TRUE(InstallExtension(basedir.AppendASCII("v2.crx"), 1)); |
| 607 ASSERT_EQ(size_before + 1, service->extensions()->size()); | 610 ASSERT_EQ(size_before + 1, service->extensions()->size()); |
| 608 extension = service->GetExtensionById(kExtensionId, false); | 611 extension = service->GetExtensionById(kExtensionId, false); |
| 609 ASSERT_TRUE(extension); | 612 ASSERT_TRUE(extension); |
| 610 EXPECT_EQ(Manifest::INTERNAL, extension->location()); | 613 EXPECT_EQ(Manifest::INTERNAL, extension->location()); |
| 611 EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); | 614 EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); |
| 612 EXPECT_TRUE(service->disabled_extensions()->is_empty()); | 615 EXPECT_TRUE(service->disabled_extensions()->is_empty()); |
| 613 | 616 |
| 614 DisableExtension(kExtensionId); | 617 DisableExtension(kExtensionId); |
| 615 EXPECT_EQ(1u, service->disabled_extensions()->size()); | 618 EXPECT_EQ(1u, service->disabled_extensions()->size()); |
| 616 extension = service->GetExtensionById(kExtensionId, true); | 619 extension = service->GetExtensionById(kExtensionId, true); |
| 617 EXPECT_TRUE(extension); | 620 EXPECT_TRUE(extension); |
| 618 EXPECT_FALSE(service->IsExtensionEnabled(kExtensionId)); | 621 EXPECT_FALSE(service->IsExtensionEnabled(kExtensionId)); |
| 619 | 622 |
| 620 // Install the policy again. It should overwrite the extension's location, | 623 // Install the policy again. It should overwrite the extension's location, |
| 621 // and force enable it too. | 624 // and force enable it too. |
| 622 { | 625 { |
| 623 DictionaryPrefUpdate pref_update(prefs, prefs::kExtensionInstallForceList); | 626 DictionaryPrefUpdate pref_update(prefs, |
| 627 extensions::pref_names::kInstallForceList); |
| 624 base::DictionaryValue* forcelist = pref_update.Get(); | 628 base::DictionaryValue* forcelist = pref_update.Get(); |
| 625 extensions::ExternalPolicyLoader::AddExtension( | 629 extensions::ExternalPolicyLoader::AddExtension( |
| 626 forcelist, kExtensionId, "http://localhost/autoupdate/manifest"); | 630 forcelist, kExtensionId, "http://localhost/autoupdate/manifest"); |
| 627 } | 631 } |
| 628 ASSERT_TRUE(WaitForExtensionInstall()); | 632 ASSERT_TRUE(WaitForExtensionInstall()); |
| 629 ASSERT_EQ(size_before + 1, service->extensions()->size()); | 633 ASSERT_EQ(size_before + 1, service->extensions()->size()); |
| 630 extension = service->GetExtensionById(kExtensionId, false); | 634 extension = service->GetExtensionById(kExtensionId, false); |
| 631 ASSERT_TRUE(extension); | 635 ASSERT_TRUE(extension); |
| 632 EXPECT_EQ(Manifest::EXTERNAL_POLICY_DOWNLOAD, extension->location()); | 636 EXPECT_EQ(Manifest::EXTERNAL_POLICY_DOWNLOAD, extension->location()); |
| 633 EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); | 637 EXPECT_TRUE(service->IsExtensionEnabled(kExtensionId)); |
| 634 EXPECT_TRUE(service->disabled_extensions()->is_empty()); | 638 EXPECT_TRUE(service->disabled_extensions()->is_empty()); |
| 635 } | 639 } |
| OLD | NEW |