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

Use GetExtensionsContainer to show async bubbles

Uses the ExtensionsContainer interface instead of ToolbarActionsBar to
show NTP and DSE warning bubbles. This fixes crashes (DCHECKs) when
using DDG or other default-search-engine extensions.

This also adds the NTP extensions trigger to ExtensionsToolbarContainer
which was used to be able to verify the fix on Linux.

Bug: chromium:985834, chromium:999100
Change-Id: I42b884f2ba7b1978be52daf194abe24f21f453de
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1956078
Commit-Queue: Peter Boström <pbos@chromium.org>
Commit-Queue: Caroline Rising <corising@chromium.org>
Auto-Submit: Peter Boström <pbos@chromium.org>
Reviewed-by: default avatarCaroline Rising <corising@chromium.org>
Cr-Commit-Position: refs/heads/master@{#722660}
parent 17cb9df6
...@@ -46,11 +46,10 @@ void ShowSettingsApiBubble(SettingsApiOverrideType type, ...@@ -46,11 +46,10 @@ void ShowSettingsApiBubble(SettingsApiOverrideType type,
return; return;
settings_api_bubble->SetIsActiveBubble(); settings_api_bubble->SetIsActiveBubble();
ToolbarActionsBar* toolbar_actions_bar =
browser->window()->GetToolbarActionsBar();
std::unique_ptr<ToolbarActionsBarBubbleDelegate> bridge( std::unique_ptr<ToolbarActionsBarBubbleDelegate> bridge(
new ExtensionMessageBubbleBridge(std::move(settings_api_bubble))); new ExtensionMessageBubbleBridge(std::move(settings_api_bubble)));
toolbar_actions_bar->ShowToolbarActionBubbleAsync(std::move(bridge)); browser->window()->GetExtensionsContainer()->ShowToolbarActionBubbleAsync(
std::move(bridge));
} }
} // namespace } // namespace
...@@ -120,11 +119,10 @@ void MaybeShowExtensionControlledNewTabPage( ...@@ -120,11 +119,10 @@ void MaybeShowExtensionControlledNewTabPage(
return; return;
ntp_overridden_bubble->SetIsActiveBubble(); ntp_overridden_bubble->SetIsActiveBubble();
ToolbarActionsBar* toolbar_actions_bar =
browser->window()->GetToolbarActionsBar();
std::unique_ptr<ToolbarActionsBarBubbleDelegate> bridge( std::unique_ptr<ToolbarActionsBarBubbleDelegate> bridge(
new ExtensionMessageBubbleBridge(std::move(ntp_overridden_bubble))); new ExtensionMessageBubbleBridge(std::move(ntp_overridden_bubble)));
toolbar_actions_bar->ShowToolbarActionBubbleAsync(std::move(bridge)); browser->window()->GetExtensionsContainer()->ShowToolbarActionBubbleAsync(
std::move(bridge));
} }
} // namespace extensions } // namespace extensions
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/numerics/ranges.h" #include "base/numerics/ranges.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/extensions/settings_api_bubble_helpers.h"
#include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/layout_constants.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/extensions/browser_action_drag_data.h" #include "chrome/browser/ui/views/extensions/browser_action_drag_data.h"
...@@ -42,6 +43,11 @@ ExtensionsToolbarContainer::ExtensionsToolbarContainer(Browser* browser) ...@@ -42,6 +43,11 @@ ExtensionsToolbarContainer::ExtensionsToolbarContainer(Browser* browser)
extensions_button_->EnableCanvasFlippingForRTLUI(false); extensions_button_->EnableCanvasFlippingForRTLUI(false);
AddMainButton(extensions_button_); AddMainButton(extensions_button_);
CreateActions(); CreateActions();
// TODO(pbos): Consider splitting out tab-strip observing into another class.
// Triggers for Extensions-related bubbles should preferably be separate from
// the container where they are shown.
browser_->tab_strip_model()->AddObserver(this);
} }
ExtensionsToolbarContainer::~ExtensionsToolbarContainer() { ExtensionsToolbarContainer::~ExtensionsToolbarContainer() {
...@@ -170,6 +176,17 @@ void ExtensionsToolbarContainer::ShowToolbarActionBubbleAsync( ...@@ -170,6 +176,17 @@ void ExtensionsToolbarContainer::ShowToolbarActionBubbleAsync(
weak_ptr_factory_.GetWeakPtr(), std::move(bubble))); weak_ptr_factory_.GetWeakPtr(), std::move(bubble)));
} }
void ExtensionsToolbarContainer::OnTabStripModelChanged(
TabStripModel* tab_strip_model,
const TabStripModelChange& change,
const TabStripSelectionChange& selection) {
if (tab_strip_model->empty() || !selection.active_tab_changed())
return;
extensions::MaybeShowExtensionControlledNewTabPage(browser_,
selection.new_contents);
}
void ExtensionsToolbarContainer::OnToolbarActionAdded( void ExtensionsToolbarContainer::OnToolbarActionAdded(
const ToolbarActionsModel::ActionId& action_id, const ToolbarActionsModel::ActionId& action_id,
int index) { int index) {
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/optional.h" #include "base/optional.h"
#include "chrome/browser/ui/extensions/extensions_container.h" #include "chrome/browser/ui/extensions/extensions_container.h"
#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
#include "chrome/browser/ui/toolbar/toolbar_actions_model.h" #include "chrome/browser/ui/toolbar/toolbar_actions_model.h"
#include "chrome/browser/ui/views/toolbar/toolbar_action_view.h" #include "chrome/browser/ui/views/toolbar/toolbar_action_view.h"
#include "chrome/browser/ui/views/toolbar/toolbar_icon_container_view.h" #include "chrome/browser/ui/views/toolbar/toolbar_icon_container_view.h"
...@@ -30,6 +31,7 @@ class ToolbarActionsBarBubbleViews; ...@@ -30,6 +31,7 @@ class ToolbarActionsBarBubbleViews;
// up after the experiment. // up after the experiment.
class ExtensionsToolbarContainer : public ToolbarIconContainerView, class ExtensionsToolbarContainer : public ToolbarIconContainerView,
public ExtensionsContainer, public ExtensionsContainer,
public TabStripModelObserver,
public ToolbarActionsModel::Observer, public ToolbarActionsModel::Observer,
public ToolbarActionView::Delegate, public ToolbarActionView::Delegate,
public views::WidgetObserver { public views::WidgetObserver {
...@@ -129,6 +131,12 @@ class ExtensionsToolbarContainer : public ToolbarIconContainerView, ...@@ -129,6 +131,12 @@ class ExtensionsToolbarContainer : public ToolbarIconContainerView,
void SetExtensionIconVisibility(ToolbarActionsModel::ActionId id, void SetExtensionIconVisibility(ToolbarActionsModel::ActionId id,
bool visible); bool visible);
// TabStripModelObserver:
void OnTabStripModelChanged(
TabStripModel* tab_strip_model,
const TabStripModelChange& change,
const TabStripSelectionChange& selection) 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