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

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

Issue 16950023: aura: Use the WindowSlider for gesture-nav while the page is reloading. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more-test Created 7 years, 6 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/window_slider_unittest.cc
diff --git a/content/browser/web_contents/aura/window_slider_unittest.cc b/content/browser/web_contents/aura/window_slider_unittest.cc
index 369d951e254233decc3ff8e0f2677ccaf3945204..9b9261cc34151002197bfa3bc60afdfab5de460b 100644
--- a/content/browser/web_contents/aura/window_slider_unittest.cc
+++ b/content/browser/web_contents/aura/window_slider_unittest.cc
@@ -60,7 +60,8 @@ class NoEventWindowDelegate : public aura::test::TestWindowDelegate {
class WindowSliderDelegateTest : public WindowSlider::Delegate {
public:
WindowSliderDelegateTest()
- : created_back_layer_(false),
+ : can_create_layer_(true),
+ created_back_layer_(false),
created_front_layer_(false),
slide_completed_(false),
slide_aborted_(false),
@@ -69,6 +70,7 @@ class WindowSliderDelegateTest : public WindowSlider::Delegate {
virtual ~WindowSliderDelegateTest() {}
void Reset() {
+ can_create_layer_ = true;
created_back_layer_ = false;
created_front_layer_ = false;
slide_completed_ = false;
@@ -76,14 +78,19 @@ class WindowSliderDelegateTest : public WindowSlider::Delegate {
slider_destroyed_ = false;
}
+ void SetCanCreateLayer(bool can_create_layer) {
+ can_create_layer_ = can_create_layer;
+ }
+
bool created_back_layer() const { return created_back_layer_; }
bool created_front_layer() const { return created_front_layer_; }
bool slide_completed() const { return slide_completed_; }
bool slide_aborted() const { return slide_aborted_; }
bool slider_destroyed() const { return slider_destroyed_; }
- private:
+ protected:
ui::Layer* CreateLayerForTest() {
+ CHECK(can_create_layer_);
ui::Layer* layer = new ui::Layer(ui::LAYER_SOLID_COLOR);
layer->SetColor(SK_ColorRED);
return layer;
@@ -91,11 +98,15 @@ class WindowSliderDelegateTest : public WindowSlider::Delegate {
// Overridden from WindowSlider::Delegate:
virtual ui::Layer* CreateBackLayer() OVERRIDE {
+ if (!can_create_layer_)
+ return NULL;
created_back_layer_ = true;
return CreateLayerForTest();
}
virtual ui::Layer* CreateFrontLayer() OVERRIDE {
+ if (!can_create_layer_)
+ return NULL;
created_front_layer_ = true;
return CreateLayerForTest();
}
@@ -112,6 +123,8 @@ class WindowSliderDelegateTest : public WindowSlider::Delegate {
slider_destroyed_ = true;
}
+ private:
+ bool can_create_layer_;
bool created_back_layer_;
bool created_front_layer_;
bool slide_completed_;
@@ -121,6 +134,44 @@ class WindowSliderDelegateTest : public WindowSlider::Delegate {
DISALLOW_COPY_AND_ASSIGN(WindowSliderDelegateTest);
};
+// This delegate destroys the owner window when the slider is destroyed.
+class WindowSliderDeleteOwnerOnDestroy : public WindowSliderDelegateTest {
+ public:
+ explicit WindowSliderDeleteOwnerOnDestroy(aura::Window* owner)
+ : owner_(owner) {
+ }
+ virtual ~WindowSliderDeleteOwnerOnDestroy() {}
+
+ private:
+ // Overridden from WindowSlider::Delegate:
+ virtual void OnWindowSliderDestroyed() OVERRIDE {
+ WindowSliderDelegateTest::OnWindowSliderDestroyed();
+ delete owner_;
+ }
+
+ aura::Window* owner_;
+ DISALLOW_COPY_AND_ASSIGN(WindowSliderDeleteOwnerOnDestroy);
+};
+
+// This delegate destroyes the owner window when a slide is completed.
+class WindowSliderDeleteOwnerOnComplete : public WindowSliderDelegateTest {
+ public:
+ explicit WindowSliderDeleteOwnerOnComplete(aura::Window* owner)
+ : owner_(owner) {
+ }
+ virtual ~WindowSliderDeleteOwnerOnComplete() {}
+
+ private:
+ // Overridden from WindowSlider::Delegate:
+ virtual void OnWindowSlideComplete() OVERRIDE {
+ WindowSliderDelegateTest::OnWindowSlideComplete();
+ delete owner_;
+ }
+
+ aura::Window* owner_;
+ DISALLOW_COPY_AND_ASSIGN(WindowSliderDeleteOwnerOnComplete);
+};
+
typedef aura::test::AuraTestBase WindowSliderTest;
TEST_F(WindowSliderTest, WindowSlideUsingGesture) {
@@ -268,4 +319,93 @@ TEST_F(WindowSliderTest, OwnerWindowChangesDuringWindowSlide) {
EXPECT_TRUE(slider_delegate.slider_destroyed());
}
+TEST_F(WindowSliderTest, NoSlideWhenLayerCantBeCreated) {
+ scoped_ptr<aura::Window> window(CreateNormalWindow(0, root_window(), NULL));
+ window->SetBounds(gfx::Rect(0, 0, 400, 400));
+ WindowSliderDelegateTest slider_delegate;
+ slider_delegate.SetCanCreateLayer(false);
+
+ aura::test::EventGenerator generator(root_window());
+
+ // Generate a horizontal overscroll.
+ new WindowSlider(&slider_delegate, root_window(), window.get());
+ generator.GestureScrollSequence(gfx::Point(10, 10),
+ gfx::Point(160, 10),
+ base::TimeDelta::FromMilliseconds(10),
+ 10);
+ EXPECT_FALSE(slider_delegate.created_back_layer());
+ EXPECT_FALSE(slider_delegate.slide_completed());
+ EXPECT_FALSE(slider_delegate.created_front_layer());
+ EXPECT_FALSE(slider_delegate.slide_aborted());
+ EXPECT_FALSE(slider_delegate.slider_destroyed());
+ window->SetTransform(gfx::Transform());
+
+ slider_delegate.SetCanCreateLayer(true);
+ generator.GestureScrollSequence(gfx::Point(10, 10),
+ gfx::Point(160, 10),
+ base::TimeDelta::FromMilliseconds(10),
+ 10);
+ EXPECT_TRUE(slider_delegate.created_back_layer());
+ EXPECT_TRUE(slider_delegate.slide_completed());
+ EXPECT_FALSE(slider_delegate.created_front_layer());
+ EXPECT_FALSE(slider_delegate.slide_aborted());
+ EXPECT_TRUE(slider_delegate.slider_destroyed());
+}
+
+// Tests that the owner window can be destroyed from |OnWindowSliderDestroyed()|
+// delegate callback without causing a crash.
+TEST_F(WindowSliderTest, OwnerIsDestroyedOnSliderDestroy) {
+ size_t child_windows = root_window()->children().size();
+ aura::Window* window = CreateNormalWindow(0, root_window(), NULL);
+ window->SetBounds(gfx::Rect(0, 0, 400, 400));
+ EXPECT_EQ(child_windows + 1, root_window()->children().size());
+
+ WindowSliderDeleteOwnerOnDestroy slider_delegate(window);
+ aura::test::EventGenerator generator(root_window());
+
+ // Generate a horizontal overscroll.
+ new WindowSlider(&slider_delegate, root_window(), window);
+ generator.GestureScrollSequence(gfx::Point(10, 10),
+ gfx::Point(160, 10),
+ base::TimeDelta::FromMilliseconds(10),
+ 10);
+ EXPECT_TRUE(slider_delegate.created_back_layer());
+ EXPECT_TRUE(slider_delegate.slide_completed());
+ EXPECT_FALSE(slider_delegate.created_front_layer());
+ EXPECT_FALSE(slider_delegate.slide_aborted());
+ EXPECT_TRUE(slider_delegate.slider_destroyed());
+
+ // Destroying the slider would have destroyed |window| too. So |window| should
+ // not need to be destroyed here.
+ EXPECT_EQ(child_windows, root_window()->children().size());
+}
+
+// Tests that the owner window can be destroyed from |OnWindowSlideComplete()|
+// delegate callback without causing a crash.
+TEST_F(WindowSliderTest, OwnerIsDestroyedOnSlideComplete) {
+ size_t child_windows = root_window()->children().size();
+ aura::Window* window = CreateNormalWindow(0, root_window(), NULL);
+ window->SetBounds(gfx::Rect(0, 0, 400, 400));
+ EXPECT_EQ(child_windows + 1, root_window()->children().size());
+
+ WindowSliderDeleteOwnerOnComplete slider_delegate(window);
+ aura::test::EventGenerator generator(root_window());
+
+ // Generate a horizontal overscroll.
+ new WindowSlider(&slider_delegate, root_window(), window);
+ generator.GestureScrollSequence(gfx::Point(10, 10),
+ gfx::Point(160, 10),
+ base::TimeDelta::FromMilliseconds(10),
+ 10);
+ EXPECT_TRUE(slider_delegate.created_back_layer());
+ EXPECT_TRUE(slider_delegate.slide_completed());
+ EXPECT_FALSE(slider_delegate.created_front_layer());
+ EXPECT_FALSE(slider_delegate.slide_aborted());
+ EXPECT_TRUE(slider_delegate.slider_destroyed());
+
+ // Destroying the slider would have destroyed |window| too. So |window| should
+ // not need to be destroyed here.
+ EXPECT_EQ(child_windows, root_window()->children().size());
+}
+
} // namespace content
« no previous file with comments | « content/browser/web_contents/aura/window_slider.cc ('k') | content/browser/web_contents/web_contents_view_aura.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698