Commit a9bed1a2 authored by Charlene Yan's avatar Charlene Yan Committed by Commit Bot

[Tab Groups Collapse] Cleanup call sites to toggle collapsed state.

Add an enum for the origin of the toggle action.
Add collapse for gestures.
Modify closing mode to be on a timer for gestures.

Bug: 2386555
Change-Id: I308a8e88c1c6b27e03be0783489d5c44686184a8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2429445
Commit-Queue: Charlene Yan <cyan@chromium.org>
Reviewed-by: default avatarConnie Wan <connily@chromium.org>
Cr-Commit-Position: refs/heads/master@{#810488}
parent 26fae311
...@@ -385,11 +385,10 @@ void BrowserTabStripController::MoveGroup(const tab_groups::TabGroupId& group, ...@@ -385,11 +385,10 @@ void BrowserTabStripController::MoveGroup(const tab_groups::TabGroupId& group,
bool BrowserTabStripController::ToggleTabGroupCollapsedState( bool BrowserTabStripController::ToggleTabGroupCollapsedState(
const tab_groups::TabGroupId group, const tab_groups::TabGroupId group,
bool from_mouse_event, ToggleTabGroupCollapsedStateOrigin origin) {
bool record_user_action) {
const bool is_currently_collapsed = IsGroupCollapsed(group); const bool is_currently_collapsed = IsGroupCollapsed(group);
if (is_currently_collapsed) { if (is_currently_collapsed) {
if (record_user_action) { if (origin != ToggleTabGroupCollapsedStateOrigin::kImplicitAction) {
base::RecordAction( base::RecordAction(
base::UserMetricsAction("TabGroups_TabGroupHeader_Expanded")); base::UserMetricsAction("TabGroups_TabGroupHeader_Expanded"));
} }
...@@ -414,12 +413,12 @@ bool BrowserTabStripController::ToggleTabGroupCollapsedState( ...@@ -414,12 +413,12 @@ bool BrowserTabStripController::ToggleTabGroupCollapsedState(
model_->ActivateTabAt(GetActiveIndex(), model_->ActivateTabAt(GetActiveIndex(),
{TabStripModel::GestureType::kOther}); {TabStripModel::GestureType::kOther});
} }
if (record_user_action) { if (origin != ToggleTabGroupCollapsedStateOrigin::kImplicitAction) {
base::RecordAction( base::RecordAction(
base::UserMetricsAction("TabGroups_TabGroupHeader_Collapsed")); base::UserMetricsAction("TabGroups_TabGroupHeader_Collapsed"));
} }
} }
tabstrip_->ToggleTabGroup(group, !is_currently_collapsed, from_mouse_event); tabstrip_->ToggleTabGroup(group, !is_currently_collapsed, origin);
std::vector<int> tabs_in_group = ListTabsInGroup(group); std::vector<int> tabs_in_group = ListTabsInGroup(group);
for (int i : tabs_in_group) { for (int i : tabs_in_group) {
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/frame/immersive_mode_controller.h" #include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
#include "chrome/browser/ui/views/tabs/tab_strip_controller.h" #include "chrome/browser/ui/views/tabs/tab_strip_controller.h"
#include "chrome/browser/ui/views/tabs/tab_strip_types.h"
#include "components/prefs/pref_change_registrar.h" #include "components/prefs/pref_change_registrar.h"
#include "components/tab_groups/tab_group_color.h" #include "components/tab_groups/tab_group_color.h"
#include "ui/base/models/simple_menu_model.h" #include "ui/base/models/simple_menu_model.h"
...@@ -81,9 +82,9 @@ class BrowserTabStripController : public TabStripController, ...@@ -81,9 +82,9 @@ class BrowserTabStripController : public TabStripController,
void RemoveTabFromGroup(int model_index) override; void RemoveTabFromGroup(int model_index) override;
void MoveTab(int start_index, int final_index) override; void MoveTab(int start_index, int final_index) override;
void MoveGroup(const tab_groups::TabGroupId& group, int final_index) override; void MoveGroup(const tab_groups::TabGroupId& group, int final_index) override;
bool ToggleTabGroupCollapsedState(const tab_groups::TabGroupId group, bool ToggleTabGroupCollapsedState(
bool from_mouse_event, const tab_groups::TabGroupId group,
bool record_user_action) override; ToggleTabGroupCollapsedStateOrigin origin) override;
void ShowContextMenuForTab(Tab* tab, void ShowContextMenuForTab(Tab* tab,
const gfx::Point& p, const gfx::Point& p,
ui::MenuSourceType source_type) override; ui::MenuSourceType source_type) override;
......
...@@ -54,8 +54,7 @@ void FakeBaseTabStripController::MoveGroup(const tab_groups::TabGroupId& group, ...@@ -54,8 +54,7 @@ void FakeBaseTabStripController::MoveGroup(const tab_groups::TabGroupId& group,
bool FakeBaseTabStripController::ToggleTabGroupCollapsedState( bool FakeBaseTabStripController::ToggleTabGroupCollapsedState(
const tab_groups::TabGroupId group, const tab_groups::TabGroupId group,
bool from_mouse_event, ToggleTabGroupCollapsedStateOrigin origin) {
bool record_user_action) {
fake_group_data_ = tab_groups::TabGroupVisualData( fake_group_data_ = tab_groups::TabGroupVisualData(
fake_group_data_.title(), fake_group_data_.color(), fake_group_data_.title(), fake_group_data_.color(),
!fake_group_data_.is_collapsed()); !fake_group_data_.is_collapsed());
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/optional.h" #include "base/optional.h"
#include "chrome/browser/ui/views/tabs/tab_strip_controller.h" #include "chrome/browser/ui/views/tabs/tab_strip_controller.h"
#include "chrome/browser/ui/views/tabs/tab_strip_types.h"
#include "components/tab_groups/tab_group_id.h" #include "components/tab_groups/tab_group_id.h"
#include "components/tab_groups/tab_group_visual_data.h" #include "components/tab_groups/tab_group_visual_data.h"
#include "ui/base/models/list_selection_model.h" #include "ui/base/models/list_selection_model.h"
...@@ -50,9 +51,9 @@ class FakeBaseTabStripController : public TabStripController { ...@@ -50,9 +51,9 @@ class FakeBaseTabStripController : public TabStripController {
void CloseTab(int index) override; void CloseTab(int index) override;
void MoveTab(int from_index, int to_index) override; void MoveTab(int from_index, int to_index) override;
void MoveGroup(const tab_groups::TabGroupId&, int to_index) override; void MoveGroup(const tab_groups::TabGroupId&, int to_index) override;
bool ToggleTabGroupCollapsedState(const tab_groups::TabGroupId group, bool ToggleTabGroupCollapsedState(
bool from_mouse_event, const tab_groups::TabGroupId group,
bool record_user_action) override; ToggleTabGroupCollapsedStateOrigin origin) override;
void ShowContextMenuForTab(Tab* tab, void ShowContextMenuForTab(Tab* tab,
const gfx::Point& p, const gfx::Point& p,
ui::MenuSourceType source_type) override; ui::MenuSourceType source_type) override;
......
...@@ -2278,7 +2278,7 @@ IN_PROC_BROWSER_TEST_P( ...@@ -2278,7 +2278,7 @@ IN_PROC_BROWSER_TEST_P(
EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(),
testing::ElementsAre(1, 2)); testing::ElementsAre(1, 2));
EXPECT_FALSE(model->IsGroupCollapsed(group)); EXPECT_FALSE(model->IsGroupCollapsed(group));
tab_strip->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip->controller()->ToggleTabGroupCollapsedState(group);
StopAnimating(tab_strip); StopAnimating(tab_strip);
EXPECT_TRUE(model->IsGroupCollapsed(group)); EXPECT_TRUE(model->IsGroupCollapsed(group));
...@@ -2313,7 +2313,7 @@ IN_PROC_BROWSER_TEST_P( ...@@ -2313,7 +2313,7 @@ IN_PROC_BROWSER_TEST_P(
EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(),
testing::ElementsAre(1, 2)); testing::ElementsAre(1, 2));
EXPECT_FALSE(model->IsGroupCollapsed(group)); EXPECT_FALSE(model->IsGroupCollapsed(group));
tab_strip->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip->controller()->ToggleTabGroupCollapsedState(group);
StopAnimating(tab_strip); StopAnimating(tab_strip);
EXPECT_TRUE(model->IsGroupCollapsed(group)); EXPECT_TRUE(model->IsGroupCollapsed(group));
...@@ -2344,7 +2344,7 @@ IN_PROC_BROWSER_TEST_P( ...@@ -2344,7 +2344,7 @@ IN_PROC_BROWSER_TEST_P(
EXPECT_FALSE(model->IsGroupCollapsed(group)); EXPECT_FALSE(model->IsGroupCollapsed(group));
EnsureFocusToTabStrip(tab_strip); EnsureFocusToTabStrip(tab_strip);
tab_strip->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip->controller()->ToggleTabGroupCollapsedState(group);
StopAnimating(tab_strip); StopAnimating(tab_strip);
EXPECT_TRUE(model->IsGroupCollapsed(group)); EXPECT_TRUE(model->IsGroupCollapsed(group));
...@@ -2378,7 +2378,7 @@ IN_PROC_BROWSER_TEST_P( ...@@ -2378,7 +2378,7 @@ IN_PROC_BROWSER_TEST_P(
AddTabsAndResetBrowser(browser(), 3); AddTabsAndResetBrowser(browser(), 3);
tab_groups::TabGroupId group1 = model->AddToNewGroup({0, 1}); tab_groups::TabGroupId group1 = model->AddToNewGroup({0, 1});
EXPECT_FALSE(model->IsGroupCollapsed(group1)); EXPECT_FALSE(model->IsGroupCollapsed(group1));
tab_strip->controller()->ToggleTabGroupCollapsedState(group1, false); tab_strip->controller()->ToggleTabGroupCollapsedState(group1);
StopAnimating(tab_strip); StopAnimating(tab_strip);
EXPECT_TRUE(model->IsGroupCollapsed(group1)); EXPECT_TRUE(model->IsGroupCollapsed(group1));
tab_groups::TabGroupId group2 = model->AddToNewGroup({2, 3}); tab_groups::TabGroupId group2 = model->AddToNewGroup({2, 3});
...@@ -2433,7 +2433,7 @@ IN_PROC_BROWSER_TEST_P( ...@@ -2433,7 +2433,7 @@ IN_PROC_BROWSER_TEST_P(
tab_groups::TabGroupId group2 = model->AddToNewGroup({2, 3}); tab_groups::TabGroupId group2 = model->AddToNewGroup({2, 3});
EXPECT_FALSE(model->IsGroupCollapsed(group2)); EXPECT_FALSE(model->IsGroupCollapsed(group2));
tab_strip->controller()->ToggleTabGroupCollapsedState(group2, false); tab_strip->controller()->ToggleTabGroupCollapsedState(group2);
StopAnimating(tab_strip); StopAnimating(tab_strip);
EXPECT_TRUE(model->IsGroupCollapsed(group2)); EXPECT_TRUE(model->IsGroupCollapsed(group2));
...@@ -2480,7 +2480,7 @@ IN_PROC_BROWSER_TEST_P( ...@@ -2480,7 +2480,7 @@ IN_PROC_BROWSER_TEST_P(
AddTabsAndResetBrowser(browser(), 2); AddTabsAndResetBrowser(browser(), 2);
tab_groups::TabGroupId group = model->AddToNewGroup({0, 1}); tab_groups::TabGroupId group = model->AddToNewGroup({0, 1});
EXPECT_FALSE(model->IsGroupCollapsed(group)); EXPECT_FALSE(model->IsGroupCollapsed(group));
tab_strip->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip->controller()->ToggleTabGroupCollapsedState(group);
StopAnimating(tab_strip); StopAnimating(tab_strip);
EXPECT_TRUE(model->IsGroupCollapsed(group)); EXPECT_TRUE(model->IsGroupCollapsed(group));
......
...@@ -121,7 +121,7 @@ bool TabGroupHeader::OnKeyPressed(const ui::KeyEvent& event) { ...@@ -121,7 +121,7 @@ bool TabGroupHeader::OnKeyPressed(const ui::KeyEvent& event) {
// editor bubble to toggling the collapsed state of the group. // editor bubble to toggling the collapsed state of the group.
bool successful_toggle = bool successful_toggle =
tab_strip_->controller()->ToggleTabGroupCollapsedState( tab_strip_->controller()->ToggleTabGroupCollapsedState(
group().value(), false); group().value(), ToggleTabGroupCollapsedStateOrigin::kKeyboard);
if (successful_toggle) { if (successful_toggle) {
#if defined(OS_WIN) #if defined(OS_WIN)
NotifyAccessibilityEvent(ax::mojom::Event::kSelection, true); NotifyAccessibilityEvent(ax::mojom::Event::kSelection, true);
...@@ -186,7 +186,7 @@ void TabGroupHeader::OnMouseReleased(const ui::MouseEvent& event) { ...@@ -186,7 +186,7 @@ void TabGroupHeader::OnMouseReleased(const ui::MouseEvent& event) {
if (event.IsLeftMouseButton() && !dragging()) { if (event.IsLeftMouseButton() && !dragging()) {
bool successful_toggle = bool successful_toggle =
tab_strip_->controller()->ToggleTabGroupCollapsedState( tab_strip_->controller()->ToggleTabGroupCollapsedState(
group().value(), true); group().value(), ToggleTabGroupCollapsedStateOrigin::kMouse);
if (successful_toggle) if (successful_toggle)
LogCollapseTime(); LogCollapseTime();
} }
...@@ -217,11 +217,26 @@ void TabGroupHeader::OnGestureEvent(ui::GestureEvent* event) { ...@@ -217,11 +217,26 @@ void TabGroupHeader::OnGestureEvent(ui::GestureEvent* event) {
tab_strip_->UpdateHoverCard(nullptr); tab_strip_->UpdateHoverCard(nullptr);
switch (event->type()) { switch (event->type()) {
case ui::ET_GESTURE_TAP: { case ui::ET_GESTURE_TAP: {
if (base::FeatureList::IsEnabled(features::kTabGroupsCollapse)) {
// The collapse feature changes the behavior from showing the
// editor bubble to toggling the collapsed state of the group.
bool successful_toggle =
tab_strip_->controller()->ToggleTabGroupCollapsedState(
group().value(), ToggleTabGroupCollapsedStateOrigin::kGesture);
if (successful_toggle)
LogCollapseTime();
} else {
editor_bubble_tracker_.Opened(TabGroupEditorBubbleView::Show(
tab_strip_->controller()->GetBrowser(), group().value(), this));
}
break;
}
case ui::ET_GESTURE_LONG_TAP: {
editor_bubble_tracker_.Opened(TabGroupEditorBubbleView::Show( editor_bubble_tracker_.Opened(TabGroupEditorBubbleView::Show(
tab_strip_->controller()->GetBrowser(), group().value(), this)); tab_strip_->controller()->GetBrowser(), group().value(), this));
break; break;
} }
case ui::ET_GESTURE_SCROLL_BEGIN: { case ui::ET_GESTURE_SCROLL_BEGIN: {
tab_strip_->MaybeStartDrag(this, *event, tab_strip_->GetSelectionModel()); tab_strip_->MaybeStartDrag(this, *event, tab_strip_->GetSelectionModel());
break; break;
......
...@@ -1383,7 +1383,8 @@ void TabStrip::AddTabToGroup(base::Optional<tab_groups::TabGroupId> group, ...@@ -1383,7 +1383,8 @@ void TabStrip::AddTabToGroup(base::Optional<tab_groups::TabGroupId> group,
// active tab is not in the group. // active tab is not in the group.
if (model_index == selected_tabs_.active() && group.has_value() && if (model_index == selected_tabs_.active() && group.has_value() &&
controller()->IsGroupCollapsed(group.value())) { controller()->IsGroupCollapsed(group.value())) {
controller()->ToggleTabGroupCollapsedState(group.value(), false); controller()->ToggleTabGroupCollapsedState(
group.value(), ToggleTabGroupCollapsedStateOrigin::kImplicitAction);
} }
ExitTabClosingMode(); ExitTabClosingMode();
...@@ -1422,11 +1423,16 @@ void TabStrip::OnGroupVisualsChanged(const tab_groups::TabGroupId& group) { ...@@ -1422,11 +1423,16 @@ void TabStrip::OnGroupVisualsChanged(const tab_groups::TabGroupId& group) {
void TabStrip::ToggleTabGroup(const tab_groups::TabGroupId& group, void TabStrip::ToggleTabGroup(const tab_groups::TabGroupId& group,
bool is_collapsing, bool is_collapsing,
bool from_mouse_event) { ToggleTabGroupCollapsedStateOrigin origin) {
if (is_collapsing && from_mouse_event) { if (is_collapsing && GetWidget()) {
in_tab_close_ = true; in_tab_close_ = true;
if (GetWidget()) if (origin == ToggleTabGroupCollapsedStateOrigin::kMouse) {
AddMessageLoopObserver(); AddMessageLoopObserver();
} else if (origin == ToggleTabGroupCollapsedStateOrigin::kGesture) {
StartResizeLayoutTabsFromTouchTimer();
} else {
return;
}
// The current group header is expanded which is slightly smaller than the // The current group header is expanded which is slightly smaller than the
// size when the header is collapsed. Calculate the size of the header once // size when the header is collapsed. Calculate the size of the header once
...@@ -1593,7 +1599,8 @@ void TabStrip::SetSelection(const ui::ListSelectionModel& new_selection) { ...@@ -1593,7 +1599,8 @@ void TabStrip::SetSelection(const ui::ListSelectionModel& new_selection) {
// If the tab that is about to be activated is in a collapsed group, // If the tab that is about to be activated is in a collapsed group,
// automatically expand the group. // automatically expand the group.
if (controller()->IsGroupCollapsed(new_group)) if (controller()->IsGroupCollapsed(new_group))
controller()->ToggleTabGroupCollapsedState(new_group, false); controller()->ToggleTabGroupCollapsedState(
new_group, ToggleTabGroupCollapsedStateOrigin::kImplicitAction);
UpdateTabGroupVisuals(new_group); UpdateTabGroupVisuals(new_group);
} }
......
...@@ -192,7 +192,7 @@ class TabStrip : public views::AccessiblePaneView, ...@@ -192,7 +192,7 @@ class TabStrip : public views::AccessiblePaneView,
// Handles animations relating to toggling the collapsed state of a group. // Handles animations relating to toggling the collapsed state of a group.
void ToggleTabGroup(const tab_groups::TabGroupId& group, void ToggleTabGroup(const tab_groups::TabGroupId& group,
bool is_collapsing, bool is_collapsing,
bool from_mouse_event); ToggleTabGroupCollapsedStateOrigin origin);
// Updates the ordering of the group header when the whole group is moved. // Updates the ordering of the group header when the whole group is moved.
// Needed to ensure display and focus order of the group header view. // Needed to ensure display and focus order of the group header view.
......
...@@ -118,7 +118,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -118,7 +118,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_groups::TabGroupId group = AddTabToNewGroup(0); tab_groups::TabGroupId group = AddTabToNewGroup(0);
AddTabToExistingGroup(1, group); AddTabToExistingGroup(1, group);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group));
const auto expected = GetWebContentsesInOrder({2, 0, 1}); const auto expected = GetWebContentsesInOrder({2, 0, 1});
...@@ -140,13 +140,13 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -140,13 +140,13 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_groups::TabGroupId group1 = AddTabToNewGroup(0); tab_groups::TabGroupId group1 = AddTabToNewGroup(0);
AddTabToExistingGroup(1, group1); AddTabToExistingGroup(1, group1);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group1)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group1));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group1, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group1);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group1)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group1));
tab_groups::TabGroupId group2 = AddTabToNewGroup(2); tab_groups::TabGroupId group2 = AddTabToNewGroup(2);
AddTabToExistingGroup(3, group2); AddTabToExistingGroup(3, group2);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group2)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group2));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group2, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group2);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group2)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group2));
const auto expected = GetWebContentsesInOrder({0, 1, 4, 2, 3}); const auto expected = GetWebContentsesInOrder({0, 1, 4, 2, 3});
...@@ -244,7 +244,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -244,7 +244,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_groups::TabGroupId group = AddTabToNewGroup(1); tab_groups::TabGroupId group = AddTabToNewGroup(1);
AddTabToExistingGroup(2, group); AddTabToExistingGroup(2, group);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group));
const auto expected = GetWebContentsesInOrder({1, 2, 0}); const auto expected = GetWebContentsesInOrder({1, 2, 0});
...@@ -266,13 +266,13 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -266,13 +266,13 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_groups::TabGroupId group1 = AddTabToNewGroup(1); tab_groups::TabGroupId group1 = AddTabToNewGroup(1);
AddTabToExistingGroup(2, group1); AddTabToExistingGroup(2, group1);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group1)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group1));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group1, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group1);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group1)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group1));
tab_groups::TabGroupId group2 = AddTabToNewGroup(3); tab_groups::TabGroupId group2 = AddTabToNewGroup(3);
AddTabToExistingGroup(4, group2); AddTabToExistingGroup(4, group2);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group2)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group2));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group2, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group2);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group2)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group2));
const auto expected = GetWebContentsesInOrder({1, 2, 0, 3, 4}); const auto expected = GetWebContentsesInOrder({1, 2, 0, 3, 4});
...@@ -620,7 +620,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ShiftCollapsedGroupLeft_Success) { ...@@ -620,7 +620,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ShiftCollapsedGroupLeft_Success) {
tab_groups::TabGroupId group = AddTabToNewGroup(1); tab_groups::TabGroupId group = AddTabToNewGroup(1);
AddTabToExistingGroup(2, group); AddTabToExistingGroup(2, group);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group));
const auto expected = GetWebContentsesInOrder({1, 2, 0}); const auto expected = GetWebContentsesInOrder({1, 2, 0});
...@@ -638,13 +638,13 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -638,13 +638,13 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_groups::TabGroupId group1 = AddTabToNewGroup(2); tab_groups::TabGroupId group1 = AddTabToNewGroup(2);
AddTabToExistingGroup(3, group1); AddTabToExistingGroup(3, group1);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group1)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group1));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group1, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group1);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group1)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group1));
tab_groups::TabGroupId group2 = AddTabToNewGroup(0); tab_groups::TabGroupId group2 = AddTabToNewGroup(0);
AddTabToExistingGroup(1, group2); AddTabToExistingGroup(1, group2);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group2)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group2));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group2, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group2);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group2)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group2));
const auto expected = GetWebContentsesInOrder({2, 3, 0, 1, 4}); const auto expected = GetWebContentsesInOrder({2, 3, 0, 1, 4});
...@@ -660,7 +660,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -660,7 +660,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_groups::TabGroupId group = AddTabToNewGroup(0); tab_groups::TabGroupId group = AddTabToNewGroup(0);
AddTabToExistingGroup(1, group); AddTabToExistingGroup(1, group);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group));
const auto contentses = GetWebContentses(); const auto contentses = GetWebContentses();
...@@ -679,7 +679,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -679,7 +679,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_groups::TabGroupId group = AddTabToNewGroup(1); tab_groups::TabGroupId group = AddTabToNewGroup(1);
AddTabToExistingGroup(2, group); AddTabToExistingGroup(2, group);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group));
const auto contentses = GetWebContentses(); const auto contentses = GetWebContentses();
...@@ -696,7 +696,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ShiftCollapsedGroupRight_Success) { ...@@ -696,7 +696,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ShiftCollapsedGroupRight_Success) {
tab_groups::TabGroupId group = AddTabToNewGroup(0); tab_groups::TabGroupId group = AddTabToNewGroup(0);
AddTabToExistingGroup(1, group); AddTabToExistingGroup(1, group);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group));
const auto expected = GetWebContentsesInOrder({2, 0, 1}); const auto expected = GetWebContentsesInOrder({2, 0, 1});
...@@ -714,13 +714,13 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -714,13 +714,13 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_groups::TabGroupId group1 = AddTabToNewGroup(0); tab_groups::TabGroupId group1 = AddTabToNewGroup(0);
AddTabToExistingGroup(1, group1); AddTabToExistingGroup(1, group1);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group1)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group1));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group1, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group1);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group1)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group1));
tab_groups::TabGroupId group2 = AddTabToNewGroup(2); tab_groups::TabGroupId group2 = AddTabToNewGroup(2);
AddTabToExistingGroup(3, group2); AddTabToExistingGroup(3, group2);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group2)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group2));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group2, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group2);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group2)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group2));
const auto expected = GetWebContentsesInOrder({2, 3, 0, 1, 4}); const auto expected = GetWebContentsesInOrder({2, 3, 0, 1, 4});
...@@ -736,7 +736,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -736,7 +736,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_groups::TabGroupId group = AddTabToNewGroup(1); tab_groups::TabGroupId group = AddTabToNewGroup(1);
AddTabToExistingGroup(2, group); AddTabToExistingGroup(2, group);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group));
const auto contentses = GetWebContentses(); const auto contentses = GetWebContentses();
...@@ -753,7 +753,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -753,7 +753,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_strip()->SelectTab(tab_strip()->tab_at(0), GetDummyEvent()); tab_strip()->SelectTab(tab_strip()->tab_at(0), GetDummyEvent());
ASSERT_EQ(0, tab_strip()->controller()->GetActiveIndex()); ASSERT_EQ(0, tab_strip()->controller()->GetActiveIndex());
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
EXPECT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group)); EXPECT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group));
EXPECT_EQ(1, tab_strip()->controller()->GetActiveIndex()); EXPECT_EQ(1, tab_strip()->controller()->GetActiveIndex());
...@@ -767,7 +767,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -767,7 +767,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_strip()->SelectTab(tab_strip()->tab_at(1), GetDummyEvent()); tab_strip()->SelectTab(tab_strip()->tab_at(1), GetDummyEvent());
ASSERT_EQ(1, tab_strip()->controller()->GetActiveIndex()); ASSERT_EQ(1, tab_strip()->controller()->GetActiveIndex());
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
EXPECT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group)); EXPECT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group));
EXPECT_EQ(0, tab_strip()->controller()->GetActiveIndex()); EXPECT_EQ(0, tab_strip()->controller()->GetActiveIndex());
...@@ -782,7 +782,7 @@ IN_PROC_BROWSER_TEST_F( ...@@ -782,7 +782,7 @@ IN_PROC_BROWSER_TEST_F(
tab_strip()->SelectTab(tab_strip()->tab_at(1), GetDummyEvent()); tab_strip()->SelectTab(tab_strip()->tab_at(1), GetDummyEvent());
ASSERT_EQ(1, tab_strip()->controller()->GetActiveIndex()); ASSERT_EQ(1, tab_strip()->controller()->GetActiveIndex());
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
EXPECT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group)); EXPECT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group));
EXPECT_EQ(1, tab_strip()->controller()->GetActiveIndex()); EXPECT_EQ(1, tab_strip()->controller()->GetActiveIndex());
...@@ -794,7 +794,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, CollapseGroup_Fails) { ...@@ -794,7 +794,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, CollapseGroup_Fails) {
tab_groups::TabGroupId group = AddTabToNewGroup(0); tab_groups::TabGroupId group = AddTabToNewGroup(0);
tab_strip_model()->AddToExistingGroup({1}, group); tab_strip_model()->AddToExistingGroup({1}, group);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
EXPECT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); EXPECT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
} }
...@@ -805,7 +805,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest, ...@@ -805,7 +805,7 @@ IN_PROC_BROWSER_TEST_F(TabStripBrowsertest,
tab_groups::TabGroupId group = AddTabToNewGroup(0); tab_groups::TabGroupId group = AddTabToNewGroup(0);
ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_FALSE(tab_strip()->controller()->IsGroupCollapsed(group));
tab_strip()->controller()->ToggleTabGroupCollapsedState(group, false); tab_strip()->controller()->ToggleTabGroupCollapsedState(group);
ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group)); ASSERT_TRUE(tab_strip()->controller()->IsGroupCollapsed(group));
ASSERT_EQ(1, tab_strip()->controller()->GetActiveIndex()); ASSERT_EQ(1, tab_strip()->controller()->GetActiveIndex());
......
...@@ -102,8 +102,8 @@ class TabStripController { ...@@ -102,8 +102,8 @@ class TabStripController {
// not successfully switched. // not successfully switched.
virtual bool ToggleTabGroupCollapsedState( virtual bool ToggleTabGroupCollapsedState(
const tab_groups::TabGroupId group, const tab_groups::TabGroupId group,
bool from_mouse_event, ToggleTabGroupCollapsedStateOrigin origin =
bool record_user_action = false) = 0; ToggleTabGroupCollapsedStateOrigin::kImplicitAction) = 0;
// Shows a context menu for the tab at the specified point in screen coords. // Shows a context menu for the tab at the specified point in screen coords.
virtual void ShowContextMenuForTab(Tab* tab, virtual void ShowContextMenuForTab(Tab* tab,
......
...@@ -22,4 +22,15 @@ enum CloseTabSource { ...@@ -22,4 +22,15 @@ enum CloseTabSource {
CLOSE_TAB_FROM_TOUCH, CLOSE_TAB_FROM_TOUCH,
}; };
// Source of the call to ToggleTabGroup(). The source of the call can trigger
// different behaviors such as logging and different animations. Tests will
// generally use |kImplicitAction| unless testing a particular code path.
enum class ToggleTabGroupCollapsedStateOrigin {
kImplicitAction,
kMouse,
kKeyboard,
kGesture
};
#endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_TYPES_H_ #endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_TYPES_H_
...@@ -504,7 +504,8 @@ TEST_P(TabStripTest, GroupedTabSlotVisibility) { ...@@ -504,7 +504,8 @@ TEST_P(TabStripTest, GroupedTabSlotVisibility) {
CompleteAnimationAndLayout(); CompleteAnimationAndLayout();
ASSERT_FALSE(controller_->IsGroupCollapsed(group2.value())); ASSERT_FALSE(controller_->IsGroupCollapsed(group2.value()));
EXPECT_TRUE(tab_strip_->group_header(group2.value())->GetVisible()); EXPECT_TRUE(tab_strip_->group_header(group2.value())->GetVisible());
controller_->ToggleTabGroupCollapsedState(group2.value(), false, false); controller_->ToggleTabGroupCollapsedState(
group2.value(), ToggleTabGroupCollapsedStateOrigin::kImplicitAction);
ASSERT_TRUE(controller_->IsGroupCollapsed(group2.value())); ASSERT_TRUE(controller_->IsGroupCollapsed(group2.value()));
EXPECT_TRUE(tab_strip_->group_header(group2.value())->GetVisible()); EXPECT_TRUE(tab_strip_->group_header(group2.value())->GetVisible());
} }
......
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