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

Add extensions container to ToolbarButtonProvider

Replaces GetToolbarActionViewForId with GetExtensionsToolbarContainer to
be used directly (with GetViewForId). This is intended to be used to pop
out and show bubbles which cannot be added to the ExtensionsContainer
interface as it is defined outside of Views.

This also implements GetDefaultExtensionDialogAnchorView inside
WebAppFrameToolbarView and updates BrowserView::GetExtensionsContainer
to work with ToolbarButtonProvider.

These two combined fix a crash when uninstalling an extension inside a
web-app window.

Bug: chromium:1021905
Change-Id: I9b9d23adca85600212846fa0fdb8db9d43dcf6ba
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1986305Reviewed-by: default avatarCharlene Yan <cyan@chromium.org>
Commit-Queue: Peter Boström <pbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#728281}
parent d9d3c067
...@@ -117,9 +117,11 @@ views::View* AnchorViewForBrowser(const extensions::Extension* extension, ...@@ -117,9 +117,11 @@ views::View* AnchorViewForBrowser(const extensions::Extension* extension,
// anchor to a visible action. Right now this view is most likely not // anchor to a visible action. Right now this view is most likely not
// visible, and will fall back on the default case on showing the // visible, and will fall back on the default case on showing the
// installed dialog anchored to the general extensions toolbar button. // installed dialog anchored to the general extensions toolbar button.
reference_view = ExtensionsToolbarContainer* const container =
browser_view->toolbar_button_provider()->GetToolbarActionViewForId( browser_view->toolbar_button_provider()
extension->id()); ->GetExtensionsToolbarContainer();
if (container)
reference_view = container->GetViewForId(extension->id());
} else { } else {
BrowserActionsContainer* container = BrowserActionsContainer* container =
browser_view->toolbar()->browser_actions(); browser_view->toolbar()->browser_actions();
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/browser/ui/views/chrome_layout_provider.h"
#include "chrome/browser/ui/views/chrome_typography.h" #include "chrome/browser/ui/views/chrome_typography.h"
#include "chrome/browser/ui/views/extensions/extensions_toolbar_container.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/browser_actions_container.h" #include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
#include "chrome/browser/ui/views/toolbar/toolbar_view.h" #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
...@@ -45,11 +46,17 @@ ToolbarActionView* GetExtensionAnchorView(const std::string& extension_id, ...@@ -45,11 +46,17 @@ ToolbarActionView* GetExtensionAnchorView(const std::string& extension_id,
if (!browser_view) if (!browser_view)
return nullptr; return nullptr;
DCHECK(browser_view->toolbar_button_provider()); DCHECK(browser_view->toolbar_button_provider());
ExtensionsToolbarContainer* const container =
browser_view->toolbar_button_provider()->GetExtensionsToolbarContainer();
if (container)
return container->GetViewForId(extension_id);
DCHECK(browser_view->toolbar_button_provider()->GetBrowserActionsContainer());
// TODO(pbos): Pop out extensions so that they can become visible before // TODO(pbos): Pop out extensions so that they can become visible before
// showing the uninstall dialog. // showing the uninstall dialog.
ToolbarActionView* const reference_view = ToolbarActionView* const reference_view =
browser_view->toolbar_button_provider()->GetToolbarActionViewForId( browser_view->toolbar_button_provider()
extension_id); ->GetBrowserActionsContainer()
->GetViewForId(extension_id);
return reference_view && reference_view->GetVisible() ? reference_view return reference_view && reference_view->GetVisible() ? reference_view
: nullptr; : nullptr;
} }
......
...@@ -1231,8 +1231,10 @@ void BrowserView::FocusToolbar() { ...@@ -1231,8 +1231,10 @@ void BrowserView::FocusToolbar() {
} }
ExtensionsContainer* BrowserView::GetExtensionsContainer() { ExtensionsContainer* BrowserView::GetExtensionsContainer() {
if (toolbar_ && toolbar_->extensions_container()) ExtensionsToolbarContainer* const extensions_toolbar_container =
return toolbar_->extensions_container(); toolbar_button_provider_->GetExtensionsToolbarContainer();
if (extensions_toolbar_container)
return extensions_toolbar_container;
CHECK(!base::FeatureList::IsEnabled(features::kExtensionsToolbarMenu)); CHECK(!base::FeatureList::IsEnabled(features::kExtensionsToolbarMenu));
BrowserActionsContainer* container = BrowserActionsContainer* container =
......
...@@ -10,9 +10,9 @@ ...@@ -10,9 +10,9 @@
class AppMenuButton; class AppMenuButton;
class AvatarToolbarButton; class AvatarToolbarButton;
class BrowserActionsContainer; class BrowserActionsContainer;
class ExtensionsToolbarContainer;
class PageActionIconView; class PageActionIconView;
class ReloadButton; class ReloadButton;
class ToolbarActionView;
class ToolbarButton; class ToolbarButton;
namespace gfx { namespace gfx {
...@@ -32,9 +32,8 @@ class ToolbarButtonProvider { ...@@ -32,9 +32,8 @@ class ToolbarButtonProvider {
// TODO(pbos): Transition callers off of this function. // TODO(pbos): Transition callers off of this function.
virtual BrowserActionsContainer* GetBrowserActionsContainer() = 0; virtual BrowserActionsContainer* GetBrowserActionsContainer() = 0;
// Gets the associated ToolbarActionView for this id. // Gets the ExtensionsToolbarContainer.
virtual ToolbarActionView* GetToolbarActionViewForId( virtual ExtensionsToolbarContainer* GetExtensionsToolbarContainer() = 0;
const std::string& id) = 0;
// Gets the default view to use as an anchor for extension dialogs if the // Gets the default view to use as an anchor for extension dialogs if the
// ToolbarActionView is not visible or available. // ToolbarActionView is not visible or available.
......
...@@ -801,16 +801,8 @@ BrowserActionsContainer* ToolbarView::GetBrowserActionsContainer() { ...@@ -801,16 +801,8 @@ BrowserActionsContainer* ToolbarView::GetBrowserActionsContainer() {
return browser_actions_; return browser_actions_;
} }
ToolbarActionView* ToolbarView::GetToolbarActionViewForId( ExtensionsToolbarContainer* ToolbarView::GetExtensionsToolbarContainer() {
const std::string& id) { return extensions_container_;
if (display_mode_ != DisplayMode::NORMAL)
return nullptr;
if (base::FeatureList::IsEnabled(features::kExtensionsToolbarMenu)) {
DCHECK(extensions_container_);
return extensions_container_->GetViewForId(id);
}
DCHECK(GetBrowserActionsContainer());
return GetBrowserActionsContainer()->GetViewForId(id);
} }
views::View* ToolbarView::GetDefaultExtensionDialogAnchorView() { views::View* ToolbarView::GetDefaultExtensionDialogAnchorView() {
......
...@@ -226,7 +226,7 @@ class ToolbarView : public views::AccessiblePaneView, ...@@ -226,7 +226,7 @@ class ToolbarView : public views::AccessiblePaneView,
// ToolbarButtonProvider: // ToolbarButtonProvider:
BrowserActionsContainer* GetBrowserActionsContainer() override; BrowserActionsContainer* GetBrowserActionsContainer() override;
ToolbarActionView* GetToolbarActionViewForId(const std::string& id) override; ExtensionsToolbarContainer* GetExtensionsToolbarContainer() override;
views::View* GetDefaultExtensionDialogAnchorView() override; views::View* GetDefaultExtensionDialogAnchorView() override;
PageActionIconView* GetPageActionIconView(PageActionIconType type) override; PageActionIconView* GetPageActionIconView(PageActionIconType type) override;
AppMenuButton* GetAppMenuButton() override; AppMenuButton* GetAppMenuButton() override;
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/layout_constants.h"
#include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/view_ids.h" #include "chrome/browser/ui/view_ids.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/browser/ui/views/frame/browser_non_client_frame_view.h" #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h"
#include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/frame/browser_view.h"
...@@ -409,6 +410,10 @@ class WebAppFrameToolbarView::ToolbarButtonContainer ...@@ -409,6 +410,10 @@ class WebAppFrameToolbarView::ToolbarButtonContainer
return browser_actions_container_; return browser_actions_container_;
} }
ExtensionsToolbarContainer* extensions_container() {
return extensions_container_;
}
WebAppMenuButton* web_app_menu_button() { return web_app_menu_button_; } WebAppMenuButton* web_app_menu_button() { return web_app_menu_button_; }
private: private:
...@@ -765,16 +770,14 @@ BrowserActionsContainer* WebAppFrameToolbarView::GetBrowserActionsContainer() { ...@@ -765,16 +770,14 @@ BrowserActionsContainer* WebAppFrameToolbarView::GetBrowserActionsContainer() {
return right_container_->browser_actions_container(); return right_container_->browser_actions_container();
} }
ToolbarActionView* WebAppFrameToolbarView::GetToolbarActionViewForId( ExtensionsToolbarContainer*
const std::string& id) { WebAppFrameToolbarView::GetExtensionsToolbarContainer() {
// TODO(pbos): Implement this for kExtensionsToolbarMenu. return right_container_->extensions_container();
CHECK(!base::FeatureList::IsEnabled(features::kExtensionsToolbarMenu));
return right_container_->browser_actions_container()->GetViewForId(id);
} }
views::View* WebAppFrameToolbarView::GetDefaultExtensionDialogAnchorView() { views::View* WebAppFrameToolbarView::GetDefaultExtensionDialogAnchorView() {
// TODO(pbos): Implement this for kExtensionsToolbarMenu. if (base::FeatureList::IsEnabled(features::kExtensionsToolbarMenu))
CHECK(!base::FeatureList::IsEnabled(features::kExtensionsToolbarMenu)); return right_container_->extensions_container()->extensions_button();
return GetAppMenuButton(); return GetAppMenuButton();
} }
......
...@@ -72,7 +72,7 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView, ...@@ -72,7 +72,7 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
// ToolbarButtonProvider: // ToolbarButtonProvider:
BrowserActionsContainer* GetBrowserActionsContainer() override; BrowserActionsContainer* GetBrowserActionsContainer() override;
ToolbarActionView* GetToolbarActionViewForId(const std::string& id) override; ExtensionsToolbarContainer* GetExtensionsToolbarContainer() override;
views::View* GetDefaultExtensionDialogAnchorView() override; views::View* GetDefaultExtensionDialogAnchorView() override;
PageActionIconView* GetPageActionIconView(PageActionIconType type) override; PageActionIconView* GetPageActionIconView(PageActionIconType type) override;
AppMenuButton* GetAppMenuButton() override; AppMenuButton* GetAppMenuButton() 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