Index: ios/chrome/browser/ui/browser_view_controller.mm |
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm |
index 32bc6f7e3a4089fbbfc9fabdf277b6dfc4630e54..3ef6c50604247cf3f4edf2e0d299e8e6d2eb6c91 100644 |
--- a/ios/chrome/browser/ui/browser_view_controller.mm |
+++ b/ios/chrome/browser/ui/browser_view_controller.mm |
@@ -295,20 +295,7 @@ bool IsURLAllowedInIncognito(const GURL& url) { |
// they are added to the tab model. |
NSString* const kNativeControllerTemporaryKey = @"NativeControllerTemporaryKey"; |
-// Helper function to return the FindInPageController for the given |tab|. If |
-// |tab| is nullptr or has no FindTabHelper, returns nil. |
-FindInPageController* GetFindInPageController(Tab* tab) { |
- if (!tab) { |
- return nil; |
- } |
- FindTabHelper* helper = FindTabHelper::FromWebState(tab.webState); |
- if (!helper) { |
- return nil; |
- } |
- return helper->GetController(); |
-} |
- |
-} // anonymous namespace |
+} // namespace |
@interface BrowserViewController ()<AppRatingPromptDelegate, |
ContextualSearchControllerDelegate, |
@@ -1095,15 +1082,13 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver { |
- (BOOL)canShowFindBar { |
// Make sure web controller can handle find in page. |
Tab* tab = [_model currentTab]; |
- FindInPageController* controller = GetFindInPageController(tab); |
- if (![controller canFindInPage]) |
- return NO; |
- |
- // Don't show twice. |
- if (controller.findInPageModel.enabled) |
+ if (!tab) { |
return NO; |
+ } |
- return YES; |
+ auto* helper = FindTabHelper::FromWebState(tab.webState); |
+ return (helper && helper->CurrentPageSupportsFindInPage() && |
+ !helper->IsFindUIActive()); |
} |
- (web::UserAgentType)userAgentType { |
@@ -1475,9 +1460,6 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver { |
// Hide find bar when navigating to a new page. |
[self hideFindBarWithAnimation:NO]; |
- FindInPageController* controller = GetFindInPageController(tab); |
- controller.findInPageModel.enabled = NO; |
- |
if (tab == [_model currentTab]) { |
// TODO(pinkerton): Fill in here about hiding the forward button on |
// navigation. |
@@ -1930,8 +1912,8 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver { |
[[_toolbarController toolsPopupController] |
setIsTabLoading:_toolbarModelIOS->IsLoading()]; |
- FindInPageController* controller = GetFindInPageController(tab); |
- if (controller.findInPageModel.enabled) { |
+ auto* findHelper = FindTabHelper::FromWebState(tab.webState); |
+ if (findHelper && findHelper->IsFindUIActive()) { |
[self showFindBarWithAnimation:NO |
selectText:YES |
shouldFocus:[_findBarController isFocused]]; |
@@ -3910,6 +3892,7 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver { |
if (!_model || !_browserState) |
return; |
+ Tab* currentTab = [_model currentTab]; |
switch (command) { |
case IDC_BACK: |
@@ -3930,23 +3913,21 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver { |
[self initFindBarForTab]; |
break; |
case IDC_FIND_NEXT: { |
- FindInPageController* findInPageController = |
- GetFindInPageController([_model currentTab]); |
+ DCHECK(currentTab); |
// TODO(crbug.com/603524): Reshow find bar if necessary. |
- [findInPageController findNextStringInPageWithCompletionHandler:^{ |
- FindInPageModel* model = findInPageController.findInPageModel; |
- [_findBarController updateResultsCount:model]; |
- }]; |
+ FindTabHelper::FromWebState(currentTab.webState) |
+ ->ContinueFinding(FindTabHelper::FORWARD, ^(FindInPageModel* model) { |
+ [_findBarController updateResultsCount:model]; |
+ }); |
break; |
} |
case IDC_FIND_PREVIOUS: { |
- FindInPageController* findInPageController = |
- GetFindInPageController([_model currentTab]); |
+ DCHECK(currentTab); |
// TODO(crbug.com/603524): Reshow find bar if necessary. |
- [findInPageController findPreviousStringInPageWithCompletionHandler:^{ |
- FindInPageModel* model = findInPageController.findInPageModel; |
- [_findBarController updateResultsCount:model]; |
- }]; |
+ FindTabHelper::FromWebState(currentTab.webState) |
+ ->ContinueFinding(FindTabHelper::REVERSE, ^(FindInPageModel* model) { |
+ [_findBarController updateResultsCount:model]; |
+ }); |
break; |
} |
case IDC_FIND_CLOSE: |
@@ -4158,11 +4139,14 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver { |
Tab* currentTab = [_model currentTab]; |
[currentTab dismissModals]; |
- FindInPageController* findInPageController = |
- GetFindInPageController(currentTab); |
- [findInPageController disableFindInPageWithCompletionHandler:^{ |
- [self updateFindBar:NO shouldFocus:NO]; |
- }]; |
+ if (currentTab) { |
+ auto* findHelper = FindTabHelper::FromWebState(currentTab.webState); |
+ if (findHelper) { |
+ findHelper->StopFinding(^{ |
+ [self updateFindBar:NO shouldFocus:NO]; |
+ }); |
+ } |
+ } |
[_contextualSearchController movePanelOffscreen]; |
[_paymentRequestManager cancelRequest]; |
@@ -4267,47 +4251,47 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver { |
[[FindBarControllerIOS alloc] initWithIncognito:_isOffTheRecord]); |
Tab* tab = [_model currentTab]; |
- FindInPageController* controller = GetFindInPageController(tab); |
- DCHECK(!controller.findInPageModel.enabled); |
- controller.findInPageModel.enabled = YES; |
+ DCHECK(tab); |
+ auto* helper = FindTabHelper::FromWebState(tab.webState); |
+ DCHECK(!helper->IsFindUIActive()); |
+ helper->SetFindUIActive(true); |
[self showFindBarWithAnimation:YES selectText:YES shouldFocus:YES]; |
} |
- (void)searchFindInPage { |
- FindInPageController* findInPageController = |
- GetFindInPageController([_model currentTab]); |
+ DCHECK([_model currentTab]); |
+ auto* helper = FindTabHelper::FromWebState([_model currentTab].webState); |
base::WeakNSObject<BrowserViewController> weakSelf(self); |
- [findInPageController findStringInPage:[_findBarController searchTerm] |
- completionHandler:^{ |
- FindInPageModel* model = |
- findInPageController.findInPageModel; |
+ helper->StartFinding([_findBarController searchTerm], |
+ ^(FindInPageModel* model) { |
[_findBarController updateResultsCount:model]; |
- }]; |
+ }); |
+ |
if (!_isOffTheRecord) |
- [findInPageController saveSearchTerm]; |
+ helper->PersistSearchTerm(); |
} |
- (void)closeFindInPage { |
base::WeakNSObject<BrowserViewController> weakSelf(self); |
- FindInPageController* findInPageController = |
- GetFindInPageController([_model currentTab]); |
- [findInPageController disableFindInPageWithCompletionHandler:^{ |
- [weakSelf updateFindBar:NO shouldFocus:NO]; |
- }]; |
+ Tab* currentTab = [_model currentTab]; |
+ if (currentTab) { |
+ FindTabHelper::FromWebState(currentTab.webState)->StopFinding(^{ |
+ [weakSelf updateFindBar:NO shouldFocus:NO]; |
+ }); |
+ } |
} |
- (void)updateFindBar:(BOOL)initialUpdate shouldFocus:(BOOL)shouldFocus { |
- FindInPageController* findInPageController = |
- GetFindInPageController([_model currentTab]); |
- FindInPageModel* model = findInPageController.findInPageModel; |
- if (model.enabled) { |
+ DCHECK([_model currentTab]); |
+ auto* helper = FindTabHelper::FromWebState([_model currentTab].webState); |
+ if (helper && helper->IsFindUIActive()) { |
if (initialUpdate && !_isOffTheRecord) { |
- [findInPageController restoreSearchTerm]; |
+ helper->RestoreSearchTerm(); |
} |
[self setFramesForHeaders:[self headerViews] |
atOffset:[self currentHeaderOffset]]; |
- [_findBarController updateView:model |
+ [_findBarController updateView:helper->GetFindResult() |
initialUpdate:initialUpdate |
focusTextfield:shouldFocus]; |
} else { |