Chromium Code Reviews| 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..a4d260931431ab516738b7e910b63933ef2d95f8 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 |
| @@ -4,12 +4,9 @@ |
| #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 +14,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,13 +40,20 @@ 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 CloseBubble(Browser* browser) override; |
|
Peter Kasting
2017/03/10 08:29:54
Nit: Goes after CheckBubbleNative() (match base cl
tapted
2017/03/13 06:04:57
Done.
|
| void CheckBubbleNative(Browser* browser, AnchorPosition anchor) override; |
| void CloseBubbleNative(Browser* browser) override; |
| void CheckBubbleIsNotPresentNative(Browser* browser) override; |
| @@ -70,6 +61,10 @@ class ExtensionMessageBubbleViewBrowserTest |
| 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 +79,69 @@ 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. |
| + block_close_ = true; |
|
Peter Kasting
2017/03/10 08:29:54
Nit: Use base::AutoReset<> rather than manually to
tapted
2017/03/13 06:04:57
Done.
|
| + TestBubbleAnchoredToExtensionAction(); |
| + block_close_ = false; |
| +} |
| + |
| +void ExtensionMessageBubbleViewBrowserTest::CloseBubble(Browser* browser) { |
| + if (!block_close_) |
| + ExtensionMessageBubbleBrowserTest::CloseBubble(browser); |
| +} |
| + |
| 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::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(); |
| +} |