| 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 |