summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/cookies_window_controller.mm
diff options
context:
space:
mode:
authorrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-21 22:04:23 +0000
committerrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-21 22:04:23 +0000
commit1fd60260027fd803432e3bccdc51a690e434f3a3 (patch)
tree0760c0b503ab3769a1efc20993b917ad4a543e1a /chrome/browser/cocoa/cookies_window_controller.mm
parentf22abbe4b9b02aa655975b48285216bcc078b775 (diff)
downloadchromium_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.mm28
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 {