Commit 256b4ae9 authored by Devlin Cronin's avatar Devlin Cronin Committed by Commit Bot

[Extensions Menu] Update ExtensionActionViewController tests

Update ExtensionActionViewController tests to work with the
ExtensionsMenu. This includes:
- Parameterizing the UI for both the legacy UI and the extensions menu.
  Note that this means we are no longer parameterizing for both touchable
  and untouchable UI with the MaterialDesignControllerTestAPI.
- Instantiating the right type of UI for the selected behavior.
- Introducing a legacy toolbar helper for constructing overflow UI in
  overflow-specific unit tests (which only apply to the legacy toolbar).
- Adding a new test specific to the ExtensionsMenu that's analogous to
  the ExtensionActionContextMenuVisibility for the legacy toolbar.

With this change, all ExtensionActionViewController related tests pass
with and without the ExtensionsMenu feature enabled.

Bug: 984654

Change-Id: I825c20af39b6217259f63b7f34149d3bb7545eb7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1941080
Commit-Queue: Devlin <rdevlin.cronin@chromium.org>
Reviewed-by: default avatarPeter Boström <pbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#723005}
parent 45445d9c
......@@ -14,6 +14,7 @@
#include "ui/gfx/native_widget_types.h"
class Browser;
class ExtensionsContainer;
class ToolbarActionsBar;
namespace gfx {
......@@ -87,6 +88,9 @@ class BrowserActionTestUtil {
// Returns the ToolbarActionsBar.
virtual ToolbarActionsBar* GetToolbarActionsBar() = 0;
// Returns the associated ExtensionsContainer.
virtual ExtensionsContainer* GetExtensionsContainer() = 0;
// Creates and returns a BrowserActionTestUtil with an "overflow" container,
// with this object's container as the main bar.
virtual std::unique_ptr<BrowserActionTestUtil> CreateOverflowBar(
......@@ -95,6 +99,9 @@ class BrowserActionTestUtil {
// Returns the minimum allowed size of an extension popup.
virtual gfx::Size GetMinPopupSize() = 0;
// Returns the size of the toolbar actions.
virtual gfx::Size GetToolbarActionSize() = 0;
// Returns the maximum allowed size of an extension popup.
virtual gfx::Size GetMaxPopupSize() = 0;
......
......@@ -24,17 +24,48 @@
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
ExtensionsMenuTestUtil::ExtensionsMenuTestUtil(Browser* browser)
// A view wrapper class that owns the ExtensionsToolbarContainer.
// This is used when we don't have a "real" browser window, because the
// TestBrowserWindow does not have a view instantiated for the container.
class ExtensionsMenuTestUtil::Wrapper {
public:
explicit Wrapper(Browser* browser)
: extensions_container_(new ExtensionsToolbarContainer(browser)) {
container_parent_.set_owned_by_client();
container_parent_.SetSize(gfx::Size(1000, 1000));
container_parent_.Layout();
container_parent_.AddChildView(extensions_container_);
}
~Wrapper() = default;
Wrapper(const Wrapper& other) = delete;
Wrapper& operator=(const Wrapper& other) = delete;
ExtensionsToolbarContainer* extensions_container() {
return extensions_container_;
}
private:
views::View container_parent_;
ExtensionsToolbarContainer* extensions_container_ = nullptr;
};
ExtensionsMenuTestUtil::ExtensionsMenuTestUtil(Browser* browser,
bool is_real_window)
: scoped_allow_extensions_menu_instances_(
ExtensionsMenuView::AllowInstancesForTesting()),
browser_(browser),
extensions_container_(BrowserView::GetBrowserViewForBrowser(browser_)
browser_(browser) {
if (is_real_window) {
extensions_container_ = BrowserView::GetBrowserViewForBrowser(browser_)
->toolbar()
->extensions_container()),
menu_view_(std::make_unique<ExtensionsMenuView>(
extensions_container_->extensions_button(),
browser_,
extensions_container_)) {
->extensions_container();
} else {
wrapper_ = std::make_unique<Wrapper>(browser);
extensions_container_ = wrapper_->extensions_container();
}
menu_view_ = std::make_unique<ExtensionsMenuView>(
extensions_container_->extensions_button(), browser_,
extensions_container_);
menu_view_->set_owned_by_client();
}
ExtensionsMenuTestUtil::~ExtensionsMenuTestUtil() = default;
......@@ -143,6 +174,10 @@ ToolbarActionsBar* ExtensionsMenuTestUtil::GetToolbarActionsBar() {
return nullptr;
}
ExtensionsContainer* ExtensionsMenuTestUtil::GetExtensionsContainer() {
return extensions_container_;
}
std::unique_ptr<BrowserActionTestUtil>
ExtensionsMenuTestUtil::CreateOverflowBar(Browser* browser) {
// There is no overflow bar with the ExtensionsMenu implementation.
......@@ -158,6 +193,10 @@ gfx::Size ExtensionsMenuTestUtil::GetMaxPopupSize() {
return gfx::Size(ExtensionPopup::kMaxWidth, ExtensionPopup::kMaxHeight);
}
gfx::Size ExtensionsMenuTestUtil::GetToolbarActionSize() {
return extensions_container_->GetToolbarActionSize();
}
bool ExtensionsMenuTestUtil::CanBeResized() {
// TODO(https://crbug.com/984654): Implement this.
NOTREACHED();
......
......@@ -20,7 +20,7 @@ class ExtensionsToolbarContainer;
// (i.e., when features::kExtensionsToolbarMenu is enabled).
class ExtensionsMenuTestUtil : public BrowserActionTestUtil {
public:
explicit ExtensionsMenuTestUtil(Browser* browser);
ExtensionsMenuTestUtil(Browser* browser, bool is_real_window);
~ExtensionsMenuTestUtil() override;
......@@ -40,6 +40,7 @@ class ExtensionsMenuTestUtil : public BrowserActionTestUtil {
bool ActionButtonWantsToRun(size_t index) override;
void SetWidth(int width) override;
ToolbarActionsBar* GetToolbarActionsBar() override;
ExtensionsContainer* GetExtensionsContainer() override;
std::unique_ptr<BrowserActionTestUtil> CreateOverflowBar(
Browser* browser) override;
// TODO(devlin): Some of these popup methods have a common implementation
......@@ -48,9 +49,12 @@ class ExtensionsMenuTestUtil : public BrowserActionTestUtil {
// implementation).
gfx::Size GetMinPopupSize() override;
gfx::Size GetMaxPopupSize() override;
gfx::Size GetToolbarActionSize() override;
bool CanBeResized() override;
private:
class Wrapper;
// Returns the ExtensionsMenuItemView at the given |index| from the
// |menu_view|.
ExtensionsMenuItemView* GetMenuItemViewAtIndex(int index);
......@@ -59,8 +63,10 @@ class ExtensionsMenuTestUtil : public BrowserActionTestUtil {
// This has to be defined before |menu_view_| below.
base::AutoReset<bool> scoped_allow_extensions_menu_instances_;
std::unique_ptr<Wrapper> wrapper_;
Browser* const browser_;
ExtensionsToolbarContainer* const extensions_container_;
ExtensionsToolbarContainer* extensions_container_;
std::unique_ptr<ExtensionsMenuView> menu_view_;
DISALLOW_COPY_AND_ASSIGN(ExtensionsMenuTestUtil);
......
......@@ -155,6 +155,10 @@ ToolbarActionsBar* BrowserActionTestUtilViews::GetToolbarActionsBar() {
return browser_actions_container_->toolbar_actions_bar();
}
ExtensionsContainer* BrowserActionTestUtilViews::GetExtensionsContainer() {
return GetToolbarActionsBar();
}
std::unique_ptr<BrowserActionTestUtil>
BrowserActionTestUtilViews::CreateOverflowBar(Browser* browser) {
CHECK(!GetToolbarActionsBar()->in_overflow_mode())
......@@ -173,6 +177,10 @@ gfx::Size BrowserActionTestUtilViews::GetMaxPopupSize() {
return gfx::Size(ExtensionPopup::kMaxWidth, ExtensionPopup::kMaxHeight);
}
gfx::Size BrowserActionTestUtilViews::GetToolbarActionSize() {
return GetToolbarActionsBar()->GetViewSize();
}
bool BrowserActionTestUtilViews::CanBeResized() {
// The container can only be resized if we can start a drag for the view.
DCHECK_LE(1u, browser_actions_container_->num_toolbar_actions());
......@@ -199,7 +207,7 @@ std::unique_ptr<BrowserActionTestUtil> BrowserActionTestUtil::Create(
// If the ExtensionsMenu is enabled, then use a separate implementation of
// the BrowserActionTestUtil.
if (base::FeatureList::IsEnabled(features::kExtensionsToolbarMenu))
return std::make_unique<ExtensionsMenuTestUtil>(browser);
return std::make_unique<ExtensionsMenuTestUtil>(browser, is_real_window);
std::unique_ptr<BrowserActionTestUtil> browser_action_test_util;
......
......@@ -34,10 +34,12 @@ class BrowserActionTestUtilViews : public BrowserActionTestUtil {
bool ActionButtonWantsToRun(size_t index) override;
void SetWidth(int width) override;
ToolbarActionsBar* GetToolbarActionsBar() override;
ExtensionsContainer* GetExtensionsContainer() override;
std::unique_ptr<BrowserActionTestUtil> CreateOverflowBar(
Browser* browser) override;
gfx::Size GetMinPopupSize() override;
gfx::Size GetMaxPopupSize() override;
gfx::Size GetToolbarActionSize() override;
bool CanBeResized() override;
private:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment