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 3 // found in the LICENSE file. 4 5 #import "chrome/browser/ui/cocoa/content_settings/cookie_tree_node.h" 6 7 #include "base/sys_string_conversions.h" 8 9 @implementation CocoaCookieTreeNode 10 11 - (id)initWithNode:(CookieTreeNode*)node { 12 if ((self = [super init])) { 13 DCHECK(node); 14 treeNode_ = node; 15 [self rebuild]; 16 } 17 return self; 18 } 19 20 - (void)rebuild { 21 title_.reset([base::SysUTF16ToNSString(treeNode_->GetTitle()) retain]); 22 children_.reset(); 23 // The tree node assumes ownership of the cookie details object 24 details_.reset([[CocoaCookieDetails createFromCookieTreeNode:(treeNode_)] 25 retain]); 26 } 27 28 - (NSString*)title { 29 return title_.get(); 30 } 31 32 - (CocoaCookieDetailsType)nodeType { 33 return [details_.get() type]; 34 } 35 36 - (ui::TreeModelNode*)treeNode { 37 return treeNode_; 38 } 39 40 - (NSMutableArray*)mutableChildren { 41 if (!children_.get()) { 42 const int childCount = treeNode_->child_count(); 43 children_.reset([[NSMutableArray alloc] initWithCapacity:childCount]); 44 for (int i = 0; i < childCount; ++i) { 45 CookieTreeNode* child = treeNode_->GetChild(i); 46 scoped_nsobject<CocoaCookieTreeNode> childNode( 47 [[CocoaCookieTreeNode alloc] initWithNode:child]); 48 [children_ addObject:childNode.get()]; 49 } 50 } 51 return children_.get(); 52 } 53 54 - (NSArray*)children { 55 return [self mutableChildren]; 56 } 57 58 - (BOOL)isLeaf { 59 return [self nodeType] != kCocoaCookieDetailsTypeFolder; 60 }; 61 62 - (NSString*)description { 63 NSString* format = 64 @"<CocoaCookieTreeNode @ %p (title=%@, nodeType=%d, childCount=%u)"; 65 return [NSString stringWithFormat:format, self, [self title], 66 [self nodeType], [[self children] count]]; 67 } 68 69 - (CocoaCookieDetails*)details { 70 return details_; 71 } 72 73 @end 74