[go: nahoru, domu]

blob: a94e3d793131e8a2fdc0b445c2160d9e834a66eb [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.
#include "ash/clipboard/test_support/clipboard_history_item_builder.h"
#include "ash/clipboard/clipboard_history_item.h"
#include "base/notreached.h"
#include "base/pickle.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/base/clipboard/clipboard_data.h"
#include "ui/base/clipboard/clipboard_format_type.h"
#include "ui/base/clipboard/custom_data_helper.h"
#include "ui/gfx/image/image_unittest_util.h"
namespace ash {
ClipboardHistoryItemBuilder::ClipboardHistoryItemBuilder() = default;
ClipboardHistoryItemBuilder::~ClipboardHistoryItemBuilder() = default;
ClipboardHistoryItem ClipboardHistoryItemBuilder::Build() const {
ui::ClipboardData data;
if (text_.has_value())
data.set_text(text_.value());
if (markup_.has_value())
data.set_markup_data(markup_.value());
if (rtf_.has_value())
data.SetRTFData(rtf_.value());
if (!filenames_.empty())
data.set_filenames(filenames_);
if (bookmark_title_.has_value())
data.set_bookmark_title(bookmark_title_.value());
if (bitmap_.has_value())
data.SetBitmapData(bitmap_.value());
if (custom_format_.has_value() && custom_data_.has_value())
data.SetCustomData(custom_format_.value(), custom_data_.value());
if (web_smart_paste_.has_value())
data.set_web_smart_paste(web_smart_paste_.value());
return ClipboardHistoryItem(std::move(data));
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::Clear() {
text_ = base::nullopt;
markup_ = base::nullopt;
rtf_ = base::nullopt;
bookmark_title_ = base::nullopt;
bitmap_ = base::nullopt;
custom_format_ = base::nullopt;
custom_data_ = base::nullopt;
web_smart_paste_ = base::nullopt;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetFormat(
ui::ClipboardInternalFormat format) {
switch (format) {
case ui::ClipboardInternalFormat::kText:
return SetText("Text");
case ui::ClipboardInternalFormat::kHtml:
return SetMarkup("Markup");
case ui::ClipboardInternalFormat::kSvg:
return SetMarkup("Svg");
case ui::ClipboardInternalFormat::kRtf:
return SetRtf("Rtf");
case ui::ClipboardInternalFormat::kFilenames:
return SetFilenames({ui::FileInfo(base::FilePath("/dir/filename"),
base::FilePath("filename"))});
case ui::ClipboardInternalFormat::kBookmark:
return SetBookmarkTitle("Bookmark Title");
case ui::ClipboardInternalFormat::kBitmap:
return SetBitmap(gfx::test::CreateBitmap(10, 10));
case ui::ClipboardInternalFormat::kCustom:
return SetCustomData("Custom Format", "Custom Data");
case ui::ClipboardInternalFormat::kWeb:
return SetWebSmartPaste(true);
}
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearFormat(
ui::ClipboardInternalFormat format) {
switch (format) {
case ui::ClipboardInternalFormat::kText:
return ClearText();
case ui::ClipboardInternalFormat::kHtml:
return ClearMarkup();
case ui::ClipboardInternalFormat::kSvg:
return ClearSvg();
case ui::ClipboardInternalFormat::kRtf:
return ClearRtf();
case ui::ClipboardInternalFormat::kFilenames:
return ClearFilenames();
case ui::ClipboardInternalFormat::kBookmark:
return ClearBookmarkTitle();
case ui::ClipboardInternalFormat::kBitmap:
return ClearBitmap();
case ui::ClipboardInternalFormat::kCustom:
return ClearCustomData();
case ui::ClipboardInternalFormat::kWeb:
return ClearWebSmartPaste();
}
NOTREACHED();
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetText(
const std::string& text) {
text_ = text;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearText() {
text_ = base::nullopt;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetMarkup(
const std::string& markup) {
markup_ = markup;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearMarkup() {
markup_ = base::nullopt;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetSvg(
const std::string& svg) {
svg_ = svg;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearSvg() {
svg_ = base::nullopt;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetRtf(
const std::string& rtf) {
rtf_ = rtf;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearRtf() {
rtf_ = base::nullopt;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetFilenames(
std::vector<ui::FileInfo> filenames) {
filenames_ = std::move(filenames);
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearFilenames() {
filenames_.clear();
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetBookmarkTitle(
const std::string& bookmark_title) {
bookmark_title_ = bookmark_title;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearBookmarkTitle() {
bookmark_title_ = base::nullopt;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetBitmap(
const SkBitmap& bitmap) {
bitmap_ = bitmap;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearBitmap() {
bitmap_ = base::nullopt;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetCustomData(
const std::string& custom_format,
const std::string& custom_data) {
custom_format_ = custom_format;
custom_data_ = custom_data;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearCustomData() {
custom_format_ = base::nullopt;
custom_data_ = base::nullopt;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetFileSystemData(
const std::initializer_list<std::string>& source_list) {
constexpr char kFileSystemSourcesType[] = "fs/sources";
base::Pickle custom_data;
ui::WriteCustomDataToPickle(
std::unordered_map<std::u16string, std::u16string>(
{{base::UTF8ToUTF16(kFileSystemSourcesType),
base::UTF8ToUTF16(base::JoinString(source_list, "\n"))}}),
&custom_data);
return SetCustomData(
ui::ClipboardFormatType::GetWebCustomDataType().GetName(),
std::string(static_cast<const char*>(custom_data.data()),
custom_data.size()));
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetWebSmartPaste(
bool web_smart_paste) {
web_smart_paste_ = web_smart_paste;
return *this;
}
ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearWebSmartPaste() {
web_smart_paste_ = base::nullopt;
return *this;
}
} // namespace ash