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(); |
+} |