OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 #import "ios/chrome/browser/ui/fullscreen_controller.h" | 5 #import "ios/chrome/browser/ui/fullscreen_controller.h" |
6 | 6 |
7 #include "base/mac/scoped_nsobject.h" | |
8 #import "ios/web/public/test/fakes/test_web_view_content_view.h" | 7 #import "ios/web/public/test/fakes/test_web_view_content_view.h" |
9 #import "ios/web/public/web_state/ui/crw_web_view_content_view.h" | 8 #import "ios/web/public/web_state/ui/crw_web_view_content_view.h" |
10 #import "ios/web/public/web_state/ui/crw_web_view_scroll_view_proxy.h" | 9 #import "ios/web/public/web_state/ui/crw_web_view_scroll_view_proxy.h" |
11 #import "ios/web/web_state/ui/crw_web_controller.h" | 10 #import "ios/web/web_state/ui/crw_web_controller.h" |
12 #import "ios/web/web_state/ui/crw_web_view_proxy_impl.h" | 11 #import "ios/web/web_state/ui/crw_web_view_proxy_impl.h" |
13 #include "testing/platform_test.h" | 12 #include "testing/platform_test.h" |
14 #import "third_party/ocmock/OCMock/OCMock.h" | 13 #import "third_party/ocmock/OCMock/OCMock.h" |
15 #include "third_party/ocmock/ocmock_extensions.h" | 14 #include "third_party/ocmock/ocmock_extensions.h" |
16 | 15 |
| 16 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 17 #error "This file requires ARC support." |
| 18 #endif |
| 19 |
17 namespace { | 20 namespace { |
18 | 21 |
19 CGFloat kContentHeight = 5000.0; | 22 CGFloat kContentHeight = 5000.0; |
20 CGFloat kHeaderHeight = 42.0; | 23 CGFloat kHeaderHeight = 42.0; |
21 } | 24 } |
22 | 25 |
23 @interface MockFullScreenControllerDelegate | 26 @interface MockFullScreenControllerDelegate |
24 : NSObject<FullScreenControllerDelegate> | 27 : NSObject<FullScreenControllerDelegate> |
25 @property(nonatomic, readonly) float currentPosition; | 28 @property(nonatomic, readonly) float currentPosition; |
26 @property(nonatomic, assign) BOOL fakeIsTabWithIDCurrentFlag; | 29 @property(nonatomic, assign) BOOL fakeIsTabWithIDCurrentFlag; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 namespace { | 73 namespace { |
71 | 74 |
72 NSString* const kFakeSessionId = @"fake-session-id"; | 75 NSString* const kFakeSessionId = @"fake-session-id"; |
73 | 76 |
74 class FullscreenControllerTest : public PlatformTest { | 77 class FullscreenControllerTest : public PlatformTest { |
75 protected: | 78 protected: |
76 void SetUp() override { | 79 void SetUp() override { |
77 CGRect frame = CGRectMake(0.0, 0.0, 300.0, 900.0); | 80 CGRect frame = CGRectMake(0.0, 0.0, 300.0, 900.0); |
78 PlatformTest::SetUp(); | 81 PlatformTest::SetUp(); |
79 | 82 |
80 scrollview_.reset([[UIScrollView alloc] initWithFrame:frame]); | 83 scrollview_ = [[UIScrollView alloc] initWithFrame:frame]; |
81 scrollview_.get().contentInset = UIEdgeInsetsZero; | 84 scrollview_.contentInset = UIEdgeInsetsZero; |
82 [GetWindow() addSubview:scrollview_]; | 85 [GetWindow() addSubview:scrollview_]; |
83 | 86 |
84 CGRect contentSize = CGRectMake(0.0, 0.0, frame.size.width, kContentHeight); | 87 CGRect contentSize = CGRectMake(0.0, 0.0, frame.size.width, kContentHeight); |
85 scrollview_.get().contentSize = contentSize.size; | 88 scrollview_.contentSize = contentSize.size; |
86 mockWebController_.reset( | 89 mockWebController_ = |
87 [[OCMockObject niceMockForClass:[CRWWebController class]] retain]); | 90 [OCMockObject niceMockForClass:[CRWWebController class]]; |
88 mockDelegate_.reset([[MockFullScreenControllerDelegate alloc] init]); | 91 mockDelegate_ = [[MockFullScreenControllerDelegate alloc] init]; |
89 mockWebView_.reset([[UIView alloc] init]); | 92 mockWebView_ = [[UIView alloc] init]; |
90 mockContentView_.reset([[TestWebViewContentView alloc] | 93 mockContentView_ = |
91 initWithMockWebView:mockWebView_ | 94 [[TestWebViewContentView alloc] initWithMockWebView:mockWebView_ |
92 scrollView:scrollview_]); | 95 scrollView:scrollview_]; |
93 webViewProxy_.reset( | 96 webViewProxy_ = |
94 [[CRWWebViewProxyImpl alloc] initWithWebController:mockWebController_]); | 97 [[CRWWebViewProxyImpl alloc] initWithWebController:mockWebController_]; |
95 [webViewProxy_ setContentView:mockContentView_]; | 98 [webViewProxy_ setContentView:mockContentView_]; |
96 webViewScrollViewProxy_.reset([[webViewProxy_ scrollViewProxy] retain]); | 99 webViewScrollViewProxy_ = [webViewProxy_ scrollViewProxy]; |
97 controller_.reset([[FullScreenController alloc] | 100 controller_ = |
98 initWithDelegate:mockDelegate_ | 101 [[FullScreenController alloc] initWithDelegate:mockDelegate_ |
99 navigationManager:NULL | 102 navigationManager:NULL |
100 sessionID:kFakeSessionId]); | 103 sessionID:kFakeSessionId]; |
101 DCHECK(controller_); | 104 DCHECK(controller_); |
102 [webViewScrollViewProxy_ addObserver:controller_]; | 105 [webViewScrollViewProxy_ addObserver:controller_]; |
103 // Simulate a CRWWebControllerObserver callback. | 106 // Simulate a CRWWebControllerObserver callback. |
104 [controller_ setWebViewProxy:webViewProxy_ controller:mockWebController_]; | 107 [controller_ setWebViewProxy:webViewProxy_ controller:mockWebController_]; |
105 [controller_ moveHeaderToRestingPosition:YES]; | 108 [controller_ moveHeaderToRestingPosition:YES]; |
106 | 109 |
107 base::scoped_nsobject<UIView> awesome_view( | 110 UIView* awesome_view = [[UIView alloc] initWithFrame:contentSize]; |
108 [[UIView alloc] initWithFrame:contentSize]); | |
109 [scrollview_ addSubview:awesome_view]; | 111 [scrollview_ addSubview:awesome_view]; |
110 | 112 |
111 EXPECT_TRUE(IsHeaderVisible()); | 113 EXPECT_TRUE(IsHeaderVisible()); |
112 EXPECT_EQ(0.0f, webViewScrollViewProxy_.get().contentOffset.y); | 114 EXPECT_EQ(0.0f, webViewScrollViewProxy_.contentOffset.y); |
113 } | 115 } |
114 | 116 |
115 void TearDown() override { | 117 void TearDown() override { |
116 [webViewScrollViewProxy_.get() removeObserver:controller_]; | 118 [webViewScrollViewProxy_ removeObserver:controller_]; |
117 [webViewScrollViewProxy_ setScrollView:nil]; | 119 [webViewScrollViewProxy_ setScrollView:nil]; |
118 [scrollview_ removeFromSuperview]; | 120 [scrollview_ removeFromSuperview]; |
119 PlatformTest::TearDown(); | 121 PlatformTest::TearDown(); |
120 } | 122 } |
121 | 123 |
122 void MoveMiddle() { | 124 void MoveMiddle() { |
123 // Move somewhere in the middle. | 125 // Move somewhere in the middle. |
124 CGFloat middle_point = kContentHeight / 2.0; | 126 CGFloat middle_point = kContentHeight / 2.0; |
125 webViewScrollViewProxy_.get().contentOffset = | 127 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, middle_point); |
126 CGPointMake(0.0, middle_point); | |
127 } | 128 } |
128 | 129 |
129 void MoveTop() { | 130 void MoveTop() { |
130 webViewScrollViewProxy_.get().contentOffset = | 131 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, -kHeaderHeight); |
131 CGPointMake(0.0, -kHeaderHeight); | |
132 } | 132 } |
133 | 133 |
134 void MoveMiddleAndHide() { | 134 void MoveMiddleAndHide() { |
135 MoveMiddle(); | 135 MoveMiddle(); |
136 [controller_ moveHeaderToRestingPosition:NO]; | 136 [controller_ moveHeaderToRestingPosition:NO]; |
137 EXPECT_TRUE(IsHeaderHidden()); | 137 EXPECT_TRUE(IsHeaderHidden()); |
138 } | 138 } |
139 | 139 |
140 UIWindow* GetWindow() { | 140 UIWindow* GetWindow() { |
141 UIWindow* window = [[UIApplication sharedApplication] keyWindow]; | 141 UIWindow* window = [[UIApplication sharedApplication] keyWindow]; |
142 if (!window) | 142 if (!window) |
143 window = [[[UIApplication sharedApplication] windows] lastObject]; | 143 window = [[[UIApplication sharedApplication] windows] lastObject]; |
144 EXPECT_TRUE(window != nil); | 144 EXPECT_TRUE(window != nil); |
145 return window; | 145 return window; |
146 } | 146 } |
147 | 147 |
148 bool IsHeaderVisible() { return [mockDelegate_ currentPosition] == 0.0; } | 148 bool IsHeaderVisible() { return [mockDelegate_ currentPosition] == 0.0; } |
149 | 149 |
150 bool IsHeaderHidden() { | 150 bool IsHeaderHidden() { |
151 return [mockDelegate_ currentPosition] == kHeaderHeight; | 151 return [mockDelegate_ currentPosition] == kHeaderHeight; |
152 } | 152 } |
153 | 153 |
154 // Adds |view| as a sub view to the underlying |scrollview_|. | 154 // Adds |view| as a sub view to the underlying |scrollview_|. |
155 void AddSubViewToScrollView(UIView* view) { [scrollview_ addSubview:view]; } | 155 void AddSubViewToScrollView(UIView* view) { [scrollview_ addSubview:view]; } |
156 | 156 |
157 base::scoped_nsobject<FullScreenController> controller_; | 157 FullScreenController* controller_; |
158 base::scoped_nsobject<MockFullScreenControllerDelegate> mockDelegate_; | 158 MockFullScreenControllerDelegate* mockDelegate_; |
159 base::scoped_nsobject<CRWWebViewScrollViewProxy> webViewScrollViewProxy_; | 159 CRWWebViewScrollViewProxy* webViewScrollViewProxy_; |
160 base::scoped_nsobject<id> mockWebView_; | 160 id mockWebView_; |
161 base::scoped_nsobject<id> mockWebController_; | 161 id mockWebController_; |
162 base::scoped_nsobject<TestWebViewContentView> mockContentView_; | 162 TestWebViewContentView* mockContentView_; |
163 base::scoped_nsobject<CRWWebViewProxyImpl> webViewProxy_; | 163 CRWWebViewProxyImpl* webViewProxy_; |
164 | 164 |
165 private: | 165 private: |
166 base::scoped_nsobject<UIScrollView> scrollview_; | 166 UIScrollView* scrollview_; |
167 }; | 167 }; |
168 | 168 |
169 #pragma mark - Programmatic moves | 169 #pragma mark - Programmatic moves |
170 | 170 |
171 TEST_F(FullscreenControllerTest, ForceHidden) { | 171 TEST_F(FullscreenControllerTest, ForceHidden) { |
172 [controller_ moveHeaderToRestingPosition:NO]; | 172 [controller_ moveHeaderToRestingPosition:NO]; |
173 EXPECT_TRUE(IsHeaderHidden()); | 173 EXPECT_TRUE(IsHeaderHidden()); |
174 EXPECT_EQ(0.0, webViewScrollViewProxy_.get().contentOffset.y); | 174 EXPECT_EQ(0.0, webViewScrollViewProxy_.contentOffset.y); |
175 } | 175 } |
176 | 176 |
177 #pragma mark - Simulated user moves. | 177 #pragma mark - Simulated user moves. |
178 | 178 |
179 TEST_F(FullscreenControllerTest, LargeManualScrollUpHides) { | 179 TEST_F(FullscreenControllerTest, LargeManualScrollUpHides) { |
180 MoveMiddle(); | 180 MoveMiddle(); |
181 | 181 |
182 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; | 182 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; |
183 | 183 |
184 CGFloat middle_point = webViewScrollViewProxy_.get().contentOffset.y; | 184 CGFloat middle_point = webViewScrollViewProxy_.contentOffset.y; |
185 // Move up a bit, multiple times | 185 // Move up a bit, multiple times |
186 for (float i = 0.0; i < kHeaderHeight * 2.0; i++) { | 186 for (float i = 0.0; i < kHeaderHeight * 2.0; i++) { |
187 webViewScrollViewProxy_.get().contentOffset = | 187 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, middle_point + i); |
188 CGPointMake(0.0, middle_point + i); | |
189 } | 188 } |
190 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ | 189 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ |
191 willDecelerate:NO]; | 190 willDecelerate:NO]; |
192 EXPECT_TRUE(IsHeaderHidden()); | 191 EXPECT_TRUE(IsHeaderHidden()); |
193 } | 192 } |
194 | 193 |
195 TEST_F(FullscreenControllerTest, PartialManualScrollUpHides) { | 194 TEST_F(FullscreenControllerTest, PartialManualScrollUpHides) { |
196 MoveMiddle(); | 195 MoveMiddle(); |
197 | 196 |
198 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; | 197 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; |
199 | 198 |
200 CGFloat middle_point = webViewScrollViewProxy_.get().contentOffset.y; | 199 CGFloat middle_point = webViewScrollViewProxy_.contentOffset.y; |
201 // Move up a bit, multiple times | 200 // Move up a bit, multiple times |
202 for (float i = 0.0; i < (kHeaderHeight * (2.0 / 3.0)); i++) { | 201 for (float i = 0.0; i < (kHeaderHeight * (2.0 / 3.0)); i++) { |
203 webViewScrollViewProxy_.get().contentOffset = | 202 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, middle_point + i); |
204 CGPointMake(0.0, middle_point + i); | |
205 } | 203 } |
206 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ | 204 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ |
207 willDecelerate:NO]; | 205 willDecelerate:NO]; |
208 EXPECT_TRUE(IsHeaderHidden()); | 206 EXPECT_TRUE(IsHeaderHidden()); |
209 } | 207 } |
210 | 208 |
211 TEST_F(FullscreenControllerTest, SmallPartialManualScrollUpNoEffect) { | 209 TEST_F(FullscreenControllerTest, SmallPartialManualScrollUpNoEffect) { |
212 MoveMiddle(); | 210 MoveMiddle(); |
213 | 211 |
214 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; | 212 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; |
215 | 213 |
216 CGFloat middle_point = webViewScrollViewProxy_.get().contentOffset.y; | 214 CGFloat middle_point = webViewScrollViewProxy_.contentOffset.y; |
217 // Move up a bit, multiple times | 215 // Move up a bit, multiple times |
218 for (float i = 0.0; i < (kHeaderHeight / 3.0); i++) { | 216 for (float i = 0.0; i < (kHeaderHeight / 3.0); i++) { |
219 webViewScrollViewProxy_.get().contentOffset = | 217 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, middle_point + i); |
220 CGPointMake(0.0, middle_point + i); | |
221 } | 218 } |
222 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ | 219 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ |
223 willDecelerate:NO]; | 220 willDecelerate:NO]; |
224 EXPECT_TRUE(IsHeaderVisible()); | 221 EXPECT_TRUE(IsHeaderVisible()); |
225 } | 222 } |
226 | 223 |
227 TEST_F(FullscreenControllerTest, LargeManualScrollDownShows) { | 224 TEST_F(FullscreenControllerTest, LargeManualScrollDownShows) { |
228 MoveMiddleAndHide(); | 225 MoveMiddleAndHide(); |
229 | 226 |
230 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; | 227 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; |
231 | 228 |
232 CGFloat middle_point = webViewScrollViewProxy_.get().contentOffset.y; | 229 CGFloat middle_point = webViewScrollViewProxy_.contentOffset.y; |
233 // Move down a bit, multiple times | 230 // Move down a bit, multiple times |
234 for (float i = 0.0; i < kHeaderHeight * 2.0; i++) { | 231 for (float i = 0.0; i < kHeaderHeight * 2.0; i++) { |
235 webViewScrollViewProxy_.get().contentOffset = | 232 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, middle_point - i); |
236 CGPointMake(0.0, middle_point - i); | |
237 } | 233 } |
238 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ | 234 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ |
239 willDecelerate:NO]; | 235 willDecelerate:NO]; |
240 EXPECT_TRUE(IsHeaderVisible()); | 236 EXPECT_TRUE(IsHeaderVisible()); |
241 } | 237 } |
242 | 238 |
243 TEST_F(FullscreenControllerTest, PartialManualScrollDownShows) { | 239 TEST_F(FullscreenControllerTest, PartialManualScrollDownShows) { |
244 MoveMiddleAndHide(); | 240 MoveMiddleAndHide(); |
245 | 241 |
246 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; | 242 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; |
247 | 243 |
248 CGFloat middle_point = webViewScrollViewProxy_.get().contentOffset.y; | 244 CGFloat middle_point = webViewScrollViewProxy_.contentOffset.y; |
249 // Move down a bit, multiple times | 245 // Move down a bit, multiple times |
250 for (float i = 0.0; i < (kHeaderHeight * (2.0 / 3.0)); i++) { | 246 for (float i = 0.0; i < (kHeaderHeight * (2.0 / 3.0)); i++) { |
251 webViewScrollViewProxy_.get().contentOffset = | 247 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, middle_point - i); |
252 CGPointMake(0.0, middle_point - i); | |
253 } | 248 } |
254 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ | 249 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ |
255 willDecelerate:NO]; | 250 willDecelerate:NO]; |
256 EXPECT_TRUE(IsHeaderVisible()); | 251 EXPECT_TRUE(IsHeaderVisible()); |
257 } | 252 } |
258 | 253 |
259 TEST_F(FullscreenControllerTest, SmallPartialManualScrollDownNoEffect) { | 254 TEST_F(FullscreenControllerTest, SmallPartialManualScrollDownNoEffect) { |
260 MoveMiddleAndHide(); | 255 MoveMiddleAndHide(); |
261 | 256 |
262 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; | 257 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; |
263 | 258 |
264 CGFloat middle_point = webViewScrollViewProxy_.get().contentOffset.y; | 259 CGFloat middle_point = webViewScrollViewProxy_.contentOffset.y; |
265 // Move up a bit, multiple times | 260 // Move up a bit, multiple times |
266 for (float i = 0.0; i < (kHeaderHeight / 3.0); i++) { | 261 for (float i = 0.0; i < (kHeaderHeight / 3.0); i++) { |
267 webViewScrollViewProxy_.get().contentOffset = | 262 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, middle_point - i); |
268 CGPointMake(0.0, middle_point - i); | |
269 } | 263 } |
270 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ | 264 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ |
271 willDecelerate:NO]; | 265 willDecelerate:NO]; |
272 EXPECT_TRUE(IsHeaderHidden()); | 266 EXPECT_TRUE(IsHeaderHidden()); |
273 } | 267 } |
274 | 268 |
275 #pragma mark - Page load. | 269 #pragma mark - Page load. |
276 | 270 |
277 TEST_F(FullscreenControllerTest, NoHideOnEnable) { | 271 TEST_F(FullscreenControllerTest, NoHideOnEnable) { |
278 [controller_ disableFullScreen]; | 272 [controller_ disableFullScreen]; |
279 webViewScrollViewProxy_.get().contentOffset = CGPointMake(0.0, 10.0); | 273 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, 10.0); |
280 EXPECT_TRUE(IsHeaderVisible()); | 274 EXPECT_TRUE(IsHeaderVisible()); |
281 | 275 |
282 [controller_ enableFullScreen]; | 276 [controller_ enableFullScreen]; |
283 | 277 |
284 EXPECT_TRUE(IsHeaderVisible()); | 278 EXPECT_TRUE(IsHeaderVisible()); |
285 } | 279 } |
286 | 280 |
287 TEST_F(FullscreenControllerTest, NoHideOnEnableDueToManualScroll) { | 281 TEST_F(FullscreenControllerTest, NoHideOnEnableDueToManualScroll) { |
288 [controller_ disableFullScreen]; | 282 [controller_ disableFullScreen]; |
289 webViewScrollViewProxy_.get().contentOffset = CGPointMake(0.0, 1.0); | 283 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, 1.0); |
290 EXPECT_TRUE(IsHeaderVisible()); | 284 EXPECT_TRUE(IsHeaderVisible()); |
291 | 285 |
292 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; | 286 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; |
293 webViewScrollViewProxy_.get().contentOffset = CGPointMake(0.0, 10.0); | 287 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, 10.0); |
294 EXPECT_TRUE(IsHeaderVisible()); | 288 EXPECT_TRUE(IsHeaderVisible()); |
295 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ | 289 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ |
296 willDecelerate:NO]; | 290 willDecelerate:NO]; |
297 | 291 |
298 [controller_ enableFullScreen]; | 292 [controller_ enableFullScreen]; |
299 | 293 |
300 EXPECT_TRUE(IsHeaderVisible()); | 294 EXPECT_TRUE(IsHeaderVisible()); |
301 } | 295 } |
302 | 296 |
303 #pragma mark - Keyboard. | 297 #pragma mark - Keyboard. |
304 | 298 |
305 TEST_F(FullscreenControllerTest, KeyboardAppearanceOnNonFullscreenPage) { | 299 TEST_F(FullscreenControllerTest, KeyboardAppearanceOnNonFullscreenPage) { |
306 // Add a textfield. | 300 // Add a textfield. |
307 base::scoped_nsobject<UITextField> textField([[UITextField alloc] init]); | 301 UITextField* textField = [[UITextField alloc] init]; |
308 AddSubViewToScrollView(textField); | 302 AddSubViewToScrollView(textField); |
309 EXPECT_TRUE(IsHeaderVisible()); | 303 EXPECT_TRUE(IsHeaderVisible()); |
310 | 304 |
311 // Show the keyboard. | 305 // Show the keyboard. |
312 [textField becomeFirstResponder]; | 306 [textField becomeFirstResponder]; |
313 EXPECT_TRUE(IsHeaderVisible()); | 307 EXPECT_TRUE(IsHeaderVisible()); |
314 | 308 |
315 // Hide the keyboard. | 309 // Hide the keyboard. |
316 [textField resignFirstResponder]; | 310 [textField resignFirstResponder]; |
317 EXPECT_TRUE(IsHeaderVisible()); | 311 EXPECT_TRUE(IsHeaderVisible()); |
318 } | 312 } |
319 | 313 |
320 // TODO(lliabraa): Fails on Xcode 6 simulator (crbug.com/392433). | 314 // TODO(lliabraa): Fails on Xcode 6 simulator (crbug.com/392433). |
321 #if TARGET_IPHONE_SIMULATOR | 315 #if TARGET_IPHONE_SIMULATOR |
322 #define MAYBE_KeyboardAppearanceOnFullscreenPage \ | 316 #define MAYBE_KeyboardAppearanceOnFullscreenPage \ |
323 KeyboardAppearanceOnFullscreenPage | 317 KeyboardAppearanceOnFullscreenPage |
324 #else | 318 #else |
325 #define MAYBE_KeyboardAppearanceOnFullscreenPage \ | 319 #define MAYBE_KeyboardAppearanceOnFullscreenPage \ |
326 KeyboardAppearanceOnFullscreenPage | 320 KeyboardAppearanceOnFullscreenPage |
327 #endif | 321 #endif |
328 TEST_F(FullscreenControllerTest, MAYBE_KeyboardAppearanceOnFullscreenPage) { | 322 TEST_F(FullscreenControllerTest, MAYBE_KeyboardAppearanceOnFullscreenPage) { |
329 // Scroll a bit to hide the toolbar. | 323 // Scroll a bit to hide the toolbar. |
330 MoveMiddleAndHide(); | 324 MoveMiddleAndHide(); |
331 | 325 |
332 // Add a textfield. | 326 // Add a textfield. |
333 base::scoped_nsobject<UITextField> textField([[UITextField alloc] init]); | 327 UITextField* textField = [[UITextField alloc] init]; |
334 AddSubViewToScrollView(textField); | 328 AddSubViewToScrollView(textField); |
335 EXPECT_TRUE(IsHeaderHidden()); | 329 EXPECT_TRUE(IsHeaderHidden()); |
336 | 330 |
337 // Show the keyboard. | 331 // Show the keyboard. |
338 [textField becomeFirstResponder]; | 332 [textField becomeFirstResponder]; |
339 EXPECT_TRUE(IsHeaderVisible()); | 333 EXPECT_TRUE(IsHeaderVisible()); |
340 | 334 |
341 // Hide the keyboard. | 335 // Hide the keyboard. |
342 [textField resignFirstResponder]; | 336 [textField resignFirstResponder]; |
343 | 337 |
344 // Toolbars are never auto-hidden. | 338 // Toolbars are never auto-hidden. |
345 EXPECT_FALSE(IsHeaderHidden()); | 339 EXPECT_FALSE(IsHeaderHidden()); |
346 } | 340 } |
347 | 341 |
348 // TODO(lliabraa): Fails on Xcode 6 simulator (crbug.com/392433). | 342 // TODO(lliabraa): Fails on Xcode 6 simulator (crbug.com/392433). |
349 #if TARGET_IPHONE_SIMULATOR | 343 #if TARGET_IPHONE_SIMULATOR |
350 #define MAYBE_KeyboardStayOnUserScrollOnNonFullscreenPage \ | 344 #define MAYBE_KeyboardStayOnUserScrollOnNonFullscreenPage \ |
351 KeyboardStayOnUserScrollOnNonFullscreenPage | 345 KeyboardStayOnUserScrollOnNonFullscreenPage |
352 #else | 346 #else |
353 #define MAYBE_KeyboardStayOnUserScrollOnNonFullscreenPage \ | 347 #define MAYBE_KeyboardStayOnUserScrollOnNonFullscreenPage \ |
354 KeyboardStayOnUserScrollOnNonFullscreenPage | 348 KeyboardStayOnUserScrollOnNonFullscreenPage |
355 #endif | 349 #endif |
356 TEST_F(FullscreenControllerTest, | 350 TEST_F(FullscreenControllerTest, |
357 MAYBE_KeyboardStayOnUserScrollOnNonFullscreenPage) { | 351 MAYBE_KeyboardStayOnUserScrollOnNonFullscreenPage) { |
358 // Add a textfield. | 352 // Add a textfield. |
359 base::scoped_nsobject<UITextField> textField([[UITextField alloc] init]); | 353 UITextField* textField = [[UITextField alloc] init]; |
360 AddSubViewToScrollView(textField); | 354 AddSubViewToScrollView(textField); |
361 EXPECT_TRUE(IsHeaderVisible()); | 355 EXPECT_TRUE(IsHeaderVisible()); |
362 | 356 |
363 // Show the keyboard. | 357 // Show the keyboard. |
364 [textField becomeFirstResponder]; | 358 [textField becomeFirstResponder]; |
365 EXPECT_TRUE(IsHeaderVisible()); | 359 EXPECT_TRUE(IsHeaderVisible()); |
366 | 360 |
367 // Scroll. | 361 // Scroll. |
368 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; | 362 [controller_ webViewScrollViewWillBeginDragging:webViewScrollViewProxy_]; |
369 webViewScrollViewProxy_.get().contentOffset = CGPointMake(0.0, 100.0); | 363 webViewScrollViewProxy_.contentOffset = CGPointMake(0.0, 100.0); |
370 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ | 364 [controller_ webViewScrollViewDidEndDragging:webViewScrollViewProxy_ |
371 willDecelerate:NO]; | 365 willDecelerate:NO]; |
372 EXPECT_TRUE(IsHeaderVisible()); | 366 EXPECT_TRUE(IsHeaderVisible()); |
373 | 367 |
374 // Hide the keyboard. | 368 // Hide the keyboard. |
375 [textField resignFirstResponder]; | 369 [textField resignFirstResponder]; |
376 EXPECT_TRUE(IsHeaderVisible()); | 370 EXPECT_TRUE(IsHeaderVisible()); |
377 } | 371 } |
378 | 372 |
379 } // namespace | 373 } // namespace |
OLD | NEW |