| Index: chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
|
| diff --git a/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc b/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
|
| index 656ae7788f24dbb0006b2cddbbd1b3d9978d9306..f84e31a74cf484abe9b6db85c9739396b8f113b4 100644
|
| --- a/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
|
| @@ -9,13 +9,23 @@
|
| #include "chrome/browser/extensions/extension_function_test_utils.h"
|
| #include "chrome/browser/extensions/extension_message_bubble.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| +#include "chrome/browser/extensions/settings_api_bubble_controller.h"
|
| #include "chrome/browser/extensions/suspicious_extension_bubble_controller.h"
|
| #include "chrome/browser/extensions/test_extension_system.h"
|
| #include "chrome/test/base/testing_profile.h"
|
| #include "content/public/test/test_browser_thread_bundle.h"
|
| #include "extensions/common/extension.h"
|
| +#include "extensions/common/extension_builder.h"
|
| #include "extensions/common/feature_switch.h"
|
|
|
| +namespace {
|
| +
|
| +const char kId1[] = "iccfkkhkfiphcjdakkmcjmkfboccmndk";
|
| +const char kId2[] = "ajjhifimiemdpmophmkkkcijegphclbl";
|
| +const char kId3[] = "ioibbbfddncmmabjmpokikkeiofalaek";
|
| +
|
| +} // namespace
|
| +
|
| namespace extensions {
|
|
|
| class TestDelegate {
|
| @@ -97,6 +107,30 @@ class TestDevModeBubbleController
|
| }
|
| };
|
|
|
| +// A test class for the SettingsApiBubbleController.
|
| +class TestSettingsApiBubbleController : public SettingsApiBubbleController,
|
| + public TestDelegate {
|
| + public:
|
| + TestSettingsApiBubbleController(Profile* profile,
|
| + SettingsApiOverrideType type)
|
| + : SettingsApiBubbleController(profile, type) {}
|
| +
|
| + virtual void OnBubbleAction() OVERRIDE {
|
| + ++action_button_callback_count_;
|
| + SettingsApiBubbleController::OnBubbleAction();
|
| + }
|
| +
|
| + virtual void OnBubbleDismiss() OVERRIDE {
|
| + ++dismiss_button_callback_count_;
|
| + SettingsApiBubbleController::OnBubbleDismiss();
|
| + }
|
| +
|
| + virtual void OnLinkClicked() OVERRIDE {
|
| + ++link_click_callback_count_;
|
| + SettingsApiBubbleController::OnLinkClicked();
|
| + }
|
| +};
|
| +
|
| // A fake bubble used for testing the controller. Takes an action that specifies
|
| // what should happen when the bubble is "shown" (the bubble is actually not
|
| // shown, the corresponding action is taken immediately).
|
| @@ -145,12 +179,76 @@ class FakeExtensionMessageBubble : public ExtensionMessageBubble {
|
|
|
| class ExtensionMessageBubbleTest : public testing::Test {
|
| public:
|
| - ExtensionMessageBubbleTest() {
|
| + ExtensionMessageBubbleTest() {}
|
| +
|
| + void LoadGenericExtension(const std::string& index,
|
| + const std::string& id,
|
| + Manifest::Location location) {
|
| + extensions::ExtensionBuilder builder;
|
| + builder.SetManifest(extensions::DictionaryBuilder()
|
| + .Set("name", std::string("Extension " + index))
|
| + .Set("version", "1.0")
|
| + .Set("manifest_version", 2));
|
| + builder.SetLocation(location);
|
| + builder.SetID(id);
|
| + service_->AddExtension(builder.Build().get());
|
| + }
|
| +
|
| + void LoadExtensionWithAction(const std::string& index,
|
| + const std::string& id,
|
| + Manifest::Location location) {
|
| + extensions::ExtensionBuilder builder;
|
| + builder.SetManifest(extensions::DictionaryBuilder()
|
| + .Set("name", std::string("Extension " + index))
|
| + .Set("version", "1.0")
|
| + .Set("manifest_version", 2)
|
| + .Set("browser_action",
|
| + extensions::DictionaryBuilder().Set(
|
| + "default_title", "Default title")));
|
| + builder.SetLocation(location);
|
| + builder.SetID(id);
|
| + service_->AddExtension(builder.Build().get());
|
| + }
|
| +
|
| + void LoadExtensionOverridingHome(const std::string& index,
|
| + const std::string& id,
|
| + Manifest::Location location) {
|
| + extensions::ExtensionBuilder builder;
|
| + builder.SetManifest(extensions::DictionaryBuilder()
|
| + .Set("name", std::string("Extension " + index))
|
| + .Set("version", "1.0")
|
| + .Set("manifest_version", 2)
|
| + .Set("chrome_settings_overrides",
|
| + extensions::DictionaryBuilder().Set(
|
| + "homepage", "http://www.google.com")));
|
| + builder.SetLocation(location);
|
| + builder.SetID(id);
|
| + service_->AddExtension(builder.Build().get());
|
| + }
|
| +
|
| + void LoadExtensionOverridingStart(const std::string& index,
|
| + const std::string& id,
|
| + Manifest::Location location) {
|
| + extensions::ExtensionBuilder builder;
|
| + builder.SetManifest(extensions::DictionaryBuilder()
|
| + .Set("name", std::string("Extension " + index))
|
| + .Set("version", "1.0")
|
| + .Set("manifest_version", 2)
|
| + .Set("chrome_settings_overrides",
|
| + extensions::DictionaryBuilder().Set(
|
| + "startup_pages",
|
| + extensions::ListBuilder().Append(
|
| + "http://www.google.com"))));
|
| + builder.SetLocation(location);
|
| + builder.SetID(id);
|
| + service_->AddExtension(builder.Build().get());
|
| + }
|
| +
|
| + void Init() {
|
| // The two lines of magical incantation required to get the extension
|
| // service to work inside a unit test and access the extension prefs.
|
| thread_bundle_.reset(new content::TestBrowserThreadBundle);
|
| profile_.reset(new TestingProfile);
|
| -
|
| static_cast<TestExtensionSystem*>(
|
| ExtensionSystem::Get(profile()))->CreateExtensionService(
|
| CommandLine::ForCurrentProcess(),
|
| @@ -158,49 +256,8 @@ class ExtensionMessageBubbleTest : public testing::Test {
|
| false);
|
| service_ = profile_->GetExtensionService();
|
| service_->Init();
|
| -
|
| - std::string basic_extension =
|
| - "{\"name\": \"Extension #\","
|
| - "\"version\": \"1.0\","
|
| - "\"manifest_version\": 2}";
|
| - std::string basic_extension_with_action =
|
| - "{\"name\": \"Extension #\","
|
| - "\"version\": \"1.0\","
|
| - "\"browser_action\": {"
|
| - " \"default_title\": \"Default title\""
|
| - "},"
|
| - "\"manifest_version\": 2}";
|
| -
|
| - std::string extension_data;
|
| - base::ReplaceChars(basic_extension_with_action, "#", "1", &extension_data);
|
| - scoped_refptr<Extension> my_test_extension1(
|
| - CreateExtension(
|
| - Manifest::COMMAND_LINE,
|
| - extension_data,
|
| - "Autogenerated 1"));
|
| -
|
| - base::ReplaceChars(basic_extension, "#", "2", &extension_data);
|
| - scoped_refptr<Extension> my_test_extension2(
|
| - CreateExtension(
|
| - Manifest::UNPACKED,
|
| - extension_data,
|
| - "Autogenerated 2"));
|
| -
|
| - base::ReplaceChars(basic_extension, "#", "3", &extension_data);
|
| - scoped_refptr<Extension> regular_extension(
|
| - CreateExtension(
|
| - Manifest::EXTERNAL_POLICY,
|
| - extension_data,
|
| - "Autogenerated 3"));
|
| -
|
| - extension_id1_ = my_test_extension1->id();
|
| - extension_id2_ = my_test_extension2->id();
|
| - extension_id3_ = regular_extension->id();
|
| -
|
| - service_->AddExtension(regular_extension);
|
| - service_->AddExtension(my_test_extension1);
|
| - service_->AddExtension(my_test_extension2);
|
| }
|
| +
|
| virtual ~ExtensionMessageBubbleTest() {
|
| // Make sure the profile is destroyed before the thread bundle.
|
| profile_.reset(NULL);
|
| @@ -226,9 +283,6 @@ class ExtensionMessageBubbleTest : public testing::Test {
|
| }
|
|
|
| ExtensionService* service_;
|
| - std::string extension_id1_;
|
| - std::string extension_id2_;
|
| - std::string extension_id3_;
|
|
|
| private:
|
| scoped_ptr<CommandLine> command_line_;
|
| @@ -246,8 +300,13 @@ class ExtensionMessageBubbleTest : public testing::Test {
|
| #endif
|
|
|
| TEST_F(ExtensionMessageBubbleTest, MAYBE_WipeoutControllerTest) {
|
| - // The test base class adds three extensions, and we control two of them in
|
| - // this test (ids are: extension_id1_ and extension_id2_).
|
| + Init();
|
| + // Add three extensions, and control two of them in this test (extension 1
|
| + // and 2).
|
| + LoadExtensionWithAction("1", kId1, Manifest::COMMAND_LINE);
|
| + LoadGenericExtension("2", kId2, Manifest::UNPACKED);
|
| + LoadGenericExtension("3", kId3, Manifest::EXTERNAL_POLICY);
|
| +
|
| scoped_ptr<TestSuspiciousExtensionBubbleController> controller(
|
| new TestSuspiciousExtensionBubbleController(profile()));
|
| FakeExtensionMessageBubble bubble;
|
| @@ -256,8 +315,8 @@ TEST_F(ExtensionMessageBubbleTest, MAYBE_WipeoutControllerTest) {
|
|
|
| // Validate that we don't have a suppress value for the extensions.
|
| ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
|
| - EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id1_));
|
| - EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id2_));
|
| + EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(kId1));
|
| + EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(kId2));
|
|
|
| EXPECT_FALSE(controller->ShouldShow());
|
| std::vector<base::string16> suspicious_extensions =
|
| @@ -267,11 +326,10 @@ TEST_F(ExtensionMessageBubbleTest, MAYBE_WipeoutControllerTest) {
|
| EXPECT_EQ(0U, controller->dismiss_click_count());
|
|
|
| // Now disable an extension, specifying the wipeout flag.
|
| - service_->DisableExtension(extension_id1_,
|
| - Extension::DISABLE_NOT_VERIFIED);
|
| + service_->DisableExtension(kId1, Extension::DISABLE_NOT_VERIFIED);
|
|
|
| - EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id1_));
|
| - EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id2_));
|
| + EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(kId1));
|
| + EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(kId2));
|
| controller.reset(new TestSuspiciousExtensionBubbleController(
|
| profile()));
|
| SuspiciousExtensionBubbleController::ClearProfileListForTesting();
|
| @@ -283,15 +341,14 @@ TEST_F(ExtensionMessageBubbleTest, MAYBE_WipeoutControllerTest) {
|
| EXPECT_EQ(0U, controller->link_click_count());
|
| EXPECT_EQ(1U, controller->dismiss_click_count());
|
| // Now the acknowledge flag should be set only for the first extension.
|
| - EXPECT_TRUE(prefs->HasWipeoutBeenAcknowledged(extension_id1_));
|
| - EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id2_));
|
| + EXPECT_TRUE(prefs->HasWipeoutBeenAcknowledged(kId1));
|
| + EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(kId2));
|
| // Clear the flag.
|
| - prefs->SetWipeoutAcknowledged(extension_id1_, false);
|
| - EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id1_));
|
| + prefs->SetWipeoutAcknowledged(kId1, false);
|
| + EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(kId1));
|
|
|
| // Now disable the other extension and exercise the link click code path.
|
| - service_->DisableExtension(extension_id2_,
|
| - Extension::DISABLE_NOT_VERIFIED);
|
| + service_->DisableExtension(kId2, Extension::DISABLE_NOT_VERIFIED);
|
|
|
| bubble.set_action_on_show(
|
| FakeExtensionMessageBubble::BUBBLE_ACTION_CLICK_LINK);
|
| @@ -306,7 +363,7 @@ TEST_F(ExtensionMessageBubbleTest, MAYBE_WipeoutControllerTest) {
|
| controller->Show(&bubble); // Simulate showing the bubble.
|
| EXPECT_EQ(1U, controller->link_click_count());
|
| EXPECT_EQ(0U, controller->dismiss_click_count());
|
| - EXPECT_TRUE(prefs->HasWipeoutBeenAcknowledged(extension_id1_));
|
| + EXPECT_TRUE(prefs->HasWipeoutBeenAcknowledged(kId1));
|
| }
|
|
|
| // The feature this is meant to test is only implemented on Windows.
|
| @@ -319,10 +376,14 @@ TEST_F(ExtensionMessageBubbleTest, MAYBE_WipeoutControllerTest) {
|
| TEST_F(ExtensionMessageBubbleTest, MAYBE_DevModeControllerTest) {
|
| FeatureSwitch::ScopedOverride force_dev_mode_highlighting(
|
| FeatureSwitch::force_dev_mode_highlighting(), true);
|
| - // The test base class adds three extensions, and we control two of them in
|
| - // this test (ids are: extension_id1_ and extension_id2_). Extension 1 is a
|
| - // regular extension, Extension 2 is UNPACKED so it counts as a DevMode
|
| - // extension.
|
| + Init();
|
| + // Add three extensions, and control two of them in this test (extension 1
|
| + // and 2). Extension 1 is a regular extension, Extension 2 is UNPACKED so it
|
| + // counts as a DevMode extension.
|
| + LoadExtensionWithAction("1", kId1, Manifest::COMMAND_LINE);
|
| + LoadGenericExtension("2", kId2, Manifest::UNPACKED);
|
| + LoadGenericExtension("3", kId3, Manifest::EXTERNAL_POLICY);
|
| +
|
| scoped_ptr<TestDevModeBubbleController> controller(
|
| new TestDevModeBubbleController(profile()));
|
|
|
| @@ -345,8 +406,8 @@ TEST_F(ExtensionMessageBubbleTest, MAYBE_DevModeControllerTest) {
|
| EXPECT_EQ(0U, controller->link_click_count());
|
| EXPECT_EQ(0U, controller->action_click_count());
|
| EXPECT_EQ(1U, controller->dismiss_click_count());
|
| - EXPECT_TRUE(service_->GetExtensionById(extension_id1_, false) != NULL);
|
| - EXPECT_TRUE(service_->GetExtensionById(extension_id2_, false) != NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId1, false) != NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId2, false) != NULL);
|
|
|
| // Do it again, but now press different button (Disable).
|
| bubble.set_action_on_show(
|
| @@ -361,12 +422,12 @@ TEST_F(ExtensionMessageBubbleTest, MAYBE_DevModeControllerTest) {
|
| EXPECT_EQ(0U, controller->link_click_count());
|
| EXPECT_EQ(1U, controller->action_click_count());
|
| EXPECT_EQ(0U, controller->dismiss_click_count());
|
| - EXPECT_TRUE(service_->GetExtensionById(extension_id1_, false) == NULL);
|
| - EXPECT_TRUE(service_->GetExtensionById(extension_id2_, false) == NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId1, false) == NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId2, false) == NULL);
|
|
|
| // Re-enable the extensions (disabled by the action button above).
|
| - service_->EnableExtension(extension_id1_);
|
| - service_->EnableExtension(extension_id2_);
|
| + service_->EnableExtension(kId1);
|
| + service_->EnableExtension(kId2);
|
|
|
| // Show the dialog a third time, but now press the learn more link.
|
| bubble.set_action_on_show(
|
| @@ -381,12 +442,12 @@ TEST_F(ExtensionMessageBubbleTest, MAYBE_DevModeControllerTest) {
|
| EXPECT_EQ(1U, controller->link_click_count());
|
| EXPECT_EQ(0U, controller->action_click_count());
|
| EXPECT_EQ(0U, controller->dismiss_click_count());
|
| - EXPECT_TRUE(service_->GetExtensionById(extension_id1_, false) != NULL);
|
| - EXPECT_TRUE(service_->GetExtensionById(extension_id2_, false) != NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId1, false) != NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId2, false) != NULL);
|
|
|
| // Now disable the unpacked extension.
|
| - service_->DisableExtension(extension_id1_, Extension::DISABLE_USER_ACTION);
|
| - service_->DisableExtension(extension_id2_, Extension::DISABLE_USER_ACTION);
|
| + service_->DisableExtension(kId1, Extension::DISABLE_USER_ACTION);
|
| + service_->DisableExtension(kId2, Extension::DISABLE_USER_ACTION);
|
|
|
| controller.reset(new TestDevModeBubbleController(
|
| profile()));
|
| @@ -396,4 +457,128 @@ TEST_F(ExtensionMessageBubbleTest, MAYBE_DevModeControllerTest) {
|
| EXPECT_EQ(0U, dev_mode_extensions.size());
|
| }
|
|
|
| +// The feature this is meant to test is only implemented on Windows.
|
| +#if defined(OS_WIN)
|
| +#define MAYBE_SettingsApiControllerTest SettingsApiControllerTest
|
| +#else
|
| +#define MAYBE_SettingsApiControllerTest DISABLED_SettingsApiControllerTest
|
| +#endif
|
| +
|
| +TEST_F(ExtensionMessageBubbleTest, MAYBE_SettingsApiControllerTest) {
|
| + Init();
|
| + extensions::ExtensionPrefs* prefs =
|
| + extensions::ExtensionPrefs::Get(profile());
|
| +
|
| + for (int i = 0; i < 3; ++i) {
|
| + switch (static_cast<SettingsApiOverrideType>(i)) {
|
| + case BUBBLE_TYPE_HOME_PAGE:
|
| + // Load two extensions overriding home page and one overriding something
|
| + // unrelated (to check for interference). Extension 2 should still win
|
| + // on the home page setting.
|
| + LoadExtensionOverridingHome("1", kId1, Manifest::UNPACKED);
|
| + LoadExtensionOverridingHome("2", kId2, Manifest::UNPACKED);
|
| + LoadExtensionOverridingStart("3", kId3, Manifest::UNPACKED);
|
| + break;
|
| + case BUBBLE_TYPE_SEARCH_ENGINE:
|
| + // We deliberately skip testing the search engine since it relies on
|
| + // TemplateURLServiceFactory that isn't available while unit testing.
|
| + // This test is only simulating the bubble interaction with the user and
|
| + // that is more or less the same for the search engine as it is for the
|
| + // others.
|
| + continue;
|
| + case BUBBLE_TYPE_STARTUP_PAGES:
|
| + // Load two extensions overriding start page and one overriding
|
| + // something unrelated (to check for interference). Extension 2 should
|
| + // still win on the startup page setting.
|
| + LoadExtensionOverridingStart("1", kId1, Manifest::UNPACKED);
|
| + LoadExtensionOverridingStart("2", kId2, Manifest::UNPACKED);
|
| + LoadExtensionOverridingHome("3", kId3, Manifest::UNPACKED);
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| +
|
| + scoped_ptr<TestSettingsApiBubbleController> controller(
|
| + new TestSettingsApiBubbleController(
|
| + profile(), static_cast<SettingsApiOverrideType>(i)));
|
| +
|
| + // The list will contain one enabled unpacked extension (ext 2).
|
| + EXPECT_TRUE(controller->ShouldShow(kId2));
|
| + std::vector<base::string16> override_extensions =
|
| + controller->GetExtensionList();
|
| + ASSERT_EQ(1U, override_extensions.size());
|
| + EXPECT_TRUE(base::ASCIIToUTF16("Extension 2") ==
|
| + override_extensions[0].c_str());
|
| + EXPECT_EQ(0U, controller->link_click_count());
|
| + EXPECT_EQ(0U, controller->dismiss_click_count());
|
| + EXPECT_EQ(0U, controller->action_click_count());
|
| +
|
| + // Simulate showing the bubble and dismissing it.
|
| + FakeExtensionMessageBubble bubble;
|
| + bubble.set_action_on_show(
|
| + FakeExtensionMessageBubble::BUBBLE_ACTION_CLICK_DISMISS_BUTTON);
|
| + controller->Show(&bubble);
|
| + EXPECT_EQ(0U, controller->link_click_count());
|
| + EXPECT_EQ(0U, controller->action_click_count());
|
| + EXPECT_EQ(1U, controller->dismiss_click_count());
|
| + // No extension should have become disabled.
|
| + EXPECT_TRUE(service_->GetExtensionById(kId1, false) != NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId2, false) != NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId3, false) != NULL);
|
| + // Only extension 2 should have been acknowledged.
|
| + EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(kId1));
|
| + EXPECT_TRUE(prefs->HasSettingsApiBubbleBeenAcknowledged(kId2));
|
| + EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(kId3));
|
| + // Clean up after ourselves.
|
| + prefs->SetSettingsApiBubbleBeenAcknowledged(kId2, false);
|
| +
|
| + // Simulate clicking the learn more link to dismiss it.
|
| + bubble.set_action_on_show(
|
| + FakeExtensionMessageBubble::BUBBLE_ACTION_CLICK_LINK);
|
| + controller.reset(new TestSettingsApiBubbleController(
|
| + profile(), static_cast<SettingsApiOverrideType>(i)));
|
| + controller->Show(&bubble);
|
| + EXPECT_EQ(1U, controller->link_click_count());
|
| + EXPECT_EQ(0U, controller->action_click_count());
|
| + EXPECT_EQ(0U, controller->dismiss_click_count());
|
| + // No extension should have become disabled.
|
| + EXPECT_TRUE(service_->GetExtensionById(kId1, false) != NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId2, false) != NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId3, false) != NULL);
|
| + // Only extension 2 should have been acknowledged.
|
| + EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(kId1));
|
| + EXPECT_TRUE(prefs->HasSettingsApiBubbleBeenAcknowledged(kId2));
|
| + EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(kId3));
|
| + // Clean up after ourselves.
|
| + prefs->SetSettingsApiBubbleBeenAcknowledged(kId2, false);
|
| +
|
| + // Do it again, but now opt to disable the extension.
|
| + bubble.set_action_on_show(
|
| + FakeExtensionMessageBubble::BUBBLE_ACTION_CLICK_ACTION_BUTTON);
|
| + controller.reset(new TestSettingsApiBubbleController(
|
| + profile(), static_cast<SettingsApiOverrideType>(i)));
|
| + EXPECT_TRUE(controller->ShouldShow(kId2));
|
| + override_extensions = controller->GetExtensionList();
|
| + EXPECT_EQ(1U, override_extensions.size());
|
| + controller->Show(&bubble); // Simulate showing the bubble.
|
| + EXPECT_EQ(0U, controller->link_click_count());
|
| + EXPECT_EQ(1U, controller->action_click_count());
|
| + EXPECT_EQ(0U, controller->dismiss_click_count());
|
| + // Only extension 2 should have become disabled.
|
| + EXPECT_TRUE(service_->GetExtensionById(kId1, false) != NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId2, false) == NULL);
|
| + EXPECT_TRUE(service_->GetExtensionById(kId3, false) != NULL);
|
| + // No extension should have been acknowledged (it got disabled).
|
| + EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(kId1));
|
| + EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(kId2));
|
| + EXPECT_FALSE(prefs->HasSettingsApiBubbleBeenAcknowledged(kId3));
|
| +
|
| + // Clean up after ourselves.
|
| + service_->UninstallExtension(kId1, false, NULL);
|
| + service_->UninstallExtension(kId2, false, NULL);
|
| + service_->UninstallExtension(kId3, false, NULL);
|
| + }
|
| +}
|
| +
|
| } // namespace extensions
|
|
|