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

Add WebUI tabstrip caption buttons to toolbar

These buttons are now treated like other toolbar buttons and appear
alongside them.

This removes the separate container and BrowserViewLayout special casing
for it. This also removes the anticipated need to add theme support to
the container separately from the toolbar.

Bug: chromium:989131
Change-Id: I6cd01f8aec0984654cf70bc430301951f95ea612
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1829587
Commit-Queue: Peter Boström <pbos@chromium.org>
Commit-Queue: Taylor Bergquist <tbergquist@chromium.org>
Reviewed-by: default avatarTaylor Bergquist <tbergquist@chromium.org>
Auto-Submit: Peter Boström <pbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#701336}
parent f01aaef5
......@@ -2585,24 +2585,20 @@ void BrowserView::InitViews() {
tab_strip_region_view_->AddChildView(tabstrip_); // Takes ownership.
tabstrip_controller->InitFromModel(tabstrip_);
toolbar_ = new ToolbarView(browser_.get(), this);
top_container_->AddChildView(toolbar_);
toolbar_->Init();
views::View* webui_tab_strip_view = nullptr;
views::View* webui_tab_strip_caption_buttons = nullptr;
#if BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
if (base::FeatureList::IsEnabled(features::kWebUITabStrip)) {
WebUITabStripContainerView* const webui_tab_strip =
top_container_->AddChildView(
std::make_unique<WebUITabStripContainerView>(browser_.get()));
webui_tab_strip_ = top_container_->AddChildView(
std::make_unique<WebUITabStripContainerView>(browser_.get()));
webui_tab_strip_caption_buttons =
top_container_->AddChildView(webui_tab_strip->CreateControlButtons());
webui_tab_strip_view = webui_tab_strip;
webui_tab_strip_view = webui_tab_strip_;
}
#endif // BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
toolbar_ = new ToolbarView(browser_.get(), this);
top_container_->AddChildView(toolbar_);
toolbar_->Init();
// This browser view may already have a custom button provider set (e.g the
// hosted app frame).
if (!toolbar_button_provider_)
......@@ -2652,9 +2648,8 @@ void BrowserView::InitViews() {
auto browser_view_layout = std::make_unique<BrowserViewLayout>(
std::make_unique<BrowserViewLayoutDelegateImpl>(this), browser(), this,
top_container_, tab_strip_region_view_, tabstrip_, webui_tab_strip_view,
webui_tab_strip_caption_buttons, toolbar_, infobar_container_,
contents_container_, immersive_mode_controller_.get(),
web_footer_experiment);
toolbar_, infobar_container_, contents_container_,
immersive_mode_controller_.get(), web_footer_experiment);
SetLayoutManager(std::move(browser_view_layout));
EnsureFocusOrder();
......
......@@ -69,6 +69,7 @@ class ToolbarView;
class TopContainerView;
class TopControlsSlideControllerTest;
class WebContentsCloseHandler;
class WebUITabStripContainerView;
namespace extensions {
class ActiveTabPermissionGranter;
......@@ -186,6 +187,9 @@ class BrowserView : public BrowserWindow,
TabStrip* tabstrip() { return tabstrip_; }
const TabStrip* tabstrip() const { return tabstrip_; }
// Accessor for the WebUI tab strip.
WebUITabStripContainerView* webui_tab_strip() { return webui_tab_strip_; }
// Accessor for the Toolbar.
ToolbarView* toolbar() { return toolbar_; }
......@@ -736,6 +740,9 @@ class BrowserView : public BrowserWindow,
// The TabStrip.
TabStrip* tabstrip_ = nullptr;
// the webui based tabstrip, when applicable. see https://crbug.com/989131.
WebUITabStripContainerView* webui_tab_strip_ = nullptr;
// The Toolbar containing the navigation buttons, menus and the address bar.
ToolbarView* toolbar_ = nullptr;
......
......@@ -135,7 +135,6 @@ BrowserViewLayout::BrowserViewLayout(
views::View* tab_strip_region_view,
TabStrip* tab_strip,
views::View* webui_tab_strip,
views::View* webui_tab_strip_caption_buttons,
views::View* toolbar,
InfoBarContainerView* infobar_container,
views::View* contents_container,
......@@ -147,7 +146,6 @@ BrowserViewLayout::BrowserViewLayout(
top_container_(top_container),
tab_strip_region_view_(tab_strip_region_view),
webui_tab_strip_(webui_tab_strip),
webui_tab_strip_caption_buttons_(webui_tab_strip_caption_buttons),
toolbar_(toolbar),
infobar_container_(infobar_container),
contents_container_(contents_container),
......@@ -425,15 +423,6 @@ int BrowserViewLayout::LayoutToolbar(int top) {
bool toolbar_visible = delegate_->IsToolbarVisible();
int height = toolbar_visible ? toolbar_->GetPreferredSize().height() : 0;
toolbar_->SetVisible(toolbar_visible);
if (webui_tab_strip_caption_buttons_) {
webui_tab_strip_caption_buttons_->SetVisible(toolbar_visible);
const int preferred_webui_tab_strip_caption_buttons_width =
webui_tab_strip_caption_buttons_->GetPreferredSize().width();
browser_view_width -= preferred_webui_tab_strip_caption_buttons_width;
webui_tab_strip_caption_buttons_->SetBounds(
vertical_layout_rect_.x() + browser_view_width, top,
preferred_webui_tab_strip_caption_buttons_width, height);
}
toolbar_->SetBounds(vertical_layout_rect_.x(), top, browser_view_width,
height);
return toolbar_->bounds().bottom();
......
......@@ -55,7 +55,6 @@ class BrowserViewLayout : public views::LayoutManager {
views::View* tab_strip_region_view,
TabStrip* tab_strip,
views::View* webui_tab_strip,
views::View* webui_tab_strip_caption_buttons,
views::View* toolbar,
InfoBarContainerView* infobar_container,
views::View* contents_container,
......@@ -148,7 +147,6 @@ class BrowserViewLayout : public views::LayoutManager {
views::View* const top_container_;
views::View* const tab_strip_region_view_;
views::View* const webui_tab_strip_;
views::View* const webui_tab_strip_caption_buttons_;
views::View* const toolbar_;
InfoBarContainerView* const infobar_container_;
views::View* const contents_container_;
......
......@@ -171,8 +171,8 @@ class BrowserViewLayoutTest : public BrowserWithTestWindowTest {
layout_ = std::make_unique<BrowserViewLayout>(
std::unique_ptr<BrowserViewLayoutDelegate>(delegate_), browser(),
nullptr, // BrowserView.
top_container_, tab_strip_region_view, tab_strip_, nullptr, nullptr,
toolbar_, infobar_container_, contents_container_,
top_container_, tab_strip_region_view, tab_strip_, nullptr, toolbar_,
infobar_container_, contents_container_,
immersive_mode_controller_.get(), nullptr);
}
......
......@@ -39,40 +39,21 @@ WebUITabStripContainerView::WebUITabStripContainerView(Browser* browser)
web_view_->web_contents());
}
std::unique_ptr<views::View>
WebUITabStripContainerView::CreateControlButtons() {
auto toolbar_button_container = std::make_unique<views::View>();
toolbar_button_container
->SetLayoutManager(std::make_unique<views::FlexLayout>())
->SetOrientation(views::LayoutOrientation::kHorizontal)
.SetCrossAxisAlignment(views::LayoutAlignment::kCenter)
.SetDefault(views::kMarginsKey,
gfx::Insets(0, GetLayoutConstant(TOOLBAR_ELEMENT_PADDING)))
.SetInteriorMargin(
gfx::Insets(0, GetLayoutConstant(TOOLBAR_STANDARD_SPACING)))
.SetCollapseMargins(true);
toolbar_button_container->SetBackground(
views::CreateSolidBackground(gfx::kGoogleGrey300));
ToolbarButton* const new_tab_button = toolbar_button_container->AddChildView(
std::make_unique<ToolbarButton>(this));
std::unique_ptr<ToolbarButton>
WebUITabStripContainerView::CreateNewTabButton() {
auto new_tab_button = std::make_unique<ToolbarButton>(this);
new_tab_button->SetID(VIEW_ID_WEBUI_TAB_STRIP_NEW_TAB_BUTTON);
new_tab_button->SetImage(
views::Button::STATE_NORMAL,
gfx::CreateVectorIcon(kAddIcon, gfx::kGoogleGrey700));
new_tab_button->SetTooltipText(
l10n_util::GetStringUTF16(IDS_TOOLTIP_NEW_TAB));
return new_tab_button;
}
// TODO(pbos): Replace this button with tab counter. Remember to add a
// tooltip.
ToolbarButton* const toggle_button = toolbar_button_container->AddChildView(
std::make_unique<ToolbarButton>(this));
// TODO(pbos): Replace this button with tab counter. Remember to add a tooltip.
std::unique_ptr<ToolbarButton>
WebUITabStripContainerView::CreateToggleButton() {
auto toggle_button = std::make_unique<ToolbarButton>(this);
toggle_button->SetID(VIEW_ID_WEBUI_TAB_STRIP_TOGGLE_BUTTON);
toggle_button->SetImage(
views::Button::STATE_NORMAL,
gfx::CreateVectorIcon(kCaretUpIcon, gfx::kGoogleGrey700));
return toolbar_button_container;
return toggle_button;
}
void WebUITabStripContainerView::ButtonPressed(views::Button* sender,
......
......@@ -7,8 +7,8 @@
#include <memory>
#include "chrome/browser/ui/views/toolbar/toolbar_button.h"
#include "chrome/common/buildflags.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/view.h"
#if !BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
......@@ -26,7 +26,9 @@ class WebUITabStripContainerView : public views::View,
public:
explicit WebUITabStripContainerView(Browser* browser);
std::unique_ptr<views::View> CreateControlButtons();
// Control buttons.
std::unique_ptr<ToolbarButton> CreateNewTabButton();
std::unique_ptr<ToolbarButton> CreateToggleButton();
private:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
......
......@@ -101,6 +101,10 @@
#include "chrome/browser/ui/views/outdated_upgrade_bubble_view.h"
#endif
#if BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
#include "chrome/browser/ui/views/frame/webui_tab_strip_container_view.h"
#endif // BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
using base::UserMetricsAction;
using content::WebContents;
......@@ -312,6 +316,15 @@ void ToolbarView::Init() {
if (avatar)
avatar_ = AddChildView(std::move(avatar));
#if BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
if (browser_view_->webui_tab_strip()) {
webui_new_tab_button_ =
AddChildView(browser_view_->webui_tab_strip()->CreateNewTabButton());
webui_toggle_button_ =
AddChildView(browser_view_->webui_tab_strip()->CreateToggleButton());
}
#endif // BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
app_menu_button_ = AddChildView(std::move(app_menu_button));
LoadImages();
......@@ -929,6 +942,15 @@ void ToolbarView::LoadImages() {
if (media_button_)
media_button_->UpdateIcon();
if (webui_new_tab_button_) {
webui_new_tab_button_->SetImage(
views::Button::STATE_NORMAL,
gfx::CreateVectorIcon(kAddIcon, normal_color));
webui_toggle_button_->SetImage(
views::Button::STATE_NORMAL,
gfx::CreateVectorIcon(kCaretUpIcon, normal_color));
}
if (avatar_)
avatar_->UpdateIcon();
......
......@@ -272,6 +272,8 @@ class ToolbarView : public views::AccessiblePaneView,
ExtensionsToolbarContainer* extensions_container_ = nullptr;
media_router::CastToolbarButton* cast_ = nullptr;
ToolbarAccountIconContainerView* toolbar_account_icon_container_ = nullptr;
ToolbarButton* webui_new_tab_button_ = nullptr;
ToolbarButton* webui_toggle_button_ = nullptr;
AvatarToolbarButton* avatar_ = nullptr;
MediaToolbarButtonView* media_button_ = nullptr;
BrowserAppMenuButton* app_menu_button_ = nullptr;
......
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