Index: ios/chrome/browser/find_in_page/find_in_page_controller.mm |
diff --git a/ios/chrome/browser/find_in_page/find_in_page_controller.mm b/ios/chrome/browser/find_in_page/find_in_page_controller.mm |
index 0d1621e15ae12f2e5c816d8048dc24394cdec2ad..6871efe004a13dcfad3e95930ad61e6342b87fd0 100644 |
--- a/ios/chrome/browser/find_in_page/find_in_page_controller.mm |
+++ b/ios/chrome/browser/find_in_page/find_in_page_controller.mm |
@@ -58,6 +58,9 @@ const NSTimeInterval kRecurringPumpDelay = .01; |
- (void)processPumpResult:(BOOL)finished |
scrollPoint:(CGPoint)scrollPoint |
completionHandler:(ProceduralBlock)completionHandler; |
+// 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.
|
+- (CGPoint)limitOverscroll:(CRWWebViewScrollViewProxy*)scrollViewProxy |
+ atPoint:(CGPpoint)point; |
// Returns the associated web state. May be null. |
- (web::WebState*)webState; |
@end |
@@ -133,11 +136,24 @@ const NSTimeInterval kRecurringPumpDelay = .01; |
return [_webViewProxy scrollViewProxy]; |
} |
+- (CGPoint)limitoverscroll:(CRWWebViewScrollViewProxy*)scrollViewProxy |
+ atPoint:(CGPpoint)point { |
+ CGFloat contentHeight = scrollViewProxy.contentSize.height; |
+ CGFloat frameHeight = scrollViewProxy.frame.size.height; |
+ 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.
|
+ if (point.y > maxScroll) { |
+ point.y = maxScroll; |
+ } |
+ return point; |
+} |
+ |
- (void)processPumpResult:(BOOL)finished |
scrollPoint:(CGPoint)scrollPoint |
completionHandler:(ProceduralBlock)completionHandler { |
if (finished) { |
[_delegate willAdjustScrollPosition]; |
+ scrollPoint = [self limitOverscroll:[_webViewProxy scrollViewProxy] |
+ atPoint:scrollPoint]; |
[[_webViewProxy scrollViewProxy] setContentOffset:scrollPoint animated:YES]; |
if (completionHandler) |
completionHandler(); |
@@ -199,6 +215,8 @@ const NSTimeInterval kRecurringPumpDelay = .01; |
base::scoped_nsobject<FindInPageController> strongSelf([weakSelf retain]); |
if (finished) { |
[[strongSelf delegate] willAdjustScrollPosition]; |
+ 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.
|
[[strongSelf webViewScrollView] setContentOffset:point animated:YES]; |
} |
completionHandler(finished); |
@@ -212,12 +230,7 @@ const NSTimeInterval kRecurringPumpDelay = .01; |
[_findInPageJsManager nextMatchWithCompletionHandler:^(CGPoint point) { |
base::scoped_nsobject<FindInPageController> strongSelf([weakSelf retain]); |
[[strongSelf delegate] willAdjustScrollPosition]; |
- CGFloat contentHeight = [strongSelf webViewScrollView].contentSize.height; |
- CGFloat frameHeight = [strongSelf webViewScrollView].frame.size.height; |
- CGFloat maxScroll = fmax(0, contentHeight - frameHeight); |
- if (point.y > maxScroll) { |
- point.y = maxScroll; |
- } |
+ 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.
|
[[strongSelf webViewScrollView] setContentOffset:point animated:YES]; |
if (completionHandler) |
completionHandler(); |
@@ -232,6 +245,7 @@ const NSTimeInterval kRecurringPumpDelay = .01; |
[_findInPageJsManager previousMatchWithCompletionHandler:^(CGPoint point) { |
base::scoped_nsobject<FindInPageController> strongSelf([weakSelf retain]); |
[[strongSelf delegate] willAdjustScrollPosition]; |
+ 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.
|
[[strongSelf webViewScrollView] setContentOffset:point animated:YES]; |
if (completionHandler) |
completionHandler(); |