| Index: chrome/browser/ui/views/extensions/extension_message_bubble_view_browsertest.cc
|
| diff --git a/chrome/browser/ui/views/extensions/extension_message_bubble_view_browsertest.cc b/chrome/browser/ui/views/extensions/extension_message_bubble_view_browsertest.cc
|
| index 980e9a897d8311a8518065f02d3bfe54610dade6..41394caadd1a57a95ece77cef555187a966fffba 100644
|
| --- a/chrome/browser/ui/views/extensions/extension_message_bubble_view_browsertest.cc
|
| +++ b/chrome/browser/ui/views/extensions/extension_message_bubble_view_browsertest.cc
|
| @@ -2,14 +2,12 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "base/auto_reset.h"
|
| #include "base/macros.h"
|
| #include "chrome/browser/ui/extensions/extension_message_bubble_browsertest.h"
|
| -#include "chrome/browser/ui/toolbar/toolbar_actions_bar.h"
|
| -#include "chrome/browser/ui/views/frame/browser_view.h"
|
| -#include "chrome/browser/ui/views/toolbar/app_menu_button.h"
|
| -#include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
|
| +#include "chrome/browser/ui/test/test_browser_dialog.h"
|
| #include "chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.h"
|
| -#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
|
| +#include "ui/base/ui_base_switches.h"
|
| #include "ui/views/bubble/bubble_dialog_delegate.h"
|
| #include "ui/views/controls/link.h"
|
| #include "ui/views/controls/link_listener.h"
|
| @@ -17,27 +15,14 @@
|
|
|
| namespace {
|
|
|
| -// Returns the ToolbarView for the given |browser|.
|
| -ToolbarView* GetToolbarViewForBrowser(Browser* browser) {
|
| - return BrowserView::GetBrowserViewForBrowser(browser)->toolbar();
|
| -}
|
| -
|
| -ToolbarActionsBarBubbleViews* GetBubbleForBrowser(Browser* browser) {
|
| - return static_cast<ToolbarActionsBarBubbleViews*>(
|
| - GetToolbarViewForBrowser(browser)->browser_actions()->active_bubble());
|
| -}
|
| -
|
| -// Checks that the |bubble| is using the |expected_reference_view|, and is in
|
| -// approximately the correct position.
|
| -void CheckBubbleAndReferenceView(views::BubbleDialogDelegateView* bubble,
|
| - views::View* expected_reference_view) {
|
| +// Checks that the |bubble| is showing. Uses |reference_bounds| to ensure it is
|
| +// in approximately the correct position.
|
| +void CheckBubbleAgainstReferenceBounds(views::BubbleDialogDelegateView* bubble,
|
| + const gfx::Rect& reference_bounds) {
|
| ASSERT_TRUE(bubble);
|
| - ASSERT_TRUE(expected_reference_view);
|
| - EXPECT_EQ(expected_reference_view, bubble->GetAnchorView());
|
|
|
| // Do a rough check that the bubble is in the right place.
|
| gfx::Rect bubble_bounds = bubble->GetWidget()->GetWindowBoundsInScreen();
|
| - gfx::Rect reference_bounds = expected_reference_view->GetBoundsInScreen();
|
| // It should be below the reference view, but not too far below.
|
| EXPECT_GE(bubble_bounds.y(), reference_bounds.y());
|
| // The arrow should be poking into the anchor.
|
| @@ -56,20 +41,31 @@ void CheckBubbleAndReferenceView(views::BubbleDialogDelegateView* bubble,
|
| } // namespace
|
|
|
| class ExtensionMessageBubbleViewBrowserTest
|
| - : public ExtensionMessageBubbleBrowserTest {
|
| + : public SupportsTestDialog<ExtensionMessageBubbleBrowserTest> {
|
| protected:
|
| ExtensionMessageBubbleViewBrowserTest() {}
|
| ~ExtensionMessageBubbleViewBrowserTest() override {}
|
|
|
| + // ExtensionMessageBubbleBrowserTest:
|
| + void SetUpCommandLine(base::CommandLine* command_line) override;
|
| +
|
| + // TestBrowserDialog:
|
| + void ShowDialog(const std::string& name) override;
|
| +
|
| private:
|
| // ExtensionMessageBubbleBrowserTest:
|
| void CheckBubbleNative(Browser* browser, AnchorPosition anchor) override;
|
| + void CloseBubble(Browser* browser) override;
|
| void CloseBubbleNative(Browser* browser) override;
|
| void CheckBubbleIsNotPresentNative(Browser* browser) override;
|
| void ClickLearnMoreButton(Browser* browser) override;
|
| void ClickActionButton(Browser* browser) override;
|
| void ClickDismissButton(Browser* browser) override;
|
|
|
| + // Whether to ignore requests from ExtensionMessageBubbleBrowserTest to
|
| + // CloseBubble().
|
| + bool block_close_ = false;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ExtensionMessageBubbleViewBrowserTest);
|
| };
|
|
|
| @@ -84,58 +80,68 @@ class ExtensionMessageBubbleViewBrowserTestLegacy
|
| }
|
| };
|
|
|
| +void ExtensionMessageBubbleViewBrowserTest::SetUpCommandLine(
|
| + base::CommandLine* command_line) {
|
| + ExtensionMessageBubbleBrowserTest::SetUpCommandLine(command_line);
|
| + // MD is required on Mac to get a Views bubble. On other platforms, it should
|
| + // not affect the behavior of the bubble (just the appearance), so enable for
|
| + // all platforms.
|
| + command_line->AppendSwitch(switches::kExtendMdToSecondaryUi);
|
| +}
|
| +
|
| +void ExtensionMessageBubbleViewBrowserTest::ShowDialog(
|
| + const std::string& name) {
|
| + // TODO(tapted): Add cases for all bubble types.
|
| + EXPECT_EQ("devmode_warning", name);
|
| +
|
| + // When invoked this way, the dialog test harness must close the bubble.
|
| + base::AutoReset<bool> guard(&block_close_, true);
|
| + TestBubbleAnchoredToExtensionAction();
|
| +}
|
| +
|
| void ExtensionMessageBubbleViewBrowserTest::CheckBubbleNative(
|
| Browser* browser,
|
| AnchorPosition anchor) {
|
| - ToolbarView* toolbar_view = GetToolbarViewForBrowser(browser);
|
| - BrowserActionsContainer* container = toolbar_view->browser_actions();
|
| - views::BubbleDialogDelegateView* bubble = container->active_bubble();
|
| - views::View* anchor_view = nullptr;
|
| - switch (anchor) {
|
| - case ANCHOR_BROWSER_ACTION:
|
| - DCHECK_GT(container->num_toolbar_actions(), 0u);
|
| - anchor_view = container->GetToolbarActionViewAt(0);
|
| - break;
|
| - case ANCHOR_APP_MENU:
|
| - anchor_view = toolbar_view->app_menu_button();
|
| - break;
|
| - }
|
| - CheckBubbleAndReferenceView(bubble, anchor_view);
|
| + gfx::Rect reference_bounds =
|
| + GetAnchorReferenceBoundsForBrowser(browser, anchor);
|
| + CheckBubbleAgainstReferenceBounds(GetViewsBubbleForBrowser(browser),
|
| + reference_bounds);
|
| +}
|
| +
|
| +void ExtensionMessageBubbleViewBrowserTest::CloseBubble(Browser* browser) {
|
| + if (!block_close_)
|
| + ExtensionMessageBubbleBrowserTest::CloseBubble(browser);
|
| }
|
|
|
| void ExtensionMessageBubbleViewBrowserTest::CloseBubbleNative(
|
| Browser* browser) {
|
| - BrowserActionsContainer* container =
|
| - GetToolbarViewForBrowser(browser)->browser_actions();
|
| - views::BubbleDialogDelegateView* bubble = container->active_bubble();
|
| + views::BubbleDialogDelegateView* bubble = GetViewsBubbleForBrowser(browser);
|
| ASSERT_TRUE(bubble);
|
| bubble->GetWidget()->Close();
|
| - EXPECT_EQ(nullptr, container->active_bubble());
|
| + EXPECT_EQ(nullptr, GetViewsBubbleForBrowser(browser));
|
| }
|
|
|
| void ExtensionMessageBubbleViewBrowserTest::CheckBubbleIsNotPresentNative(
|
| Browser* browser) {
|
| - EXPECT_EQ(
|
| - nullptr,
|
| - GetToolbarViewForBrowser(browser)->browser_actions()->active_bubble());
|
| + EXPECT_EQ(nullptr, GetViewsBubbleForBrowser(browser));
|
| }
|
|
|
| void ExtensionMessageBubbleViewBrowserTest::ClickLearnMoreButton(
|
| Browser* browser) {
|
| - ToolbarActionsBarBubbleViews* bubble = GetBubbleForBrowser(browser);
|
| + ToolbarActionsBarBubbleViews* bubble = GetViewsBubbleForBrowser(browser);
|
| static_cast<views::LinkListener*>(bubble)->LinkClicked(
|
| const_cast<views::Link*>(bubble->learn_more_button()), 0);
|
| }
|
|
|
| void ExtensionMessageBubbleViewBrowserTest::ClickActionButton(
|
| Browser* browser) {
|
| - ToolbarActionsBarBubbleViews* bubble = GetBubbleForBrowser(browser);
|
| + ToolbarActionsBarBubbleViews* bubble = GetViewsBubbleForBrowser(browser);
|
| bubble->GetDialogClientView()->AcceptWindow();
|
| }
|
|
|
| void ExtensionMessageBubbleViewBrowserTest::ClickDismissButton(
|
| Browser* browser) {
|
| - ToolbarActionsBarBubbleViews* bubble = GetBubbleForBrowser(browser);
|
| + ToolbarActionsBarBubbleViews* bubble = GetViewsBubbleForBrowser(browser);
|
| bubble->GetDialogClientView()->CancelWindow();
|
| }
|
|
|
| @@ -233,3 +239,11 @@ IN_PROC_BROWSER_TEST_F(ExtensionMessageBubbleViewBrowserTest,
|
| TestClickingDismissButton) {
|
| TestClickingDismissButton();
|
| }
|
| +
|
| +// BrowserDialogTest for the warning bubble that appears at startup when there
|
| +// are extensions installed in developer mode. Can be invoked interactively with
|
| +// --gtest_filter=BrowserDialogTest.Invoke.
|
| +IN_PROC_BROWSER_TEST_F(ExtensionMessageBubbleViewBrowserTest,
|
| + InvokeDialog_devmode_warning) {
|
| + RunDialog();
|
| +}
|
|
|