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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/window_slider.h" 5 #include "content/browser/web_contents/aura/window_slider.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "ui/aura/root_window.h" 9 #include "ui/aura/root_window.h"
10 #include "ui/aura/test/aura_test_base.h" 10 #include "ui/aura/test/aura_test_base.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 private: 53 private:
54 // Overridden from aura::WindowDelegate: 54 // Overridden from aura::WindowDelegate:
55 virtual bool HasHitTestMask() const OVERRIDE { return true; } 55 virtual bool HasHitTestMask() const OVERRIDE { return true; }
56 56
57 DISALLOW_COPY_AND_ASSIGN(NoEventWindowDelegate); 57 DISALLOW_COPY_AND_ASSIGN(NoEventWindowDelegate);
58 }; 58 };
59 59
60 class WindowSliderDelegateTest : public WindowSlider::Delegate { 60 class WindowSliderDelegateTest : public WindowSlider::Delegate {
61 public: 61 public:
62 WindowSliderDelegateTest() 62 WindowSliderDelegateTest()
63 : created_back_layer_(false), 63 : can_create_layer_(true),
64 created_back_layer_(false),
64 created_front_layer_(false), 65 created_front_layer_(false),
65 slide_completed_(false), 66 slide_completed_(false),
66 slide_aborted_(false), 67 slide_aborted_(false),
67 slider_destroyed_(false) { 68 slider_destroyed_(false) {
68 } 69 }
69 virtual ~WindowSliderDelegateTest() {} 70 virtual ~WindowSliderDelegateTest() {}
70 71
71 void Reset() { 72 void Reset() {
73 can_create_layer_ = true;
72 created_back_layer_ = false; 74 created_back_layer_ = false;
73 created_front_layer_ = false; 75 created_front_layer_ = false;
74 slide_completed_ = false; 76 slide_completed_ = false;
75 slide_aborted_ = false; 77 slide_aborted_ = false;
76 slider_destroyed_ = false; 78 slider_destroyed_ = false;
77 } 79 }
78 80
81 void SetCanCreateLayer(bool can_create_layer) {
82 can_create_layer_ = can_create_layer;
83 }
84
79 bool created_back_layer() const { return created_back_layer_; } 85 bool created_back_layer() const { return created_back_layer_; }
80 bool created_front_layer() const { return created_front_layer_; } 86 bool created_front_layer() const { return created_front_layer_; }
81 bool slide_completed() const { return slide_completed_; } 87 bool slide_completed() const { return slide_completed_; }
82 bool slide_aborted() const { return slide_aborted_; } 88 bool slide_aborted() const { return slide_aborted_; }
83 bool slider_destroyed() const { return slider_destroyed_; } 89 bool slider_destroyed() const { return slider_destroyed_; }
84 90
85 private: 91 protected:
86 ui::Layer* CreateLayerForTest() { 92 ui::Layer* CreateLayerForTest() {
93 CHECK(can_create_layer_);
87 ui::Layer* layer = new ui::Layer(ui::LAYER_SOLID_COLOR); 94 ui::Layer* layer = new ui::Layer(ui::LAYER_SOLID_COLOR);
88 layer->SetColor(SK_ColorRED); 95 layer->SetColor(SK_ColorRED);
89 return layer; 96 return layer;
90 } 97 }
91 98
92 // Overridden from WindowSlider::Delegate: 99 // Overridden from WindowSlider::Delegate:
93 virtual ui::Layer* CreateBackLayer() OVERRIDE { 100 virtual ui::Layer* CreateBackLayer() OVERRIDE {
101 if (!can_create_layer_)
102 return NULL;
94 created_back_layer_ = true; 103 created_back_layer_ = true;
95 return CreateLayerForTest(); 104 return CreateLayerForTest();
96 } 105 }
97 106
98 virtual ui::Layer* CreateFrontLayer() OVERRIDE { 107 virtual ui::Layer* CreateFrontLayer() OVERRIDE {
108 if (!can_create_layer_)
109 return NULL;
99 created_front_layer_ = true; 110 created_front_layer_ = true;
100 return CreateLayerForTest(); 111 return CreateLayerForTest();
101 } 112 }
102 113
103 virtual void OnWindowSlideComplete() OVERRIDE { 114 virtual void OnWindowSlideComplete() OVERRIDE {
104 slide_completed_ = true; 115 slide_completed_ = true;
105 } 116 }
106 117
107 virtual void OnWindowSlideAborted() OVERRIDE { 118 virtual void OnWindowSlideAborted() OVERRIDE {
108 slide_aborted_ = true; 119 slide_aborted_ = true;
109 } 120 }
110 121
111 virtual void OnWindowSliderDestroyed() OVERRIDE { 122 virtual void OnWindowSliderDestroyed() OVERRIDE {
112 slider_destroyed_ = true; 123 slider_destroyed_ = true;
113 } 124 }
114 125
126 private:
127 bool can_create_layer_;
115 bool created_back_layer_; 128 bool created_back_layer_;
116 bool created_front_layer_; 129 bool created_front_layer_;
117 bool slide_completed_; 130 bool slide_completed_;
118 bool slide_aborted_; 131 bool slide_aborted_;
119 bool slider_destroyed_; 132 bool slider_destroyed_;
120 133
121 DISALLOW_COPY_AND_ASSIGN(WindowSliderDelegateTest); 134 DISALLOW_COPY_AND_ASSIGN(WindowSliderDelegateTest);
122 }; 135 };
123 136
137 // This delegate destroys the owner window when the slider is destroyed.
138 class WindowSliderDeleteOwnerOnDestroy : public WindowSliderDelegateTest {
139 public:
140 explicit WindowSliderDeleteOwnerOnDestroy(aura::Window* owner)
141 : owner_(owner) {
142 }
143 virtual ~WindowSliderDeleteOwnerOnDestroy() {}
144
145 private:
146 // Overridden from WindowSlider::Delegate:
147 virtual void OnWindowSliderDestroyed() OVERRIDE {
148 WindowSliderDelegateTest::OnWindowSliderDestroyed();
149 delete owner_;
150 }
151
152 aura::Window* owner_;
153 DISALLOW_COPY_AND_ASSIGN(WindowSliderDeleteOwnerOnDestroy);
154 };
155
156 // This delegate destroyes the owner window when a slide is completed.
157 class WindowSliderDeleteOwnerOnComplete : public WindowSliderDelegateTest {
158 public:
159 explicit WindowSliderDeleteOwnerOnComplete(aura::Window* owner)
160 : owner_(owner) {
161 }
162 virtual ~WindowSliderDeleteOwnerOnComplete() {}
163
164 private:
165 // Overridden from WindowSlider::Delegate:
166 virtual void OnWindowSlideComplete() OVERRIDE {
167 WindowSliderDelegateTest::OnWindowSlideComplete();
168 delete owner_;
169 }
170
171 aura::Window* owner_;
172 DISALLOW_COPY_AND_ASSIGN(WindowSliderDeleteOwnerOnComplete);
173 };
174
124 typedef aura::test::AuraTestBase WindowSliderTest; 175 typedef aura::test::AuraTestBase WindowSliderTest;
125 176
126 TEST_F(WindowSliderTest, WindowSlideUsingGesture) { 177 TEST_F(WindowSliderTest, WindowSlideUsingGesture) {
127 scoped_ptr<aura::Window> window(CreateNormalWindow(0, root_window(), NULL)); 178 scoped_ptr<aura::Window> window(CreateNormalWindow(0, root_window(), NULL));
128 window->SetBounds(gfx::Rect(0, 0, 400, 400)); 179 window->SetBounds(gfx::Rect(0, 0, 400, 400));
129 WindowSliderDelegateTest slider_delegate; 180 WindowSliderDelegateTest slider_delegate;
130 181
131 aura::test::EventGenerator generator(root_window()); 182 aura::test::EventGenerator generator(root_window());
132 183
133 // Generate a horizontal overscroll. 184 // Generate a horizontal overscroll.
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 aura::Window* new_window = window.get(); 312 aura::Window* new_window = window.get();
262 EXPECT_NE(old_window, new_window); 313 EXPECT_NE(old_window, new_window);
263 314
264 EXPECT_TRUE(slider_delegate.created_back_layer()); 315 EXPECT_TRUE(slider_delegate.created_back_layer());
265 EXPECT_TRUE(slider_delegate.slide_completed()); 316 EXPECT_TRUE(slider_delegate.slide_completed());
266 EXPECT_FALSE(slider_delegate.created_front_layer()); 317 EXPECT_FALSE(slider_delegate.created_front_layer());
267 EXPECT_FALSE(slider_delegate.slide_aborted()); 318 EXPECT_FALSE(slider_delegate.slide_aborted());
268 EXPECT_TRUE(slider_delegate.slider_destroyed()); 319 EXPECT_TRUE(slider_delegate.slider_destroyed());
269 } 320 }
270 321
322 TEST_F(WindowSliderTest, NoSlideWhenLayerCantBeCreated) {
323 scoped_ptr<aura::Window> window(CreateNormalWindow(0, root_window(), NULL));
324 window->SetBounds(gfx::Rect(0, 0, 400, 400));
325 WindowSliderDelegateTest slider_delegate;
326 slider_delegate.SetCanCreateLayer(false);
327
328 aura::test::EventGenerator generator(root_window());
329
330 // Generate a horizontal overscroll.
331 new WindowSlider(&slider_delegate, root_window(), window.get());
332 generator.GestureScrollSequence(gfx::Point(10, 10),
333 gfx::Point(160, 10),
334 base::TimeDelta::FromMilliseconds(10),
335 10);
336 EXPECT_FALSE(slider_delegate.created_back_layer());
337 EXPECT_FALSE(slider_delegate.slide_completed());
338 EXPECT_FALSE(slider_delegate.created_front_layer());
339 EXPECT_FALSE(slider_delegate.slide_aborted());
340 EXPECT_FALSE(slider_delegate.slider_destroyed());
341 window->SetTransform(gfx::Transform());
342
343 slider_delegate.SetCanCreateLayer(true);
344 generator.GestureScrollSequence(gfx::Point(10, 10),
345 gfx::Point(160, 10),
346 base::TimeDelta::FromMilliseconds(10),
347 10);
348 EXPECT_TRUE(slider_delegate.created_back_layer());
349 EXPECT_TRUE(slider_delegate.slide_completed());
350 EXPECT_FALSE(slider_delegate.created_front_layer());
351 EXPECT_FALSE(slider_delegate.slide_aborted());
352 EXPECT_TRUE(slider_delegate.slider_destroyed());
353 }
354
355 // Tests that the owner window can be destroyed from |OnWindowSliderDestroyed()|
356 // delegate callback without causing a crash.
357 TEST_F(WindowSliderTest, OwnerIsDestroyedOnSliderDestroy) {
358 size_t child_windows = root_window()->children().size();
359 aura::Window* window = CreateNormalWindow(0, root_window(), NULL);
360 window->SetBounds(gfx::Rect(0, 0, 400, 400));
361 EXPECT_EQ(child_windows + 1, root_window()->children().size());
362
363 WindowSliderDeleteOwnerOnDestroy slider_delegate(window);
364 aura::test::EventGenerator generator(root_window());
365
366 // Generate a horizontal overscroll.
367 new WindowSlider(&slider_delegate, root_window(), window);
368 generator.GestureScrollSequence(gfx::Point(10, 10),
369 gfx::Point(160, 10),
370 base::TimeDelta::FromMilliseconds(10),
371 10);
372 EXPECT_TRUE(slider_delegate.created_back_layer());
373 EXPECT_TRUE(slider_delegate.slide_completed());
374 EXPECT_FALSE(slider_delegate.created_front_layer());
375 EXPECT_FALSE(slider_delegate.slide_aborted());
376 EXPECT_TRUE(slider_delegate.slider_destroyed());
377
378 // Destroying the slider would have destroyed |window| too. So |window| should
379 // not need to be destroyed here.
380 EXPECT_EQ(child_windows, root_window()->children().size());
381 }
382
383 // Tests that the owner window can be destroyed from |OnWindowSlideComplete()|
384 // delegate callback without causing a crash.
385 TEST_F(WindowSliderTest, OwnerIsDestroyedOnSlideComplete) {
386 size_t child_windows = root_window()->children().size();
387 aura::Window* window = CreateNormalWindow(0, root_window(), NULL);
388 window->SetBounds(gfx::Rect(0, 0, 400, 400));
389 EXPECT_EQ(child_windows + 1, root_window()->children().size());
390
391 WindowSliderDeleteOwnerOnComplete slider_delegate(window);
392 aura::test::EventGenerator generator(root_window());
393
394 // Generate a horizontal overscroll.
395 new WindowSlider(&slider_delegate, root_window(), window);
396 generator.GestureScrollSequence(gfx::Point(10, 10),
397 gfx::Point(160, 10),
398 base::TimeDelta::FromMilliseconds(10),
399 10);
400 EXPECT_TRUE(slider_delegate.created_back_layer());
401 EXPECT_TRUE(slider_delegate.slide_completed());
402 EXPECT_FALSE(slider_delegate.created_front_layer());
403 EXPECT_FALSE(slider_delegate.slide_aborted());
404 EXPECT_TRUE(slider_delegate.slider_destroyed());
405
406 // Destroying the slider would have destroyed |window| too. So |window| should
407 // not need to be destroyed here.
408 EXPECT_EQ(child_windows, root_window()->children().size());
409 }
410
271 } // namespace content 411 } // namespace content
OLDNEW
« 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