Chromium Code Reviews| Index: components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm |
| diff --git a/components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm b/components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm |
| index eec254058879ba08454f461f247dc905d897a3d0..900b223373283b7e080f550f7d3143f034e95ccd 100644 |
| --- a/components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm |
| +++ b/components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm |
| @@ -31,6 +31,9 @@ NSString* const kChromiumProfilePathPboardType = |
| // of one profile. |
| NSString* const kChromiumBookmarkId = @"ChromiumBookmarkId"; |
| +// Internal bookmark meta info dictionary for a bookmark node. |
| +NSString* const kChromiumBookmarkMetaInfo = @"ChromiumBookmarkMetaInfo"; |
| + |
| // Mac WebKit uses this type, declared in |
| // WebKit/mac/History/WebURLsWithTitles.h. |
| NSString* const kCrWebURLsWithTitlesPboardType = @"WebURLsWithTitlesPboardType"; |
| @@ -42,6 +45,18 @@ NSString* const kWebBookmarkTypeList = @"WebBookmarkTypeList"; |
| NSString* const kWebBookmarkTypeLeaf = @"WebBookmarkTypeLeaf"; |
| +BookmarkNode::MetaInfoMap MetaInfoMapFromDictionary(NSDictionary* dictionary) { |
| + BookmarkNode::MetaInfoMap meta_info_map; |
| + |
| + for (NSString* key in dictionary) { |
| + NSString* value = dictionary[key]; |
| + meta_info_map[base::SysNSStringToUTF8(key)] = |
| + base::SysNSStringToUTF8(value); |
| + } |
| + |
| + return meta_info_map; |
| +} |
| + |
| void ConvertPlistToElements(NSArray* input, |
| std::vector<BookmarkNodeData::Element>& elements) { |
| NSUInteger len = [input count]; |
| @@ -51,6 +66,12 @@ void ConvertPlistToElements(NSArray* input, |
| int64 node_id = |
| [[pboardBookmark objectForKey:kChromiumBookmarkId] longLongValue]; |
| new_node->set_id(node_id); |
| + |
| + NSDictionary* metaInfoDictionary = |
| + [pboardBookmark objectForKey:kChromiumBookmarkMetaInfo]; |
| + if (metaInfoDictionary) |
| + new_node->SetMetaInfoMap(MetaInfoMapFromDictionary(metaInfoDictionary)); |
| + |
| BOOL is_folder = [[pboardBookmark objectForKey:kWebBookmarkType] |
| isEqualToString:kWebBookmarkTypeList]; |
| if (is_folder) { |
| @@ -67,9 +88,10 @@ void ConvertPlistToElements(NSArray* input, |
| new_node->set_url(GURL(base::SysNSStringToUTF8(urlString))); |
| } |
| BookmarkNodeData::Element e = BookmarkNodeData::Element(new_node.get()); |
| - if(is_folder) |
| + if (is_folder) { |
| ConvertPlistToElements([pboardBookmark objectForKey:@"Children"], |
| e.children); |
| + } |
| elements.push_back(e); |
| } |
| } |
| @@ -135,11 +157,27 @@ bool ReadNSURLPboardType(NSPasteboard* pb, |
| return true; |
| } |
| +NSDictionary* DictionaryFromBookmarkMetaInfo( |
|
sky
2014/07/30 17:17:48
I'm surprised we don't have some general function
Jiang Jiang
2014/07/31 10:05:56
Can't find anything in base at least.
|
| + const BookmarkNode::MetaInfoMap& meta_info_map) { |
| + NSMutableDictionary* dictionary = |
| + [[NSMutableDictionary alloc] initWithCapacity:meta_info_map.size()]; |
|
Avi (use Gerrit)
2014/07/30 17:45:10
You can do
NSMutableDictionary* dictionary = [NSM
Jiang Jiang
2014/07/31 10:05:56
Done.
|
| + |
| + for (BookmarkNode::MetaInfoMap::const_iterator it = meta_info_map.begin(); |
| + it != meta_info_map.end(); ++it) { |
| + dictionary[base::SysUTF8ToNSString(it->first)] = |
| + base::SysUTF8ToNSString(it->second); |
| + } |
| + |
| + return [dictionary autorelease]; |
| +} |
| + |
| NSArray* GetPlistForBookmarkList( |
| const std::vector<BookmarkNodeData::Element>& elements) { |
| NSMutableArray* plist = [NSMutableArray array]; |
| for (size_t i = 0; i < elements.size(); ++i) { |
| BookmarkNodeData::Element element = elements[i]; |
| + NSDictionary* metaInfoDictionary = |
| + DictionaryFromBookmarkMetaInfo(element.meta_info_map); |
| if (element.is_url) { |
| NSString* title = base::SysUTF16ToNSString(element.title); |
| NSString* url = base::SysUTF8ToNSString(element.url.spec()); |
| @@ -152,6 +190,7 @@ NSArray* GetPlistForBookmarkList( |
| url, @"URLString", |
| kWebBookmarkTypeLeaf, kWebBookmarkType, |
| idNum, kChromiumBookmarkId, |
| + metaInfoDictionary, kChromiumBookmarkMetaInfo, |
| nil]; |
| [plist addObject:object]; |
| } else { |
| @@ -164,6 +203,7 @@ NSArray* GetPlistForBookmarkList( |
| children, @"Children", |
| kWebBookmarkTypeList, kWebBookmarkType, |
| idNum, kChromiumBookmarkId, |
| + metaInfoDictionary, kChromiumBookmarkMetaInfo, |
| nil]; |
| [plist addObject:object]; |
| } |