29
29
import org .chromium .base .task .test .ShadowPostTask ;
30
30
import org .chromium .base .test .BaseRobolectricTestRunner ;
31
31
import org .chromium .base .test .util .HistogramWatcher ;
32
+ import org .chromium .chrome .browser .back_press .BackPressManager ;
32
33
import org .chromium .chrome .browser .back_press .MinimizeAppAndCloseTabBackPressHandler ;
33
34
import org .chromium .chrome .browser .back_press .MinimizeAppAndCloseTabBackPressHandler .MinimizeAppAndCloseTabType ;
34
35
import org .chromium .chrome .browser .customtabs .content .CustomTabActivityNavigationController .FinishHandler ;
35
36
import org .chromium .chrome .browser .customtabs .content .CustomTabActivityNavigationController .FinishReason ;
36
37
import org .chromium .chrome .browser .customtabs .shadows .ShadowExternalNavigationDelegateImpl ;
37
38
import org .chromium .chrome .browser .flags .ActivityType ;
39
+ import org .chromium .chrome .browser .flags .CachedFeatureFlags ;
40
+ import org .chromium .chrome .browser .flags .ChromeFeatureList ;
38
41
import org .chromium .chrome .browser .tab .Tab ;
42
+ import org .chromium .components .browser_ui .widget .gesture .BackPressHandler ;
39
43
import org .chromium .url .GURL ;
40
44
45
+ import java .util .Map ;
46
+
41
47
/**
42
48
* Unit tests for {@link CustomTabActivityNavigationController}.
43
49
*
@@ -73,9 +79,40 @@ public void postDelayedTask(@TaskTraits int taskTraits, Runnable task, long dela
73
79
74
80
@ Test
75
81
public void finishes_IfBackNavigationClosesTheOnlyTabWithNoUnloadEvents () {
76
- HistogramWatcher histogramWatcher = HistogramWatcher .newSingleRecordWatcher (
77
- MinimizeAppAndCloseTabBackPressHandler .getHistogramNameForTesting (),
78
- MinimizeAppAndCloseTabType .MINIMIZE_APP );
82
+ CachedFeatureFlags .setFeaturesForTesting (
83
+ Map .of (ChromeFeatureList .BACK_GESTURE_REFACTOR , false ));
84
+ HistogramWatcher histogramWatcher =
85
+ HistogramWatcher .newBuilder ()
86
+ .expectIntRecord (
87
+ MinimizeAppAndCloseTabBackPressHandler .getHistogramNameForTesting (),
88
+ MinimizeAppAndCloseTabType .MINIMIZE_APP )
89
+ .expectIntRecord (BackPressManager .getHistogramForTesting (),
90
+ BackPressManager .getHistogramValueForTesting (
91
+ BackPressHandler .Type .MINIMIZE_APP_AND_CLOSE_TAB ))
92
+ .build ();
93
+ when (mTabController .onlyOneTabRemaining ()).thenReturn (true );
94
+ when (mTabController .dispatchBeforeUnloadIfNeeded ()).thenReturn (false );
95
+ Assert .assertTrue (mNavigationController .getHandleBackPressChangedSupplier ().get ());
96
+
97
+ mNavigationController .navigateOnBack ();
98
+ histogramWatcher .assertExpected ();
99
+ verify (mFinishHandler ).onFinish (eq (FinishReason .USER_NAVIGATION ));
100
+ env .tabProvider .removeTab ();
101
+ Assert .assertNull (env .tabProvider .getTab ());
102
+ Assert .assertFalse (mNavigationController .getHandleBackPressChangedSupplier ().get ());
103
+ }
104
+
105
+ @ Test
106
+ public void finishes_IfBackNavigationClosesTheOnlyTabWithNoUnloadEvents_BackPressRefactor () {
107
+ CachedFeatureFlags .setFeaturesForTesting (
108
+ Map .of (ChromeFeatureList .BACK_GESTURE_REFACTOR , true ));
109
+ HistogramWatcher histogramWatcher =
110
+ HistogramWatcher .newBuilder ()
111
+ .expectIntRecord (
112
+ MinimizeAppAndCloseTabBackPressHandler .getHistogramNameForTesting (),
113
+ MinimizeAppAndCloseTabType .MINIMIZE_APP )
114
+ .expectNoRecords (BackPressManager .getHistogramForTesting ())
115
+ .build ();
79
116
when (mTabController .onlyOneTabRemaining ()).thenReturn (true );
80
117
when (mTabController .dispatchBeforeUnloadIfNeeded ()).thenReturn (false );
81
118
Assert .assertTrue (mNavigationController .getHandleBackPressChangedSupplier ().get ());
@@ -90,9 +127,41 @@ public void finishes_IfBackNavigationClosesTheOnlyTabWithNoUnloadEvents() {
90
127
91
128
@ Test
92
129
public void doesntFinish_IfBackNavigationReplacesTabWithPreviousOne () {
93
- HistogramWatcher histogramWatcher = HistogramWatcher .newSingleRecordWatcher (
94
- MinimizeAppAndCloseTabBackPressHandler .getHistogramNameForTesting (),
95
- MinimizeAppAndCloseTabType .CLOSE_TAB );
130
+ CachedFeatureFlags .setFeaturesForTesting (
131
+ Map .of (ChromeFeatureList .BACK_GESTURE_REFACTOR , false ));
132
+ HistogramWatcher histogramWatcher =
133
+ HistogramWatcher .newBuilder ()
134
+ .expectIntRecord (
135
+ MinimizeAppAndCloseTabBackPressHandler .getHistogramNameForTesting (),
136
+ MinimizeAppAndCloseTabType .CLOSE_TAB )
137
+ .expectIntRecord (BackPressManager .getHistogramForTesting (),
138
+ BackPressManager .getHistogramValueForTesting (
139
+ BackPressHandler .Type .MINIMIZE_APP_AND_CLOSE_TAB ))
140
+ .build ();
141
+ doAnswer ((Answer <Void >) invocation -> {
142
+ env .tabProvider .swapTab (env .prepareTab ());
143
+ return null ;
144
+ })
145
+ .when (mTabController )
146
+ .closeTab ();
147
+ Assert .assertTrue (mNavigationController .getHandleBackPressChangedSupplier ().get ());
148
+
149
+ mNavigationController .navigateOnBack ();
150
+ histogramWatcher .assertExpected ();
151
+ verify (mFinishHandler , never ()).onFinish (anyInt ());
152
+ }
153
+
154
+ @ Test
155
+ public void doesntFinish_IfBackNavigationReplacesTabWithPreviousOne_BackPressRefactor () {
156
+ CachedFeatureFlags .setFeaturesForTesting (
157
+ Map .of (ChromeFeatureList .BACK_GESTURE_REFACTOR , true ));
158
+ HistogramWatcher histogramWatcher =
159
+ HistogramWatcher .newBuilder ()
160
+ .expectIntRecord (
161
+ MinimizeAppAndCloseTabBackPressHandler .getHistogramNameForTesting (),
162
+ MinimizeAppAndCloseTabType .CLOSE_TAB )
163
+ .expectNoRecords (BackPressManager .getHistogramForTesting ())
164
+ .build ();
96
165
doAnswer ((Answer <Void >) invocation -> {
97
166
env .tabProvider .swapTab (env .prepareTab ());
98
167
return null ;
@@ -106,9 +175,37 @@ public void doesntFinish_IfBackNavigationReplacesTabWithPreviousOne() {
106
175
107
176
@ Test
108
177
public void doesntFinish_IfBackNavigationHappensWithBeforeUnloadHandler () {
109
- HistogramWatcher histogramWatcher = HistogramWatcher .newSingleRecordWatcher (
110
- MinimizeAppAndCloseTabBackPressHandler .getHistogramNameForTesting (),
111
- MinimizeAppAndCloseTabType .CLOSE_TAB );
178
+ CachedFeatureFlags .setFeaturesForTesting (
179
+ Map .of (ChromeFeatureList .BACK_GESTURE_REFACTOR , false ));
180
+ HistogramWatcher histogramWatcher =
181
+ HistogramWatcher .newBuilder ()
182
+ .expectIntRecord (
183
+ MinimizeAppAndCloseTabBackPressHandler .getHistogramNameForTesting (),
184
+ MinimizeAppAndCloseTabType .CLOSE_TAB )
185
+ .expectIntRecord (BackPressManager .getHistogramForTesting (),
186
+ BackPressManager .getHistogramValueForTesting (
187
+ BackPressHandler .Type .MINIMIZE_APP_AND_CLOSE_TAB ))
188
+ .build ();
189
+
190
+ when (mTabController .dispatchBeforeUnloadIfNeeded ()).thenReturn (true );
191
+
192
+ mNavigationController .navigateOnBack ();
193
+ histogramWatcher .assertExpected ();
194
+ verify (mFinishHandler , never ()).onFinish (anyInt ());
195
+ }
196
+
197
+ @ Test
198
+ public void doesntFinish_IfBackNavigationHappensWithBeforeUnloadHandler_BackPressRefactor () {
199
+ CachedFeatureFlags .setFeaturesForTesting (
200
+ Map .of (ChromeFeatureList .BACK_GESTURE_REFACTOR , true ));
201
+ HistogramWatcher histogramWatcher =
202
+ HistogramWatcher .newBuilder ()
203
+ .expectIntRecord (
204
+ MinimizeAppAndCloseTabBackPressHandler .getHistogramNameForTesting (),
205
+ MinimizeAppAndCloseTabType .CLOSE_TAB )
206
+ .expectNoRecords (BackPressManager .getHistogramForTesting ())
207
+ .build ();
208
+
112
209
when (mTabController .dispatchBeforeUnloadIfNeeded ()).thenReturn (true );
113
210
114
211
mNavigationController .navigateOnBack ();
0 commit comments