clipboard_history_item_builder.cc 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/clipboard/test_support/clipboard_history_item_builder.h"
  5. #include <vector>
  6. #include "ash/clipboard/clipboard_history_item.h"
  7. #include "base/notreached.h"
  8. #include "base/pickle.h"
  9. #include "base/strings/string_util.h"
  10. #include "base/strings/utf_string_conversions.h"
  11. #include "ui/base/clipboard/clipboard_data.h"
  12. #include "ui/base/clipboard/clipboard_format_type.h"
  13. #include "ui/base/clipboard/custom_data_helper.h"
  14. #include "ui/gfx/codec/png_codec.h"
  15. #include "ui/gfx/image/image_unittest_util.h"
  16. namespace ash {
  17. ClipboardHistoryItemBuilder::ClipboardHistoryItemBuilder() = default;
  18. ClipboardHistoryItemBuilder::~ClipboardHistoryItemBuilder() = default;
  19. ClipboardHistoryItem ClipboardHistoryItemBuilder::Build() const {
  20. ui::ClipboardData data;
  21. if (text_.has_value())
  22. data.set_text(text_.value());
  23. if (markup_.has_value())
  24. data.set_markup_data(markup_.value());
  25. if (rtf_.has_value())
  26. data.SetRTFData(rtf_.value());
  27. if (!filenames_.empty())
  28. data.set_filenames(filenames_);
  29. if (bookmark_title_.has_value())
  30. data.set_bookmark_title(bookmark_title_.value());
  31. if (png_.has_value())
  32. data.SetPngData(png_.value());
  33. if (custom_format_.has_value() && custom_data_.has_value())
  34. data.SetCustomData(custom_format_.value(), custom_data_.value());
  35. if (web_smart_paste_.has_value())
  36. data.set_web_smart_paste(web_smart_paste_.value());
  37. return ClipboardHistoryItem(std::move(data));
  38. }
  39. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::Clear() {
  40. text_ = absl::nullopt;
  41. markup_ = absl::nullopt;
  42. rtf_ = absl::nullopt;
  43. filenames_.clear();
  44. bookmark_title_ = absl::nullopt;
  45. png_ = absl::nullopt;
  46. custom_format_ = absl::nullopt;
  47. custom_data_ = absl::nullopt;
  48. web_smart_paste_ = absl::nullopt;
  49. return *this;
  50. }
  51. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetFormat(
  52. ui::ClipboardInternalFormat format) {
  53. switch (format) {
  54. case ui::ClipboardInternalFormat::kText:
  55. return SetText("Text");
  56. case ui::ClipboardInternalFormat::kHtml:
  57. return SetMarkup("Markup");
  58. case ui::ClipboardInternalFormat::kSvg:
  59. return SetMarkup("Svg");
  60. case ui::ClipboardInternalFormat::kRtf:
  61. return SetRtf("Rtf");
  62. case ui::ClipboardInternalFormat::kFilenames:
  63. return SetFilenames({ui::FileInfo(base::FilePath("/dir/filename"),
  64. base::FilePath("filename"))});
  65. case ui::ClipboardInternalFormat::kBookmark:
  66. return SetBookmarkTitle("Bookmark Title");
  67. case ui::ClipboardInternalFormat::kPng:
  68. return SetPng(gfx::test::CreatePNGBytes(10));
  69. case ui::ClipboardInternalFormat::kCustom:
  70. return SetCustomData("Custom Format", "Custom Data");
  71. case ui::ClipboardInternalFormat::kWeb:
  72. return SetWebSmartPaste(true);
  73. }
  74. return *this;
  75. }
  76. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearFormat(
  77. ui::ClipboardInternalFormat format) {
  78. switch (format) {
  79. case ui::ClipboardInternalFormat::kText:
  80. return ClearText();
  81. case ui::ClipboardInternalFormat::kHtml:
  82. return ClearMarkup();
  83. case ui::ClipboardInternalFormat::kSvg:
  84. return ClearSvg();
  85. case ui::ClipboardInternalFormat::kRtf:
  86. return ClearRtf();
  87. case ui::ClipboardInternalFormat::kFilenames:
  88. return ClearFilenames();
  89. case ui::ClipboardInternalFormat::kBookmark:
  90. return ClearBookmarkTitle();
  91. case ui::ClipboardInternalFormat::kPng:
  92. return ClearPng();
  93. case ui::ClipboardInternalFormat::kCustom:
  94. return ClearCustomData();
  95. case ui::ClipboardInternalFormat::kWeb:
  96. return ClearWebSmartPaste();
  97. }
  98. NOTREACHED();
  99. return *this;
  100. }
  101. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetText(
  102. const std::string& text) {
  103. text_ = text;
  104. return *this;
  105. }
  106. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearText() {
  107. text_ = absl::nullopt;
  108. return *this;
  109. }
  110. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetMarkup(
  111. const std::string& markup) {
  112. markup_ = markup;
  113. return *this;
  114. }
  115. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearMarkup() {
  116. markup_ = absl::nullopt;
  117. return *this;
  118. }
  119. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetSvg(
  120. const std::string& svg) {
  121. svg_ = svg;
  122. return *this;
  123. }
  124. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearSvg() {
  125. svg_ = absl::nullopt;
  126. return *this;
  127. }
  128. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetRtf(
  129. const std::string& rtf) {
  130. rtf_ = rtf;
  131. return *this;
  132. }
  133. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearRtf() {
  134. rtf_ = absl::nullopt;
  135. return *this;
  136. }
  137. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetFilenames(
  138. std::vector<ui::FileInfo> filenames) {
  139. filenames_ = std::move(filenames);
  140. return *this;
  141. }
  142. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearFilenames() {
  143. filenames_.clear();
  144. return *this;
  145. }
  146. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetBookmarkTitle(
  147. const std::string& bookmark_title) {
  148. bookmark_title_ = bookmark_title;
  149. return *this;
  150. }
  151. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearBookmarkTitle() {
  152. bookmark_title_ = absl::nullopt;
  153. return *this;
  154. }
  155. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetPng(
  156. const scoped_refptr<base::RefCountedMemory>& png) {
  157. std::vector<uint8_t> data(png->data(), png->data() + png->size());
  158. return SetPng(std::move(data));
  159. }
  160. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetPng(
  161. std::vector<uint8_t> png) {
  162. png_ = std::move(png);
  163. return *this;
  164. }
  165. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearPng() {
  166. png_ = absl::nullopt;
  167. return *this;
  168. }
  169. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetCustomData(
  170. const std::string& custom_format,
  171. const std::string& custom_data) {
  172. custom_format_ = custom_format;
  173. custom_data_ = custom_data;
  174. return *this;
  175. }
  176. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearCustomData() {
  177. custom_format_ = absl::nullopt;
  178. custom_data_ = absl::nullopt;
  179. return *this;
  180. }
  181. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetFileSystemData(
  182. const std::initializer_list<std::u16string>& source_list) {
  183. constexpr char16_t kFileSystemSourcesType[] = u"fs/sources";
  184. base::Pickle custom_data;
  185. ui::WriteCustomDataToPickle(
  186. std::unordered_map<std::u16string, std::u16string>(
  187. {{kFileSystemSourcesType, base::JoinString(source_list, u"\n")}}),
  188. &custom_data);
  189. return SetCustomData(ui::ClipboardFormatType::WebCustomDataType().GetName(),
  190. std::string(static_cast<const char*>(custom_data.data()),
  191. custom_data.size()));
  192. }
  193. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetWebSmartPaste(
  194. bool web_smart_paste) {
  195. web_smart_paste_ = web_smart_paste;
  196. return *this;
  197. }
  198. ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearWebSmartPaste() {
  199. web_smart_paste_ = absl::nullopt;
  200. return *this;
  201. }
  202. } // namespace ash