polychrome: fix BrowserActionsBarBrowserTest tests
The process of fixing these tests uncovered a real bug in the Cocoa
BrowserActionsContainerView: it was always resizable even when highlighting.
This change:
1) Fixes that bug;
2) Adds an abstract CanBeResized test helper;
3) Implements that test helper for Cocoa and Views windows;
4) Marks the two drag & drop tests as Views-window-only, since the mechanics of
drag & drop aren't exactly compatible between the two platforms.
Bug: 817408
Change-Id: I3a1316df05ff5aa1b3ae29c815fec6bac8062ad1
Reviewed-on: https://chromium-review.googlesource.com/963289
Commit-Queue: Elly Fong-Jones <[email protected]>
Reviewed-by: Robert Liao <[email protected]>
Cr-Commit-Position: refs/heads/master@{#543398}
diff --git a/chrome/browser/ui/cocoa/extensions/browser_action_test_util_views_cocoa.mm b/chrome/browser/ui/cocoa/extensions/browser_action_test_util_views_cocoa.mm
index bb2101a..c56c265 100644
--- a/chrome/browser/ui/cocoa/extensions/browser_action_test_util_views_cocoa.mm
+++ b/chrome/browser/ui/cocoa/extensions/browser_action_test_util_views_cocoa.mm
@@ -215,6 +215,7 @@
std::unique_ptr<BrowserActionTestUtil> CreateOverflowBar() override;
gfx::Size GetMinPopupSize() override;
gfx::Size GetMaxPopupSize() override;
+ bool CanBeResized() override;
private:
friend class BrowserActionTestUtil;
@@ -334,6 +335,12 @@
return GetExtensionPopupTestManager()->GetMaxPopupSize();
}
+bool BrowserActionTestUtilCocoa::CanBeResized() {
+ BrowserActionsContainerView* containerView =
+ [GetController(browser_, test_helper_.get()) containerView];
+ return [containerView canBeResized];
+}
+
BrowserActionTestUtilCocoa::BrowserActionTestUtilCocoa(
Browser* browser,
BrowserActionTestUtilCocoa* main_bar)
diff --git a/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h b/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h
index 2890c9a..a673e4d 100644
--- a/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h
+++ b/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h
@@ -106,6 +106,9 @@
// Stops any animation in progress.
- (void)stopAnimation;
+// Returns true if this view is currently resizable.
+- (BOOL)canBeResized;
+
@property(nonatomic) CGFloat minWidth;
@property(nonatomic) CGFloat maxWidth;
@property(nonatomic) BOOL grippyPinned;
diff --git a/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.mm b/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.mm
index 251d337..a72edbc 100644
--- a/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.mm
+++ b/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.mm
@@ -140,7 +140,7 @@
if (highlight || highlight_) {
highlight_ = std::move(highlight);
// We don't allow resizing when the container is highlighting.
- resizable_ = highlight.get() == nullptr;
+ resizable_ = highlight_.get() == nullptr;
[self setNeedsDisplay:YES];
}
}
@@ -302,6 +302,10 @@
[resizeAnimation_ stopAnimation];
}
+- (BOOL)canBeResized {
+ return resizable_;
+}
+
#pragma mark -
#pragma mark Private Methods
diff --git a/chrome/browser/ui/extensions/browser_action_test_util.h b/chrome/browser/ui/extensions/browser_action_test_util.h
index 00c051c..f392ed8 100644
--- a/chrome/browser/ui/extensions/browser_action_test_util.h
+++ b/chrome/browser/ui/extensions/browser_action_test_util.h
@@ -104,6 +104,9 @@
// Returns the maximum allowed size of an extension popup.
virtual gfx::Size GetMaxPopupSize() = 0;
+ // Returns whether the browser action container can currently be resized.
+ virtual bool CanBeResized() = 0;
+
protected:
BrowserActionTestUtil() {}
diff --git a/chrome/browser/ui/views/toolbar/browser_action_test_util_views.cc b/chrome/browser/ui/views/toolbar/browser_action_test_util_views.cc
index e3edd35..fc5eb8af 100644
--- a/chrome/browser/ui/views/toolbar/browser_action_test_util_views.cc
+++ b/chrome/browser/ui/views/toolbar/browser_action_test_util_views.cc
@@ -198,6 +198,19 @@
return gfx::Size(ExtensionPopup::kMaxWidth, ExtensionPopup::kMaxHeight);
}
+bool BrowserActionTestUtilViews::CanBeResized() {
+ BrowserActionsContainer* container =
+ BrowserView::GetBrowserViewForBrowser(browser_)
+ ->toolbar()
+ ->browser_actions();
+
+ // The container can only be resized if we can start a drag for the view.
+ DCHECK_LE(1u, container->num_toolbar_actions());
+ ToolbarActionView* action_view = container->GetToolbarActionViewAt(0);
+ gfx::Point point(action_view->x(), action_view->y());
+ return container->CanStartDragForView(action_view, point, point);
+}
+
BrowserActionTestUtilViews::BrowserActionTestUtilViews(
Browser* browser,
BrowserActionTestUtilViews* main_bar)
diff --git a/chrome/browser/ui/views/toolbar/browser_action_test_util_views.h b/chrome/browser/ui/views/toolbar/browser_action_test_util_views.h
index 0a67b46..908a3cc6 100644
--- a/chrome/browser/ui/views/toolbar/browser_action_test_util_views.h
+++ b/chrome/browser/ui/views/toolbar/browser_action_test_util_views.h
@@ -32,6 +32,7 @@
std::unique_ptr<BrowserActionTestUtil> CreateOverflowBar() override;
gfx::Size GetMinPopupSize() override;
gfx::Size GetMaxPopupSize() override;
+ bool CanBeResized() override;
private:
friend class BrowserActionTestUtil;
diff --git a/chrome/browser/ui/views/toolbar/browser_actions_container_browsertest.cc b/chrome/browser/ui/views/toolbar/browser_actions_container_browsertest.cc
index 9a9d0f4..c67312c 100644
--- a/chrome/browser/ui/views/toolbar/browser_actions_container_browsertest.cc
+++ b/chrome/browser/ui/views/toolbar/browser_actions_container_browsertest.cc
@@ -18,6 +18,7 @@
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/toolbar/toolbar_action_view.h"
#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
+#include "chrome/test/views/scoped_macviews_browser_mode.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/common/extension.h"
@@ -27,6 +28,8 @@
#include "ui/views/test/test_views.h"
#include "ui/views/view.h"
+namespace {
+
// TODO(devlin): Continue moving any tests that should be platform independent
// from this file to the crossplatform tests in
// chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc.
@@ -34,7 +37,16 @@
// Test that dragging browser actions works, and that dragging a browser action
// from the overflow menu results in it "popping" out (growing the container
// size by 1), rather than just reordering the extensions.
-IN_PROC_BROWSER_TEST_F(BrowserActionsBarBrowserTest, DragBrowserActions) {
+
+// The two drag & drop tests are currently restricted to Views browsers in the
+// absence of a good way to abstract drag & drop actions.
+class BrowserActionsBarViewsBrowserTest : public BrowserActionsBarBrowserTest {
+ private:
+ test::ScopedMacViewsBrowserMode views_mode_{true};
+};
+} // namespace
+
+IN_PROC_BROWSER_TEST_F(BrowserActionsBarViewsBrowserTest, DragBrowserActions) {
LoadExtensions();
// Sanity check: All extensions showing; order is A B C.
@@ -147,7 +159,7 @@
// Test that changes performed in one container affect containers in other
// windows so that it is consistent.
-IN_PROC_BROWSER_TEST_F(BrowserActionsBarBrowserTest, MultipleWindows) {
+IN_PROC_BROWSER_TEST_F(BrowserActionsBarViewsBrowserTest, MultipleWindows) {
LoadExtensions();
BrowserActionsContainer* first =
BrowserView::GetBrowserViewForBrowser(browser())->toolbar()->
@@ -214,16 +226,7 @@
EXPECT_EQ(3, browser_actions_bar()->VisibleBrowserActions());
EXPECT_EQ(3, browser_actions_bar()->NumberOfBrowserActions());
-
- BrowserActionsContainer* container =
- BrowserView::GetBrowserViewForBrowser(browser())
- ->toolbar()->browser_actions();
-
- // Currently, dragging should be enabled.
- ToolbarActionView* action_view = container->GetToolbarActionViewAt(0);
- ASSERT_TRUE(action_view);
- gfx::Point point(action_view->x(), action_view->y());
- EXPECT_TRUE(container->CanStartDragForView(action_view, point, point));
+ EXPECT_TRUE(browser_actions_bar()->CanBeResized());
std::vector<std::string> action_ids;
action_ids.push_back(extension_a()->id());
@@ -236,15 +239,13 @@
EXPECT_EQ(2, browser_actions_bar()->NumberOfBrowserActions());
// We shouldn't be able to drag in highlight mode.
- action_view = container->GetToolbarActionViewAt(0);
- EXPECT_FALSE(container->CanStartDragForView(action_view, point, point));
+ EXPECT_FALSE(browser_actions_bar()->CanBeResized());
// We should go back to normal after leaving highlight mode.
toolbar_model()->StopHighlighting();
EXPECT_EQ(3, browser_actions_bar()->VisibleBrowserActions());
EXPECT_EQ(3, browser_actions_bar()->NumberOfBrowserActions());
- action_view = container->GetToolbarActionViewAt(0);
- EXPECT_TRUE(container->CanStartDragForView(action_view, point, point));
+ EXPECT_TRUE(browser_actions_bar()->CanBeResized());
}
// Test the behavior of the overflow container for Extension Actions.