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 ...@@ -766,7 +766,7 @@ class WebAppNonClientFrameViewAshTest
WebAppFrameToolbarView* web_app_frame_toolbar_ = nullptr; WebAppFrameToolbarView* web_app_frame_toolbar_ = nullptr;
const std::vector<ContentSettingImageView*>* content_setting_views_ = nullptr; const std::vector<ContentSettingImageView*>* content_setting_views_ = nullptr;
BrowserActionsContainer* browser_actions_container_ = 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 { void SetUpCommandLine(base::CommandLine* command_line) override {
TopChromeMdParamTest<BrowserActionsBarBrowserTest>::SetUpCommandLine( TopChromeMdParamTest<BrowserActionsBarBrowserTest>::SetUpCommandLine(
...@@ -826,13 +826,11 @@ class WebAppNonClientFrameViewAshTest ...@@ -826,13 +826,11 @@ class WebAppNonClientFrameViewAshTest
content_setting_views_ = content_setting_views_ =
&web_app_frame_toolbar_->GetContentSettingViewsForTesting(); &web_app_frame_toolbar_->GetContentSettingViewsForTesting();
browser_actions_container_ = browser_actions_container_ =
web_app_frame_toolbar_->browser_actions_container_; web_app_frame_toolbar_->GetBrowserActionsContainer();
web_app_menu_button_ = web_app_frame_toolbar_->web_app_menu_button_; web_app_menu_button_ = web_app_frame_toolbar_->GetAppMenuButton();
} }
AppMenu* GetAppMenu() { AppMenu* GetAppMenu() { return web_app_menu_button_->app_menu(); }
return web_app_frame_toolbar_->web_app_menu_button_->app_menu();
}
SkColor GetActiveColor() { return web_app_frame_toolbar_->active_color_; } SkColor GetActiveColor() { return web_app_frame_toolbar_->active_color_; }
......
...@@ -118,7 +118,7 @@ class ImmersiveModeControllerAshWebAppBrowserTest ...@@ -118,7 +118,7 @@ class ImmersiveModeControllerAshWebAppBrowserTest
WebAppFrameToolbarView* container = WebAppFrameToolbarView* container =
frame_view->web_app_frame_toolbar_for_testing(); frame_view->web_app_frame_toolbar_for_testing();
views::test::InkDropHostViewTestApi ink_drop_api( views::test::InkDropHostViewTestApi ink_drop_api(
container->web_app_menu_button_); container->GetAppMenuButton());
EXPECT_TRUE(container->GetContentSettingContainerForTesting()->layer()); EXPECT_TRUE(container->GetContentSettingContainerForTesting()->layer());
EXPECT_EQ(views::InkDropHostView::InkDropMode::ON, EXPECT_EQ(views::InkDropHostView::InkDropMode::ON,
ink_drop_api.ink_drop_mode()); ink_drop_api.ink_drop_mode());
......
...@@ -5,37 +5,23 @@ ...@@ -5,37 +5,23 @@
#ifndef CHROME_BROWSER_UI_VIEWS_WEB_APPS_WEB_APP_FRAME_TOOLBAR_VIEW_H_ #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_ #define CHROME_BROWSER_UI_VIEWS_WEB_APPS_WEB_APP_FRAME_TOOLBAR_VIEW_H_
#include <memory>
#include <utility> #include <utility>
#include <vector>
#include "base/macros.h" #include "base/macros.h"
#include "base/scoped_observer.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "base/timer/timer.h"
#include "build/build_config.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/frame/toolbar_button_provider.h"
#include "chrome/browser/ui/views/location_bar/content_setting_image_view.h" #include "third_party/skia/include/core/SkColor.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 "ui/views/accessible_pane_view.h" #include "ui/views/accessible_pane_view.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/controls/button/menu_button.h" namespace views {
#include "ui/views/view.h" class View;
#include "ui/views/widget/widget.h" class Widget;
#include "ui/views/widget/widget_observer.h" } // namespace views
class AppMenuButton;
class AvatarToolbarButton;
class BrowserView; class BrowserView;
class ExtensionsToolbarContainer; class ContentSettingImageView;
class PageActionIconContainerView;
class ReloadButton;
class ToolbarButton;
class WebAppMenuButton;
class WebAppOriginText;
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
constexpr int kWebAppMenuMargin = 7; constexpr int kWebAppMenuMargin = 7;
...@@ -43,12 +29,7 @@ constexpr int kWebAppMenuMargin = 7; ...@@ -43,12 +29,7 @@ constexpr int kWebAppMenuMargin = 7;
// A container for web app buttons in the title bar. // A container for web app buttons in the title bar.
class WebAppFrameToolbarView : public views::AccessiblePaneView, class WebAppFrameToolbarView : public views::AccessiblePaneView,
public BrowserActionsContainer::Delegate, public ToolbarButtonProvider {
public ContentSettingImageView::Delegate,
public ImmersiveModeController::Observer,
public PageActionIconView::Delegate,
public ToolbarButtonProvider,
public views::WidgetObserver {
public: public:
static const char kViewClassName[]; static const char kViewClassName[];
...@@ -89,33 +70,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView, ...@@ -89,33 +70,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
SkColor active_color_for_testing() const { return active_color_; } 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: // ToolbarButtonProvider:
BrowserActionsContainer* GetBrowserActionsContainer() override; BrowserActionsContainer* GetBrowserActionsContainer() override;
ToolbarActionView* GetToolbarActionViewForId(const std::string& id) override; ToolbarActionView* GetToolbarActionViewForId(const std::string& id) override;
...@@ -131,9 +85,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView, ...@@ -131,9 +85,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
ToolbarButton* GetBackButton() override; ToolbarButton* GetBackButton() override;
ReloadButton* GetReloadButton() override; ReloadButton* GetReloadButton() override;
// views::WidgetObserver:
void OnWidgetVisibilityChanged(views::Widget* widget, bool visible) override;
static void DisableAnimationForTesting(); static void DisableAnimationForTesting();
views::View* GetLeftContainerForTesting(); views::View* GetLeftContainerForTesting();
views::View* GetRightContainerForTesting(); views::View* GetRightContainerForTesting();
...@@ -141,6 +92,7 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView, ...@@ -141,6 +92,7 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
protected: protected:
// views::AccessiblePaneView: // views::AccessiblePaneView:
const char* GetClassName() const override;
void ChildPreferredSizeChanged(views::View* child) override; void ChildPreferredSizeChanged(views::View* child) override;
private: private:
...@@ -152,12 +104,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView, ...@@ -152,12 +104,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
static constexpr base::TimeDelta kTitlebarAnimationDelay = static constexpr base::TimeDelta kTitlebarAnimationDelay =
base::TimeDelta::FromMilliseconds(750); 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; class ContentSettingsContainer;
views::View* GetContentSettingContainerForTesting(); views::View* GetContentSettingContainerForTesting();
...@@ -168,16 +114,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView, ...@@ -168,16 +114,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
SkColor GetCaptionColor() const; SkColor GetCaptionColor() const;
void UpdateChildrenColor(); 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. // The containing browser view.
BrowserView* const browser_view_; BrowserView* const browser_view_;
...@@ -198,13 +134,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView, ...@@ -198,13 +134,6 @@ class WebAppFrameToolbarView : public views::AccessiblePaneView,
views::View* center_container_ = nullptr; views::View* center_container_ = nullptr;
ToolbarButtonContainer* right_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); 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