Commit ded972a8 authored by Peter Boström's avatar Peter Boström Committed by Commit Bot

Move ExtensionsMenuButton to a separate file

Also modifies existing test to verify that the number of extension
buttons inside the menu matches the number of added extensions.

Bug: chromium:943702
Change-Id: Ifafc8cef9d3d6b110a7f4a510fa35531611329e8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1538863Reviewed-by: default avatarCollin Baker <collinbaker@chromium.org>
Commit-Queue: Peter Boström <pbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#644414}
parent 30cecffa
...@@ -2506,6 +2506,8 @@ jumbo_split_static_library("ui") { ...@@ -2506,6 +2506,8 @@ jumbo_split_static_library("ui") {
"views/extensions/extension_keybinding_registry_views.cc", "views/extensions/extension_keybinding_registry_views.cc",
"views/extensions/extension_keybinding_registry_views.h", "views/extensions/extension_keybinding_registry_views.h",
"views/extensions/extension_uninstall_dialog_view.cc", "views/extensions/extension_uninstall_dialog_view.cc",
"views/extensions/extensions_menu_button.cc",
"views/extensions/extensions_menu_button.h",
"views/extensions/extensions_menu_view.cc", "views/extensions/extensions_menu_view.cc",
"views/extensions/extensions_menu_view.h", "views/extensions/extensions_menu_view.h",
"views/extensions/extensions_toolbar_button.cc", "views/extensions/extensions_toolbar_button.cc",
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/extensions/extensions_menu_button.h"
#include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h"
#include "chrome/browser/ui/views/extensions/extensions_toolbar_button.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
const char ExtensionsMenuButton::kClassName[] = "ExtensionsMenuButton";
ExtensionsMenuButton::ExtensionsMenuButton(
Browser* browser,
std::unique_ptr<ToolbarActionViewController> controller)
: HoverButton(this, controller->GetActionName()),
browser_(browser),
controller_(std::move(controller)) {
set_context_menu_controller(this);
controller_->SetDelegate(this);
UpdateState();
}
ExtensionsMenuButton::~ExtensionsMenuButton() = default;
const char* ExtensionsMenuButton::GetClassName() const {
return kClassName;
}
void ExtensionsMenuButton::ButtonPressed(Button* sender,
const ui::Event& event) {
controller_->ExecuteAction(true);
}
// ToolbarActionViewDelegateViews:
views::View* ExtensionsMenuButton::GetAsView() {
return this;
}
views::FocusManager* ExtensionsMenuButton::GetFocusManagerForAccelerator() {
return GetFocusManager();
}
views::View* ExtensionsMenuButton::GetReferenceViewForPopup() {
return BrowserView::GetBrowserViewForBrowser(browser_)
->toolbar()
->extensions_button();
}
content::WebContents* ExtensionsMenuButton::GetCurrentWebContents() const {
return browser_->tab_strip_model()->GetActiveWebContents();
}
void ExtensionsMenuButton::UpdateState() {
// TODO(pbos): Repopulate button.
}
bool ExtensionsMenuButton::IsMenuRunning() const {
// TODO(pbos): Implement when able to show context menus inside this bubble.
return false;
}
// views::ContextMenuController:
void ExtensionsMenuButton::ShowContextMenuForViewImpl(
views::View* source,
const gfx::Point& point,
ui::MenuSourceType source_type) {
// TODO(pbos): Implement this. This is a no-op implementation as it prevents
// crashing actions that don't have a popup action.
}
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_MENU_BUTTON_H_
#define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_MENU_BUTTON_H_
#include <memory>
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/toolbar/toolbar_actions_model.h"
#include "chrome/browser/ui/views/hover_button.h"
#include "chrome/browser/ui/views/toolbar/toolbar_action_view_delegate_views.h"
#include "ui/views/bubble/bubble_dialog_delegate_view.h"
namespace views {
class View;
} // namespace views
class ExtensionsMenuButton : public HoverButton,
public views::ButtonListener,
public ToolbarActionViewDelegateViews,
public views::ContextMenuController {
public:
ExtensionsMenuButton(Browser* browser,
std::unique_ptr<ToolbarActionViewController> controller);
~ExtensionsMenuButton() override;
static const char kClassName[];
private:
// views::ButtonListener:
const char* GetClassName() const override;
void ButtonPressed(Button* sender, const ui::Event& event) override;
// ToolbarActionViewDelegateViews:
views::View* GetAsView() override;
views::FocusManager* GetFocusManagerForAccelerator() override;
views::View* GetReferenceViewForPopup() override;
content::WebContents* GetCurrentWebContents() const override;
void UpdateState() override;
bool IsMenuRunning() const override;
// views::ContextMenuController:
void ShowContextMenuForViewImpl(views::View* source,
const gfx::Point& point,
ui::MenuSourceType source_type) override;
Browser* const browser_;
const std::unique_ptr<ToolbarActionViewController> controller_;
DISALLOW_COPY_AND_ASSIGN(ExtensionsMenuButton);
};
#endif // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_MENU_BUTTON_H_
...@@ -8,79 +8,13 @@ ...@@ -8,79 +8,13 @@
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h" #include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h"
#include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/browser/ui/views/chrome_layout_provider.h"
#include "chrome/browser/ui/views/extensions/extensions_toolbar_button.h" #include "chrome/browser/ui/views/extensions/extensions_menu_button.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/hover_button.h"
#include "chrome/browser/ui/views/toolbar/toolbar_action_view_delegate_views.h"
#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/views/layout/box_layout.h" #include "ui/views/layout/box_layout.h"
namespace { namespace {
ExtensionsMenuView* g_extensions_dialog = nullptr; ExtensionsMenuView* g_extensions_dialog = nullptr;
class ExtensionsMenuButton : public HoverButton,
public views::ButtonListener,
public ToolbarActionViewDelegateViews,
public views::ContextMenuController {
public:
ExtensionsMenuButton(Browser* browser,
std::unique_ptr<ToolbarActionViewController> controller)
: HoverButton(this, controller->GetActionName()),
browser_(browser),
controller_(std::move(controller)) {
set_context_menu_controller(this);
controller_->SetDelegate(this);
UpdateState();
}
private:
// views::ButtonListener:
void ButtonPressed(Button* sender, const ui::Event& event) override {
controller_->ExecuteAction(true);
}
// ToolbarActionViewDelegateViews:
views::View* GetAsView() override { return this; }
views::FocusManager* GetFocusManagerForAccelerator() override {
return GetFocusManager();
}
views::View* GetReferenceViewForPopup() override {
return BrowserView::GetBrowserViewForBrowser(browser_)
->toolbar()
->extensions_button();
}
content::WebContents* GetCurrentWebContents() const override {
return browser_->tab_strip_model()->GetActiveWebContents();
}
void UpdateState() override {
// TODO(pbos): Repopulate button.
}
bool IsMenuRunning() const override {
// TODO(pbos): Implement when able to show context menus inside this bubble.
return false;
}
// views::ContextMenuController:
void ShowContextMenuForViewImpl(views::View* source,
const gfx::Point& point,
ui::MenuSourceType source_type) override {
// TODO(pbos): Implement this. This is a no-op implementation as it prevents
// crashing actions that don't have a popup action.
}
Browser* const browser_;
const std::unique_ptr<ToolbarActionViewController> controller_;
DISALLOW_COPY_AND_ASSIGN(ExtensionsMenuButton);
};
} // namespace } // namespace
ExtensionsMenuView::ExtensionsMenuView(views::View* anchor_view, ExtensionsMenuView::ExtensionsMenuView(views::View* anchor_view,
...@@ -166,3 +100,7 @@ void ExtensionsMenuView::Hide() { ...@@ -166,3 +100,7 @@ void ExtensionsMenuView::Hide() {
if (IsShowing()) if (IsShowing())
g_extensions_dialog->GetWidget()->Close(); g_extensions_dialog->GetWidget()->Close();
} }
ExtensionsMenuView* ExtensionsMenuView::GetExtensionsMenuViewForTesting() {
return g_extensions_dialog;
}
...@@ -24,6 +24,7 @@ class ExtensionsMenuView : public views::BubbleDialogDelegateView, ...@@ -24,6 +24,7 @@ class ExtensionsMenuView : public views::BubbleDialogDelegateView,
static void ShowBubble(views::View* anchor_view, Browser* browser); static void ShowBubble(views::View* anchor_view, Browser* browser);
static bool IsShowing(); static bool IsShowing();
static void Hide(); static void Hide();
static ExtensionsMenuView* GetExtensionsMenuViewForTesting();
// views::BubbleDialogDelegateView: // views::BubbleDialogDelegateView:
base::string16 GetWindowTitle() const override; base::string16 GetWindowTitle() const override;
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "chrome/browser/browser_features.h" #include "chrome/browser/browser_features.h"
#include "chrome/browser/extensions/chrome_test_extension_loader.h" #include "chrome/browser/extensions/chrome_test_extension_loader.h"
#include "chrome/browser/ui/test/test_browser_dialog.h" #include "chrome/browser/ui/test/test_browser_dialog.h"
#include "chrome/browser/ui/views/extensions/extensions_menu_button.h"
#include "chrome/browser/ui/views/extensions/extensions_toolbar_button.h" #include "chrome/browser/ui/views/extensions/extensions_toolbar_button.h"
#include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/toolbar/toolbar_view.h" #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
...@@ -16,12 +17,12 @@ ...@@ -16,12 +17,12 @@
class ExtensionsMenuViewBrowserTest : public DialogBrowserTest { class ExtensionsMenuViewBrowserTest : public DialogBrowserTest {
protected: protected:
void LoadTestExtension() { void LoadTestExtension(const std::string& extension) {
extensions::ChromeTestExtensionLoader loader(browser()->profile()); extensions::ChromeTestExtensionLoader loader(browser()->profile());
base::FilePath test_data_dir; base::FilePath test_data_dir;
base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
extension_ = loader.LoadExtension( extensions_.push_back(
test_data_dir.AppendASCII("extensions/uitest/long_name")); loader.LoadExtension(test_data_dir.AppendASCII(extension)));
} }
private: private:
...@@ -31,6 +32,11 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest { ...@@ -31,6 +32,11 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest {
} }
void ShowUi(const std::string& name) override { void ShowUi(const std::string& name) override {
if (name == "default") {
LoadTestExtension("extensions/uitest/long_name");
LoadTestExtension("extensions/uitest/window_open");
}
ui::MouseEvent click_event(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), ui::MouseEvent click_event(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
base::TimeTicks(), ui::EF_LEFT_MOUSE_BUTTON, 0); base::TimeTicks(), ui::EF_LEFT_MOUSE_BUTTON, 0);
BrowserView::GetBrowserViewForBrowser(browser()) BrowserView::GetBrowserViewForBrowser(browser())
...@@ -39,12 +45,34 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest { ...@@ -39,12 +45,34 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest {
->OnMousePressed(click_event); ->OnMousePressed(click_event);
} }
bool VerifyUi() override {
if (!DialogBrowserTest::VerifyUi())
return false;
std::vector<ExtensionsMenuButton*> menu_buttons = GetExtensionMenuButtons();
if (extensions_.size() != menu_buttons.size())
return false;
// TODO(pbos): Sort and compare titles of buttons / extensions.
return true;
}
static std::vector<ExtensionsMenuButton*> GetExtensionMenuButtons() {
std::vector<ExtensionsMenuButton*> buttons;
for (auto* view : ExtensionsMenuView::GetExtensionsMenuViewForTesting()
->GetChildrenInZOrder()) {
if (view->GetClassName() == ExtensionsMenuButton::kClassName)
buttons.push_back(static_cast<ExtensionsMenuButton*>(view));
}
return buttons;
}
base::test::ScopedFeatureList scoped_feature_list_; base::test::ScopedFeatureList scoped_feature_list_;
scoped_refptr<const extensions::Extension> extension_; std::vector<scoped_refptr<const extensions::Extension>> extensions_;
}; };
IN_PROC_BROWSER_TEST_F(ExtensionsMenuViewBrowserTest, InvokeUi_default) { IN_PROC_BROWSER_TEST_F(ExtensionsMenuViewBrowserTest, InvokeUi_default) {
LoadTestExtension();
ShowAndVerifyUi(); ShowAndVerifyUi();
} }
......
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