Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(378)

Side by Side Diff: ios/chrome/browser/find_in_page/find_in_page_controller.mm

Issue 2250433003: Replaces find pasteboard with a static variable in Find in page. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Release old value Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #import <cmath> 9 #import <cmath>
10 #include <memory> 10 #include <memory>
(...skipping 12 matching lines...) Expand all
23 #import "ios/web/public/web_state/web_state_observer_bridge.h" 23 #import "ios/web/public/web_state/web_state_observer_bridge.h"
24 24
25 NSString* const kFindBarTextFieldWillBecomeFirstResponderNotification = 25 NSString* const kFindBarTextFieldWillBecomeFirstResponderNotification =
26 @"kFindBarTextFieldWillBecomeFirstResponderNotification"; 26 @"kFindBarTextFieldWillBecomeFirstResponderNotification";
27 NSString* const kFindBarTextFieldDidResignFirstResponderNotification = 27 NSString* const kFindBarTextFieldDidResignFirstResponderNotification =
28 @"kFindBarTextFieldDidResignFirstResponderNotification"; 28 @"kFindBarTextFieldDidResignFirstResponderNotification";
29 29
30 namespace { 30 namespace {
31 // The delay (in secs) after which the find in page string will be pumped again. 31 // The delay (in secs) after which the find in page string will be pumped again.
32 const NSTimeInterval kRecurringPumpDelay = .01; 32 const NSTimeInterval kRecurringPumpDelay = .01;
33
34 // Keeps find in page search term to be shared between different tabs. Never
35 // reset, not stored on disk.
36 static NSString* gSearchTerm;
33 } 37 }
34 38
35 @interface FindInPageController () <DOMAltering, CRWWebStateObserver> 39 @interface FindInPageController () <DOMAltering, CRWWebStateObserver>
36 // The find in page controller delegate. 40 // The find in page controller delegate.
37 @property(nonatomic, readonly) id<FindInPageControllerDelegate> delegate; 41 @property(nonatomic, readonly) id<FindInPageControllerDelegate> delegate;
38 // The web view's scroll view. 42 // The web view's scroll view.
39 @property(nonatomic, readonly) CRWWebViewScrollViewProxy* webViewScrollView; 43 @property(nonatomic, readonly) CRWWebViewScrollViewProxy* webViewScrollView;
40 44
41 // Convenience method to obtain UIPasteboardNameFind from UIPasteBoard. 45 // Sets the search term to |string|. Stored until the application quit.
42 - (UIPasteboard*)findPasteboard; 46 + (void)setSearchTerm:(NSString*)string;
47 // The search term, stored until the application quit.
48 + (NSString*)searchTerm;
49
43 // Find in Page text field listeners. 50 // Find in Page text field listeners.
44 - (void)findBarTextFieldWillBecomeFirstResponder:(NSNotification*)note; 51 - (void)findBarTextFieldWillBecomeFirstResponder:(NSNotification*)note;
45 - (void)findBarTextFieldDidResignFirstResponder:(NSNotification*)note; 52 - (void)findBarTextFieldDidResignFirstResponder:(NSNotification*)note;
46 // Keyboard listeners. 53 // Keyboard listeners.
47 - (void)keyboardDidShow:(NSNotification*)note; 54 - (void)keyboardDidShow:(NSNotification*)note;
48 - (void)keyboardWillHide:(NSNotification*)note; 55 - (void)keyboardWillHide:(NSNotification*)note;
49 // Constantly injects the find string in page until 56 // Constantly injects the find string in page until
50 // |disableFindInPageWithCompletionHandler:| is called or the find operation is 57 // |disableFindInPageWithCompletionHandler:| is called or the find operation is
51 // complete. Calls |completionHandler| if the find operation is complete. 58 // complete. Calls |completionHandler| if the find operation is complete.
52 // |completionHandler| can be nil. 59 // |completionHandler| can be nil.
(...skipping 27 matching lines...) Expand all
80 // True when a find is in progress. Used to avoid running JavaScript during 87 // True when a find is in progress. Used to avoid running JavaScript during
81 // disable when there is nothing to clear. 88 // disable when there is nothing to clear.
82 BOOL _findStringStarted; 89 BOOL _findStringStarted;
83 90
84 // Bridge to observe the web state from Objective-C. 91 // Bridge to observe the web state from Objective-C.
85 std::unique_ptr<web::WebStateObserverBridge> _webStateObserverBridge; 92 std::unique_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
86 } 93 }
87 94
88 @synthesize delegate = _delegate; 95 @synthesize delegate = _delegate;
89 96
97 + (void)setSearchTerm:(NSString*)string {
98 [gSearchTerm release];
99 gSearchTerm = [string copy];
100 }
101
102 + (NSString*)searchTerm {
103 return gSearchTerm;
104 }
105
90 - (id)initWithWebState:(web::WebState*)webState 106 - (id)initWithWebState:(web::WebState*)webState
91 delegate:(id<FindInPageControllerDelegate>)delegate { 107 delegate:(id<FindInPageControllerDelegate>)delegate {
92 self = [super init]; 108 self = [super init];
93 if (self) { 109 if (self) {
94 DCHECK(delegate); 110 DCHECK(delegate);
95 _findInPageJsManager = base::mac::ObjCCastStrict<JsFindinpageManager>( 111 _findInPageJsManager = base::mac::ObjCCastStrict<JsFindinpageManager>(
96 [webState->GetJSInjectionReceiver() 112 [webState->GetJSInjectionReceiver()
97 instanceOfClass:[JsFindinpageManager class]]); 113 instanceOfClass:[JsFindinpageManager class]]);
98 _delegate = delegate; 114 _delegate = delegate;
99 _webStateObserverBridge.reset( 115 _webStateObserverBridge.reset(
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 // handler. 297 // handler.
282 if (_findStringStarted) { 298 if (_findStringStarted) {
283 [_findInPageJsManager disableWithCompletionHandler:handler]; 299 [_findInPageJsManager disableWithCompletionHandler:handler];
284 _findStringStarted = NO; 300 _findStringStarted = NO;
285 } else { 301 } else {
286 handler(); 302 handler();
287 } 303 }
288 } 304 }
289 305
290 - (void)saveSearchTerm { 306 - (void)saveSearchTerm {
291 [self findPasteboard].string = [[self findInPageModel] text]; 307 [[self class] setSearchTerm:[[self findInPageModel] text]];
292 } 308 }
293 309
294 - (void)restoreSearchTerm { 310 - (void)restoreSearchTerm {
295 // Pasteboards always return nil in background: 311 // Pasteboards always return nil in background:
296 if ([[UIApplication sharedApplication] applicationState] != 312 if ([[UIApplication sharedApplication] applicationState] !=
297 UIApplicationStateActive) { 313 UIApplicationStateActive) {
298 return; 314 return;
299 } 315 }
300 316
301 NSString* term = [self findPasteboard].string; 317 NSString* term = [[self class] searchTerm];
302 [[self findInPageModel] updateQuery:(term ? term : @"") matches:0]; 318 [[self findInPageModel] updateQuery:(term ? term : @"") matches:0];
303 } 319 }
304 320
305 - (UIPasteboard*)findPasteboard {
306 return [UIPasteboard pasteboardWithName:UIPasteboardNameFind create:NO];
307 }
308
309 - (web::WebState*)webState { 321 - (web::WebState*)webState {
310 return _webStateObserverBridge ? _webStateObserverBridge->web_state() 322 return _webStateObserverBridge ? _webStateObserverBridge->web_state()
311 : nullptr; 323 : nullptr;
312 } 324 }
313 325
314 #pragma mark - Notification listeners 326 #pragma mark - Notification listeners
315 327
316 - (void)findBarTextFieldWillBecomeFirstResponder:(NSNotification*)note { 328 - (void)findBarTextFieldWillBecomeFirstResponder:(NSNotification*)note {
317 // Listen to the keyboard appearance notifications. 329 // Listen to the keyboard appearance notifications.
318 NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter]; 330 NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter];
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 389
378 - (BOOL)canReleaseDOMLock { 390 - (BOOL)canReleaseDOMLock {
379 return NO; 391 return NO;
380 } 392 }
381 393
382 - (void)releaseDOMLockWithCompletionHandler:(ProceduralBlock)completionHandler { 394 - (void)releaseDOMLockWithCompletionHandler:(ProceduralBlock)completionHandler {
383 NOTREACHED(); 395 NOTREACHED();
384 } 396 }
385 397
386 @end 398 @end
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698