Commit ebc8309b authored by Eric Willigers's avatar Eric Willigers Committed by Commit Bot

Desktop PWAs: ToolbarButtonContainer creates and updates its buttons

WebAppFrameToolbarView::ToolbarButtonContainer now creates the views
that it contains, and listens for updates that affect its members.

The outer class WebAppFrameToolbarView is now much simpler,
as it does little more that create the two containers for the controls
on the left and right of the toolbar, manage their layout and
implement the ToolbarButtonProvider interface.

Design doc:
https://docs.google.com/document/d/1gOU3F8Zk1VGTPZQIr7Bq8gultJ7vg5AZJuujmRuG9To/edit?usp=sharing

TBR=tapted@chromium.org

Bug: 1007151
Change-Id: I0d31dee8a9a19a1e6939c1c2b0f611a377dafc43
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1966791
Commit-Queue: Eric Willigers <ericwilligers@chromium.org>
Reviewed-by: default avatarAlan Cutter <alancutter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#726076}
parent 1e9fc104
......@@ -766,7 +766,7 @@ class WebAppNonClientFrameViewAshTest
WebAppFrameToolbarView* web_app_frame_toolbar_ = nullptr;
const std::vector<ContentSettingImageView*>* content_setting_views_ = nullptr;
BrowserActionsContainer* browser_actions_container_ = nullptr;
views::Button* web_app_menu_button_ = nullptr;
AppMenuButton* web_app_menu_button_ = nullptr;
void SetUpCommandLine(base::CommandLine* command_line) override {
TopChromeMdParamTest<BrowserActionsBarBrowserTest>::SetUpCommandLine(
......@@ -826,13 +826,11 @@ class WebAppNonClientFrameViewAshTest
content_setting_views_ =
&web_app_frame_toolbar_->GetContentSettingViewsForTesting();
browser_actions_container_ =
web_app_frame_toolbar_->browser_actions_container_;
web_app_menu_button_ = web_app_frame_toolbar_->web_app_menu_button_;
web_app_frame_toolbar_->GetBrowserActionsContainer();
web_app_menu_button_ = web_app_frame_toolbar_->GetAppMenuButton();
}
AppMenu* GetAppMenu() {
return web_app_frame_toolbar_->web_app_menu_button_->app_menu();
}
AppMenu* GetAppMenu() { return web_app_menu_button_->app_menu(); }
SkColor GetActiveColor() { return web_app_frame_toolbar_->active_color_; }
......
......@@ -118,7 +118,7 @@ class ImmersiveModeControllerAshWebAppBrowserTest
WebAppFrameToolbarView* container =
frame_view->web_app_frame_toolbar_for_testing();
views::test::InkDropHostViewTestApi ink_drop_api(
container->web_app_menu_button_);
container->GetAppMenuButton());
EXPECT_TRUE(container->GetContentSettingContainerForTesting()->layer());
EXPECT_EQ(views::InkDropHostView::InkDropMode::ON,
ink_drop_api.ink_drop_mode());
......
......@@ -5,37 +5,23 @@
#ifndef CHROME_BROWSER_UI_VIEWS_WEB_APPS_WEB_APP_FRAME_TOOLBAR_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_WEB_APPS_WEB_APP_FRAME_TOOLBAR_VIEW_H_
#include <memory>
#include <utility>
#include <vector>
#include "base/macros.h"
#include "base/scoped_observer.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "build/build_config.h"
#include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
#include "chrome/browser/ui/views/frame/toolbar_button_provider.h"
#include "chrome/browser/ui/views/location_bar/content_setting_image_view.h"
#include "chrome/browser/ui/views/page_action/page_action_icon_view.h"
#include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
#include "ui/gfx/color_palette.h"
#include "ui/gfx/geometry/rect.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/views/accessible_pane_view.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/controls/button/menu_button.h"
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_observer.h"
class AppMenuButton;
class AvatarToolbarButton;
namespace views {
class View;
class Widget;
} // namespace views
class BrowserView;
class ExtensionsToolbarContainer;
class PageActionIconContainerView;
class ReloadButton;
class ToolbarButton;
class WebAppMenuButton;
class WebAppOriginText;
class ContentSettingImageView;
#if defined(OS_MACOSX)
constexpr int kWebAppMenuMargin = 7;
......@@ -43,12 +29,7 @@ constexpr int kWebAppMenuMargin = 7;
// A container for web app buttons in the title bar.
class WebAppFrameToolbarView : public views::AccessiblePaneView,
public BrowserActionsContainer::Delegate,
public ContentSettingImageView::Delegate,
public ImmersiveModeController::Observer,
public PageActionIconView::Delegate,
public ToolbarButtonProvider,
public views::WidgetObserver {
public ToolbarButtonProvider {
public:
static const char kViewClassName[];
......@@ -89,33 +70,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
SkColor active_color_for_testing() const { return active_color_; }
// views::AccessiblePaneView:
const char* GetClassName() const override;
// BrowserActionsContainer::Delegate:
views::LabelButton* GetOverflowReferenceView() override;
base::Optional<int> GetMaxBrowserActionsWidth() const override;
bool CanShowIconInToolbar() const override;
std::unique_ptr<ToolbarActionsBar> CreateToolbarActionsBar(
ToolbarActionsBarDelegate* delegate,
Browser* browser,
ToolbarActionsBar* main_bar) const override;
// ContentSettingImageView::Delegate:
SkColor GetContentSettingInkDropColor() const override;
content::WebContents* GetContentSettingWebContents() override;
ContentSettingBubbleModelDelegate* GetContentSettingBubbleModelDelegate()
override;
void OnContentSettingImageBubbleShown(
ContentSettingImageModel::ImageType type) const override;
// ImmersiveModeController::Observer:
void OnImmersiveRevealStarted() override;
// PageActionIconView::Delegate:
SkColor GetPageActionInkDropColor() const override;
content::WebContents* GetWebContentsForPageActionIconView() override;
// ToolbarButtonProvider:
BrowserActionsContainer* GetBrowserActionsContainer() override;
ToolbarActionView* GetToolbarActionViewForId(const std::string& id) override;
......@@ -131,9 +85,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
ToolbarButton* GetBackButton() override;
ReloadButton* GetReloadButton() override;
// views::WidgetObserver:
void OnWidgetVisibilityChanged(views::Widget* widget, bool visible) override;
static void DisableAnimationForTesting();
views::View* GetLeftContainerForTesting();
views::View* GetRightContainerForTesting();
......@@ -141,6 +92,7 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
protected:
// views::AccessiblePaneView:
const char* GetClassName() const override;
void ChildPreferredSizeChanged(views::View* child) override;
private:
......@@ -152,12 +104,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
static constexpr base::TimeDelta kTitlebarAnimationDelay =
base::TimeDelta::FromMilliseconds(750);
// Methods for coordinate the titlebar animation (origin text slide, menu
// highlight and icon fade in).
bool ShouldAnimate() const;
void StartTitlebarAnimation();
void FadeInContentSettingIcons();
class ContentSettingsContainer;
views::View* GetContentSettingContainerForTesting();
......@@ -168,16 +114,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
SkColor GetCaptionColor() const;
void UpdateChildrenColor();
// Whether we're waiting for the widget to become visible.
bool pending_widget_visibility_ = true;
ScopedObserver<views::Widget, views::WidgetObserver> scoped_widget_observer_{
this};
// Timers for synchronising their respective parts of the titlebar animation.
base::OneShotTimer animation_start_delay_;
base::OneShotTimer icon_fade_in_delay_;
// The containing browser view.
BrowserView* const browser_view_;
......@@ -198,13 +134,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
views::View* center_container_ = nullptr;
ToolbarButtonContainer* right_container_ = nullptr;
WebAppOriginText* web_app_origin_text_ = nullptr;
ContentSettingsContainer* content_settings_container_ = nullptr;
PageActionIconContainerView* page_action_icon_container_view_ = nullptr;
BrowserActionsContainer* browser_actions_container_ = nullptr;
ExtensionsToolbarContainer* extensions_container_ = nullptr;
WebAppMenuButton* web_app_menu_button_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(WebAppFrameToolbarView);
};
......
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