OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/find_in_page/find_in_page_controller.h" | 5 #import "ios/chrome/browser/find_in_page/find_in_page_controller.h" |
6 | 6 |
7 #import <UIKit/UIKit.h> | 7 #import <UIKit/UIKit.h> |
8 | 8 |
9 #include "base/ios/ios_util.h" | 9 #include "base/ios/ios_util.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
51 // Gives find in page more time to complete. Calls |completionHandler| with | 51 // Gives find in page more time to complete. Calls |completionHandler| with |
52 // a BOOL indicating if the find operation was successfull. |completionHandler| | 52 // a BOOL indicating if the find operation was successfull. |completionHandler| |
53 // can be nil. | 53 // can be nil. |
54 - (void)pumpFindStringInPageWithCompletionHandler: | 54 - (void)pumpFindStringInPageWithCompletionHandler: |
55 (void (^)(BOOL))completionHandler; | 55 (void (^)(BOOL))completionHandler; |
56 // Processes the result of a single find in page pump. Calls |completionHandler| | 56 // Processes the result of a single find in page pump. Calls |completionHandler| |
57 // if pumping is done. Re-pumps if necessary. | 57 // if pumping is done. Re-pumps if necessary. |
58 - (void)processPumpResult:(BOOL)finished | 58 - (void)processPumpResult:(BOOL)finished |
59 scrollPoint:(CGPoint)scrollPoint | 59 scrollPoint:(CGPoint)scrollPoint |
60 completionHandler:(ProceduralBlock)completionHandler; | 60 completionHandler:(ProceduralBlock)completionHandler; |
61 // Prevent overscroll. | |
sdefresne
2015/04/08 20:02:19
API recommendation: since each invocation follow t
justincohen
2015/04/08 20:25:51
messaged offline about this.
| |
62 - (CGPoint)limitOverscroll:(CRWWebViewScrollViewProxy*)scrollViewProxy | |
63 atPoint:(CGPpoint)point; | |
61 // Returns the associated web state. May be null. | 64 // Returns the associated web state. May be null. |
62 - (web::WebState*)webState; | 65 - (web::WebState*)webState; |
63 @end | 66 @end |
64 | 67 |
65 @implementation FindInPageController { | 68 @implementation FindInPageController { |
66 @private | 69 @private |
67 // Object that manages find_in_page.js injection into the web view. | 70 // Object that manages find_in_page.js injection into the web view. |
68 JsFindinpageManager* _findInPageJsManager; | 71 JsFindinpageManager* _findInPageJsManager; |
69 id<FindInPageControllerDelegate> _delegate; | 72 id<FindInPageControllerDelegate> _delegate; |
70 | 73 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
126 | 129 |
127 // Initialize the module with our frame size. | 130 // Initialize the module with our frame size. |
128 CGRect frame = [_webViewProxy bounds]; | 131 CGRect frame = [_webViewProxy bounds]; |
129 [_findInPageJsManager setWidth:frame.size.width height:frame.size.height]; | 132 [_findInPageJsManager setWidth:frame.size.width height:frame.size.height]; |
130 } | 133 } |
131 | 134 |
132 - (CRWWebViewScrollViewProxy*)webViewScrollView { | 135 - (CRWWebViewScrollViewProxy*)webViewScrollView { |
133 return [_webViewProxy scrollViewProxy]; | 136 return [_webViewProxy scrollViewProxy]; |
134 } | 137 } |
135 | 138 |
139 - (CGPoint)limitoverscroll:(CRWWebViewScrollViewProxy*)scrollViewProxy | |
140 atPoint:(CGPpoint)point { | |
141 CGFloat contentHeight = scrollViewProxy.contentSize.height; | |
142 CGFloat frameHeight = scrollViewProxy.frame.size.height; | |
143 CGFloat maxScroll = fmax(0, contentHeight - frameHeight); | |
sdefresne
2015/04/08 20:02:19
nit: please use std::max() from <cmath>
justincohen
2015/04/08 20:25:51
Done.
| |
144 if (point.y > maxScroll) { | |
145 point.y = maxScroll; | |
146 } | |
147 return point; | |
148 } | |
149 | |
136 - (void)processPumpResult:(BOOL)finished | 150 - (void)processPumpResult:(BOOL)finished |
137 scrollPoint:(CGPoint)scrollPoint | 151 scrollPoint:(CGPoint)scrollPoint |
138 completionHandler:(ProceduralBlock)completionHandler { | 152 completionHandler:(ProceduralBlock)completionHandler { |
139 if (finished) { | 153 if (finished) { |
140 [_delegate willAdjustScrollPosition]; | 154 [_delegate willAdjustScrollPosition]; |
155 scrollPoint = [self limitOverscroll:[_webViewProxy scrollViewProxy] | |
156 atPoint:scrollPoint]; | |
141 [[_webViewProxy scrollViewProxy] setContentOffset:scrollPoint animated:YES]; | 157 [[_webViewProxy scrollViewProxy] setContentOffset:scrollPoint animated:YES]; |
142 if (completionHandler) | 158 if (completionHandler) |
143 completionHandler(); | 159 completionHandler(); |
144 } else { | 160 } else { |
145 [self performSelector:@selector(startPumpingWithCompletionHandler:) | 161 [self performSelector:@selector(startPumpingWithCompletionHandler:) |
146 withObject:completionHandler | 162 withObject:completionHandler |
147 afterDelay:kRecurringPumpDelay]; | 163 afterDelay:kRecurringPumpDelay]; |
148 } | 164 } |
149 } | 165 } |
150 | 166 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
192 } | 208 } |
193 | 209 |
194 - (void)pumpFindStringInPageWithCompletionHandler: | 210 - (void)pumpFindStringInPageWithCompletionHandler: |
195 (void (^)(BOOL))completionHandler { | 211 (void (^)(BOOL))completionHandler { |
196 base::WeakNSObject<FindInPageController> weakSelf(self); | 212 base::WeakNSObject<FindInPageController> weakSelf(self); |
197 [_findInPageJsManager pumpWithCompletionHandler:^(BOOL finished, | 213 [_findInPageJsManager pumpWithCompletionHandler:^(BOOL finished, |
198 CGPoint point) { | 214 CGPoint point) { |
199 base::scoped_nsobject<FindInPageController> strongSelf([weakSelf retain]); | 215 base::scoped_nsobject<FindInPageController> strongSelf([weakSelf retain]); |
200 if (finished) { | 216 if (finished) { |
201 [[strongSelf delegate] willAdjustScrollPosition]; | 217 [[strongSelf delegate] willAdjustScrollPosition]; |
218 point = | |
219 [self limitOverscroll:[strongSelf webViewScrollView] atPoint:point]; | |
sdefresne
2015/04/08 20:02:18
point = [strongSelf limitOverscroll:[strongSelf we
justincohen
2015/04/08 20:25:51
Done.
| |
202 [[strongSelf webViewScrollView] setContentOffset:point animated:YES]; | 220 [[strongSelf webViewScrollView] setContentOffset:point animated:YES]; |
203 } | 221 } |
204 completionHandler(finished); | 222 completionHandler(finished); |
205 }]; | 223 }]; |
206 } | 224 } |
207 | 225 |
208 - (void)findNextStringInPageWithCompletionHandler: | 226 - (void)findNextStringInPageWithCompletionHandler: |
209 (ProceduralBlock)completionHandler { | 227 (ProceduralBlock)completionHandler { |
210 [self initFindInPage]; | 228 [self initFindInPage]; |
211 base::WeakNSObject<FindInPageController> weakSelf(self); | 229 base::WeakNSObject<FindInPageController> weakSelf(self); |
212 [_findInPageJsManager nextMatchWithCompletionHandler:^(CGPoint point) { | 230 [_findInPageJsManager nextMatchWithCompletionHandler:^(CGPoint point) { |
213 base::scoped_nsobject<FindInPageController> strongSelf([weakSelf retain]); | 231 base::scoped_nsobject<FindInPageController> strongSelf([weakSelf retain]); |
214 [[strongSelf delegate] willAdjustScrollPosition]; | 232 [[strongSelf delegate] willAdjustScrollPosition]; |
215 CGFloat contentHeight = [strongSelf webViewScrollView].contentSize.height; | 233 point = [self limitOverscroll:[strongSelf webViewScrollView] atPoint:point]; |
sdefresne
2015/04/08 20:02:18
point = [strongSelf limitOverscroll:[strongSelf we
justincohen
2015/04/08 20:25:51
Done.
| |
216 CGFloat frameHeight = [strongSelf webViewScrollView].frame.size.height; | |
217 CGFloat maxScroll = fmax(0, contentHeight - frameHeight); | |
218 if (point.y > maxScroll) { | |
219 point.y = maxScroll; | |
220 } | |
221 [[strongSelf webViewScrollView] setContentOffset:point animated:YES]; | 234 [[strongSelf webViewScrollView] setContentOffset:point animated:YES]; |
222 if (completionHandler) | 235 if (completionHandler) |
223 completionHandler(); | 236 completionHandler(); |
224 }]; | 237 }]; |
225 } | 238 } |
226 | 239 |
227 // Highlight the previous search match, update model and scroll to match. | 240 // Highlight the previous search match, update model and scroll to match. |
228 - (void)findPreviousStringInPageWithCompletionHandler: | 241 - (void)findPreviousStringInPageWithCompletionHandler: |
229 (ProceduralBlock)completionHandler { | 242 (ProceduralBlock)completionHandler { |
230 [self initFindInPage]; | 243 [self initFindInPage]; |
231 base::WeakNSObject<FindInPageController> weakSelf(self); | 244 base::WeakNSObject<FindInPageController> weakSelf(self); |
232 [_findInPageJsManager previousMatchWithCompletionHandler:^(CGPoint point) { | 245 [_findInPageJsManager previousMatchWithCompletionHandler:^(CGPoint point) { |
233 base::scoped_nsobject<FindInPageController> strongSelf([weakSelf retain]); | 246 base::scoped_nsobject<FindInPageController> strongSelf([weakSelf retain]); |
234 [[strongSelf delegate] willAdjustScrollPosition]; | 247 [[strongSelf delegate] willAdjustScrollPosition]; |
248 point = [self limitOverscroll:[strongSelf webViewScrollView] atPoint:point]; | |
sdefresne
2015/04/08 20:02:18
point = [strongSelf limitOverscroll:[strongSelf we
justincohen
2015/04/08 20:25:51
Done.
| |
235 [[strongSelf webViewScrollView] setContentOffset:point animated:YES]; | 249 [[strongSelf webViewScrollView] setContentOffset:point animated:YES]; |
236 if (completionHandler) | 250 if (completionHandler) |
237 completionHandler(); | 251 completionHandler(); |
238 }]; | 252 }]; |
239 } | 253 } |
240 | 254 |
241 // Remove highlights from the page and disable the model. | 255 // Remove highlights from the page and disable the model. |
242 - (void)disableFindInPageWithCompletionHandler: | 256 - (void)disableFindInPageWithCompletionHandler: |
243 (ProceduralBlock)completionHandler { | 257 (ProceduralBlock)completionHandler { |
244 if (![self canFindInPage]) | 258 if (![self canFindInPage]) |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
348 | 362 |
349 - (BOOL)canReleaseDOMLock { | 363 - (BOOL)canReleaseDOMLock { |
350 return NO; | 364 return NO; |
351 } | 365 } |
352 | 366 |
353 - (void)releaseDOMLockWithCompletionHandler:(ProceduralBlock)completionHandler { | 367 - (void)releaseDOMLockWithCompletionHandler:(ProceduralBlock)completionHandler { |
354 NOTREACHED(); | 368 NOTREACHED(); |
355 } | 369 } |
356 | 370 |
357 @end | 371 @end |
OLD | NEW |