blob: 4c91729c96b6ede7e3ec6d64c63f3b0e9e7b1b3e [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/base/clipboard/clipboard_format_type.h"
#import <Cocoa/Cocoa.h>
#include "base/strings/sys_string_conversions.h"
#include "ui/base/clipboard/clipboard_constants.h"
namespace ui {
// ClipboardFormatType implementation.
// MacOS formats are implemented via Uniform Type Identifiers, documented here:
// https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/UniformTypeIdentifier.html#//apple_ref/doc/uid/TP40008195-CH60
ClipboardFormatType::ClipboardFormatType() : data_(nil) {}
ClipboardFormatType::ClipboardFormatType(NSString* native_format)
: data_([native_format retain]) {}
ClipboardFormatType::ClipboardFormatType(const ClipboardFormatType& other)
: data_([other.data_ retain]) {}
ClipboardFormatType& ClipboardFormatType::operator=(
const ClipboardFormatType& other) {
if (this != &other) {
[data_ release];
data_ = [other.data_ retain];
}
return *this;
}
bool ClipboardFormatType::operator==(const ClipboardFormatType& other) const {
return [data_ isEqualToString:other.data_];
}
ClipboardFormatType::~ClipboardFormatType() {
[data_ release];
}
std::string ClipboardFormatType::Serialize() const {
return base::SysNSStringToUTF8(data_);
}
// static
ClipboardFormatType ClipboardFormatType::Deserialize(
const std::string& serialization) {
return ClipboardFormatType(base::SysUTF8ToNSString(serialization));
}
std::string ClipboardFormatType::GetName() const {
return Serialize();
}
bool ClipboardFormatType::operator<(const ClipboardFormatType& other) const {
return [data_ compare:other.data_] == NSOrderedAscending;
}
// static
// TODO(crbug.com/106449): Support custom formats.
ClipboardFormatType ClipboardFormatType::GetCustomPlatformType(
const std::string& format_string) {
return ClipboardFormatType::Deserialize(format_string);
}
// TODO(crbug.com/106449): Support custom formats.
std::string ClipboardFormatType::GetCustomPlatformName() const {
return Serialize();
}
// Various predefined ClipboardFormatTypes.
// static
ClipboardFormatType ClipboardFormatType::GetType(
const std::string& format_string) {
return ClipboardFormatType::Deserialize(format_string);
}
// static
const ClipboardFormatType& ClipboardFormatType::FilenamesType() {
static base::NoDestructor<ClipboardFormatType> type(NSFilenamesPboardType);
return *type;
}
// static
const ClipboardFormatType& ClipboardFormatType::UrlType() {
static base::NoDestructor<ClipboardFormatType> type(NSURLPboardType);
return *type;
}
// static
const ClipboardFormatType& ClipboardFormatType::PlainTextType() {
static base::NoDestructor<ClipboardFormatType> type(NSPasteboardTypeString);
return *type;
}
// static
const ClipboardFormatType& ClipboardFormatType::HtmlType() {
static base::NoDestructor<ClipboardFormatType> type(NSHTMLPboardType);
return *type;
}
const ClipboardFormatType& ClipboardFormatType::SvgType() {
static base::NoDestructor<ClipboardFormatType> type(kImageSvg);
return *type;
}
// static
const ClipboardFormatType& ClipboardFormatType::RtfType() {
static base::NoDestructor<ClipboardFormatType> type(NSRTFPboardType);
return *type;
}
// static
const ClipboardFormatType& ClipboardFormatType::PngType() {
static base::NoDestructor<ClipboardFormatType> type(NSPasteboardTypePNG);
return *type;
}
// static
const ClipboardFormatType& ClipboardFormatType::BitmapType() {
static base::NoDestructor<ClipboardFormatType> type(NSTIFFPboardType);
return *type;
}
// static
const ClipboardFormatType& ClipboardFormatType::WebKitSmartPasteType() {
static base::NoDestructor<ClipboardFormatType> type(kWebSmartPastePboardType);
return *type;
}
// static
const ClipboardFormatType& ClipboardFormatType::WebCustomDataType() {
static base::NoDestructor<ClipboardFormatType> type(kWebCustomDataPboardType);
return *type;
}
} // namespace ui