Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2304)

Unified Diff: components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm

Issue 1855583002: Refactor more clipboard/bookmark logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@temp15_dnd
Patch Set: Comments from avi. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/cocoa/url_drop_target.mm ('k') | ui/base/clipboard/clipboard_mac.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1aac917376f40074b6366a33517eabbdcb982b2d..a2abbe871b71ed00e3b7784f32b977ec222ccd1d 100644
--- a/components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm
+++ b/components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm
@@ -12,22 +12,19 @@
#include "base/strings/sys_string_conversions.h"
#include "components/bookmarks/browser/bookmark_node.h"
#include "ui/base/clipboard/clipboard.h"
+#include "ui/base/clipboard/clipboard_util_mac.h"
NSString* const kBookmarkDictionaryListPboardType =
- @"BookmarkDictionaryListPboardType";
+ @"com.google.chrome.BookmarkDictionaryListPboardType";
namespace bookmarks {
namespace {
-// An unofficial standard pasteboard title type to be provided alongside the
-// |NSURLPboardType|.
-NSString* const kNSURLTitlePboardType = @"public.url-name";
-
// Pasteboard type used to store profile path to determine which profile
// a set of bookmarks came from.
NSString* const kChromiumProfilePathPboardType =
- @"ChromiumProfilePathPboardType";
+ @"com.google.chrome.ChromiumProfilePathPboardType";
// Internal bookmark ID for a bookmark node. Used only when moving inside
// of one profile.
@@ -36,10 +33,6 @@ 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";
-
// Keys for the type of node in BookmarkDictionaryListPboardType.
NSString* const kWebBookmarkType = @"WebBookmarkType";
@@ -100,8 +93,9 @@ void ConvertPlistToElements(NSArray* input,
bool ReadBookmarkDictionaryListPboardType(
NSPasteboard* pb,
std::vector<BookmarkNodeData::Element>& elements) {
- NSArray* bookmarks =
- [pb propertyListForType:kBookmarkDictionaryListPboardType];
+ NSString* uti = ui::ClipboardUtil::UTIForPasteboardType(
+ kBookmarkDictionaryListPboardType);
+ NSArray* bookmarks = [pb propertyListForType:uti];
if (!bookmarks)
return false;
ConvertPlistToElements(bookmarks, elements);
@@ -111,16 +105,9 @@ bool ReadBookmarkDictionaryListPboardType(
bool ReadWebURLsWithTitlesPboardType(
NSPasteboard* pb,
std::vector<BookmarkNodeData::Element>& elements) {
- NSArray* bookmarkPairs =
- [pb propertyListForType:kCrWebURLsWithTitlesPboardType];
- if (![bookmarkPairs isKindOfClass:[NSArray class]])
- return false;
-
- NSArray* urlsArr = [bookmarkPairs objectAtIndex:0];
- NSArray* titlesArr = [bookmarkPairs objectAtIndex:1];
- if ([urlsArr count] < 1)
- return false;
- if ([urlsArr count] != [titlesArr count])
+ NSArray* urlsArr = nil;
+ NSArray* titlesArr = nil;
+ if (!ui::ClipboardUtil::URLsAndTitlesFromPasteboard(pb, &urlsArr, &titlesArr))
return false;
NSUInteger len = [titlesArr count];
@@ -139,25 +126,6 @@ bool ReadWebURLsWithTitlesPboardType(
return true;
}
-bool ReadNSURLPboardType(NSPasteboard* pb,
- std::vector<BookmarkNodeData::Element>& elements) {
- NSURL* url = [NSURL URLFromPasteboard:pb];
- if (url == nil)
- return false;
-
- std::string urlString = base::SysNSStringToUTF8([url absoluteString]);
- NSString* title = [pb stringForType:kNSURLTitlePboardType];
- if (!title)
- title = [pb stringForType:NSStringPboardType];
-
- BookmarkNodeData::Element element;
- element.is_url = true;
- element.url = GURL(urlString);
- element.title = base::SysNSStringToUTF16(title);
- elements.push_back(element);
- return true;
-}
-
NSDictionary* DictionaryFromBookmarkMetaInfo(
const BookmarkNode::MetaInfoMap& meta_info_map) {
NSMutableDictionary* dictionary = [NSMutableDictionary dictionary];
@@ -215,7 +183,10 @@ void WriteBookmarkDictionaryListPboardType(
NSPasteboard* pb,
const std::vector<BookmarkNodeData::Element>& elements) {
NSArray* plist = GetPlistForBookmarkList(elements);
- [pb setPropertyList:plist forType:kBookmarkDictionaryListPboardType];
+ NSString* uti = ui::ClipboardUtil::UTIForPasteboardType(
+ kBookmarkDictionaryListPboardType);
+ [pb addTypes:@[ uti ] owner:nil];
+ [pb setPropertyList:plist forType:uti];
}
void FillFlattenedArraysForBookmarks(
@@ -248,23 +219,22 @@ void WriteSimplifiedBookmarkTypes(
FillFlattenedArraysForBookmarks(
elements, url_titles, urls, toplevel_string_data);
+ if ([urls count] > 0) {
+ base::scoped_nsobject<NSPasteboardItem> item;
+ if ([urls count] == 1) {
+ item = ui::ClipboardUtil::PasteboardItemFromUrl([urls firstObject],
+ [url_titles firstObject]);
+ } else {
+ item = ui::ClipboardUtil::PasteboardItemFromUrls(urls, url_titles);
+ }
+
+ ui::ClipboardUtil::AddDataToPasteboard(pb, item);
+ }
+
// Write NSStringPboardType.
+ [pb addTypes:@[ NSStringPboardType ] owner:nil];
[pb setString:[toplevel_string_data componentsJoinedByString:@"\n"]
forType:NSStringPboardType];
-
- // The following pasteboard types only act on urls, not folders.
- if ([urls count] < 1)
- return;
-
- // Write WebURLsWithTitlesPboardType.
- [pb setPropertyList:[NSArray arrayWithObjects:urls, url_titles, nil]
- forType:kCrWebURLsWithTitlesPboardType];
-
- // Write NSURLPboardType (with title).
- NSURL* url = [NSURL URLWithString:[urls objectAtIndex:0]];
- [url writeToPasteboard:pb];
- NSString* titleString = [url_titles objectAtIndex:0];
- [pb setString:titleString forType:kNSURLTitlePboardType];
}
NSPasteboard* PasteboardFromType(ui::ClipboardType type) {
@@ -295,16 +265,10 @@ void WriteBookmarksToPasteboard(
NSPasteboard* pb = PasteboardFromType(type);
- NSArray* types = [NSArray arrayWithObjects:kBookmarkDictionaryListPboardType,
- kCrWebURLsWithTitlesPboardType,
- NSStringPboardType,
- NSURLPboardType,
- kNSURLTitlePboardType,
- kChromiumProfilePathPboardType,
- nil];
- [pb declareTypes:types owner:nil];
- [pb setString:base::SysUTF8ToNSString(profile_path.value())
- forType:kChromiumProfilePathPboardType];
+ NSString* uti =
+ ui::ClipboardUtil::UTIForPasteboardType(kChromiumProfilePathPboardType);
+ [pb declareTypes:@[ uti ] owner:nil];
+ [pb setString:base::SysUTF8ToNSString(profile_path.value()) forType:uti];
WriteBookmarkDictionaryListPboardType(pb, elements);
WriteSimplifiedBookmarkTypes(pb, elements);
}
@@ -316,21 +280,21 @@ bool ReadBookmarksFromPasteboard(
NSPasteboard* pb = PasteboardFromType(type);
elements.clear();
- NSString* profile = [pb stringForType:kChromiumProfilePathPboardType];
+ NSString* uti =
+ ui::ClipboardUtil::UTIForPasteboardType(kChromiumProfilePathPboardType);
+ NSString* profile = [pb stringForType:uti];
*profile_path = base::FilePath(base::SysNSStringToUTF8(profile));
return ReadBookmarkDictionaryListPboardType(pb, elements) ||
- ReadWebURLsWithTitlesPboardType(pb, elements) ||
- ReadNSURLPboardType(pb, elements);
+ ReadWebURLsWithTitlesPboardType(pb, elements);
}
bool PasteboardContainsBookmarks(ui::ClipboardType type) {
NSPasteboard* pb = PasteboardFromType(type);
- NSArray* availableTypes =
- [NSArray arrayWithObjects:kBookmarkDictionaryListPboardType,
- kCrWebURLsWithTitlesPboardType,
- NSURLPboardType,
- nil];
+ NSArray* availableTypes = @[
+ ui::ClipboardUtil::UTIForWebURLsAndTitles(),
+ ui::ClipboardUtil::UTIForPasteboardType(kBookmarkDictionaryListPboardType)
+ ];
return [pb availableTypeFromArray:availableTypes] != nil;
}
« no previous file with comments | « chrome/browser/ui/cocoa/url_drop_target.mm ('k') | ui/base/clipboard/clipboard_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698