OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 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 |
| 5 #include "ui/base/test/fake_clipboard.h" |
| 6 |
| 7 #include <stddef.h> |
| 8 #include "base/strings/utf_string_conversions.h" |
| 9 |
| 10 namespace ui { |
| 11 |
| 12 void Clipboard::UseFakeForCurrentThreadForTest() { |
| 13 base::AutoLock lock(clipboard_map_lock_.Get()); |
| 14 clipboard_map_.Get()[base::PlatformThread::CurrentId()] = new FakeClipboard; |
| 15 } |
| 16 |
| 17 FakeClipboard::FakeClipboard() |
| 18 : default_store_type_(CLIPBOARD_TYPE_COPY_PASTE) { |
| 19 } |
| 20 |
| 21 FakeClipboard::~FakeClipboard() { |
| 22 } |
| 23 |
| 24 uint64 FakeClipboard::GetSequenceNumber(ClipboardType type) const { |
| 25 return GetStore(type).sequence_number; |
| 26 } |
| 27 |
| 28 bool FakeClipboard::IsFormatAvailable(const FormatType& format, |
| 29 ClipboardType type) const { |
| 30 const DataStore& store = GetStore(type); |
| 31 return store.data.find(format) != store.data.end(); |
| 32 } |
| 33 |
| 34 void FakeClipboard::Clear(ClipboardType type) { |
| 35 GetStore(type).Clear(); |
| 36 } |
| 37 |
| 38 void FakeClipboard::ReadAvailableTypes(ClipboardType type, |
| 39 std::vector<base::string16>* types, |
| 40 bool* contains_filenames) const { |
| 41 } |
| 42 |
| 43 void FakeClipboard::ReadText(ClipboardType type, base::string16* result) const { |
| 44 std::string result8; |
| 45 ReadAsciiText(type, &result8); |
| 46 *result = base::UTF8ToUTF16(result8); |
| 47 } |
| 48 |
| 49 void FakeClipboard::ReadAsciiText(ClipboardType type, |
| 50 std::string* result) const { |
| 51 result->clear(); |
| 52 const DataStore& store = GetStore(type); |
| 53 auto it = store.data.find(GetPlainTextFormatType()); |
| 54 if (it != store.data.end()) |
| 55 *result = it->second; |
| 56 } |
| 57 |
| 58 void FakeClipboard::ReadHTML(ClipboardType type, |
| 59 base::string16* markup, |
| 60 std::string* src_url, |
| 61 uint32* fragment_start, |
| 62 uint32* fragment_end) const { |
| 63 markup->clear(); |
| 64 src_url->clear(); |
| 65 const DataStore& store = GetStore(type); |
| 66 auto it = store.data.find(GetHtmlFormatType()); |
| 67 if (it != store.data.end()) |
| 68 *markup = base::UTF8ToUTF16(it->second); |
| 69 *fragment_start = 0; |
| 70 *fragment_end = markup->size(); |
| 71 } |
| 72 |
| 73 void FakeClipboard::ReadRTF(ClipboardType type, std::string* result) const { |
| 74 result->clear(); |
| 75 const DataStore& store = GetStore(type); |
| 76 auto it = store.data.find(GetRtfFormatType()); |
| 77 if (it != store.data.end()) |
| 78 *result = it->second; |
| 79 } |
| 80 |
| 81 SkBitmap FakeClipboard::ReadImage(ClipboardType type) const { |
| 82 return GetStore(type).image; |
| 83 } |
| 84 |
| 85 void FakeClipboard::ReadCustomData(ClipboardType clipboard_type, |
| 86 const base::string16& type, |
| 87 base::string16* result) const { |
| 88 } |
| 89 |
| 90 void FakeClipboard::ReadBookmark(base::string16* title, |
| 91 std::string* url) const { |
| 92 const DataStore& store = GetDefaultStore(); |
| 93 auto it = store.data.find(GetUrlWFormatType()); |
| 94 if (it != store.data.end()) |
| 95 *url = it->second; |
| 96 *title = base::UTF8ToUTF16(store.url_title); |
| 97 } |
| 98 |
| 99 void FakeClipboard::ReadData(const FormatType& format, |
| 100 std::string* result) const { |
| 101 result->clear(); |
| 102 const DataStore& store = GetDefaultStore(); |
| 103 auto it = store.data.find(format); |
| 104 if (it != store.data.end()) |
| 105 *result = it->second; |
| 106 } |
| 107 |
| 108 void FakeClipboard::WriteObjects(ClipboardType type, const ObjectMap& objects) { |
| 109 Clear(type); |
| 110 default_store_type_ = type; |
| 111 for (const auto& kv : objects) |
| 112 DispatchObject(static_cast<ObjectType>(kv.first), kv.second); |
| 113 default_store_type_ = CLIPBOARD_TYPE_COPY_PASTE; |
| 114 } |
| 115 |
| 116 void FakeClipboard::WriteText(const char* text_data, size_t text_len) { |
| 117 std::string text(text_data, text_len); |
| 118 GetDefaultStore().data[GetPlainTextFormatType()] = text; |
| 119 if (IsSupportedClipboardType(CLIPBOARD_TYPE_SELECTION)) |
| 120 GetStore(CLIPBOARD_TYPE_SELECTION).data[GetPlainTextFormatType()] = text; |
| 121 } |
| 122 |
| 123 void FakeClipboard::WriteHTML(const char* markup_data, |
| 124 size_t markup_len, |
| 125 const char* url_data, |
| 126 size_t url_len) { |
| 127 base::string16 markup; |
| 128 base::UTF8ToUTF16(markup_data, markup_len, &markup); |
| 129 GetDefaultStore().data[GetHtmlFormatType()] = base::UTF16ToUTF8(markup); |
| 130 } |
| 131 |
| 132 void FakeClipboard::WriteRTF(const char* rtf_data, size_t data_len) { |
| 133 GetDefaultStore().data[GetRtfFormatType()] = std::string(rtf_data, data_len); |
| 134 } |
| 135 |
| 136 void FakeClipboard::WriteBookmark(const char* title_data, |
| 137 size_t title_len, |
| 138 const char* url_data, |
| 139 size_t url_len) { |
| 140 GetDefaultStore().data[GetUrlWFormatType()] = std::string(url_data, url_len); |
| 141 GetDefaultStore().url_title = std::string(title_data, title_len); |
| 142 } |
| 143 |
| 144 void FakeClipboard::WriteWebSmartPaste() { |
| 145 // Create a dummy entry. |
| 146 GetDefaultStore().data[GetWebKitSmartPasteFormatType()]; |
| 147 } |
| 148 |
| 149 void FakeClipboard::WriteBitmap(const SkBitmap& bitmap) { |
| 150 // Create a dummy entry. |
| 151 GetDefaultStore().data[GetBitmapFormatType()]; |
| 152 bitmap.copyTo(&GetDefaultStore().image); |
| 153 } |
| 154 |
| 155 void FakeClipboard::WriteData(const FormatType& format, |
| 156 const char* data_data, |
| 157 size_t data_len) { |
| 158 GetDefaultStore().data[format] = std::string(data_data, data_len); |
| 159 } |
| 160 |
| 161 FakeClipboard::DataStore::DataStore() : sequence_number(0) { |
| 162 } |
| 163 |
| 164 FakeClipboard::DataStore::~DataStore() { |
| 165 } |
| 166 |
| 167 void FakeClipboard::DataStore::Clear() { |
| 168 data.clear(); |
| 169 url_title.clear(); |
| 170 image = SkBitmap(); |
| 171 } |
| 172 |
| 173 const FakeClipboard::DataStore& FakeClipboard::GetStore( |
| 174 ClipboardType type) const { |
| 175 CHECK(IsSupportedClipboardType(type)); |
| 176 return stores_[type]; |
| 177 } |
| 178 |
| 179 FakeClipboard::DataStore& FakeClipboard::GetStore(ClipboardType type) { |
| 180 CHECK(IsSupportedClipboardType(type)); |
| 181 DataStore& store = stores_[type]; |
| 182 ++store.sequence_number; |
| 183 return store; |
| 184 } |
| 185 |
| 186 const FakeClipboard::DataStore& FakeClipboard::GetDefaultStore() const { |
| 187 return GetStore(default_store_type_); |
| 188 } |
| 189 |
| 190 FakeClipboard::DataStore& FakeClipboard::GetDefaultStore() { |
| 191 return GetStore(default_store_type_); |
| 192 } |
| 193 |
| 194 } // namespace ui |
OLD | NEW |