Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(622)

Unified Diff: content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc

Issue 1076743003: Revert of Refactor GestureNavigation to eliminate code redundancy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
diff --git a/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc b/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
index 3182ca579fd46cec8e0bd1a6e056e6736f800b91..bd9ab089c1c2f788b0bd666b99a807d112fd6dd5 100644
--- a/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
+++ b/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
@@ -4,12 +4,10 @@
#include "content/browser/web_contents/aura/overscroll_navigation_overlay.h"
-#include <vector>
#include "content/browser/frame_host/navigation_entry_impl.h"
#include "content/browser/web_contents/web_contents_view.h"
#include "content/common/frame_messages.h"
#include "content/common/view_messages.h"
-#include "content/public/browser/overscroll_configuration.h"
#include "content/public/test/mock_render_process_host.h"
#include "content/test/test_render_frame_host.h"
#include "content/test/test_render_view_host.h"
@@ -17,62 +15,21 @@
#include "ui/aura/test/test_windows.h"
#include "ui/aura/window.h"
#include "ui/aura_extra/image_window_delegate.h"
-#include "ui/compositor/scoped_animation_duration_scale_mode.h"
-#include "ui/compositor/scoped_layer_animation_settings.h"
-#include "ui/compositor/test/layer_animator_test_controller.h"
-#include "ui/events/gesture_detection/gesture_configuration.h"
-#include "ui/events/test/event_generator.h"
#include "ui/gfx/codec/png_codec.h"
-#include "ui/gfx/frame_time.h"
namespace content {
-// A subclass of TestWebContents that offers a fake content window.
-class OverscrollTestWebContents : public TestWebContents {
- public:
- ~OverscrollTestWebContents() override {}
-
- static OverscrollTestWebContents* Create(
- BrowserContext* browser_context,
- SiteInstance* instance,
- scoped_ptr<aura::Window> fake_native_view,
- scoped_ptr<aura::Window> fake_contents_window) {
- OverscrollTestWebContents* web_contents = new OverscrollTestWebContents(
- browser_context, fake_native_view.Pass(), fake_contents_window.Pass());
- web_contents->Init(WebContents::CreateParams(browser_context, instance));
- web_contents->RenderFrameCreated(web_contents->GetMainFrame());
- return web_contents;
- }
-
- gfx::NativeView GetNativeView() override { return fake_native_view_.get(); }
-
- gfx::NativeView GetContentNativeView() override {
- return fake_contents_window_.get();
- }
-
- protected:
- explicit OverscrollTestWebContents(
- BrowserContext* browser_context,
- scoped_ptr<aura::Window> fake_native_view,
- scoped_ptr<aura::Window> fake_contents_window)
- : TestWebContents(browser_context),
- fake_native_view_(fake_native_view.Pass()),
- fake_contents_window_(fake_contents_window.Pass()) {}
-
- private:
- scoped_ptr<aura::Window> fake_native_view_;
- scoped_ptr<aura::Window> fake_contents_window_;
-};
-
class OverscrollNavigationOverlayTest : public RenderViewHostImplTestHarness {
public:
- OverscrollNavigationOverlayTest()
- : first_("https://www.google.com"),
- second_("http://www.chromium.org"),
- third_("https://www.kernel.org/"),
- fourth_("https://github.com/") {}
+ OverscrollNavigationOverlayTest() {}
+ ~OverscrollNavigationOverlayTest() override {}
- ~OverscrollNavigationOverlayTest() override {}
+ gfx::Image CreateDummyScreenshot() {
+ SkBitmap bitmap;
+ bitmap.allocN32Pixels(1, 1);
+ bitmap.eraseColor(SK_ColorWHITE);
+ return gfx::Image::CreateFrom1xBitmap(bitmap);
+ }
void SetDummyScreenshotOnNavEntry(NavigationEntry* entry) {
SkBitmap bitmap;
@@ -94,77 +51,28 @@
}
void PerformBackNavigationViaSliderCallbacks() {
- // Sets slide direction to BACK, sets screenshot from NavEntry at
+ // Sets slide direction to SLIDE_BACK, sets screenshot from NavEntry at
// offset -1 on layer_delegate_.
- scoped_ptr<aura::Window> window(
- GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds()));
+ delete GetOverlay()->CreateBackLayer();
// Performs BACK navigation, sets image from layer_delegate_ on
// image_delegate_.
- GetOverlay()->OnOverscrollCompleting();
- if (window) {
- EXPECT_TRUE(contents()->cross_navigation_pending());
- EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::BACK);
- } else {
- EXPECT_FALSE(contents()->cross_navigation_pending());
- EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::NONE);
- }
- window->SetBounds(gfx::Rect(root_window()->bounds().size()));
- GetOverlay()->OnOverscrollCompleted(window.Pass());
+ GetOverlay()->OnWindowSlideCompleting();
+ GetOverlay()->OnWindowSlideCompleted(scoped_ptr<ui::Layer>());
}
-
- gfx::Rect GetFrontSlideWindowBounds() {
- gfx::Rect bounds = gfx::Rect(root_window()->bounds().size());
- bounds.Offset(root_window()->bounds().size().width(), 0);
- return bounds;
- }
-
- gfx::Rect GetBackSlideWindowBounds() {
- return gfx::Rect(root_window()->bounds().size());
- }
-
- // Const accessors.
- const GURL first() { return first_; }
- const GURL second() { return second_; }
- const GURL third() { return third_; }
- const GURL fourth() { return fourth_; }
protected:
// RenderViewHostImplTestHarness:
void SetUp() override {
RenderViewHostImplTestHarness::SetUp();
- // Set up the fake web contents native view.
- scoped_ptr<aura::Window> fake_native_view(new aura::Window(nullptr));
- fake_native_view->Init(ui::LAYER_SOLID_COLOR);
- root_window()->AddChild(fake_native_view.get());
- fake_native_view->SetBounds(gfx::Rect(root_window()->bounds().size()));
-
- // Set up the fake contents window.
- scoped_ptr<aura::Window> fake_contents_window(new aura::Window(nullptr));
- fake_contents_window->Init(ui::LAYER_SOLID_COLOR);
- root_window()->AddChild(fake_contents_window.get());
- fake_contents_window->SetBounds(gfx::Rect(root_window()->bounds().size()));
-
- // Replace the default test web contents with our custom class.
- SetContents(OverscrollTestWebContents::Create(
- browser_context(),
- SiteInstance::Create(browser_context()),
- fake_native_view.Pass(),
- fake_contents_window.Pass()));
-
- contents()->NavigateAndCommit(first());
+ const GURL first("https://www.google.com");
+ contents()->NavigateAndCommit(first);
EXPECT_TRUE(controller().GetVisibleEntry());
EXPECT_FALSE(controller().CanGoBack());
- contents()->NavigateAndCommit(second());
+ const GURL second("http://www.chromium.org");
+ contents()->NavigateAndCommit(second);
EXPECT_TRUE(controller().CanGoBack());
-
- contents()->NavigateAndCommit(third());
- EXPECT_TRUE(controller().CanGoBack());
-
- contents()->NavigateAndCommit(fourth_);
- EXPECT_TRUE(controller().CanGoBack());
- EXPECT_FALSE(controller().CanGoForward());
// Receive a paint update. This is necessary to make sure the size is set
// correctly in RenderWidgetHostImpl.
@@ -178,7 +86,22 @@
test_rvh()->ResetSizeAndRepaintPendingFlags();
// Create the overlay, and set the contents of the overlay window.
- overlay_.reset(new OverscrollNavigationOverlay(contents(), root_window()));
+ overlay_.reset(new OverscrollNavigationOverlay(contents()));
+ aura_extra::ImageWindowDelegate* image_delegate =
+ new aura_extra::ImageWindowDelegate();
+ scoped_ptr<aura::Window> overlay_window(
+ aura::test::CreateTestWindowWithDelegate(
+ image_delegate,
+ 0,
+ gfx::Rect(root_window()->bounds().size()),
+ root_window()));
+
+ overlay_->SetOverlayWindow(overlay_window.Pass(), image_delegate);
+ overlay_->StartObserving();
+
+ EXPECT_TRUE(overlay_->web_contents());
+ EXPECT_FALSE(overlay_->loading_complete_);
+ EXPECT_FALSE(overlay_->received_paint_update_);
}
void TearDown() override {
@@ -191,95 +114,72 @@
}
private:
- // Tests URLs.
- const GURL first_;
- const GURL second_;
- const GURL third_;
- const GURL fourth_;
-
scoped_ptr<OverscrollNavigationOverlay> overlay_;
DISALLOW_COPY_AND_ASSIGN(OverscrollNavigationOverlayTest);
};
-// Tests that if a screenshot is available, it is set in the overlay window
-// delegate.
-TEST_F(OverscrollNavigationOverlayTest, WithScreenshot) {
+TEST_F(OverscrollNavigationOverlayTest, FirstVisuallyNonEmptyPaint_NoImage) {
+ ReceivePaintUpdate();
+ EXPECT_TRUE(GetOverlay()->received_paint_update_);
+ EXPECT_FALSE(GetOverlay()->loading_complete_);
+ // The paint update will hide the overlay.
+ EXPECT_FALSE(GetOverlay()->web_contents());
+}
+
+TEST_F(OverscrollNavigationOverlayTest, FirstVisuallyNonEmptyPaint_WithImage) {
+ GetOverlay()->image_delegate_->SetImage(CreateDummyScreenshot());
+
+ ReceivePaintUpdate();
+ EXPECT_TRUE(GetOverlay()->received_paint_update_);
+ EXPECT_FALSE(GetOverlay()->loading_complete_);
+ // The paint update will hide the overlay.
+ EXPECT_FALSE(GetOverlay()->web_contents());
+}
+
+TEST_F(OverscrollNavigationOverlayTest, LoadUpdateWithoutNonEmptyPaint) {
+ GetOverlay()->image_delegate_->SetImage(CreateDummyScreenshot());
+ process()->sink().ClearMessages();
+
+ contents()->TestSetIsLoading(false);
+ EXPECT_TRUE(GetOverlay()->loading_complete_);
+ EXPECT_FALSE(GetOverlay()->received_paint_update_);
+ // The page load should hide the overlay.
+ EXPECT_FALSE(GetOverlay()->web_contents());
+}
+
+TEST_F(OverscrollNavigationOverlayTest, MultiNavigation_PaintUpdate) {
+ GetOverlay()->image_delegate_->SetImage(CreateDummyScreenshot());
SetDummyScreenshotOnNavEntry(controller().GetEntryAtOffset(-1));
+
PerformBackNavigationViaSliderCallbacks();
// Screenshot was set on NavEntry at offset -1.
- EXPECT_TRUE(static_cast<aura_extra::ImageWindowDelegate*>(
- GetOverlay()->window_->delegate())->has_image());
-}
+ EXPECT_TRUE(GetOverlay()->image_delegate_->has_image());
+ EXPECT_FALSE(GetOverlay()->received_paint_update_);
-// Tests that if a screenshot is not available, no image is set in the overlay
-// window delegate.
-TEST_F(OverscrollNavigationOverlayTest, WithoutScreenshot) {
- PerformBackNavigationViaSliderCallbacks();
- // No screenshot was set on NavEntry at offset -1.
- EXPECT_FALSE(static_cast<aura_extra::ImageWindowDelegate*>(
- GetOverlay()->window_->delegate())->has_image());
-}
-
-// Tests that if a navigation is attempted but there is nothing to navigate to,
-// we return a null window.
-TEST_F(OverscrollNavigationOverlayTest, CannotNavigate) {
- EXPECT_EQ(GetOverlay()->CreateFrontWindow(GetFrontSlideWindowBounds()),
- nullptr);
-}
-
-// Tests that if a navigation is cancelled, no navigation is performed and the
-// state is restored.
-TEST_F(OverscrollNavigationOverlayTest, CancelNavigation) {
- scoped_ptr<aura::Window> window =
- GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds());
- EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::BACK);
-
- GetOverlay()->OnOverscrollCancelled();
- EXPECT_FALSE(contents()->cross_navigation_pending());
- EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::NONE);
-}
-
-// Performs two navigations. The second navigation is cancelled, tests that the
-// first one worked correctly.
-TEST_F(OverscrollNavigationOverlayTest, CancelAfterSuccessfulNavigation) {
- PerformBackNavigationViaSliderCallbacks();
- scoped_ptr<aura::Window> wrapper =
- GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds());
- EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::BACK);
-
- GetOverlay()->OnOverscrollCancelled();
- EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::NONE);
-
- EXPECT_TRUE(contents()->cross_navigation_pending());
- contents()->CommitPendingNavigation();
- EXPECT_EQ(contents()->GetURL(), third());
-}
-
-// Tests that an overscroll navigation that receives a paint update actually
-// stops observing.
-TEST_F(OverscrollNavigationOverlayTest, Navigation_PaintUpdate) {
- PerformBackNavigationViaSliderCallbacks();
ReceivePaintUpdate();
-
// Paint updates until the navigation is committed typically represent updates
- // for the previous page, so we should still be observing.
- EXPECT_TRUE(GetOverlay()->web_contents());
+ // for the previous page, so they shouldn't affect the flag.
+ EXPECT_FALSE(GetOverlay()->received_paint_update_);
contents()->CommitPendingNavigation();
ReceivePaintUpdate();
+ // Navigation was committed and the paint update was received - the flag
+ // should now be updated.
+ EXPECT_TRUE(GetOverlay()->received_paint_update_);
- // Navigation was committed and the paint update was received - we should no
- // longer be observing.
EXPECT_FALSE(GetOverlay()->web_contents());
- EXPECT_EQ(contents()->GetURL(), third());
}
-// Tests that an overscroll navigation that receives a loading update actually
-// stops observing.
-TEST_F(OverscrollNavigationOverlayTest, Navigation_LoadingUpdate) {
+TEST_F(OverscrollNavigationOverlayTest, MultiNavigation_LoadingUpdate) {
+ GetOverlay()->image_delegate_->SetImage(CreateDummyScreenshot());
+
PerformBackNavigationViaSliderCallbacks();
- EXPECT_TRUE(GetOverlay()->web_contents());
+ // No screenshot was set on NavEntry at offset -1.
+ EXPECT_FALSE(GetOverlay()->image_delegate_->has_image());
+ // Navigation was started, so the loading status flag should be reset.
+ EXPECT_FALSE(GetOverlay()->loading_complete_);
+
// DidStopLoading for any navigation should always reset the load flag and
// dismiss the overlay even if the pending navigation wasn't committed -
// this is a "safety net" in case we mis-identify the destination webpage
@@ -287,89 +187,9 @@
// navigation is in progress).
contents()->TestSetIsLoading(true);
contents()->TestSetIsLoading(false);
+ EXPECT_TRUE(GetOverlay()->loading_complete_);
+
EXPECT_FALSE(GetOverlay()->web_contents());
- contents()->CommitPendingNavigation();
- EXPECT_EQ(contents()->GetURL(), third());
-}
-
-// Tests that swapping the overlay window at the end of a gesture caused by the
-// start of a new overscroll does not crash and the events still reach the new
-// overlay window.
-TEST_F(OverscrollNavigationOverlayTest, OverlayWindowSwap) {
- PerformBackNavigationViaSliderCallbacks();
- aura::Window* first_overlay_window = GetOverlay()->window_.get();
- EXPECT_TRUE(GetOverlay()->web_contents());
- EXPECT_TRUE(first_overlay_window);
-
- // At this stage, the overlay window is covering the web contents. Configure
- // the animator of the overlay window for the test.
- ui::ScopedAnimationDurationScaleMode normal_duration(
- ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION);
- ui::LayerAnimator* animator = GetOverlay()->window_->layer()->GetAnimator();
- animator->set_disable_timer_for_test(true);
- ui::LayerAnimatorTestController test_controller(animator);
-
- int overscroll_complete_distance =
- root_window()->bounds().size().width() *
- content::GetOverscrollConfig(
- content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE) +
- ui::GestureConfiguration::GetInstance()
- ->max_touch_move_in_pixels_for_click() + 1;
-
- // Start and complete a back navigation via a gesture.
- ui::test::EventGenerator generator(root_window());
- generator.GestureScrollSequence(gfx::Point(0, 0),
- gfx::Point(overscroll_complete_distance, 0),
- base::TimeDelta::FromMilliseconds(10),
- 10);
-
- ui::ScopedLayerAnimationSettings settings(animator);
- test_controller.StartThreadedAnimationsIfNeeded();
-
- // The overlay window should now be being animated to the edge of the screen.
- // |first()overlay_window| is the back window.
- // This is what the screen should look like. The X indicates where the next
- // gesture starts for the test.
- // +---------root_window--------+
- // |+-back window--+--front window--+
- // || | | |
- // || 1 |X 2 | |
- // || | | |
- // |+--------------+------------|---+
- // +----------------------------+
- // | overscroll ||
- // | complete ||
- // | distance ||
- // |<------------->||
- // | second |
- // | overscroll |
- // | start distance |
- // |<-------------->|
- EXPECT_EQ(GetOverlay()->window_.get(), first_overlay_window);
-
- // The overlay window is halfway through, start another animation that will
- // cancel the first one. The event that cancels the animation will go to
- // the slide window, which will be used as the overlay window when the new
- // overscroll starts.
- int second_overscroll_start_distance = overscroll_complete_distance + 1;
- generator.GestureScrollSequence(
- gfx::Point(second_overscroll_start_distance, 0),
- gfx::Point(
- second_overscroll_start_distance + overscroll_complete_distance, 0),
- base::TimeDelta::FromMilliseconds(10), 10);
- EXPECT_TRUE(GetOverlay()->window_.get());
- // The overlay window should be a new window.
- EXPECT_NE(GetOverlay()->window_.get(), first_overlay_window);
-
- // Complete the animation.
- GetOverlay()->window_->layer()->GetAnimator()->StopAnimating();
- EXPECT_TRUE(GetOverlay()->window_.get());
-
- // Load the page.
- contents()->CommitPendingNavigation();
- ReceivePaintUpdate();
- EXPECT_FALSE(GetOverlay()->window_.get());
- EXPECT_EQ(contents()->GetURL(), first());
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698