blob: e6e73fed0925283c3c017161c3796ef5679f6ab3 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/extensions/extension_message_bubble_browsertest.h"
#include "base/bind_helpers.h"
#include "base/run_loop.h"
#include "chrome/browser/extensions/extension_action_test_util.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/ui/extensions/extension_message_bubble_factory.h"
#include "extensions/common/feature_switch.h"
#include "extensions/test/extension_test_message_listener.h"
ExtensionMessageBubbleBrowserTest::ExtensionMessageBubbleBrowserTest() {
}
ExtensionMessageBubbleBrowserTest::~ExtensionMessageBubbleBrowserTest() {
}
void ExtensionMessageBubbleBrowserTest::SetUpCommandLine(
base::CommandLine* command_line) {
BrowserActionsBarBrowserTest::SetUpCommandLine(command_line);
// The dev mode warning bubble is an easy one to trigger, so we use that for
// our testing purposes.
dev_mode_bubble_override_.reset(
new extensions::FeatureSwitch::ScopedOverride(
extensions::FeatureSwitch::force_dev_mode_highlighting(),
true));
ExtensionMessageBubbleFactory::set_override_for_tests(
ExtensionMessageBubbleFactory::OVERRIDE_ENABLED);
}
void ExtensionMessageBubbleBrowserTest::TearDownOnMainThread() {
ExtensionMessageBubbleFactory::set_override_for_tests(
ExtensionMessageBubbleFactory::NO_OVERRIDE);
BrowserActionsBarBrowserTest::TearDownOnMainThread();
}
void ExtensionMessageBubbleBrowserTest::TestBubbleAnchoredToExtensionAction() {
scoped_refptr<const extensions::Extension> action_extension =
extensions::extension_action_test_util::CreateActionExtension(
"action_extension",
extensions::extension_action_test_util::BROWSER_ACTION,
extensions::Manifest::UNPACKED);
extension_service()->AddExtension(action_extension.get());
Browser* second_browser = new Browser(
Browser::CreateParams(profile(), browser()->host_desktop_type()));
base::RunLoop().RunUntilIdle();
CheckBubble(second_browser, ANCHOR_BROWSER_ACTION);
CloseBubble(second_browser);
}
void ExtensionMessageBubbleBrowserTest::TestBubbleAnchoredToAppMenu() {
scoped_refptr<const extensions::Extension> no_action_extension =
extensions::extension_action_test_util::CreateActionExtension(
"no_action_extension",
extensions::extension_action_test_util::NO_ACTION,
extensions::Manifest::UNPACKED);
extension_service()->AddExtension(no_action_extension.get());
Browser* second_browser = new Browser(
Browser::CreateParams(profile(), browser()->host_desktop_type()));
base::RunLoop().RunUntilIdle();
CheckBubble(second_browser, ANCHOR_APP_MENU);
CloseBubble(second_browser);
}
void ExtensionMessageBubbleBrowserTest::
TestBubbleAnchoredToAppMenuWithOtherAction() {
scoped_refptr<const extensions::Extension> no_action_extension =
extensions::extension_action_test_util::CreateActionExtension(
"no_action_extension",
extensions::extension_action_test_util::NO_ACTION,
extensions::Manifest::UNPACKED);
extension_service()->AddExtension(no_action_extension.get());
scoped_refptr<const extensions::Extension> action_extension =
extensions::extension_action_test_util::CreateActionExtension(
"action_extension",
extensions::extension_action_test_util::BROWSER_ACTION,
extensions::Manifest::INTERNAL);
extension_service()->AddExtension(action_extension.get());
Browser* second_browser = new Browser(
Browser::CreateParams(profile(), browser()->host_desktop_type()));
base::RunLoop().RunUntilIdle();
CheckBubble(second_browser, ANCHOR_APP_MENU);
CloseBubble(second_browser);
}
void ExtensionMessageBubbleBrowserTest::TestUninstallDangerousExtension() {
// Load an extension that overrides the proxy setting.
ExtensionTestMessageListener listener("registered", false);
const extensions::Extension* extension =
LoadExtension(test_data_dir_.AppendASCII("api_test")
.AppendASCII("proxy")
.AppendASCII("register"));
// Wait for it to complete.
listener.WaitUntilSatisfied();
// Create a second browser with the extension installed - the bubble will be
// set to show.
Browser* second_browser = new Browser(
Browser::CreateParams(profile(), browser()->host_desktop_type()));
ASSERT_TRUE(second_browser);
// Uninstall the extension before the bubble is shown. This should not crash,
// and the bubble shouldn't be shown.
extension_service()->UninstallExtension(
extension->id(), extensions::UNINSTALL_REASON_FOR_TESTING,
base::Bind(&base::DoNothing), nullptr);
base::RunLoop().RunUntilIdle();
CheckBubbleIsNotPresent(second_browser);
}
void ExtensionMessageBubbleBrowserTest::PreBubbleShowsOnStartup() {
LoadExtension(test_data_dir_.AppendASCII("good_unpacked"));
}
void ExtensionMessageBubbleBrowserTest::TestBubbleShowsOnStartup() {
base::RunLoop().RunUntilIdle();
CheckBubble(browser(), ANCHOR_BROWSER_ACTION);
CloseBubble(browser());
}