OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "build/build_config.h" | 5 #include "build/build_config.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/message_loop.h" |
11 #include "base/pickle.h" | 12 #include "base/pickle.h" |
12 #include "base/string_util.h" | 13 #include "base/string_util.h" |
13 #include "base/utf_string_conversions.h" | 14 #include "base/utf_string_conversions.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "testing/platform_test.h" | 16 #include "testing/platform_test.h" |
16 #include "third_party/skia/include/core/SkBitmap.h" | 17 #include "third_party/skia/include/core/SkBitmap.h" |
17 #include "ui/base/clipboard/clipboard.h" | 18 #include "ui/base/clipboard/clipboard.h" |
18 #include "ui/base/clipboard/scoped_clipboard_writer.h" | 19 #include "ui/base/clipboard/scoped_clipboard_writer.h" |
19 #include "ui/gfx/size.h" | 20 #include "ui/gfx/size.h" |
20 | 21 |
21 #if defined(OS_WIN) | 22 #if defined(OS_WIN) |
22 #include "base/message_loop.h" | |
23 #include "ui/base/clipboard/clipboard_util_win.h" | 23 #include "ui/base/clipboard/clipboard_util_win.h" |
24 #endif | 24 #endif |
25 | 25 |
26 #if defined(OS_ANDROID) | 26 #if defined(OS_ANDROID) |
27 #include "base/android/jni_android.h" | 27 #include "base/android/jni_android.h" |
28 #endif | 28 #endif |
29 | 29 |
30 namespace ui { | 30 namespace ui { |
31 | 31 |
32 #if defined(OS_WIN) | |
33 class ClipboardTest : public PlatformTest { | 32 class ClipboardTest : public PlatformTest { |
34 protected: | 33 protected: |
35 virtual void SetUp() { | 34 virtual void SetUp() { |
36 message_loop_.reset(new MessageLoopForUI()); | 35 message_loop_.reset(new MessageLoopForUI()); |
37 } | 36 } |
38 virtual void TearDown() { | 37 virtual void TearDown() { |
39 } | 38 } |
40 | 39 |
| 40 Clipboard& clipboard() { return clipboard_; } |
| 41 |
41 private: | 42 private: |
42 scoped_ptr<MessageLoop> message_loop_; | 43 scoped_ptr<MessageLoop> message_loop_; |
| 44 Clipboard clipboard_; |
43 }; | 45 }; |
44 #elif defined(OS_POSIX) | |
45 typedef PlatformTest ClipboardTest; | |
46 #endif // defined(OS_WIN) | |
47 | 46 |
48 namespace { | 47 namespace { |
49 | 48 |
50 bool MarkupMatches(const string16& expected_markup, | 49 bool MarkupMatches(const string16& expected_markup, |
51 const string16& actual_markup) { | 50 const string16& actual_markup) { |
52 return actual_markup.find(expected_markup) != string16::npos; | 51 return actual_markup.find(expected_markup) != string16::npos; |
53 } | 52 } |
54 | 53 |
55 } // namespace | 54 } // namespace |
56 | 55 |
57 TEST_F(ClipboardTest, ClearTest) { | 56 TEST_F(ClipboardTest, ClearTest) { |
58 Clipboard clipboard; | |
59 | |
60 { | 57 { |
61 ScopedClipboardWriter clipboard_writer(&clipboard, | 58 ScopedClipboardWriter clipboard_writer(&clipboard(), |
62 Clipboard::BUFFER_STANDARD); | 59 Clipboard::BUFFER_STANDARD); |
63 clipboard_writer.WriteText(ASCIIToUTF16("clear me")); | 60 clipboard_writer.WriteText(ASCIIToUTF16("clear me")); |
64 } | 61 } |
65 | 62 |
66 clipboard.Clear(Clipboard::BUFFER_STANDARD); | 63 clipboard().Clear(Clipboard::BUFFER_STANDARD); |
67 | 64 |
68 EXPECT_FALSE(clipboard.IsFormatAvailable( | 65 EXPECT_FALSE(clipboard().IsFormatAvailable( |
69 Clipboard::GetPlainTextWFormatType(), Clipboard::BUFFER_STANDARD)); | 66 Clipboard::GetPlainTextWFormatType(), Clipboard::BUFFER_STANDARD)); |
70 EXPECT_FALSE(clipboard.IsFormatAvailable( | 67 EXPECT_FALSE(clipboard().IsFormatAvailable( |
71 Clipboard::GetPlainTextFormatType(), Clipboard::BUFFER_STANDARD)); | 68 Clipboard::GetPlainTextFormatType(), Clipboard::BUFFER_STANDARD)); |
72 } | 69 } |
73 | 70 |
74 TEST_F(ClipboardTest, TextTest) { | 71 TEST_F(ClipboardTest, TextTest) { |
75 Clipboard clipboard; | |
76 | |
77 string16 text(ASCIIToUTF16("This is a string16!#$")), text_result; | 72 string16 text(ASCIIToUTF16("This is a string16!#$")), text_result; |
78 std::string ascii_text; | 73 std::string ascii_text; |
79 | 74 |
80 { | 75 { |
81 ScopedClipboardWriter clipboard_writer(&clipboard, | 76 ScopedClipboardWriter clipboard_writer(&clipboard(), |
82 Clipboard::BUFFER_STANDARD); | 77 Clipboard::BUFFER_STANDARD); |
83 clipboard_writer.WriteText(text); | 78 clipboard_writer.WriteText(text); |
84 } | 79 } |
85 | 80 |
86 EXPECT_TRUE(clipboard.IsFormatAvailable( | 81 EXPECT_TRUE(clipboard().IsFormatAvailable( |
87 Clipboard::GetPlainTextWFormatType(), Clipboard::BUFFER_STANDARD)); | 82 Clipboard::GetPlainTextWFormatType(), Clipboard::BUFFER_STANDARD)); |
88 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetPlainTextFormatType(), | 83 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetPlainTextFormatType(), |
89 Clipboard::BUFFER_STANDARD)); | 84 Clipboard::BUFFER_STANDARD)); |
90 clipboard.ReadText(Clipboard::BUFFER_STANDARD, &text_result); | 85 clipboard().ReadText(Clipboard::BUFFER_STANDARD, &text_result); |
91 | 86 |
92 EXPECT_EQ(text, text_result); | 87 EXPECT_EQ(text, text_result); |
93 clipboard.ReadAsciiText(Clipboard::BUFFER_STANDARD, &ascii_text); | 88 clipboard().ReadAsciiText(Clipboard::BUFFER_STANDARD, &ascii_text); |
94 EXPECT_EQ(UTF16ToUTF8(text), ascii_text); | 89 EXPECT_EQ(UTF16ToUTF8(text), ascii_text); |
95 } | 90 } |
96 | 91 |
97 TEST_F(ClipboardTest, HTMLTest) { | 92 TEST_F(ClipboardTest, HTMLTest) { |
98 Clipboard clipboard; | |
99 | |
100 string16 markup(ASCIIToUTF16("<string>Hi!</string>")), markup_result; | 93 string16 markup(ASCIIToUTF16("<string>Hi!</string>")), markup_result; |
101 std::string url("http://www.example.com/"), url_result; | 94 std::string url("http://www.example.com/"), url_result; |
102 | 95 |
103 { | 96 { |
104 ScopedClipboardWriter clipboard_writer(&clipboard, | 97 ScopedClipboardWriter clipboard_writer(&clipboard(), |
105 Clipboard::BUFFER_STANDARD); | 98 Clipboard::BUFFER_STANDARD); |
106 clipboard_writer.WriteHTML(markup, url); | 99 clipboard_writer.WriteHTML(markup, url); |
107 } | 100 } |
108 | 101 |
109 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetHtmlFormatType(), | 102 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetHtmlFormatType(), |
110 Clipboard::BUFFER_STANDARD)); | 103 Clipboard::BUFFER_STANDARD)); |
111 uint32 ignored; | 104 uint32 ignored; |
112 clipboard.ReadHTML(Clipboard::BUFFER_STANDARD, &markup_result, &url_result, | 105 clipboard().ReadHTML(Clipboard::BUFFER_STANDARD, &markup_result, &url_result, |
113 &ignored, &ignored); | 106 &ignored, &ignored); |
114 EXPECT_PRED2(MarkupMatches, markup, markup_result); | 107 EXPECT_PRED2(MarkupMatches, markup, markup_result); |
115 #if defined(OS_WIN) | 108 #if defined(OS_WIN) |
116 // TODO(playmobil): It's not clear that non windows clipboards need to support | 109 // TODO(playmobil): It's not clear that non windows clipboards need to support |
117 // this. | 110 // this. |
118 EXPECT_EQ(url, url_result); | 111 EXPECT_EQ(url, url_result); |
119 #endif // defined(OS_WIN) | 112 #endif // defined(OS_WIN) |
120 } | 113 } |
121 | 114 |
122 TEST_F(ClipboardTest, RTFTest) { | 115 TEST_F(ClipboardTest, RTFTest) { |
123 Clipboard clipboard; | |
124 | |
125 std::string rtf = | 116 std::string rtf = |
126 "{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\\f0\\pard\n" | 117 "{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\\f0\\pard\n" |
127 "This is some {\\b bold} text.\\par\n" | 118 "This is some {\\b bold} text.\\par\n" |
128 "}"; | 119 "}"; |
129 | 120 |
130 { | 121 { |
131 ScopedClipboardWriter clipboard_writer(&clipboard, | 122 ScopedClipboardWriter clipboard_writer(&clipboard(), |
132 Clipboard::BUFFER_STANDARD); | 123 Clipboard::BUFFER_STANDARD); |
133 clipboard_writer.WriteRTF(rtf); | 124 clipboard_writer.WriteRTF(rtf); |
134 } | 125 } |
135 | 126 |
136 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetRtfFormatType(), | 127 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetRtfFormatType(), |
137 Clipboard::BUFFER_STANDARD)); | 128 Clipboard::BUFFER_STANDARD)); |
138 std::string result; | 129 std::string result; |
139 clipboard.ReadRTF(Clipboard::BUFFER_STANDARD, &result); | 130 clipboard().ReadRTF(Clipboard::BUFFER_STANDARD, &result); |
140 EXPECT_EQ(rtf, result); | 131 EXPECT_EQ(rtf, result); |
141 } | 132 } |
142 | 133 |
143 #if defined(TOOLKIT_GTK) | 134 #if defined(TOOLKIT_GTK) |
144 TEST_F(ClipboardTest, MultipleBufferTest) { | 135 TEST_F(ClipboardTest, MultipleBufferTest) { |
145 Clipboard clipboard; | |
146 | |
147 string16 text(ASCIIToUTF16("Standard")), text_result; | 136 string16 text(ASCIIToUTF16("Standard")), text_result; |
148 string16 markup(ASCIIToUTF16("<string>Selection</string>")), markup_result; | 137 string16 markup(ASCIIToUTF16("<string>Selection</string>")), markup_result; |
149 std::string url("http://www.example.com/"), url_result; | 138 std::string url("http://www.example.com/"), url_result; |
150 | 139 |
151 { | 140 { |
152 ScopedClipboardWriter clipboard_writer(&clipboard, | 141 ScopedClipboardWriter clipboard_writer(&clipboard(), |
153 Clipboard::BUFFER_STANDARD); | 142 Clipboard::BUFFER_STANDARD); |
154 clipboard_writer.WriteText(text); | 143 clipboard_writer.WriteText(text); |
155 } | 144 } |
156 | 145 |
157 { | 146 { |
158 ScopedClipboardWriter clipboard_writer(&clipboard, | 147 ScopedClipboardWriter clipboard_writer(&clipboard(), |
159 Clipboard::BUFFER_SELECTION); | 148 Clipboard::BUFFER_SELECTION); |
160 clipboard_writer.WriteHTML(markup, url); | 149 clipboard_writer.WriteHTML(markup, url); |
161 } | 150 } |
162 | 151 |
163 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetPlainTextFormatType(), | 152 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetPlainTextFormatType(), |
164 Clipboard::BUFFER_STANDARD)); | 153 Clipboard::BUFFER_STANDARD)); |
165 EXPECT_FALSE(clipboard.IsFormatAvailable(Clipboard::GetPlainTextFormatType(), | 154 EXPECT_FALSE(clipboard().IsFormatAvailable( |
166 Clipboard::BUFFER_SELECTION)); | 155 Clipboard::GetPlainTextFormatType(), |
| 156 Clipboard::BUFFER_SELECTION)); |
167 | 157 |
168 EXPECT_FALSE(clipboard.IsFormatAvailable(Clipboard::GetHtmlFormatType(), | 158 EXPECT_FALSE(clipboard().IsFormatAvailable(Clipboard::GetHtmlFormatType(), |
169 Clipboard::BUFFER_STANDARD)); | 159 Clipboard::BUFFER_STANDARD)); |
170 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetHtmlFormatType(), | 160 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetHtmlFormatType(), |
171 Clipboard::BUFFER_SELECTION)); | 161 Clipboard::BUFFER_SELECTION)); |
172 | 162 |
173 clipboard.ReadText(Clipboard::BUFFER_STANDARD, &text_result); | 163 clipboard().ReadText(Clipboard::BUFFER_STANDARD, &text_result); |
174 EXPECT_EQ(text, text_result); | 164 EXPECT_EQ(text, text_result); |
175 | 165 |
176 uint32 ignored; | 166 uint32 ignored; |
177 clipboard.ReadHTML(Clipboard::BUFFER_SELECTION, &markup_result, &url_result, | 167 clipboard().ReadHTML(Clipboard::BUFFER_SELECTION, &markup_result, &url_result, |
178 &ignored, &ignored); | 168 &ignored, &ignored); |
179 EXPECT_PRED2(MarkupMatches, markup, markup_result); | 169 EXPECT_PRED2(MarkupMatches, markup, markup_result); |
180 } | 170 } |
181 #endif | 171 #endif |
182 | 172 |
183 TEST_F(ClipboardTest, TrickyHTMLTest) { | 173 TEST_F(ClipboardTest, TrickyHTMLTest) { |
184 Clipboard clipboard; | |
185 | |
186 string16 markup(ASCIIToUTF16("<em>Bye!<!--EndFragment --></em>")), | 174 string16 markup(ASCIIToUTF16("<em>Bye!<!--EndFragment --></em>")), |
187 markup_result; | 175 markup_result; |
188 std::string url, url_result; | 176 std::string url, url_result; |
189 | 177 |
190 { | 178 { |
191 ScopedClipboardWriter clipboard_writer(&clipboard, | 179 ScopedClipboardWriter clipboard_writer(&clipboard(), |
192 Clipboard::BUFFER_STANDARD); | 180 Clipboard::BUFFER_STANDARD); |
193 clipboard_writer.WriteHTML(markup, url); | 181 clipboard_writer.WriteHTML(markup, url); |
194 } | 182 } |
195 | 183 |
196 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetHtmlFormatType(), | 184 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetHtmlFormatType(), |
197 Clipboard::BUFFER_STANDARD)); | 185 Clipboard::BUFFER_STANDARD)); |
198 uint32 ignored; | 186 uint32 ignored; |
199 clipboard.ReadHTML(Clipboard::BUFFER_STANDARD, &markup_result, &url_result, | 187 clipboard().ReadHTML(Clipboard::BUFFER_STANDARD, &markup_result, &url_result, |
200 &ignored, &ignored); | 188 &ignored, &ignored); |
201 EXPECT_PRED2(MarkupMatches, markup, markup_result); | 189 EXPECT_PRED2(MarkupMatches, markup, markup_result); |
202 #if defined(OS_WIN) | 190 #if defined(OS_WIN) |
203 // TODO(playmobil): It's not clear that non windows clipboards need to support | 191 // TODO(playmobil): It's not clear that non windows clipboards need to support |
204 // this. | 192 // this. |
205 EXPECT_EQ(url, url_result); | 193 EXPECT_EQ(url, url_result); |
206 #endif // defined(OS_WIN) | 194 #endif // defined(OS_WIN) |
207 } | 195 } |
208 | 196 |
209 #if defined(OS_WIN) | 197 #if defined(OS_WIN) |
210 TEST_F(ClipboardTest, UniodeHTMLTest) { | 198 TEST_F(ClipboardTest, UniodeHTMLTest) { |
211 Clipboard clipboard; | |
212 | |
213 string16 markup(UTF8ToUTF16("<div>A \xc3\xb8 \xe6\xb0\xb4</div>")), | 199 string16 markup(UTF8ToUTF16("<div>A \xc3\xb8 \xe6\xb0\xb4</div>")), |
214 markup_result; | 200 markup_result; |
215 std::string url, url_result; | 201 std::string url, url_result; |
216 | 202 |
217 { | 203 { |
218 ScopedClipboardWriter clipboard_writer(&clipboard, | 204 ScopedClipboardWriter clipboard_writer(&clipboard(), |
219 Clipboard::BUFFER_STANDARD); | 205 Clipboard::BUFFER_STANDARD); |
220 clipboard_writer.WriteHTML(markup, url); | 206 clipboard_writer.WriteHTML(markup, url); |
221 } | 207 } |
222 | 208 |
223 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetHtmlFormatType(), | 209 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetHtmlFormatType(), |
224 Clipboard::BUFFER_STANDARD)); | 210 Clipboard::BUFFER_STANDARD)); |
225 uint32 fragment_start; | 211 uint32 fragment_start; |
226 uint32 fragment_end; | 212 uint32 fragment_end; |
227 clipboard.ReadHTML(Clipboard::BUFFER_STANDARD, &markup_result, &url_result, | 213 clipboard().ReadHTML(Clipboard::BUFFER_STANDARD, &markup_result, &url_result, |
228 &fragment_start, &fragment_end); | 214 &fragment_start, &fragment_end); |
229 EXPECT_PRED2(MarkupMatches, markup, markup_result); | 215 EXPECT_PRED2(MarkupMatches, markup, markup_result); |
230 EXPECT_EQ(url, url_result); | 216 EXPECT_EQ(url, url_result); |
231 // Make sure that fragment indices were adjusted when converting. | 217 // Make sure that fragment indices were adjusted when converting. |
232 EXPECT_EQ(36, fragment_start); | 218 EXPECT_EQ(36, fragment_start); |
233 EXPECT_EQ(52, fragment_end); | 219 EXPECT_EQ(52, fragment_end); |
234 } | 220 } |
235 #endif // defined(OS_WIN) | 221 #endif // defined(OS_WIN) |
236 | 222 |
237 #if defined(TOOLKIT_GTK) | 223 #if defined(TOOLKIT_GTK) |
238 // Regression test for crbug.com/56298 (pasting empty HTML crashes Linux). | 224 // Regression test for crbug.com/56298 (pasting empty HTML crashes Linux). |
239 TEST_F(ClipboardTest, EmptyHTMLTest) { | 225 TEST_F(ClipboardTest, EmptyHTMLTest) { |
240 Clipboard clipboard; | |
241 // ScopedClipboardWriter doesn't let us write empty data to the clipboard. | 226 // ScopedClipboardWriter doesn't let us write empty data to the clipboard. |
242 clipboard.clipboard_data_ = new Clipboard::TargetMap(); | 227 clipboard().clipboard_data_ = new Clipboard::TargetMap(); |
243 // The 1 is so the compiler doesn't warn about allocating an empty array. | 228 // The 1 is so the compiler doesn't warn about allocating an empty array. |
244 char* empty = new char[1]; | 229 char* empty = new char[1]; |
245 clipboard.InsertMapping("text/html", empty, 0U); | 230 clipboard().InsertMapping("text/html", empty, 0U); |
246 clipboard.SetGtkClipboard(Clipboard::BUFFER_STANDARD); | 231 clipboard().SetGtkClipboard(Clipboard::BUFFER_STANDARD); |
247 | 232 |
248 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetHtmlFormatType(), | 233 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetHtmlFormatType(), |
249 Clipboard::BUFFER_STANDARD)); | 234 Clipboard::BUFFER_STANDARD)); |
250 string16 markup_result; | 235 string16 markup_result; |
251 std::string url_result; | 236 std::string url_result; |
252 uint32 ignored; | 237 uint32 ignored; |
253 clipboard.ReadHTML(Clipboard::BUFFER_STANDARD, &markup_result, &url_result, | 238 clipboard().ReadHTML(Clipboard::BUFFER_STANDARD, &markup_result, &url_result, |
254 &ignored, &ignored); | 239 &ignored, &ignored); |
255 EXPECT_PRED2(MarkupMatches, string16(), markup_result); | 240 EXPECT_PRED2(MarkupMatches, string16(), markup_result); |
256 } | 241 } |
257 #endif | 242 #endif |
258 | 243 |
259 // TODO(estade): Port the following test (decide what target we use for urls) | 244 // TODO(estade): Port the following test (decide what target we use for urls) |
260 #if !defined(OS_POSIX) || defined(OS_MACOSX) | 245 #if !defined(OS_POSIX) || defined(OS_MACOSX) |
261 TEST_F(ClipboardTest, BookmarkTest) { | 246 TEST_F(ClipboardTest, BookmarkTest) { |
262 Clipboard clipboard; | |
263 | |
264 string16 title(ASCIIToUTF16("The Example Company")), title_result; | 247 string16 title(ASCIIToUTF16("The Example Company")), title_result; |
265 std::string url("http://www.example.com/"), url_result; | 248 std::string url("http://www.example.com/"), url_result; |
266 | 249 |
267 { | 250 { |
268 ScopedClipboardWriter clipboard_writer(&clipboard, | 251 ScopedClipboardWriter clipboard_writer(&clipboard(), |
269 Clipboard::BUFFER_STANDARD); | 252 Clipboard::BUFFER_STANDARD); |
270 clipboard_writer.WriteBookmark(title, url); | 253 clipboard_writer.WriteBookmark(title, url); |
271 } | 254 } |
272 | 255 |
273 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetUrlWFormatType(), | 256 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetUrlWFormatType(), |
274 Clipboard::BUFFER_STANDARD)); | 257 Clipboard::BUFFER_STANDARD)); |
275 clipboard.ReadBookmark(&title_result, &url_result); | 258 clipboard().ReadBookmark(&title_result, &url_result); |
276 EXPECT_EQ(title, title_result); | 259 EXPECT_EQ(title, title_result); |
277 EXPECT_EQ(url, url_result); | 260 EXPECT_EQ(url, url_result); |
278 } | 261 } |
279 #endif // defined(OS_WIN) | 262 #endif // defined(OS_WIN) |
280 | 263 |
281 TEST_F(ClipboardTest, MultiFormatTest) { | 264 TEST_F(ClipboardTest, MultiFormatTest) { |
282 Clipboard clipboard; | |
283 | |
284 string16 text(ASCIIToUTF16("Hi!")), text_result; | 265 string16 text(ASCIIToUTF16("Hi!")), text_result; |
285 string16 markup(ASCIIToUTF16("<strong>Hi!</string>")), markup_result; | 266 string16 markup(ASCIIToUTF16("<strong>Hi!</string>")), markup_result; |
286 std::string url("http://www.example.com/"), url_result; | 267 std::string url("http://www.example.com/"), url_result; |
287 std::string ascii_text; | 268 std::string ascii_text; |
288 | 269 |
289 { | 270 { |
290 ScopedClipboardWriter clipboard_writer(&clipboard, | 271 ScopedClipboardWriter clipboard_writer(&clipboard(), |
291 Clipboard::BUFFER_STANDARD); | 272 Clipboard::BUFFER_STANDARD); |
292 clipboard_writer.WriteHTML(markup, url); | 273 clipboard_writer.WriteHTML(markup, url); |
293 clipboard_writer.WriteText(text); | 274 clipboard_writer.WriteText(text); |
294 } | 275 } |
295 | 276 |
296 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetHtmlFormatType(), | 277 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetHtmlFormatType(), |
297 Clipboard::BUFFER_STANDARD)); | 278 Clipboard::BUFFER_STANDARD)); |
298 EXPECT_TRUE(clipboard.IsFormatAvailable( | 279 EXPECT_TRUE(clipboard().IsFormatAvailable( |
299 Clipboard::GetPlainTextWFormatType(), Clipboard::BUFFER_STANDARD)); | 280 Clipboard::GetPlainTextWFormatType(), Clipboard::BUFFER_STANDARD)); |
300 EXPECT_TRUE(clipboard.IsFormatAvailable( | 281 EXPECT_TRUE(clipboard().IsFormatAvailable( |
301 Clipboard::GetPlainTextFormatType(), Clipboard::BUFFER_STANDARD)); | 282 Clipboard::GetPlainTextFormatType(), Clipboard::BUFFER_STANDARD)); |
302 uint32 ignored; | 283 uint32 ignored; |
303 clipboard.ReadHTML(Clipboard::BUFFER_STANDARD, &markup_result, &url_result, | 284 clipboard().ReadHTML(Clipboard::BUFFER_STANDARD, &markup_result, &url_result, |
304 &ignored, &ignored); | 285 &ignored, &ignored); |
305 EXPECT_PRED2(MarkupMatches, markup, markup_result); | 286 EXPECT_PRED2(MarkupMatches, markup, markup_result); |
306 #if defined(OS_WIN) | 287 #if defined(OS_WIN) |
307 // TODO(playmobil): It's not clear that non windows clipboards need to support | 288 // TODO(playmobil): It's not clear that non windows clipboards need to support |
308 // this. | 289 // this. |
309 EXPECT_EQ(url, url_result); | 290 EXPECT_EQ(url, url_result); |
310 #endif // defined(OS_WIN) | 291 #endif // defined(OS_WIN) |
311 clipboard.ReadText(Clipboard::BUFFER_STANDARD, &text_result); | 292 clipboard().ReadText(Clipboard::BUFFER_STANDARD, &text_result); |
312 EXPECT_EQ(text, text_result); | 293 EXPECT_EQ(text, text_result); |
313 clipboard.ReadAsciiText(Clipboard::BUFFER_STANDARD, &ascii_text); | 294 clipboard().ReadAsciiText(Clipboard::BUFFER_STANDARD, &ascii_text); |
314 EXPECT_EQ(UTF16ToUTF8(text), ascii_text); | 295 EXPECT_EQ(UTF16ToUTF8(text), ascii_text); |
315 } | 296 } |
316 | 297 |
317 TEST_F(ClipboardTest, URLTest) { | 298 TEST_F(ClipboardTest, URLTest) { |
318 Clipboard clipboard; | |
319 | |
320 string16 url(ASCIIToUTF16("http://www.google.com/")); | 299 string16 url(ASCIIToUTF16("http://www.google.com/")); |
321 | 300 |
322 { | 301 { |
323 ScopedClipboardWriter clipboard_writer(&clipboard, | 302 ScopedClipboardWriter clipboard_writer(&clipboard(), |
324 Clipboard::BUFFER_STANDARD); | 303 Clipboard::BUFFER_STANDARD); |
325 clipboard_writer.WriteURL(url); | 304 clipboard_writer.WriteURL(url); |
326 } | 305 } |
327 | 306 |
328 EXPECT_TRUE(clipboard.IsFormatAvailable( | 307 EXPECT_TRUE(clipboard().IsFormatAvailable( |
329 Clipboard::GetPlainTextWFormatType(), Clipboard::BUFFER_STANDARD)); | 308 Clipboard::GetPlainTextWFormatType(), Clipboard::BUFFER_STANDARD)); |
330 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetPlainTextFormatType(), | 309 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetPlainTextFormatType(), |
331 Clipboard::BUFFER_STANDARD)); | 310 Clipboard::BUFFER_STANDARD)); |
332 string16 text_result; | 311 string16 text_result; |
333 clipboard.ReadText(Clipboard::BUFFER_STANDARD, &text_result); | 312 clipboard().ReadText(Clipboard::BUFFER_STANDARD, &text_result); |
334 | 313 |
335 EXPECT_EQ(text_result, url); | 314 EXPECT_EQ(text_result, url); |
336 | 315 |
337 std::string ascii_text; | 316 std::string ascii_text; |
338 clipboard.ReadAsciiText(Clipboard::BUFFER_STANDARD, &ascii_text); | 317 clipboard().ReadAsciiText(Clipboard::BUFFER_STANDARD, &ascii_text); |
339 EXPECT_EQ(UTF16ToUTF8(url), ascii_text); | 318 EXPECT_EQ(UTF16ToUTF8(url), ascii_text); |
340 | 319 |
341 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) | 320 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) |
342 ascii_text.clear(); | 321 ascii_text.clear(); |
343 clipboard.ReadAsciiText(Clipboard::BUFFER_SELECTION, &ascii_text); | 322 clipboard().ReadAsciiText(Clipboard::BUFFER_SELECTION, &ascii_text); |
344 EXPECT_EQ(UTF16ToUTF8(url), ascii_text); | 323 EXPECT_EQ(UTF16ToUTF8(url), ascii_text); |
345 #endif | 324 #endif |
346 } | 325 } |
347 | 326 |
348 TEST_F(ClipboardTest, SharedBitmapTest) { | 327 TEST_F(ClipboardTest, SharedBitmapTest) { |
349 unsigned int fake_bitmap[] = { | 328 unsigned int fake_bitmap[] = { |
350 0x46155189, 0xF6A55C8D, 0x79845674, 0xFA57BD89, | 329 0x46155189, 0xF6A55C8D, 0x79845674, 0xFA57BD89, |
351 0x78FD46AE, 0x87C64F5A, 0x36EDC5AF, 0x4378F568, | 330 0x78FD46AE, 0x87C64F5A, 0x36EDC5AF, 0x4378F568, |
352 0x91E9F63A, 0xC31EA14F, 0x69AB32DF, 0x643A3FD1, | 331 0x91E9F63A, 0xC31EA14F, 0x69AB32DF, 0x643A3FD1, |
353 }; | 332 }; |
354 gfx::Size fake_bitmap_size(3, 4); | 333 gfx::Size fake_bitmap_size(3, 4); |
355 uint32 bytes = sizeof(fake_bitmap); | 334 uint32 bytes = sizeof(fake_bitmap); |
356 | 335 |
357 // Create shared memory region. | 336 // Create shared memory region. |
358 base::SharedMemory shared_buf; | 337 base::SharedMemory shared_buf; |
359 ASSERT_TRUE(shared_buf.CreateAndMapAnonymous(bytes)); | 338 ASSERT_TRUE(shared_buf.CreateAndMapAnonymous(bytes)); |
360 memcpy(shared_buf.memory(), fake_bitmap, bytes); | 339 memcpy(shared_buf.memory(), fake_bitmap, bytes); |
361 base::SharedMemoryHandle handle_to_share; | 340 base::SharedMemoryHandle handle_to_share; |
362 base::ProcessHandle current_process = base::kNullProcessHandle; | 341 base::ProcessHandle current_process = base::kNullProcessHandle; |
363 #if defined(OS_WIN) | 342 #if defined(OS_WIN) |
364 current_process = GetCurrentProcess(); | 343 current_process = GetCurrentProcess(); |
365 #endif | 344 #endif |
366 shared_buf.ShareToProcess(current_process, &handle_to_share); | 345 shared_buf.ShareToProcess(current_process, &handle_to_share); |
367 ASSERT_TRUE(shared_buf.Unmap()); | 346 ASSERT_TRUE(shared_buf.Unmap()); |
368 | 347 |
369 // Setup data for clipboard. | 348 // Setup data for clipboard(). |
370 Clipboard::ObjectMapParam placeholder_param; | 349 Clipboard::ObjectMapParam placeholder_param; |
371 Clipboard::ObjectMapParam size_param; | 350 Clipboard::ObjectMapParam size_param; |
372 const char* size_data = reinterpret_cast<const char*>(&fake_bitmap_size); | 351 const char* size_data = reinterpret_cast<const char*>(&fake_bitmap_size); |
373 for (size_t i = 0; i < sizeof(fake_bitmap_size); ++i) | 352 for (size_t i = 0; i < sizeof(fake_bitmap_size); ++i) |
374 size_param.push_back(size_data[i]); | 353 size_param.push_back(size_data[i]); |
375 | 354 |
376 Clipboard::ObjectMapParams params; | 355 Clipboard::ObjectMapParams params; |
377 params.push_back(placeholder_param); | 356 params.push_back(placeholder_param); |
378 params.push_back(size_param); | 357 params.push_back(size_param); |
379 | 358 |
380 Clipboard::ObjectMap objects; | 359 Clipboard::ObjectMap objects; |
381 objects[Clipboard::CBF_SMBITMAP] = params; | 360 objects[Clipboard::CBF_SMBITMAP] = params; |
382 Clipboard::ReplaceSharedMemHandle(&objects, handle_to_share, current_process); | 361 Clipboard::ReplaceSharedMemHandle(&objects, handle_to_share, current_process); |
383 | 362 |
384 Clipboard clipboard; | 363 clipboard().WriteObjects(Clipboard::BUFFER_STANDARD, objects); |
385 clipboard.WriteObjects(Clipboard::BUFFER_STANDARD, objects); | |
386 | 364 |
387 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetBitmapFormatType(), | 365 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(), |
388 Clipboard::BUFFER_STANDARD)); | 366 Clipboard::BUFFER_STANDARD)); |
389 } | 367 } |
390 | 368 |
391 // The following test somehow fails on GTK. The image when read back from the | 369 // The following test somehow fails on GTK. The image when read back from the |
392 // clipboard has the alpha channel set to 0xFF for some reason. The other | 370 // clipboard has the alpha channel set to 0xFF for some reason. The other |
393 // channels stay intact. So I am turning this on only for aura. | 371 // channels stay intact. So I am turning this on only for aura. |
394 #if (defined(USE_AURA) && !defined(OS_WIN)) || defined(OS_ANDROID) | 372 #if (defined(USE_AURA) && !defined(OS_WIN)) || defined(OS_ANDROID) |
395 TEST_F(ClipboardTest, MultipleBitmapReadWriteTest) { | 373 TEST_F(ClipboardTest, MultipleBitmapReadWriteTest) { |
396 Clipboard clipboard; | |
397 | |
398 // Test first bitmap | 374 // Test first bitmap |
399 unsigned int fake_bitmap_1[] = { | 375 unsigned int fake_bitmap_1[] = { |
400 0x46155189, 0xF6A55C8D, 0x79845674, 0xFA57BD89, | 376 0x46155189, 0xF6A55C8D, 0x79845674, 0xFA57BD89, |
401 0x78FD46AE, 0x87C64F5A, 0x36EDC5AF, 0x4378F568, | 377 0x78FD46AE, 0x87C64F5A, 0x36EDC5AF, 0x4378F568, |
402 0x91E9F63A, 0xC31EA14F, 0x69AB32DF, 0x643A3FD1, | 378 0x91E9F63A, 0xC31EA14F, 0x69AB32DF, 0x643A3FD1, |
403 }; | 379 }; |
404 gfx::Size fake_bitmap_1_size(3, 4); | 380 gfx::Size fake_bitmap_1_size(3, 4); |
405 { | 381 { |
406 ScopedClipboardWriter clipboard_writer(&clipboard, | 382 ScopedClipboardWriter clipboard_writer(&clipboard(), |
407 Clipboard::BUFFER_STANDARD); | 383 Clipboard::BUFFER_STANDARD); |
408 clipboard_writer.WriteBitmapFromPixels(fake_bitmap_1, fake_bitmap_1_size); | 384 clipboard_writer.WriteBitmapFromPixels(fake_bitmap_1, fake_bitmap_1_size); |
409 } | 385 } |
410 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetBitmapFormatType(), | 386 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(), |
411 Clipboard::BUFFER_STANDARD)); | 387 Clipboard::BUFFER_STANDARD)); |
412 SkBitmap image_1 = clipboard.ReadImage(Clipboard::BUFFER_STANDARD); | 388 SkBitmap image_1 = clipboard().ReadImage(Clipboard::BUFFER_STANDARD); |
413 EXPECT_EQ(fake_bitmap_1_size, gfx::Size(image_1.width(), image_1.height())); | 389 EXPECT_EQ(fake_bitmap_1_size, gfx::Size(image_1.width(), image_1.height())); |
414 unsigned int* pixels_1 = reinterpret_cast<unsigned int*>(image_1.getPixels()); | 390 unsigned int* pixels_1 = reinterpret_cast<unsigned int*>(image_1.getPixels()); |
415 for (int i = 0; i < fake_bitmap_1_size.width(); ++i) { | 391 for (int i = 0; i < fake_bitmap_1_size.width(); ++i) { |
416 for (int j = 0; j < fake_bitmap_1_size.height(); ++j) { | 392 for (int j = 0; j < fake_bitmap_1_size.height(); ++j) { |
417 int id = i * fake_bitmap_1_size.height() + j; | 393 int id = i * fake_bitmap_1_size.height() + j; |
418 EXPECT_EQ(fake_bitmap_1[id], pixels_1[id]); | 394 EXPECT_EQ(fake_bitmap_1[id], pixels_1[id]); |
419 } | 395 } |
420 } | 396 } |
421 | 397 |
422 // Test second bitmap | 398 // Test second bitmap |
423 unsigned int fake_bitmap_2[] = { | 399 unsigned int fake_bitmap_2[] = { |
424 0x46155189, 0xF6A55C8D, | 400 0x46155189, 0xF6A55C8D, |
425 0x79845674, 0xFA57BD89, | 401 0x79845674, 0xFA57BD89, |
426 0x78FD46AE, 0x87C64F5A, | 402 0x78FD46AE, 0x87C64F5A, |
427 0x36EDC5AF, 0x4378F568, | 403 0x36EDC5AF, 0x4378F568, |
428 0x91E9F63A, 0xC31EA14F, | 404 0x91E9F63A, 0xC31EA14F, |
429 0x69AB32DF, 0x643A3FD1, | 405 0x69AB32DF, 0x643A3FD1, |
430 0xA6DF041D, 0x83046278, | 406 0xA6DF041D, 0x83046278, |
431 }; | 407 }; |
432 gfx::Size fake_bitmap_2_size(7, 2); | 408 gfx::Size fake_bitmap_2_size(7, 2); |
433 { | 409 { |
434 ScopedClipboardWriter clipboard_writer(&clipboard, | 410 ScopedClipboardWriter clipboard_writer(&clipboard(), |
435 Clipboard::BUFFER_STANDARD); | 411 Clipboard::BUFFER_STANDARD); |
436 clipboard_writer.WriteBitmapFromPixels(fake_bitmap_2, fake_bitmap_2_size); | 412 clipboard_writer.WriteBitmapFromPixels(fake_bitmap_2, fake_bitmap_2_size); |
437 } | 413 } |
438 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetBitmapFormatType(), | 414 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(), |
439 Clipboard::BUFFER_STANDARD)); | 415 Clipboard::BUFFER_STANDARD)); |
440 SkBitmap image_2 = clipboard.ReadImage(Clipboard::BUFFER_STANDARD); | 416 SkBitmap image_2 = clipboard().ReadImage(Clipboard::BUFFER_STANDARD); |
441 EXPECT_EQ(fake_bitmap_2_size, gfx::Size(image_2.width(), image_2.height())); | 417 EXPECT_EQ(fake_bitmap_2_size, gfx::Size(image_2.width(), image_2.height())); |
442 unsigned int* pixels_2 = reinterpret_cast<unsigned int*>(image_2.getPixels()); | 418 unsigned int* pixels_2 = reinterpret_cast<unsigned int*>(image_2.getPixels()); |
443 for (int i = 0; i < fake_bitmap_2_size.width(); ++i) { | 419 for (int i = 0; i < fake_bitmap_2_size.width(); ++i) { |
444 for (int j = 0; j < fake_bitmap_2_size.height(); ++j) { | 420 for (int j = 0; j < fake_bitmap_2_size.height(); ++j) { |
445 int id = i * fake_bitmap_2_size.height() + j; | 421 int id = i * fake_bitmap_2_size.height() + j; |
446 EXPECT_EQ(fake_bitmap_2[id], pixels_2[id]); | 422 EXPECT_EQ(fake_bitmap_2[id], pixels_2[id]); |
447 } | 423 } |
448 } | 424 } |
449 } | 425 } |
450 #endif | 426 #endif |
451 | 427 |
452 TEST_F(ClipboardTest, DataTest) { | 428 TEST_F(ClipboardTest, DataTest) { |
453 Clipboard clipboard; | |
454 const ui::Clipboard::FormatType kFormat = | 429 const ui::Clipboard::FormatType kFormat = |
455 ui::Clipboard::GetFormatType("chromium/x-test-format"); | 430 ui::Clipboard::GetFormatType("chromium/x-test-format"); |
456 std::string payload("test string"); | 431 std::string payload("test string"); |
457 Pickle write_pickle; | 432 Pickle write_pickle; |
458 write_pickle.WriteString(payload); | 433 write_pickle.WriteString(payload); |
459 | 434 |
460 { | 435 { |
461 ScopedClipboardWriter clipboard_writer(&clipboard, | 436 ScopedClipboardWriter clipboard_writer(&clipboard(), |
462 Clipboard::BUFFER_STANDARD); | 437 Clipboard::BUFFER_STANDARD); |
463 clipboard_writer.WritePickledData(write_pickle, kFormat); | 438 clipboard_writer.WritePickledData(write_pickle, kFormat); |
464 } | 439 } |
465 | 440 |
466 ASSERT_TRUE(clipboard.IsFormatAvailable( | 441 ASSERT_TRUE(clipboard().IsFormatAvailable( |
467 kFormat, Clipboard::BUFFER_STANDARD)); | 442 kFormat, Clipboard::BUFFER_STANDARD)); |
468 std::string output; | 443 std::string output; |
469 clipboard.ReadData(kFormat, &output); | 444 clipboard().ReadData(kFormat, &output); |
470 ASSERT_FALSE(output.empty()); | 445 ASSERT_FALSE(output.empty()); |
471 | 446 |
472 Pickle read_pickle(output.data(), output.size()); | 447 Pickle read_pickle(output.data(), output.size()); |
473 PickleIterator iter(read_pickle); | 448 PickleIterator iter(read_pickle); |
474 std::string unpickled_string; | 449 std::string unpickled_string; |
475 ASSERT_TRUE(read_pickle.ReadString(&iter, &unpickled_string)); | 450 ASSERT_TRUE(read_pickle.ReadString(&iter, &unpickled_string)); |
476 EXPECT_EQ(payload, unpickled_string); | 451 EXPECT_EQ(payload, unpickled_string); |
477 } | 452 } |
478 | 453 |
479 TEST_F(ClipboardTest, MultipleDataTest) { | 454 TEST_F(ClipboardTest, MultipleDataTest) { |
480 Clipboard clipboard; | |
481 const ui::Clipboard::FormatType kFormat1 = | 455 const ui::Clipboard::FormatType kFormat1 = |
482 ui::Clipboard::GetFormatType("chromium/x-test-format1"); | 456 ui::Clipboard::GetFormatType("chromium/x-test-format1"); |
483 std::string payload1("test string1"); | 457 std::string payload1("test string1"); |
484 Pickle write_pickle1; | 458 Pickle write_pickle1; |
485 write_pickle1.WriteString(payload1); | 459 write_pickle1.WriteString(payload1); |
486 | 460 |
487 const ui::Clipboard::FormatType kFormat2 = | 461 const ui::Clipboard::FormatType kFormat2 = |
488 ui::Clipboard::GetFormatType("chromium/x-test-format2"); | 462 ui::Clipboard::GetFormatType("chromium/x-test-format2"); |
489 std::string payload2("test string2"); | 463 std::string payload2("test string2"); |
490 Pickle write_pickle2; | 464 Pickle write_pickle2; |
491 write_pickle2.WriteString(payload2); | 465 write_pickle2.WriteString(payload2); |
492 | 466 |
493 { | 467 { |
494 ScopedClipboardWriter clipboard_writer(&clipboard, | 468 ScopedClipboardWriter clipboard_writer(&clipboard(), |
495 Clipboard::BUFFER_STANDARD); | 469 Clipboard::BUFFER_STANDARD); |
496 clipboard_writer.WritePickledData(write_pickle1, kFormat1); | 470 clipboard_writer.WritePickledData(write_pickle1, kFormat1); |
497 // overwrite the previous pickle for fun | 471 // overwrite the previous pickle for fun |
498 clipboard_writer.WritePickledData(write_pickle2, kFormat2); | 472 clipboard_writer.WritePickledData(write_pickle2, kFormat2); |
499 } | 473 } |
500 | 474 |
501 ASSERT_TRUE(clipboard.IsFormatAvailable( | 475 ASSERT_TRUE(clipboard().IsFormatAvailable( |
502 kFormat2, Clipboard::BUFFER_STANDARD)); | 476 kFormat2, Clipboard::BUFFER_STANDARD)); |
503 | 477 |
504 // Check string 2. | 478 // Check string 2. |
505 std::string output2; | 479 std::string output2; |
506 clipboard.ReadData(kFormat2, &output2); | 480 clipboard().ReadData(kFormat2, &output2); |
507 ASSERT_FALSE(output2.empty()); | 481 ASSERT_FALSE(output2.empty()); |
508 | 482 |
509 Pickle read_pickle2(output2.data(), output2.size()); | 483 Pickle read_pickle2(output2.data(), output2.size()); |
510 PickleIterator iter2(read_pickle2); | 484 PickleIterator iter2(read_pickle2); |
511 std::string unpickled_string2; | 485 std::string unpickled_string2; |
512 ASSERT_TRUE(read_pickle2.ReadString(&iter2, &unpickled_string2)); | 486 ASSERT_TRUE(read_pickle2.ReadString(&iter2, &unpickled_string2)); |
513 EXPECT_EQ(payload2, unpickled_string2); | 487 EXPECT_EQ(payload2, unpickled_string2); |
514 | 488 |
515 { | 489 { |
516 ScopedClipboardWriter clipboard_writer(&clipboard, | 490 ScopedClipboardWriter clipboard_writer(&clipboard(), |
517 Clipboard::BUFFER_STANDARD); | 491 Clipboard::BUFFER_STANDARD); |
518 clipboard_writer.WritePickledData(write_pickle2, kFormat2); | 492 clipboard_writer.WritePickledData(write_pickle2, kFormat2); |
519 // overwrite the previous pickle for fun | 493 // overwrite the previous pickle for fun |
520 clipboard_writer.WritePickledData(write_pickle1, kFormat1); | 494 clipboard_writer.WritePickledData(write_pickle1, kFormat1); |
521 } | 495 } |
522 | 496 |
523 ASSERT_TRUE(clipboard.IsFormatAvailable( | 497 ASSERT_TRUE(clipboard().IsFormatAvailable( |
524 kFormat1, Clipboard::BUFFER_STANDARD)); | 498 kFormat1, Clipboard::BUFFER_STANDARD)); |
525 | 499 |
526 // Check string 1. | 500 // Check string 1. |
527 std::string output1; | 501 std::string output1; |
528 clipboard.ReadData(kFormat1, &output1); | 502 clipboard().ReadData(kFormat1, &output1); |
529 ASSERT_FALSE(output1.empty()); | 503 ASSERT_FALSE(output1.empty()); |
530 | 504 |
531 Pickle read_pickle1(output1.data(), output1.size()); | 505 Pickle read_pickle1(output1.data(), output1.size()); |
532 PickleIterator iter1(read_pickle1); | 506 PickleIterator iter1(read_pickle1); |
533 std::string unpickled_string1; | 507 std::string unpickled_string1; |
534 ASSERT_TRUE(read_pickle1.ReadString(&iter1, &unpickled_string1)); | 508 ASSERT_TRUE(read_pickle1.ReadString(&iter1, &unpickled_string1)); |
535 EXPECT_EQ(payload1, unpickled_string1); | 509 EXPECT_EQ(payload1, unpickled_string1); |
536 } | 510 } |
537 | 511 |
538 #if defined(OS_WIN) // Windows only tests. | 512 #if defined(OS_WIN) // Windows only tests. |
539 TEST_F(ClipboardTest, HyperlinkTest) { | 513 TEST_F(ClipboardTest, HyperlinkTest) { |
540 Clipboard clipboard; | |
541 | |
542 const std::string kTitle("The Example Company"); | 514 const std::string kTitle("The Example Company"); |
543 const std::string kUrl("http://www.example.com/"); | 515 const std::string kUrl("http://www.example.com/"); |
544 const std::string kExpectedHtml("<a href=\"http://www.example.com/\">" | 516 const std::string kExpectedHtml("<a href=\"http://www.example.com/\">" |
545 "The Example Company</a>"); | 517 "The Example Company</a>"); |
546 std::string url_result; | 518 std::string url_result; |
547 string16 html_result; | 519 string16 html_result; |
548 | 520 |
549 { | 521 { |
550 ScopedClipboardWriter clipboard_writer(&clipboard, | 522 ScopedClipboardWriter clipboard_writer(&clipboard(), |
551 Clipboard::BUFFER_STANDARD); | 523 Clipboard::BUFFER_STANDARD); |
552 clipboard_writer.WriteHyperlink(ASCIIToUTF16(kTitle), kUrl); | 524 clipboard_writer.WriteHyperlink(ASCIIToUTF16(kTitle), kUrl); |
553 } | 525 } |
554 | 526 |
555 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetHtmlFormatType(), | 527 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetHtmlFormatType(), |
556 Clipboard::BUFFER_STANDARD)); | 528 Clipboard::BUFFER_STANDARD)); |
557 uint32 ignored; | 529 uint32 ignored; |
558 clipboard.ReadHTML(Clipboard::BUFFER_STANDARD, &html_result, &url_result, | 530 clipboard().ReadHTML(Clipboard::BUFFER_STANDARD, &html_result, &url_result, |
559 &ignored, &ignored); | 531 &ignored, &ignored); |
560 EXPECT_PRED2(MarkupMatches, ASCIIToUTF16(kExpectedHtml), html_result); | 532 EXPECT_PRED2(MarkupMatches, ASCIIToUTF16(kExpectedHtml), html_result); |
561 } | 533 } |
562 | 534 |
563 TEST_F(ClipboardTest, WebSmartPasteTest) { | 535 TEST_F(ClipboardTest, WebSmartPasteTest) { |
564 Clipboard clipboard; | |
565 | |
566 { | 536 { |
567 ScopedClipboardWriter clipboard_writer(&clipboard, | 537 ScopedClipboardWriter clipboard_writer(&clipboard(), |
568 Clipboard::BUFFER_STANDARD); | 538 Clipboard::BUFFER_STANDARD); |
569 clipboard_writer.WriteWebSmartPaste(); | 539 clipboard_writer.WriteWebSmartPaste(); |
570 } | 540 } |
571 | 541 |
572 EXPECT_TRUE(clipboard.IsFormatAvailable( | 542 EXPECT_TRUE(clipboard().IsFormatAvailable( |
573 Clipboard::GetWebKitSmartPasteFormatType(), Clipboard::BUFFER_STANDARD)); | 543 Clipboard::GetWebKitSmartPasteFormatType(), Clipboard::BUFFER_STANDARD)); |
574 } | 544 } |
575 | 545 |
576 TEST_F(ClipboardTest, BitmapTest) { | 546 TEST_F(ClipboardTest, BitmapTest) { |
577 unsigned int fake_bitmap[] = { | 547 unsigned int fake_bitmap[] = { |
578 0x46155189, 0xF6A55C8D, 0x79845674, 0xFA57BD89, | 548 0x46155189, 0xF6A55C8D, 0x79845674, 0xFA57BD89, |
579 0x78FD46AE, 0x87C64F5A, 0x36EDC5AF, 0x4378F568, | 549 0x78FD46AE, 0x87C64F5A, 0x36EDC5AF, 0x4378F568, |
580 0x91E9F63A, 0xC31EA14F, 0x69AB32DF, 0x643A3FD1, | 550 0x91E9F63A, 0xC31EA14F, 0x69AB32DF, 0x643A3FD1, |
581 }; | 551 }; |
582 | 552 |
583 Clipboard clipboard; | |
584 | |
585 { | 553 { |
586 ScopedClipboardWriter clipboard_writer(&clipboard, | 554 ScopedClipboardWriter clipboard_writer(&clipboard(), |
587 Clipboard::BUFFER_STANDARD); | 555 Clipboard::BUFFER_STANDARD); |
588 clipboard_writer.WriteBitmapFromPixels(fake_bitmap, gfx::Size(3, 4)); | 556 clipboard_writer.WriteBitmapFromPixels(fake_bitmap, gfx::Size(3, 4)); |
589 } | 557 } |
590 | 558 |
591 EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetBitmapFormatType(), | 559 EXPECT_TRUE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(), |
592 Clipboard::BUFFER_STANDARD)); | 560 Clipboard::BUFFER_STANDARD)); |
593 } | 561 } |
594 | 562 |
595 void HtmlTestHelper(const std::string& cf_html, | 563 void HtmlTestHelper(const std::string& cf_html, |
596 const std::string& expected_html) { | 564 const std::string& expected_html) { |
597 std::string html; | 565 std::string html; |
598 ClipboardUtil::CFHtmlToHtml(cf_html, &html, NULL); | 566 ClipboardUtil::CFHtmlToHtml(cf_html, &html, NULL); |
599 EXPECT_EQ(html, expected_html); | 567 EXPECT_EQ(html, expected_html); |
600 } | 568 } |
601 | 569 |
602 TEST_F(ClipboardTest, HtmlTest) { | 570 TEST_F(ClipboardTest, HtmlTest) { |
(...skipping 27 matching lines...) Expand all Loading... |
630 "<body>\r\n" | 598 "<body>\r\n" |
631 "<p>Foo</p>\r\n" | 599 "<p>Foo</p>\r\n" |
632 "</body>\r\n" | 600 "</body>\r\n" |
633 "</html>\r\n\r\n", | 601 "</html>\r\n\r\n", |
634 "<p>Foo</p>"); | 602 "<p>Foo</p>"); |
635 } | 603 } |
636 #endif // defined(OS_WIN) | 604 #endif // defined(OS_WIN) |
637 | 605 |
638 // Test writing all formats we have simultaneously. | 606 // Test writing all formats we have simultaneously. |
639 TEST_F(ClipboardTest, WriteEverything) { | 607 TEST_F(ClipboardTest, WriteEverything) { |
640 Clipboard clipboard; | |
641 | |
642 { | 608 { |
643 ScopedClipboardWriter writer(&clipboard, Clipboard::BUFFER_STANDARD); | 609 ScopedClipboardWriter writer(&clipboard(), Clipboard::BUFFER_STANDARD); |
644 writer.WriteText(UTF8ToUTF16("foo")); | 610 writer.WriteText(UTF8ToUTF16("foo")); |
645 writer.WriteURL(UTF8ToUTF16("foo")); | 611 writer.WriteURL(UTF8ToUTF16("foo")); |
646 writer.WriteHTML(UTF8ToUTF16("foo"), "bar"); | 612 writer.WriteHTML(UTF8ToUTF16("foo"), "bar"); |
647 writer.WriteBookmark(UTF8ToUTF16("foo"), "bar"); | 613 writer.WriteBookmark(UTF8ToUTF16("foo"), "bar"); |
648 writer.WriteHyperlink(ASCIIToUTF16("foo"), "bar"); | 614 writer.WriteHyperlink(ASCIIToUTF16("foo"), "bar"); |
649 writer.WriteWebSmartPaste(); | 615 writer.WriteWebSmartPaste(); |
650 // Left out: WriteFile, WriteFiles, WriteBitmapFromPixels, WritePickledData. | 616 // Left out: WriteFile, WriteFiles, WriteBitmapFromPixels, WritePickledData. |
651 } | 617 } |
652 | 618 |
653 // Passes if we don't crash. | 619 // Passes if we don't crash. |
654 } | 620 } |
655 | 621 |
656 #if defined(OS_ANDROID) | 622 #if defined(OS_ANDROID) |
657 | 623 |
658 // Test that if another application writes some text to the pasteboard the | 624 // Test that if another application writes some text to the pasteboard the |
659 // clipboard properly invalidates other types. | 625 // clipboard properly invalidates other types. |
660 TEST_F(ClipboardTest, InternalClipboardInvalidation) { | 626 TEST_F(ClipboardTest, InternalClipboardInvalidation) { |
661 const unsigned int kFakeBitmap[] = { | 627 const unsigned int kFakeBitmap[] = { |
662 0x46155189, 0xF6A55C8D, 0x79845674, 0xFA57BD89, | 628 0x46155189, 0xF6A55C8D, 0x79845674, 0xFA57BD89, |
663 0x78FD46AE, 0x87C64F5A, 0x36EDC5AF, 0x4378F568, | 629 0x78FD46AE, 0x87C64F5A, 0x36EDC5AF, 0x4378F568, |
664 0x91E9F63A, 0xC31EA14F, 0x69AB32DF, 0x643A3FD1, | 630 0x91E9F63A, 0xC31EA14F, 0x69AB32DF, 0x643A3FD1, |
665 }; | 631 }; |
666 | 632 |
667 // Write a bitmap in our clipboard. | 633 // Write a bitmap in our clipboard(). |
668 Clipboard clipboard; | |
669 { | 634 { |
670 ScopedClipboardWriter clipboard_writer(&clipboard, | 635 ScopedClipboardWriter clipboard_writer(&clipboard(), |
671 Clipboard::BUFFER_STANDARD); | 636 Clipboard::BUFFER_STANDARD); |
672 clipboard_writer.WriteBitmapFromPixels(kFakeBitmap, gfx::Size(3, 4)); | 637 clipboard_writer.WriteBitmapFromPixels(kFakeBitmap, gfx::Size(3, 4)); |
673 } | 638 } |
674 | 639 |
675 // | 640 // |
676 // Simulate that another application copied something in the Clipboard | 641 // Simulate that another application copied something in the Clipboard |
677 // | 642 // |
678 std::string new_value("Some text copied by some other app"); | 643 std::string new_value("Some text copied by some other app"); |
679 using base::android::ScopedJavaLocalRef; | 644 using base::android::ScopedJavaLocalRef; |
680 | 645 |
(...skipping 20 matching lines...) Expand all Loading... |
701 base::android::GetClass(env, "android/text/ClipboardManager"); | 666 base::android::GetClass(env, "android/text/ClipboardManager"); |
702 jmethodID set_text = base::android::GetMethodID(env, clipboard_class, | 667 jmethodID set_text = base::android::GetMethodID(env, clipboard_class, |
703 "setText", "(Ljava/lang/CharSequence;)V"); | 668 "setText", "(Ljava/lang/CharSequence;)V"); |
704 | 669 |
705 // Will need to call toString as CharSequence is not always a String. | 670 // Will need to call toString as CharSequence is not always a String. |
706 env->CallVoidMethod(clipboard_manager.obj(), | 671 env->CallVoidMethod(clipboard_manager.obj(), |
707 set_text, | 672 set_text, |
708 env->NewStringUTF(new_value.c_str())); | 673 env->NewStringUTF(new_value.c_str())); |
709 | 674 |
710 // The bitmap that should have been available should be gone. | 675 // The bitmap that should have been available should be gone. |
711 EXPECT_FALSE(clipboard.IsFormatAvailable(Clipboard::GetBitmapFormatType(), | 676 EXPECT_FALSE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(), |
712 Clipboard::BUFFER_STANDARD)); | 677 Clipboard::BUFFER_STANDARD)); |
713 | 678 |
714 // Make sure some text is available | 679 // Make sure some text is available |
715 EXPECT_TRUE(clipboard.IsFormatAvailable( | 680 EXPECT_TRUE(clipboard().IsFormatAvailable( |
716 Clipboard::GetPlainTextWFormatType(), Clipboard::BUFFER_STANDARD)); | 681 Clipboard::GetPlainTextWFormatType(), Clipboard::BUFFER_STANDARD)); |
717 | 682 |
718 // Make sure the text is what we inserted while simulating the other app | 683 // Make sure the text is what we inserted while simulating the other app |
719 std::string contents; | 684 std::string contents; |
720 clipboard.ReadAsciiText(Clipboard::BUFFER_STANDARD, &contents); | 685 clipboard().ReadAsciiText(Clipboard::BUFFER_STANDARD, &contents); |
721 EXPECT_EQ(contents, new_value); | 686 EXPECT_EQ(contents, new_value); |
722 } | 687 } |
723 #endif | 688 #endif |
724 } // namespace ui | 689 } // namespace ui |
OLD | NEW |