blob: edbd558f6d64844ba4a080b8c3fa1a1daa50d75f [file] [log] [blame]
// Copyright 2020 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.
#ifndef UI_BASE_CLIPBOARD_CLIPBOARD_DATA_H_
#define UI_BASE_CLIPBOARD_CLIPBOARD_DATA_H_
#include <string>
#include <vector>
#include "base/component_export.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/clipboard/clipboard_data_endpoint.h"
class SkBitmap;
namespace ui {
// Clipboard data format used by ClipboardInternal.
enum class ClipboardInternalFormat {
kText = 1 << 0,
kHtml = 1 << 1,
kRtf = 1 << 2,
kBookmark = 1 << 3,
kBitmap = 1 << 4,
kCustom = 1 << 5,
kWeb = 1 << 6,
};
// ClipboardData contains data copied to the Clipboard for a variety of formats.
// It mostly just provides APIs to cleanly access and manipulate this data.
class COMPONENT_EXPORT(UI_BASE_CLIPBOARD) ClipboardData {
public:
ClipboardData();
explicit ClipboardData(const ClipboardData&);
ClipboardData(ClipboardData&&);
ClipboardData& operator=(const ClipboardData&) = delete;
~ClipboardData();
bool operator==(const ClipboardData& that) const;
bool operator!=(const ClipboardData& that) const;
// Bitmask of ClipboardInternalFormat types.
int format() const { return format_; }
const std::string& text() const { return text_; }
void set_text(const std::string& text) {
text_ = text;
format_ |= static_cast<int>(ClipboardInternalFormat::kText);
}
const std::string& markup_data() const { return markup_data_; }
void set_markup_data(const std::string& markup_data) {
markup_data_ = markup_data;
format_ |= static_cast<int>(ClipboardInternalFormat::kHtml);
}
const std::string& rtf_data() const { return rtf_data_; }
void SetRTFData(const std::string& rtf_data) {
rtf_data_ = rtf_data;
format_ |= static_cast<int>(ClipboardInternalFormat::kRtf);
}
const std::string& url() const { return url_; }
void set_url(const std::string& url) {
url_ = url;
format_ |= static_cast<int>(ClipboardInternalFormat::kHtml);
}
const std::string& bookmark_title() const { return bookmark_title_; }
void set_bookmark_title(const std::string& bookmark_title) {
bookmark_title_ = bookmark_title;
format_ |= static_cast<int>(ClipboardInternalFormat::kBookmark);
}
const std::string& bookmark_url() const { return bookmark_url_; }
void set_bookmark_url(const std::string& bookmark_url) {
bookmark_url_ = bookmark_url;
format_ |= static_cast<int>(ClipboardInternalFormat::kBookmark);
}
const SkBitmap& bitmap() const { return bitmap_; }
void SetBitmapData(const SkBitmap& bitmap);
const std::string& custom_data_format() const { return custom_data_format_; }
const std::string& custom_data_data() const { return custom_data_data_; }
void SetCustomData(const std::string& data_format,
const std::string& data_data);
bool web_smart_paste() const { return web_smart_paste_; }
void set_web_smart_paste(bool web_smart_paste) {
web_smart_paste_ = web_smart_paste;
format_ |= static_cast<int>(ClipboardInternalFormat::kWeb);
}
ClipboardDataEndpoint* source() const { return src_.get(); }
void set_source(std::unique_ptr<ClipboardDataEndpoint> src) {
src_ = std::move(src);
}
private:
// Plain text in UTF8 format.
std::string text_;
// HTML markup data in UTF8 format.
std::string markup_data_;
std::string url_;
// RTF data.
std::string rtf_data_;
// Bookmark title in UTF8 format.
std::string bookmark_title_;
std::string bookmark_url_;
// Bitmap images.
SkBitmap bitmap_;
// Data with custom format.
std::string custom_data_format_;
std::string custom_data_data_;
// WebKit smart paste data.
bool web_smart_paste_;
int format_;
// The source of the data.
std::unique_ptr<ClipboardDataEndpoint> src_ = nullptr;
};
} // namespace ui
#endif // UI_BASE_CLIPBOARD_CLIPBOARD_DATA_H_