Commit 1fed81d7 authored by Caroline Rising's avatar Caroline Rising Committed by Commit Bot

Move animating layout from extensions container to ToolbarIconContainerView

Fix all related tests.

Bug: 1008444
Change-Id: Idff548f6f9547960cb81c931e72015578bd8cf29
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1826991
Commit-Queue: Caroline Rising <corising@chromium.org>
Reviewed-by: default avatarDana Fried <dfried@chromium.org>
Cr-Commit-Position: refs/heads/master@{#703455}
parent 931ce8c7
...@@ -82,6 +82,7 @@ ...@@ -82,6 +82,7 @@
#include "ui/views/bubble/bubble_frame_view.h" #include "ui/views/bubble/bubble_frame_view.h"
#include "ui/views/controls/button/button.h" #include "ui/views/controls/button/button.h"
#include "ui/views/controls/button/label_button.h" #include "ui/views/controls/button/label_button.h"
#include "ui/views/layout/animating_layout_manager.h"
#include "ui/views/test/widget_test.h" #include "ui/views/test/widget_test.h"
#include "ui/views/window/dialog_client_view.h" #include "ui/views/window/dialog_client_view.h"
...@@ -139,6 +140,36 @@ class PersonalDataLoadedObserverMock : public PersonalDataManagerObserver { ...@@ -139,6 +140,36 @@ class PersonalDataLoadedObserverMock : public PersonalDataManagerObserver {
MOCK_METHOD0(OnPersonalDataChanged, void()); MOCK_METHOD0(OnPersonalDataChanged, void());
}; };
// Helper to wait until the hover card widget is visible.
class AnimatingLayoutWaiter : public views::AnimatingLayoutManager::Observer {
public:
explicit AnimatingLayoutWaiter(
views::AnimatingLayoutManager* animating_layout)
: animating_layout_(animating_layout) {
observer_.Add(animating_layout_);
}
void Wait() {
if (!animating_layout_->is_animating())
return;
run_loop_.Run();
}
// views::AnimatingLayoutManager overrides:
void OnLayoutIsAnimatingChanged(views::AnimatingLayoutManager* source,
bool is_animating) override {
if (!is_animating)
run_loop_.Quit();
}
private:
views::AnimatingLayoutManager* const animating_layout_;
ScopedObserver<views::AnimatingLayoutManager,
views::AnimatingLayoutManager::Observer>
observer_{this};
base::RunLoop run_loop_;
};
class LocalCardMigrationBrowserTest class LocalCardMigrationBrowserTest
: public SyncTest, : public SyncTest,
public LocalCardMigrationManager::ObserverForTest { public LocalCardMigrationManager::ObserverForTest {
...@@ -323,6 +354,15 @@ class LocalCardMigrationBrowserTest ...@@ -323,6 +354,15 @@ class LocalCardMigrationBrowserTest
DialogEvent::RECEIVED_GET_UPLOAD_DETAILS_RESPONSE}); DialogEvent::RECEIVED_GET_UPLOAD_DETAILS_RESPONSE});
FillAndSubmitFormWithCard(card_number); FillAndSubmitFormWithCard(card_number);
WaitForObservedEvent(); WaitForObservedEvent();
if (base::FeatureList::IsEnabled(
features::kAutofillEnableToolbarStatusChip)) {
AnimatingLayoutWaiter waiter(static_cast<views::AnimatingLayoutManager*>(
BrowserView::GetBrowserViewForBrowser(browser())
->toolbar()
->toolbar_account_icon_container()
->GetLayoutManager()));
waiter.Wait();
}
} }
void ClickOnSaveButtonAndWaitForMigrationResults() { void ClickOnSaveButtonAndWaitForMigrationResults() {
......
...@@ -77,6 +77,7 @@ ...@@ -77,6 +77,7 @@
#include "ui/views/controls/combobox/combobox.h" #include "ui/views/controls/combobox/combobox.h"
#include "ui/views/controls/styled_label.h" #include "ui/views/controls/styled_label.h"
#include "ui/views/controls/textfield/textfield.h" #include "ui/views/controls/textfield/textfield.h"
#include "ui/views/layout/animating_layout_manager.h"
#include "ui/views/test/widget_test.h" #include "ui/views/test/widget_test.h"
#include "ui/views/widget/widget.h" #include "ui/views/widget/widget.h"
#include "ui/views/window/dialog_client_view.h" #include "ui/views/window/dialog_client_view.h"
...@@ -123,6 +124,36 @@ const double kFakeGeolocationLatitude = 1.23; ...@@ -123,6 +124,36 @@ const double kFakeGeolocationLatitude = 1.23;
const double kFakeGeolocationLongitude = 4.56; const double kFakeGeolocationLongitude = 4.56;
} // namespace } // namespace
// Helper to wait until the hover card widget is visible.
class AnimatingLayoutWaiter : public views::AnimatingLayoutManager::Observer {
public:
explicit AnimatingLayoutWaiter(
views::AnimatingLayoutManager* animating_layout)
: animating_layout_(animating_layout) {
observer_.Add(animating_layout_);
}
void Wait() {
if (!animating_layout_->is_animating())
return;
run_loop_.Run();
}
// views::AnimatingLayoutManager overrides:
void OnLayoutIsAnimatingChanged(views::AnimatingLayoutManager* source,
bool is_animating) override {
if (!is_animating)
run_loop_.Quit();
}
private:
views::AnimatingLayoutManager* const animating_layout_;
ScopedObserver<views::AnimatingLayoutManager,
views::AnimatingLayoutManager::Observer>
observer_{this};
base::RunLoop run_loop_;
};
namespace autofill { namespace autofill {
class SaveCardBubbleViewsFullFormBrowserTest class SaveCardBubbleViewsFullFormBrowserTest
...@@ -349,6 +380,7 @@ class SaveCardBubbleViewsFullFormBrowserTest ...@@ -349,6 +380,7 @@ class SaveCardBubbleViewsFullFormBrowserTest
ResetEventWaiterForSequence({DialogEvent::OFFERED_LOCAL_SAVE}); ResetEventWaiterForSequence({DialogEvent::OFFERED_LOCAL_SAVE});
SubmitForm(); SubmitForm();
WaitForObservedEvent(); WaitForObservedEvent();
WaitForAnimationToEnd();
EXPECT_TRUE(FindViewInBubbleById(DialogViewId::MAIN_CONTENT_VIEW_LOCAL) EXPECT_TRUE(FindViewInBubbleById(DialogViewId::MAIN_CONTENT_VIEW_LOCAL)
->GetVisible()); ->GetVisible());
} }
...@@ -361,6 +393,7 @@ class SaveCardBubbleViewsFullFormBrowserTest ...@@ -361,6 +393,7 @@ class SaveCardBubbleViewsFullFormBrowserTest
DialogEvent::RECEIVED_GET_UPLOAD_DETAILS_RESPONSE}); DialogEvent::RECEIVED_GET_UPLOAD_DETAILS_RESPONSE});
SubmitForm(); SubmitForm();
WaitForObservedEvent(); WaitForObservedEvent();
WaitForAnimationToEnd();
EXPECT_TRUE(FindViewInBubbleById(DialogViewId::MAIN_CONTENT_VIEW_UPLOAD) EXPECT_TRUE(FindViewInBubbleById(DialogViewId::MAIN_CONTENT_VIEW_UPLOAD)
->GetVisible()); ->GetVisible());
EXPECT_TRUE( EXPECT_TRUE(
...@@ -777,6 +810,18 @@ class SaveCardBubbleViewsFullFormBrowserTest ...@@ -777,6 +810,18 @@ class SaveCardBubbleViewsFullFormBrowserTest
void WaitForObservedEvent() { event_waiter_->Wait(); } void WaitForObservedEvent() { event_waiter_->Wait(); }
void WaitForAnimationToEnd() {
if (base::FeatureList::IsEnabled(
features::kAutofillEnableToolbarStatusChip)) {
AnimatingLayoutWaiter waiter(static_cast<views::AnimatingLayoutManager*>(
BrowserView::GetBrowserViewForBrowser(browser())
->toolbar()
->toolbar_account_icon_container()
->GetLayoutManager()));
waiter.Wait();
}
}
network::TestURLLoaderFactory* test_url_loader_factory() { network::TestURLLoaderFactory* test_url_loader_factory() {
return &test_url_loader_factory_; return &test_url_loader_factory_;
} }
...@@ -2681,7 +2726,6 @@ IN_PROC_BROWSER_TEST_F(SaveCardBubbleViewsFullFormBrowserTestForStatusChip, ...@@ -2681,7 +2726,6 @@ IN_PROC_BROWSER_TEST_F(SaveCardBubbleViewsFullFormBrowserTestForStatusChip,
ClickingOnCreditCardIconInStatusChipReshowsBubble) { ClickingOnCreditCardIconInStatusChipReshowsBubble) {
FillForm(); FillForm();
SubmitFormAndWaitForCardLocalSaveBubble(); SubmitFormAndWaitForCardLocalSaveBubble();
ClickOnCloseButton(); ClickOnCloseButton();
AddEventObserverToController(); AddEventObserverToController();
ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN});
......
...@@ -36,9 +36,8 @@ class AnimatingLayoutWaiter : public views::AnimatingLayoutManager::Observer { ...@@ -36,9 +36,8 @@ class AnimatingLayoutWaiter : public views::AnimatingLayoutManager::Observer {
explicit AnimatingLayoutWaiter( explicit AnimatingLayoutWaiter(
views::AnimatingLayoutManager* animating_layout) views::AnimatingLayoutManager* animating_layout)
: animating_layout_(animating_layout) { : animating_layout_(animating_layout) {
animating_layout_->AddObserver(this); observer_.Add(animating_layout_);
} }
~AnimatingLayoutWaiter() override { animating_layout_->RemoveObserver(this); }
void Wait() { void Wait() {
if (!animating_layout_->is_animating()) if (!animating_layout_->is_animating())
...@@ -55,6 +54,9 @@ class AnimatingLayoutWaiter : public views::AnimatingLayoutManager::Observer { ...@@ -55,6 +54,9 @@ class AnimatingLayoutWaiter : public views::AnimatingLayoutManager::Observer {
private: private:
views::AnimatingLayoutManager* const animating_layout_; views::AnimatingLayoutManager* const animating_layout_;
ScopedObserver<views::AnimatingLayoutManager,
views::AnimatingLayoutManager::Observer>
observer_{this};
base::RunLoop run_loop_; base::RunLoop run_loop_;
}; };
...@@ -120,11 +122,11 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest { ...@@ -120,11 +122,11 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest {
->primary_action_button_for_testing() ->primary_action_button_for_testing()
->button_controller() ->button_controller()
->OnMouseReleased(click_event); ->OnMouseReleased(click_event);
AnimatingLayoutWaiter waiter( AnimatingLayoutWaiter waiter(static_cast<views::AnimatingLayoutManager*>(
BrowserView::GetBrowserViewForBrowser(browser()) BrowserView::GetBrowserViewForBrowser(browser())
->toolbar() ->toolbar()
->extensions_container() ->extensions_container()
->animating_layout_for_testing()); ->GetLayoutManager()));
waiter.Wait(); waiter.Wait();
} }
......
...@@ -13,8 +13,6 @@ ...@@ -13,8 +13,6 @@
#include "chrome/browser/ui/views/extensions/extensions_toolbar_button.h" #include "chrome/browser/ui/views/extensions/extensions_toolbar_button.h"
#include "chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.h" #include "chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.h"
#include "ui/views/layout/animating_layout_manager.h" #include "ui/views/layout/animating_layout_manager.h"
#include "ui/views/layout/flex_layout.h"
#include "ui/views/view_class_properties.h"
#include "ui/views/widget/widget_observer.h" #include "ui/views/widget/widget_observer.h"
struct ExtensionsToolbarContainer::DropInfo { struct ExtensionsToolbarContainer::DropInfo {
...@@ -38,15 +36,6 @@ ExtensionsToolbarContainer::ExtensionsToolbarContainer(Browser* browser) ...@@ -38,15 +36,6 @@ ExtensionsToolbarContainer::ExtensionsToolbarContainer(Browser* browser)
model_(ToolbarActionsModel::Get(browser_->profile())), model_(ToolbarActionsModel::Get(browser_->profile())),
model_observer_(this), model_observer_(this),
extensions_button_(new ExtensionsToolbarButton(browser_, this)) { extensions_button_(new ExtensionsToolbarButton(browser_, this)) {
animating_layout_ =
SetLayoutManager(std::make_unique<views::AnimatingLayoutManager>());
animating_layout_->SetShouldAnimateBounds(true);
auto* flex_layout = animating_layout_->SetTargetLayoutManager(
std::make_unique<views::FlexLayout>());
flex_layout->SetCollapseMargins(true)
.SetIgnoreDefaultMainAxisMargins(true)
.SetDefault(views::kMarginsKey,
gfx::Insets(0, GetLayoutConstant(TOOLBAR_ELEMENT_PADDING)));
model_observer_.Add(model_); model_observer_.Add(model_);
// Do not flip the Extensions icon in RTL. // Do not flip the Extensions icon in RTL.
extensions_button_->EnableCanvasFlippingForRTLUI(false); extensions_button_->EnableCanvasFlippingForRTLUI(false);
...@@ -140,7 +129,8 @@ void ExtensionsToolbarContainer::PopOutAction( ...@@ -140,7 +129,8 @@ void ExtensionsToolbarContainer::PopOutAction(
popped_out_action_ = action; popped_out_action_ = action;
icons_[popped_out_action_->GetId()]->SetVisible(true); icons_[popped_out_action_->GetId()]->SetVisible(true);
ReorderViews(); ReorderViews();
animating_layout_->RunOrQueueAction(closure); static_cast<views::AnimatingLayoutManager*>(GetLayoutManager())
->RunOrQueueAction(closure);
} }
void ExtensionsToolbarContainer::ShowToolbarActionBubble( void ExtensionsToolbarContainer::ShowToolbarActionBubble(
...@@ -153,10 +143,11 @@ void ExtensionsToolbarContainer::ShowToolbarActionBubble( ...@@ -153,10 +143,11 @@ void ExtensionsToolbarContainer::ShowToolbarActionBubble(
anchor_view->SetVisible(true); anchor_view->SetVisible(true);
animating_layout_->RunOrQueueAction( static_cast<views::AnimatingLayoutManager*>(GetLayoutManager())
base::BindOnce(&ExtensionsToolbarContainer::ShowActiveBubble, ->RunOrQueueAction(
weak_ptr_factory_.GetWeakPtr(), anchor_view, base::BindOnce(&ExtensionsToolbarContainer::ShowActiveBubble,
base::Passed(std::move(controller)))); weak_ptr_factory_.GetWeakPtr(), anchor_view,
base::Passed(std::move(controller))));
} }
void ExtensionsToolbarContainer::ShowToolbarActionBubbleAsync( void ExtensionsToolbarContainer::ShowToolbarActionBubbleAsync(
......
...@@ -20,10 +20,6 @@ class ExtensionsToolbarButton; ...@@ -20,10 +20,6 @@ class ExtensionsToolbarButton;
class ToolbarActionViewController; class ToolbarActionViewController;
class ToolbarActionsBarBubbleViews; class ToolbarActionsBarBubbleViews;
namespace views {
class AnimatingLayoutManager;
} // namespace views
// Container for extensions shown in the toolbar. These include pinned // Container for extensions shown in the toolbar. These include pinned
// extensions and extensions that are 'popped out' transitively to show dialogs // extensions and extensions that are 'popped out' transitively to show dialogs
// or be called out to the user. // or be called out to the user.
...@@ -49,10 +45,6 @@ class ExtensionsToolbarContainer : public ToolbarIconContainerView, ...@@ -49,10 +45,6 @@ class ExtensionsToolbarContainer : public ToolbarIconContainerView,
return active_bubble_; return active_bubble_;
} }
views::AnimatingLayoutManager* animating_layout_for_testing() {
return animating_layout_;
}
// ToolbarIconContainerView: // ToolbarIconContainerView:
void UpdateAllIcons() override; void UpdateAllIcons() override;
...@@ -170,8 +162,6 @@ class ExtensionsToolbarContainer : public ToolbarIconContainerView, ...@@ -170,8 +162,6 @@ class ExtensionsToolbarContainer : public ToolbarIconContainerView,
// there is none. // there is none.
std::unique_ptr<DropInfo> drop_info_; std::unique_ptr<DropInfo> drop_info_;
views::AnimatingLayoutManager* animating_layout_ = nullptr;
base::WeakPtrFactory<ExtensionsToolbarContainer> weak_ptr_factory_{this}; base::WeakPtrFactory<ExtensionsToolbarContainer> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(ExtensionsToolbarContainer); DISALLOW_COPY_AND_ASSIGN(ExtensionsToolbarContainer);
......
...@@ -11,17 +11,21 @@ ...@@ -11,17 +11,21 @@
#include "chrome/browser/ui/views/toolbar/toolbar_ink_drop_util.h" #include "chrome/browser/ui/views/toolbar/toolbar_ink_drop_util.h"
#include "ui/native_theme/native_theme.h" #include "ui/native_theme/native_theme.h"
#include "ui/views/background.h" #include "ui/views/background.h"
#include "ui/views/layout/animating_layout_manager.h"
#include "ui/views/layout/flex_layout.h" #include "ui/views/layout/flex_layout.h"
#include "ui/views/view_class_properties.h" #include "ui/views/view_class_properties.h"
ToolbarIconContainerView::ToolbarIconContainerView(bool uses_highlight) ToolbarIconContainerView::ToolbarIconContainerView(bool uses_highlight)
: uses_highlight_(uses_highlight) { : uses_highlight_(uses_highlight) {
auto layout_manager = std::make_unique<views::FlexLayout>(); views::AnimatingLayoutManager* animating_layout =
layout_manager->SetCollapseMargins(true) SetLayoutManager(std::make_unique<views::AnimatingLayoutManager>());
animating_layout->SetShouldAnimateBounds(true);
auto* flex_layout = animating_layout->SetTargetLayoutManager(
std::make_unique<views::FlexLayout>());
flex_layout->SetCollapseMargins(true)
.SetIgnoreDefaultMainAxisMargins(true) .SetIgnoreDefaultMainAxisMargins(true)
.SetDefault(views::kMarginsKey, .SetDefault(views::kMarginsKey,
gfx::Insets(0, GetLayoutConstant(TOOLBAR_ELEMENT_PADDING))); gfx::Insets(0, GetLayoutConstant(TOOLBAR_ELEMENT_PADDING)));
SetLayoutManager(std::move(layout_manager));
} }
ToolbarIconContainerView::~ToolbarIconContainerView() = default; ToolbarIconContainerView::~ToolbarIconContainerView() = default;
...@@ -39,10 +43,8 @@ void ToolbarIconContainerView::AddMainButton(views::Button* main_button) { ...@@ -39,10 +43,8 @@ void ToolbarIconContainerView::AddMainButton(views::Button* main_button) {
void ToolbarIconContainerView::OnHighlightChanged( void ToolbarIconContainerView::OnHighlightChanged(
views::Button* observed_button, views::Button* observed_button,
bool highlighted) { bool highlighted) {
if (highlighted) { if (highlighted)
DCHECK(observed_button); DCHECK(observed_button);
DCHECK(observed_button->GetVisible());
}
// TODO(crbug.com/932818): Pass observed button type to container. // TODO(crbug.com/932818): Pass observed button type to container.
highlighted_button_ = highlighted ? observed_button : nullptr; highlighted_button_ = highlighted ? observed_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