Commit 0a7f4e29 authored by Bret Sepulveda's avatar Bret Sepulveda Committed by Commit Bot

Add new test ExtensionsMenuViewUnitTest.PinnedExtensionAppearsInToolbar.

This patch adds a test that pins an extension and verifies it appears in
the toolbar. In order to call IsActionVisibleOnToolbar, the visibility
of ExtensionsContainer overrides on ExtensionsToolbarContainer are moved
to public to match the superclass.

This patch also changes ExtensionsMenuViewUnitTest from a
BrowserWithTestWindowTest to a TestWithBrowserView. The pin button
requires the bubble to have a Widget before it can be clicked on, and
the most straightforward way to accomplish this is to have a
BrowserView to wire everything up correctly.

Bug: 984654
Change-Id: I5f81fd66567d09634a8c54a1cba26d9c963ec6d7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1917238
Commit-Queue: Bret Sepulveda <bsep@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#716953}
parent cc3d36f4
...@@ -44,6 +44,7 @@ class ExtensionsMenuItemView : public views::View, ...@@ -44,6 +44,7 @@ class ExtensionsMenuItemView : public views::View,
bool IsPinned(); bool IsPinned();
ExtensionsMenuButton* primary_action_button_for_testing(); ExtensionsMenuButton* primary_action_button_for_testing();
views::ImageButton* pin_button_for_testing() { return pin_button_; }
ToolbarActionViewController* view_controller_for_testing() { ToolbarActionViewController* view_controller_for_testing() {
return controller_.get(); return controller_.get();
} }
......
...@@ -16,13 +16,21 @@ ...@@ -16,13 +16,21 @@
#include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/views/extensions/extensions_menu_button.h" #include "chrome/browser/ui/views/extensions/extensions_menu_button.h"
#include "chrome/browser/ui/views/extensions/extensions_menu_item_view.h" #include "chrome/browser/ui/views/extensions/extensions_menu_item_view.h"
#include "chrome/browser/ui/views/extensions/extensions_toolbar_button.h"
#include "chrome/browser/ui/views/extensions/extensions_toolbar_container.h" #include "chrome/browser/ui/views/extensions/extensions_toolbar_container.h"
#include "chrome/test/base/browser_with_test_window_test.h" #include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/frame/test_with_browser_view.h"
#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
#include "extensions/browser/extension_system.h" #include "extensions/browser/extension_system.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/common/extension_builder.h" #include "extensions/common/extension_builder.h"
#include "ui/events/base_event_utils.h"
#include "ui/events/event.h"
#include "ui/events/event_constants.h"
#include "ui/gfx/geometry/point.h"
#include "ui/views/controls/button/image_button.h"
class ExtensionsMenuViewUnitTest : public BrowserWithTestWindowTest { class ExtensionsMenuViewUnitTest : public TestWithBrowserView {
public: public:
ExtensionsMenuViewUnitTest() ExtensionsMenuViewUnitTest()
: allow_extension_menu_instances_( : allow_extension_menu_instances_(
...@@ -31,8 +39,8 @@ class ExtensionsMenuViewUnitTest : public BrowserWithTestWindowTest { ...@@ -31,8 +39,8 @@ class ExtensionsMenuViewUnitTest : public BrowserWithTestWindowTest {
} }
~ExtensionsMenuViewUnitTest() override = default; ~ExtensionsMenuViewUnitTest() override = default;
// TestWithBrowserView:
void SetUp() override; void SetUp() override;
void TearDown() override;
// Adds a simple extension to the profile. // Adds a simple extension to the profile.
scoped_refptr<const extensions::Extension> AddSimpleExtension( scoped_refptr<const extensions::Extension> AddSimpleExtension(
...@@ -42,7 +50,15 @@ class ExtensionsMenuViewUnitTest : public BrowserWithTestWindowTest { ...@@ -42,7 +50,15 @@ class ExtensionsMenuViewUnitTest : public BrowserWithTestWindowTest {
return extension_service_; return extension_service_;
} }
ExtensionsMenuView* extensions_menu() { return extensions_menu_.get(); } ExtensionsToolbarContainer* extensions_container() {
return browser_view()->toolbar()->extensions_container();
}
ExtensionsMenuView* extensions_menu() {
return ExtensionsMenuView::GetExtensionsMenuViewForTesting();
}
void ClickPinButton(ExtensionsMenuItemView* menu_item) const;
private: private:
base::AutoReset<bool> allow_extension_menu_instances_; base::AutoReset<bool> allow_extension_menu_instances_;
...@@ -50,17 +66,13 @@ class ExtensionsMenuViewUnitTest : public BrowserWithTestWindowTest { ...@@ -50,17 +66,13 @@ class ExtensionsMenuViewUnitTest : public BrowserWithTestWindowTest {
extensions::ExtensionService* extension_service_ = nullptr; extensions::ExtensionService* extension_service_ = nullptr;
std::unique_ptr<ExtensionsToolbarContainer> extensions_container_;
std::unique_ptr<ExtensionsMenuView> extensions_menu_;
DISALLOW_COPY_AND_ASSIGN(ExtensionsMenuViewUnitTest); DISALLOW_COPY_AND_ASSIGN(ExtensionsMenuViewUnitTest);
}; };
void ExtensionsMenuViewUnitTest::SetUp() { void ExtensionsMenuViewUnitTest::SetUp() {
BrowserWithTestWindowTest::SetUp(); TestWithBrowserView::SetUp();
// Set up some extension-y bits. // Set up some extension-y bits.
extensions::LoadErrorReporter::Init(false);
extensions::TestExtensionSystem* extension_system = extensions::TestExtensionSystem* extension_system =
static_cast<extensions::TestExtensionSystem*>( static_cast<extensions::TestExtensionSystem*>(
extensions::ExtensionSystem::Get(profile())); extensions::ExtensionSystem::Get(profile()));
...@@ -70,24 +82,8 @@ void ExtensionsMenuViewUnitTest::SetUp() { ...@@ -70,24 +82,8 @@ void ExtensionsMenuViewUnitTest::SetUp() {
extension_service_ = extension_service_ =
extensions::ExtensionSystem::Get(profile())->extension_service(); extensions::ExtensionSystem::Get(profile())->extension_service();
extensions::extension_action_test_util::CreateToolbarModelForProfile( ExtensionsMenuView::ShowBubble(extensions_container()->extensions_button(),
profile()); browser(), extensions_container());
// And create the menu itself.
extensions_container_ =
std::make_unique<ExtensionsToolbarContainer>(browser());
extensions_container_->set_owned_by_client();
extensions_menu_ = std::make_unique<ExtensionsMenuView>(
nullptr, browser(), extensions_container_.get());
extensions_menu_->set_owned_by_client();
}
void ExtensionsMenuViewUnitTest::TearDown() {
extensions_menu_ = nullptr;
extensions_container_ = nullptr;
BrowserWithTestWindowTest::TearDown();
} }
scoped_refptr<const extensions::Extension> scoped_refptr<const extensions::Extension>
...@@ -99,6 +95,19 @@ ExtensionsMenuViewUnitTest::AddSimpleExtension(const char* name) { ...@@ -99,6 +95,19 @@ ExtensionsMenuViewUnitTest::AddSimpleExtension(const char* name) {
return extension; return extension;
} }
void ExtensionsMenuViewUnitTest::ClickPinButton(
ExtensionsMenuItemView* menu_item) const {
views::ImageButton* pin_button = menu_item->pin_button_for_testing();
ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, gfx::Point(1, 1),
gfx::Point(), ui::EventTimeForNow(),
ui::EF_LEFT_MOUSE_BUTTON, 0);
pin_button->OnMousePressed(press_event);
ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, gfx::Point(1, 1),
gfx::Point(), ui::EventTimeForNow(),
ui::EF_LEFT_MOUSE_BUTTON, 0);
pin_button->OnMouseReleased(release_event);
}
TEST_F(ExtensionsMenuViewUnitTest, ExtensionsAreShownInTheMenu) { TEST_F(ExtensionsMenuViewUnitTest, ExtensionsAreShownInTheMenu) {
// To start, there should be no extensions in the menu. // To start, there should be no extensions in the menu.
EXPECT_EQ(0u, extensions_menu()->extensions_menu_items_for_testing().size()); EXPECT_EQ(0u, extensions_menu()->extensions_menu_items_for_testing().size());
...@@ -117,3 +126,20 @@ TEST_F(ExtensionsMenuViewUnitTest, ExtensionsAreShownInTheMenu) { ...@@ -117,3 +126,20 @@ TEST_F(ExtensionsMenuViewUnitTest, ExtensionsAreShownInTheMenu) {
->label_text_for_testing())); ->label_text_for_testing()));
} }
} }
TEST_F(ExtensionsMenuViewUnitTest, PinnedExtensionAppearsInToolbar) {
AddSimpleExtension("Test Name");
ExtensionsMenuItemView* menu_item =
extensions_menu()->extensions_menu_items_for_testing()[0];
ToolbarActionViewController* controller =
menu_item->view_controller_for_testing();
EXPECT_FALSE(extensions_container()->IsActionVisibleOnToolbar(controller));
ClickPinButton(menu_item);
EXPECT_TRUE(extensions_container()->IsActionVisibleOnToolbar(controller));
}
// TODO(crbug.com/984654): Add tests for multiple extensions, reordering
// extensions, and showing in multiple windows.
...@@ -54,6 +54,24 @@ class ExtensionsToolbarContainer : public ToolbarIconContainerView, ...@@ -54,6 +54,24 @@ class ExtensionsToolbarContainer : public ToolbarIconContainerView,
// ToolbarIconContainerView: // ToolbarIconContainerView:
void UpdateAllIcons() override; void UpdateAllIcons() override;
// ExtensionsContainer:
ToolbarActionViewController* GetActionForId(
const std::string& action_id) override;
ToolbarActionViewController* GetPoppedOutAction() const override;
bool IsActionVisibleOnToolbar(
const ToolbarActionViewController* action) const override;
void UndoPopOut() override;
void SetPopupOwner(ToolbarActionViewController* popup_owner) override;
void HideActivePopup() override;
bool CloseOverflowMenuIfOpen() override;
void PopOutAction(ToolbarActionViewController* action,
bool is_sticky,
const base::Closure& closure) override;
void ShowToolbarActionBubble(
std::unique_ptr<ToolbarActionsBarBubbleDelegate> bubble) override;
void ShowToolbarActionBubbleAsync(
std::unique_ptr<ToolbarActionsBarBubbleDelegate> bubble) override;
ToolbarActionView* GetViewForId(const std::string& id); ToolbarActionView* GetViewForId(const std::string& id);
void ShowActiveBubble( void ShowActiveBubble(
...@@ -88,24 +106,6 @@ class ExtensionsToolbarContainer : public ToolbarIconContainerView, ...@@ -88,24 +106,6 @@ class ExtensionsToolbarContainer : public ToolbarIconContainerView,
void SetExtensionIconVisibility(ToolbarActionsModel::ActionId id, void SetExtensionIconVisibility(ToolbarActionsModel::ActionId id,
bool visible); bool visible);
// ExtensionsContainer:
ToolbarActionViewController* GetActionForId(
const std::string& action_id) override;
ToolbarActionViewController* GetPoppedOutAction() const override;
bool IsActionVisibleOnToolbar(
const ToolbarActionViewController* action) const override;
void UndoPopOut() override;
void SetPopupOwner(ToolbarActionViewController* popup_owner) override;
void HideActivePopup() override;
bool CloseOverflowMenuIfOpen() override;
void PopOutAction(ToolbarActionViewController* action,
bool is_sticky,
const base::Closure& closure) override;
void ShowToolbarActionBubble(
std::unique_ptr<ToolbarActionsBarBubbleDelegate> bubble) override;
void ShowToolbarActionBubbleAsync(
std::unique_ptr<ToolbarActionsBarBubbleDelegate> bubble) override;
// ToolbarActionsModel::Observer: // ToolbarActionsModel::Observer:
void OnToolbarActionAdded(const ToolbarActionsModel::ActionId& action_id, void OnToolbarActionAdded(const ToolbarActionsModel::ActionId& action_id,
int index) override; int index) override;
......
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