diff options
author | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-21 22:04:23 +0000 |
---|---|---|
committer | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-21 22:04:23 +0000 |
commit | 1fd60260027fd803432e3bccdc51a690e434f3a3 (patch) | |
tree | 0760c0b503ab3769a1efc20993b917ad4a543e1a /chrome/browser/cocoa/cookies_window_controller.mm | |
parent | f22abbe4b9b02aa655975b48285216bcc078b775 (diff) | |
download | chromium_src-1fd60260027fd803432e3bccdc51a690e434f3a3.zip chromium_src-1fd60260027fd803432e3bccdc51a690e434f3a3.tar.gz chromium_src-1fd60260027fd803432e3bccdc51a690e434f3a3.tar.bz2 |
[Mac] Fix a crash in the cookies manager that was caused by an invalid selection.
XIB change: Change the "Remove" button's |enabled| binding from just looking at
the count of the selection to FilesOwner.removeButtonEnabled.
BUG=32627
TEST=Covered by unit tests.
TEST=Open cookies manager. Select one item, make sure "Remove" is enabled.
TEST=Open cookies manager. Try to select two items. You shouldn't be able to.
Review URL: http://codereview.chromium.org/546102
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@36796 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/cookies_window_controller.mm')
-rw-r--r-- | chrome/browser/cocoa/cookies_window_controller.mm | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/chrome/browser/cocoa/cookies_window_controller.mm b/chrome/browser/cocoa/cookies_window_controller.mm index 8325f3a..227c0b3 100644 --- a/chrome/browser/cocoa/cookies_window_controller.mm +++ b/chrome/browser/cocoa/cookies_window_controller.mm @@ -128,6 +128,7 @@ CocoaCookieTreeNode* CookiesTreeModelObserverBridge::FindCocoaNode( @implementation CookiesWindowController +@synthesize removeButtonEnabled = removeButtonEnabled_; @synthesize treeController = treeController_; - (id)initWithProfile:(Profile*)profile { @@ -262,6 +263,33 @@ CocoaCookieTreeNode* CookiesTreeModelObserverBridge::FindCocoaNode( } } +- (void)outlineViewSelectionDidChange:(NSNotification*)notif { + // Multi-selection should be disabled in the UI, but for sanity, double-check + // that they can't do it here. + NSUInteger count = [[treeController_ selectedObjects] count]; + if (count != 1U) { + DCHECK_LT(count, 1U) << "User was able to select more than 1 cookie node!"; + [self setRemoveButtonEnabled:NO]; + return; + } + + // Go through the selection's indexPath and make sure that the node that is + // being referenced actually exists in the Cocoa model. + NSIndexPath* selection = [treeController_ selectionIndexPath]; + NSUInteger length = [selection length]; + CocoaCookieTreeNode* node = [self cocoaTreeModel]; + for (NSUInteger i = 0; i < length; ++i) { + NSUInteger childIndex = [selection indexAtPosition:i]; + if (childIndex >= [[node children] count]) { + [self setRemoveButtonEnabled:NO]; + return; + } + node = [[node children] objectAtIndex:childIndex]; + } + + [self setRemoveButtonEnabled:YES]; +} + #pragma mark Unit Testing - (CookiesTreeModelObserverBridge*)modelObserver { |