| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/web_contents/aura/overscroll_navigation_overlay.h" | 5 #include "content/browser/web_contents/aura/overscroll_navigation_overlay.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/macros.h" | 11 #include "base/macros.h" |
| 12 #include "base/test/histogram_tester.h" | 12 #include "base/test/histogram_tester.h" |
| 13 #include "base/test/user_action_tester.h" | 13 #include "base/test/user_action_tester.h" |
| 14 #include "content/browser/frame_host/navigation_entry_impl.h" | 14 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 15 #include "content/browser/web_contents/aura/uma_navigation_type.h" | 15 #include "content/browser/web_contents/aura/types.h" |
| 16 #include "content/browser/web_contents/web_contents_view.h" | 16 #include "content/browser/web_contents/web_contents_view.h" |
| 17 #include "content/common/frame_messages.h" | 17 #include "content/common/frame_messages.h" |
| 18 #include "content/common/view_messages.h" | 18 #include "content/common/view_messages.h" |
| 19 #include "content/public/browser/overscroll_configuration.h" | 19 #include "content/public/browser/overscroll_configuration.h" |
| 20 #include "content/public/common/browser_side_navigation_policy.h" | 20 #include "content/public/common/browser_side_navigation_policy.h" |
| 21 #include "content/public/test/mock_render_process_host.h" | 21 #include "content/public/test/mock_render_process_host.h" |
| 22 #include "content/test/test_render_frame_host.h" | 22 #include "content/test/test_render_frame_host.h" |
| 23 #include "content/test/test_render_view_host.h" | 23 #include "content/test/test_render_view_host.h" |
| 24 #include "content/test/test_web_contents.h" | 24 #include "content/test/test_web_contents.h" |
| 25 #include "ui/aura/test/test_windows.h" | 25 #include "ui/aura/test/test_windows.h" |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 GetOverlay()->owa_->SetOverscrollSourceForTesting(source); | 150 GetOverlay()->owa_->SetOverscrollSourceForTesting(source); |
| 151 std::unique_ptr<aura::Window> window( | 151 std::unique_ptr<aura::Window> window( |
| 152 GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds())); | 152 GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds())); |
| 153 bool window_created = !!window; | 153 bool window_created = !!window; |
| 154 if (window_created) { | 154 if (window_created) { |
| 155 histogram_tester()->ExpectTotalCount(kUmaStarted, 1); | 155 histogram_tester()->ExpectTotalCount(kUmaStarted, 1); |
| 156 histogram_tester()->ExpectBucketCount( | 156 histogram_tester()->ExpectBucketCount( |
| 157 kUmaStarted, source == OverscrollSource::TOUCHPAD ? BACK_TOUCHPAD | 157 kUmaStarted, source == OverscrollSource::TOUCHPAD ? BACK_TOUCHPAD |
| 158 : BACK_TOUCHSCREEN, | 158 : BACK_TOUCHSCREEN, |
| 159 1); | 159 1); |
| 160 EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::BACK); | 160 EXPECT_EQ(GetOverlay()->direction_, NavigationDirection::BACK); |
| 161 // Performs BACK navigation, sets image from layer_delegate_ on | 161 // Performs BACK navigation, sets image from layer_delegate_ on |
| 162 // image_delegate_. | 162 // image_delegate_. |
| 163 GetOverlay()->OnOverscrollCompleting(); | 163 GetOverlay()->OnOverscrollCompleting(); |
| 164 window->SetBounds(gfx::Rect(root_window()->bounds().size())); | 164 window->SetBounds(gfx::Rect(root_window()->bounds().size())); |
| 165 | 165 |
| 166 histogram_tester()->ExpectTotalCount(kUmaNavigated, 0); | 166 histogram_tester()->ExpectTotalCount(kUmaNavigated, 0); |
| 167 EXPECT_EQ(0, action_tester()->GetActionCount(kActionNavigatedBack)); | 167 EXPECT_EQ(0, action_tester()->GetActionCount(kActionNavigatedBack)); |
| 168 | 168 |
| 169 GetOverlay()->OnOverscrollCompleted(std::move(window)); | 169 GetOverlay()->OnOverscrollCompleted(std::move(window)); |
| 170 histogram_tester()->ExpectTotalCount(kUmaNavigated, 1); | 170 histogram_tester()->ExpectTotalCount(kUmaNavigated, 1); |
| 171 histogram_tester()->ExpectBucketCount(kUmaNavigated, | 171 histogram_tester()->ExpectBucketCount(kUmaNavigated, |
| 172 source == OverscrollSource::TOUCHPAD | 172 source == OverscrollSource::TOUCHPAD |
| 173 ? BACK_TOUCHPAD | 173 ? BACK_TOUCHPAD |
| 174 : BACK_TOUCHSCREEN, | 174 : BACK_TOUCHSCREEN, |
| 175 1); | 175 1); |
| 176 EXPECT_EQ(1, action_tester()->GetActionCount(kActionNavigatedBack)); | 176 EXPECT_EQ(1, action_tester()->GetActionCount(kActionNavigatedBack)); |
| 177 } else { | 177 } else { |
| 178 EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::NONE); | 178 EXPECT_EQ(GetOverlay()->direction_, NavigationDirection::NONE); |
| 179 histogram_tester()->ExpectTotalCount(kUmaStarted, 0); | 179 histogram_tester()->ExpectTotalCount(kUmaStarted, 0); |
| 180 } | 180 } |
| 181 GetOverlay()->owa_->SetOverscrollSourceForTesting(OverscrollSource::NONE); | 181 GetOverlay()->owa_->SetOverscrollSourceForTesting(OverscrollSource::NONE); |
| 182 if (IsBrowserSideNavigationEnabled()) | 182 if (IsBrowserSideNavigationEnabled()) |
| 183 main_test_rfh()->PrepareForCommit(); | 183 main_test_rfh()->PrepareForCommit(); |
| 184 else | 184 else |
| 185 contents()->GetPendingMainFrame()->PrepareForCommit(); | 185 contents()->GetPendingMainFrame()->PrepareForCommit(); |
| 186 if (window_created) | 186 if (window_created) |
| 187 EXPECT_TRUE(contents()->CrossProcessNavigationPending()); | 187 EXPECT_TRUE(contents()->CrossProcessNavigationPending()); |
| 188 else | 188 else |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 nullptr); | 313 nullptr); |
| 314 } | 314 } |
| 315 | 315 |
| 316 // Tests that if a navigation is cancelled, no navigation is performed and the | 316 // Tests that if a navigation is cancelled, no navigation is performed and the |
| 317 // state is restored. | 317 // state is restored. |
| 318 TEST_F(OverscrollNavigationOverlayTest, CancelNavigation) { | 318 TEST_F(OverscrollNavigationOverlayTest, CancelNavigation) { |
| 319 GetOverlay()->owa_->SetOverscrollSourceForTesting( | 319 GetOverlay()->owa_->SetOverscrollSourceForTesting( |
| 320 OverscrollSource::TOUCHSCREEN); | 320 OverscrollSource::TOUCHSCREEN); |
| 321 std::unique_ptr<aura::Window> window = | 321 std::unique_ptr<aura::Window> window = |
| 322 GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds()); | 322 GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds()); |
| 323 EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::BACK); | 323 EXPECT_EQ(GetOverlay()->direction_, NavigationDirection::BACK); |
| 324 | 324 |
| 325 histogram_tester()->ExpectTotalCount(kUmaCancelled, 0); | 325 histogram_tester()->ExpectTotalCount(kUmaCancelled, 0); |
| 326 EXPECT_EQ(0, action_tester()->GetActionCount(kActionCancelledBack)); | 326 EXPECT_EQ(0, action_tester()->GetActionCount(kActionCancelledBack)); |
| 327 | 327 |
| 328 GetOverlay()->OnOverscrollCancelled(); | 328 GetOverlay()->OnOverscrollCancelled(); |
| 329 EXPECT_FALSE(contents()->CrossProcessNavigationPending()); | 329 EXPECT_FALSE(contents()->CrossProcessNavigationPending()); |
| 330 EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::NONE); | 330 EXPECT_EQ(GetOverlay()->direction_, NavigationDirection::NONE); |
| 331 histogram_tester()->ExpectTotalCount(kUmaCancelled, 1); | 331 histogram_tester()->ExpectTotalCount(kUmaCancelled, 1); |
| 332 histogram_tester()->ExpectBucketCount(kUmaCancelled, BACK_TOUCHSCREEN, 1); | 332 histogram_tester()->ExpectBucketCount(kUmaCancelled, BACK_TOUCHSCREEN, 1); |
| 333 EXPECT_EQ(1, action_tester()->GetActionCount(kActionCancelledBack)); | 333 EXPECT_EQ(1, action_tester()->GetActionCount(kActionCancelledBack)); |
| 334 } | 334 } |
| 335 | 335 |
| 336 TEST_F(OverscrollNavigationOverlayTest, ForwardNavigation) { | 336 TEST_F(OverscrollNavigationOverlayTest, ForwardNavigation) { |
| 337 PerformBackNavigationViaSliderCallbacks(OverscrollSource::TOUCHPAD); | 337 PerformBackNavigationViaSliderCallbacks(OverscrollSource::TOUCHPAD); |
| 338 | 338 |
| 339 GetOverlay()->owa_->SetOverscrollSourceForTesting(OverscrollSource::TOUCHPAD); | 339 GetOverlay()->owa_->SetOverscrollSourceForTesting(OverscrollSource::TOUCHPAD); |
| 340 std::unique_ptr<aura::Window> window = | 340 std::unique_ptr<aura::Window> window = |
| 341 GetOverlay()->CreateFrontWindow(GetBackSlideWindowBounds()); | 341 GetOverlay()->CreateFrontWindow(GetBackSlideWindowBounds()); |
| 342 EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::FORWARD); | 342 EXPECT_EQ(GetOverlay()->direction_, NavigationDirection::FORWARD); |
| 343 histogram_tester()->ExpectTotalCount(kUmaStarted, 2); | 343 histogram_tester()->ExpectTotalCount(kUmaStarted, 2); |
| 344 histogram_tester()->ExpectBucketCount(kUmaStarted, FORWARD_TOUCHPAD, 1); | 344 histogram_tester()->ExpectBucketCount(kUmaStarted, FORWARD_TOUCHPAD, 1); |
| 345 | 345 |
| 346 GetOverlay()->OnOverscrollCompleting(); | 346 GetOverlay()->OnOverscrollCompleting(); |
| 347 histogram_tester()->ExpectTotalCount(kUmaNavigated, 1); | 347 histogram_tester()->ExpectTotalCount(kUmaNavigated, 1); |
| 348 EXPECT_EQ(0, action_tester()->GetActionCount(kActionNavigatedForward)); | 348 EXPECT_EQ(0, action_tester()->GetActionCount(kActionNavigatedForward)); |
| 349 | 349 |
| 350 GetOverlay()->OnOverscrollCompleted(std::move(window)); | 350 GetOverlay()->OnOverscrollCompleted(std::move(window)); |
| 351 histogram_tester()->ExpectTotalCount(kUmaNavigated, 2); | 351 histogram_tester()->ExpectTotalCount(kUmaNavigated, 2); |
| 352 histogram_tester()->ExpectBucketCount(kUmaNavigated, FORWARD_TOUCHPAD, 1); | 352 histogram_tester()->ExpectBucketCount(kUmaNavigated, FORWARD_TOUCHPAD, 1); |
| 353 EXPECT_EQ(1, action_tester()->GetActionCount(kActionNavigatedForward)); | 353 EXPECT_EQ(1, action_tester()->GetActionCount(kActionNavigatedForward)); |
| 354 | 354 |
| 355 EXPECT_TRUE(contents()->CrossProcessNavigationPending()); | 355 EXPECT_TRUE(contents()->CrossProcessNavigationPending()); |
| 356 } | 356 } |
| 357 | 357 |
| 358 TEST_F(OverscrollNavigationOverlayTest, ForwardNavigationCancelled) { | 358 TEST_F(OverscrollNavigationOverlayTest, ForwardNavigationCancelled) { |
| 359 PerformBackNavigationViaSliderCallbacks(OverscrollSource::TOUCHPAD); | 359 PerformBackNavigationViaSliderCallbacks(OverscrollSource::TOUCHPAD); |
| 360 | 360 |
| 361 GetOverlay()->owa_->SetOverscrollSourceForTesting( | 361 GetOverlay()->owa_->SetOverscrollSourceForTesting( |
| 362 OverscrollSource::TOUCHSCREEN); | 362 OverscrollSource::TOUCHSCREEN); |
| 363 std::unique_ptr<aura::Window> window = | 363 std::unique_ptr<aura::Window> window = |
| 364 GetOverlay()->CreateFrontWindow(GetBackSlideWindowBounds()); | 364 GetOverlay()->CreateFrontWindow(GetBackSlideWindowBounds()); |
| 365 EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::FORWARD); | 365 EXPECT_EQ(GetOverlay()->direction_, NavigationDirection::FORWARD); |
| 366 histogram_tester()->ExpectTotalCount(kUmaStarted, 2); | 366 histogram_tester()->ExpectTotalCount(kUmaStarted, 2); |
| 367 histogram_tester()->ExpectBucketCount(kUmaStarted, FORWARD_TOUCHSCREEN, 1); | 367 histogram_tester()->ExpectBucketCount(kUmaStarted, FORWARD_TOUCHSCREEN, 1); |
| 368 | 368 |
| 369 histogram_tester()->ExpectTotalCount(kUmaCancelled, 0); | 369 histogram_tester()->ExpectTotalCount(kUmaCancelled, 0); |
| 370 EXPECT_EQ(0, action_tester()->GetActionCount(kActionCancelledForward)); | 370 EXPECT_EQ(0, action_tester()->GetActionCount(kActionCancelledForward)); |
| 371 | 371 |
| 372 GetOverlay()->OnOverscrollCancelled(); | 372 GetOverlay()->OnOverscrollCancelled(); |
| 373 EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::NONE); | 373 EXPECT_EQ(GetOverlay()->direction_, NavigationDirection::NONE); |
| 374 histogram_tester()->ExpectTotalCount(kUmaCancelled, 1); | 374 histogram_tester()->ExpectTotalCount(kUmaCancelled, 1); |
| 375 histogram_tester()->ExpectBucketCount(kUmaCancelled, FORWARD_TOUCHSCREEN, 1); | 375 histogram_tester()->ExpectBucketCount(kUmaCancelled, FORWARD_TOUCHSCREEN, 1); |
| 376 EXPECT_EQ(1, action_tester()->GetActionCount(kActionCancelledForward)); | 376 EXPECT_EQ(1, action_tester()->GetActionCount(kActionCancelledForward)); |
| 377 } | 377 } |
| 378 | 378 |
| 379 // Performs two navigations. The second navigation is cancelled, tests that the | 379 // Performs two navigations. The second navigation is cancelled, tests that the |
| 380 // first one worked correctly. | 380 // first one worked correctly. |
| 381 TEST_F(OverscrollNavigationOverlayTest, CancelAfterSuccessfulNavigation) { | 381 TEST_F(OverscrollNavigationOverlayTest, CancelAfterSuccessfulNavigation) { |
| 382 PerformBackNavigationViaSliderCallbacks(OverscrollSource::TOUCHPAD); | 382 PerformBackNavigationViaSliderCallbacks(OverscrollSource::TOUCHPAD); |
| 383 GetOverlay()->owa_->SetOverscrollSourceForTesting(OverscrollSource::TOUCHPAD); | 383 GetOverlay()->owa_->SetOverscrollSourceForTesting(OverscrollSource::TOUCHPAD); |
| 384 std::unique_ptr<aura::Window> wrapper = | 384 std::unique_ptr<aura::Window> wrapper = |
| 385 GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds()); | 385 GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds()); |
| 386 EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::BACK); | 386 EXPECT_EQ(GetOverlay()->direction_, NavigationDirection::BACK); |
| 387 histogram_tester()->ExpectTotalCount(kUmaStarted, 2); | 387 histogram_tester()->ExpectTotalCount(kUmaStarted, 2); |
| 388 histogram_tester()->ExpectBucketCount(kUmaStarted, BACK_TOUCHPAD, 2); | 388 histogram_tester()->ExpectBucketCount(kUmaStarted, BACK_TOUCHPAD, 2); |
| 389 | 389 |
| 390 GetOverlay()->OnOverscrollCancelled(); | 390 GetOverlay()->OnOverscrollCancelled(); |
| 391 EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::NONE); | 391 EXPECT_EQ(GetOverlay()->direction_, NavigationDirection::NONE); |
| 392 histogram_tester()->ExpectTotalCount(kUmaCancelled, 1); | 392 histogram_tester()->ExpectTotalCount(kUmaCancelled, 1); |
| 393 histogram_tester()->ExpectBucketCount(kUmaCancelled, BACK_TOUCHPAD, 1); | 393 histogram_tester()->ExpectBucketCount(kUmaCancelled, BACK_TOUCHPAD, 1); |
| 394 EXPECT_EQ(1, action_tester()->GetActionCount(kActionCancelledBack)); | 394 EXPECT_EQ(1, action_tester()->GetActionCount(kActionCancelledBack)); |
| 395 // Navigation metrics shouldn't change. | 395 // Navigation metrics shouldn't change. |
| 396 histogram_tester()->ExpectTotalCount(kUmaNavigated, 1); | 396 histogram_tester()->ExpectTotalCount(kUmaNavigated, 1); |
| 397 EXPECT_EQ(1, action_tester()->GetActionCount(kActionNavigatedBack)); | 397 EXPECT_EQ(1, action_tester()->GetActionCount(kActionNavigatedBack)); |
| 398 | 398 |
| 399 EXPECT_TRUE(contents()->CrossProcessNavigationPending()); | 399 EXPECT_TRUE(contents()->CrossProcessNavigationPending()); |
| 400 NavigationEntry* pending = contents()->GetController().GetPendingEntry(); | 400 NavigationEntry* pending = contents()->GetController().GetPendingEntry(); |
| 401 contents()->GetPendingMainFrame()->SendNavigateWithTransition( | 401 contents()->GetPendingMainFrame()->SendNavigateWithTransition( |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 pending->GetUniqueID(), false, pending->GetURL()); | 443 pending->GetUniqueID(), false, pending->GetURL()); |
| 444 EXPECT_EQ(contents()->GetURL(), third()); | 444 EXPECT_EQ(contents()->GetURL(), third()); |
| 445 } | 445 } |
| 446 | 446 |
| 447 TEST_F(OverscrollNavigationOverlayTest, CloseDuringAnimation) { | 447 TEST_F(OverscrollNavigationOverlayTest, CloseDuringAnimation) { |
| 448 ui::ScopedAnimationDurationScaleMode normal_duration_( | 448 ui::ScopedAnimationDurationScaleMode normal_duration_( |
| 449 ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION); | 449 ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION); |
| 450 GetOverlay()->owa_->OnOverscrollModeChange(OVERSCROLL_NONE, OVERSCROLL_EAST, | 450 GetOverlay()->owa_->OnOverscrollModeChange(OVERSCROLL_NONE, OVERSCROLL_EAST, |
| 451 OverscrollSource::TOUCHSCREEN); | 451 OverscrollSource::TOUCHSCREEN); |
| 452 GetOverlay()->owa_->OnOverscrollComplete(OVERSCROLL_EAST); | 452 GetOverlay()->owa_->OnOverscrollComplete(OVERSCROLL_EAST); |
| 453 EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::BACK); | 453 EXPECT_EQ(GetOverlay()->direction_, NavigationDirection::BACK); |
| 454 OverscrollTestWebContents* test_web_contents = | 454 OverscrollTestWebContents* test_web_contents = |
| 455 static_cast<OverscrollTestWebContents*>(web_contents()); | 455 static_cast<OverscrollTestWebContents*>(web_contents()); |
| 456 test_web_contents->set_is_being_destroyed(true); | 456 test_web_contents->set_is_being_destroyed(true); |
| 457 test_web_contents->ResetContentNativeView(); | 457 test_web_contents->ResetContentNativeView(); |
| 458 test_web_contents->ResetNativeView(); | 458 test_web_contents->ResetNativeView(); |
| 459 // Ensure a clean close. | 459 // Ensure a clean close. |
| 460 } | 460 } |
| 461 | 461 |
| 462 // Tests that we can handle the case when the load completes as soon as the | 462 // Tests that we can handle the case when the load completes as soon as the |
| 463 // navigation is started. | 463 // navigation is started. |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 EXPECT_TRUE(GetOverlay()->window_.get()); | 550 EXPECT_TRUE(GetOverlay()->window_.get()); |
| 551 | 551 |
| 552 // Load the page. | 552 // Load the page. |
| 553 contents()->CommitPendingNavigation(); | 553 contents()->CommitPendingNavigation(); |
| 554 ReceivePaintUpdate(); | 554 ReceivePaintUpdate(); |
| 555 EXPECT_FALSE(GetOverlay()->window_.get()); | 555 EXPECT_FALSE(GetOverlay()->window_.get()); |
| 556 EXPECT_EQ(contents()->GetURL(), first()); | 556 EXPECT_EQ(contents()->GetURL(), first()); |
| 557 } | 557 } |
| 558 | 558 |
| 559 } // namespace content | 559 } // namespace content |
| OLD | NEW |