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,
return;
settings_api_bubble->SetIsActiveBubble();
ToolbarActionsBar* toolbar_actions_bar =
browser->window()->GetToolbarActionsBar();
std::unique_ptr<ToolbarActionsBarBubbleDelegate> bridge(
new ExtensionMessageBubbleBridge(std::move(settings_api_bubble)));
toolbar_actions_bar->ShowToolbarActionBubbleAsync(std::move(bridge));
browser->window()->GetExtensionsContainer()->ShowToolbarActionBubbleAsync(
std::move(bridge));
}
} // namespace
......@@ -120,11 +119,10 @@ void MaybeShowExtensionControlledNewTabPage(
return;
ntp_overridden_bubble->SetIsActiveBubble();
ToolbarActionsBar* toolbar_actions_bar =
browser->window()->GetToolbarActionsBar();
std::unique_ptr<ToolbarActionsBarBubbleDelegate> bridge(
new ExtensionMessageBubbleBridge(std::move(ntp_overridden_bubble)));
toolbar_actions_bar->ShowToolbarActionBubbleAsync(std::move(bridge));
browser->window()->GetExtensionsContainer()->ShowToolbarActionBubbleAsync(
std::move(bridge));
}
} // namespace extensions
......@@ -7,6 +7,7 @@
#include "base/numerics/ranges.h"
#include "chrome/browser/ui/browser.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/toolbar/toolbar_action_view_controller.h"
#include "chrome/browser/ui/views/extensions/browser_action_drag_data.h"
......@@ -42,6 +43,11 @@ ExtensionsToolbarContainer::ExtensionsToolbarContainer(Browser* browser)
extensions_button_->EnableCanvasFlippingForRTLUI(false);
AddMainButton(extensions_button_);
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() {
......@@ -170,6 +176,17 @@ void ExtensionsToolbarContainer::ShowToolbarActionBubbleAsync(
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(
const ToolbarActionsModel::ActionId& action_id,
int index) {
......
......@@ -11,6 +11,7 @@
#include "base/optional.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/views/toolbar/toolbar_action_view.h"
#include "chrome/browser/ui/views/toolbar/toolbar_icon_container_view.h"
......@@ -30,6 +31,7 @@ class ToolbarActionsBarBubbleViews;
// up after the experiment.
class ExtensionsToolbarContainer : public ToolbarIconContainerView,
public ExtensionsContainer,
public TabStripModelObserver,
public ToolbarActionsModel::Observer,
public ToolbarActionView::Delegate,
public views::WidgetObserver {
......@@ -129,6 +131,12 @@ class ExtensionsToolbarContainer : public ToolbarIconContainerView,
void SetExtensionIconVisibility(ToolbarActionsModel::ActionId id,
bool visible);
// TabStripModelObserver:
void OnTabStripModelChanged(
TabStripModel* tab_strip_model,
const TabStripModelChange& change,
const TabStripSelectionChange& selection) override;
// ToolbarActionsModel::Observer:
void OnToolbarActionAdded(const ToolbarActionsModel::ActionId& action_id,
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