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

Side by Side Diff: chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_editor.mm

Issue 7639022: Strip control characters from omnibox input without losing attributes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 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 | Annotate | Revision Log
« 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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_editor.h" 5 #import "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_editor.h"
6 6
7 #include "base/string_util.h" 7 #include "base/string_util.h"
8 #include "base/sys_string_conversions.h" 8 #include "base/sys_string_conversions.h"
9 #include "chrome/app/chrome_command_ids.h" // IDC_* 9 #include "chrome/app/chrome_command_ids.h" // IDC_*
10 #include "chrome/browser/ui/browser_list.h" 10 #include "chrome/browser/ui/browser_list.h"
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 } 268 }
269 269
270 // (URLDropTarget protocol) 270 // (URLDropTarget protocol)
271 - (BOOL)performDragOperation:(id<NSDraggingInfo>)sender { 271 - (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
272 return [dropHandler_ performDragOperation:sender]; 272 return [dropHandler_ performDragOperation:sender];
273 } 273 }
274 274
275 // Prevent control characters from being entered into the Omnibox. 275 // Prevent control characters from being entered into the Omnibox.
276 // This is invoked for keyboard entry, not for pasting. 276 // This is invoked for keyboard entry, not for pasting.
277 - (void)insertText:(id)aString { 277 - (void)insertText:(id)aString {
278 // This method is documented as received either |NSString| or
279 // |NSAttributedString|. The autocomplete code will restyle the
280 // results in any case, so simplify by always using |NSString|.
281 if ([aString isKindOfClass:[NSAttributedString class]])
282 aString = [aString string];
283
284 // Repeatedly remove control characters. The loop will only ever 278 // Repeatedly remove control characters. The loop will only ever
285 // execute at allwhen the user enters control characters (using 279 // execute at all when the user enters control characters (using
286 // Ctrl-Alt- or Ctrl-Q). Making this generally efficient would 280 // Ctrl-Alt- or Ctrl-Q). Making this generally efficient would
287 // probably be a loss, since the input always seems to be a single 281 // probably be a loss, since the input always seems to be a single
288 // character. 282 // character.
289 NSRange range = [aString rangeOfCharacterFromSet:forbiddenCharacters_]; 283 if ([aString isKindOfClass:[NSAttributedString class]]) {
290 while (range.location != NSNotFound) { 284 NSRange range =
291 aString = [aString stringByReplacingCharactersInRange:range withString:@""]; 285 [[aString string] rangeOfCharacterFromSet:forbiddenCharacters_];
292 range = [aString rangeOfCharacterFromSet:forbiddenCharacters_]; 286 while (range.location != NSNotFound) {
287 aString = [[aString mutableCopy] autorelease];
Mark Mentovai 2011/08/12 19:49:24 Technically you only need to make the copy the fir
Avi (use Gerrit) 2011/08/12 19:55:16 True, but... 99.99999% of the time there are no c
Mark Mentovai 2011/08/12 19:57:02 Avi wrote:
288 [aString deleteCharactersInRange:range];
289 range = [[aString string] rangeOfCharacterFromSet:forbiddenCharacters_];
290 }
291 DCHECK_EQ(range.length, 0U);
292 } else {
293 NSRange range = [aString rangeOfCharacterFromSet:forbiddenCharacters_];
294 while (range.location != NSNotFound) {
295 aString =
296 [aString stringByReplacingCharactersInRange:range withString:@""];
297 range = [aString rangeOfCharacterFromSet:forbiddenCharacters_];
298 }
299 DCHECK_EQ(range.length, 0U);
293 } 300 }
294 DCHECK_EQ(range.length, 0U);
295 301
296 // NOTE: If |aString| is empty, this intentionally replaces the 302 // NOTE: If |aString| is empty, this intentionally replaces the
297 // selection with empty. This seems consistent with the case where 303 // selection with empty. This seems consistent with the case where
298 // the input contained a mixture of characters and the string ended 304 // the input contained a mixture of characters and the string ended
299 // up not empty. 305 // up not empty.
300 [super insertText:aString]; 306 [super insertText:aString];
301 } 307 }
302 308
303 - (void)setMarkedText:(id)aString selectedRange:(NSRange)selRange { 309 - (void)setMarkedText:(id)aString selectedRange:(NSRange)selRange {
304 if (![self hasMarkedText]) { 310 if (![self hasMarkedText]) {
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 - (void)mouseDown:(NSEvent*)theEvent { 433 - (void)mouseDown:(NSEvent*)theEvent {
428 // Close the popup before processing the event. 434 // Close the popup before processing the event.
429 AutocompleteTextFieldObserver* observer = [self observer]; 435 AutocompleteTextFieldObserver* observer = [self observer];
430 if (observer) 436 if (observer)
431 observer->ClosePopup(); 437 observer->ClosePopup();
432 438
433 [super mouseDown:theEvent]; 439 [super mouseDown:theEvent];
434 } 440 }
435 441
436 @end 442 @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