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

Unified Diff: base/clipboard_mac.mm

Issue 6580: clipboard_mac (Closed) Base URL: svn://chrome-svn.corp.google.com/chrome/trunk/src/
Patch Set: '' Created 12 years, 2 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/clipboard_mac.mm
===================================================================
--- base/clipboard_mac.mm (revision 2969)
+++ base/clipboard_mac.mm (working copy)
@@ -8,17 +8,30 @@
#include "base/logging.h"
#include "base/string_util.h"
+#include "base/sys_string_conversions.h"
namespace {
// Would be nice if this were in UTCoreTypes.h, but it isn't
const NSString* kUTTypeURLName = @"public.url-name";
-NSString* nsStringForWString(const std::wstring& string) {
- string16 text16 = WideToUTF16(string);
- return [NSString stringWithCharacters:text16.c_str() length:text16.length()];
+NSString* NSStringForWString(const std::wstring& string) {
+ CFStringRef cfstring = base::SysWideToCFStringRef(string);
+ NSString* nsstring = (NSString*)cfstring;
+ [[nsstring retain] autorelease];
+ CFRelease(cfstring);
+ return nsstring;
}
+NSPasteboard* GetPasteboard() {
+ // The pasteboard should not be nil in a UI session, but this handy DCHECK
+ // can help track down problems if someone tries using clipboard code outside
+ // of a UI session.
+ NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
+ DCHECK(pasteboard);
+ return pasteboard;
+}
+
} // namespace
Clipboard::Clipboard() {
@@ -28,22 +41,22 @@
}
void Clipboard::Clear() {
- NSPasteboard* pb = [NSPasteboard generalPasteboard];
+ NSPasteboard* pb = GetPasteboard();
[pb declareTypes:[NSArray array] owner:nil];
}
void Clipboard::WriteText(const std::wstring& text) {
- NSPasteboard* pb = [NSPasteboard generalPasteboard];
+ NSPasteboard* pb = GetPasteboard();
[pb addTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
- [pb setString:nsStringForWString(text) forType:NSStringPboardType];
+ [pb setString:NSStringForWString(text) forType:NSStringPboardType];
}
void Clipboard::WriteHTML(const std::wstring& markup,
const std::string& src_url) {
// TODO(avi): src_url?
- NSPasteboard* pb = [NSPasteboard generalPasteboard];
+ NSPasteboard* pb = GetPasteboard();
[pb addTypes:[NSArray arrayWithObject:NSHTMLPboardType] owner:nil];
- [pb setString:nsStringForWString(markup) forType:NSHTMLPboardType];
+ [pb setString:NSStringForWString(markup) forType:NSHTMLPboardType];
}
void Clipboard::WriteBookmark(const std::wstring& title,
@@ -59,13 +72,14 @@
// Mac, but we should double check later on.
NSURL* nsurl = [NSURL URLWithString:
[NSString stringWithUTF8String:url.c_str()]];
- NSString* nstitle = nsStringForWString(title);
+ NSString* nstitle = NSStringForWString(title);
- NSPasteboard* pb = [NSPasteboard generalPasteboard];
+ NSPasteboard* pb = GetPasteboard();
// passing UTIs into the pasteboard methods is valid >= 10.5
[pb addTypes:[NSArray arrayWithObjects:NSURLPboardType,
- kUTTypeURLName, nil]
- owner:nil];
+ kUTTypeURLName,
+ nil]
+ owner:nil];
[nsurl writeToPasteboard:pb];
[pb setString:nstitle forType:kUTTypeURLName];
}
@@ -78,24 +92,24 @@
void Clipboard::WriteFiles(const std::vector<std::wstring>& files) {
NSMutableArray* fileList = [NSMutableArray arrayWithCapacity:files.size()];
- for (unsigned int i = 0; i < files.size(); ++i) {
- [fileList addObject:nsStringForWString(files[i])];
+ for (size_t i = 0; i < files.size(); ++i) {
+ [fileList addObject:NSStringForWString(files[i])];
}
- NSPasteboard* pb = [NSPasteboard generalPasteboard];
+ NSPasteboard* pb = GetPasteboard();
[pb addTypes:[NSArray arrayWithObject:NSFilenamesPboardType] owner:nil];
[pb setPropertyList:fileList forType:NSFilenamesPboardType];
}
bool Clipboard::IsFormatAvailable(NSString* format) const {
- NSPasteboard* pb = [NSPasteboard generalPasteboard];
+ NSPasteboard* pb = GetPasteboard();
NSArray* types = [pb types];
return [types containsObject:format];
}
void Clipboard::ReadText(std::wstring* result) const {
- NSPasteboard* pb = [NSPasteboard generalPasteboard];
+ NSPasteboard* pb = GetPasteboard();
NSString* contents = [pb stringForType:NSStringPboardType];
UTF8ToWide([contents UTF8String],
@@ -104,17 +118,18 @@
}
void Clipboard::ReadAsciiText(std::string* result) const {
- NSPasteboard* pb = [NSPasteboard generalPasteboard];
+ NSPasteboard* pb = GetPasteboard();
NSString* contents = [pb stringForType:NSStringPboardType];
- *result = std::string([contents UTF8String]);
+ if (!contents)
+ result->clear();
+ else
+ result->assign([contents UTF8String]);
}
void Clipboard::ReadHTML(std::wstring* markup, std::string* src_url) const {
if (markup) {
- markup->clear();
-
- NSPasteboard* pb = [NSPasteboard generalPasteboard];
+ NSPasteboard* pb = GetPasteboard();
NSArray *supportedTypes = [NSArray arrayWithObjects:NSHTMLPboardType,
NSStringPboardType,
nil];
@@ -131,11 +146,9 @@
}
void Clipboard::ReadBookmark(std::wstring* title, std::string* url) const {
- NSPasteboard* pb = [NSPasteboard generalPasteboard];
+ NSPasteboard* pb = GetPasteboard();
if (title) {
- title->clear();
-
NSString* contents = [pb stringForType:kUTTypeURLName];
UTF8ToWide([contents UTF8String],
[contents lengthOfBytesUsingEncoding:NSUTF8StringEncoding],
@@ -143,10 +156,11 @@
}
if (url) {
- url->clear();
-
- NSURL* nsurl = [NSURL URLFromPasteboard:pb];
- *url = std::string([[nsurl absoluteString] UTF8String]);
+ NSString* url_string = [[NSURL URLFromPasteboard:pb] absoluteString];
+ if (!url_string)
+ url->clear();
+ else
+ url->assign([url_string UTF8String]);
}
}
@@ -173,7 +187,7 @@
files->clear();
- NSPasteboard* pb = [NSPasteboard generalPasteboard];
+ NSPasteboard* pb = GetPasteboard();
NSArray* fileList = [pb propertyListForType:NSFilenamesPboardType];
for (unsigned int i = 0; i < [fileList count]; ++i) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698