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..51d074853f281743e6f6bda9b4a95d13b654fd2c 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,17 @@ NSString* const kWebBookmarkTypeList = @"WebBookmarkTypeList"; |
NSString* const kWebBookmarkTypeLeaf = @"WebBookmarkTypeLeaf"; |
+BookmarkNode::MetaInfoMap MetaInfoMapFromDictionary(NSDictionary* dictionary) { |
+ BookmarkNode::MetaInfoMap meta_info_map; |
+ |
+ for (NSString* key in dictionary) { |
+ meta_info_map[base::SysNSStringToUTF8(key)] = |
+ base::SysNSStringToUTF8([dictionary objectForKey:key]); |
+ } |
+ |
+ return meta_info_map; |
+} |
+ |
void ConvertPlistToElements(NSArray* input, |
std::vector<BookmarkNodeData::Element>& elements) { |
NSUInteger len = [input count]; |
@@ -51,6 +65,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 +87,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 +156,26 @@ bool ReadNSURLPboardType(NSPasteboard* pb, |
return true; |
} |
+NSDictionary* DictionaryFromBookmarkMetaInfo( |
+ const BookmarkNode::MetaInfoMap& meta_info_map) { |
+ NSMutableDictionary* dictionary = [NSMutableDictionary dictionary]; |
+ |
+ for (BookmarkNode::MetaInfoMap::const_iterator it = meta_info_map.begin(); |
+ it != meta_info_map.end(); ++it) { |
+ [dictionary setObject:base::SysUTF8ToNSString(it->second) |
+ forKey:base::SysUTF8ToNSString(it->first)]; |
+ } |
+ |
+ return dictionary; |
+} |
+ |
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 +188,7 @@ NSArray* GetPlistForBookmarkList( |
url, @"URLString", |
kWebBookmarkTypeLeaf, kWebBookmarkType, |
idNum, kChromiumBookmarkId, |
+ metaInfoDictionary, kChromiumBookmarkMetaInfo, |
nil]; |
[plist addObject:object]; |
} else { |
@@ -164,6 +201,7 @@ NSArray* GetPlistForBookmarkList( |
children, @"Children", |
kWebBookmarkTypeList, kWebBookmarkType, |
idNum, kChromiumBookmarkId, |
+ metaInfoDictionary, kChromiumBookmarkMetaInfo, |
nil]; |
[plist addObject:object]; |
} |