OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/memory/ref_counted.h" | 5 #include "base/memory/ref_counted.h" |
6 #include "base/memory/scoped_handle.h" | 6 #include "base/memory/scoped_handle.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "ui/base/dragdrop/os_exchange_data.h" | 8 #include "ui/base/dragdrop/os_exchange_data.h" |
9 #include "ui/base/dragdrop/os_exchange_data_provider_win.h" | 9 #include "ui/base/dragdrop/os_exchange_data_provider_win.h" |
10 #include "base/pickle.h" | 10 #include "base/pickle.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 EXPECT_FALSE(data2.GetURLAndTitle(&url, &title)); | 43 EXPECT_FALSE(data2.GetURLAndTitle(&url, &title)); |
44 // No URLs in |data|, so url should be untouched. | 44 // No URLs in |data|, so url should be untouched. |
45 EXPECT_EQ(url_spec, url.spec()); | 45 EXPECT_EQ(url_spec, url.spec()); |
46 } | 46 } |
47 | 47 |
48 // Test getting using the IDataObject COM API | 48 // Test getting using the IDataObject COM API |
49 TEST(OSExchangeDataTest, StringDataAccessViaCOM) { | 49 TEST(OSExchangeDataTest, StringDataAccessViaCOM) { |
50 OSExchangeData data; | 50 OSExchangeData data; |
51 std::wstring input = L"O hai googlz."; | 51 std::wstring input = L"O hai googlz."; |
52 data.SetString(input); | 52 data.SetString(input); |
53 ScopedComPtr<IDataObject> com_data( | 53 base::win::ScopedComPtr<IDataObject> com_data( |
54 OSExchangeDataProviderWin::GetIDataObject(data)); | 54 OSExchangeDataProviderWin::GetIDataObject(data)); |
55 | 55 |
56 FORMATETC format_etc = | 56 FORMATETC format_etc = |
57 { CF_UNICODETEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; | 57 { CF_UNICODETEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; |
58 EXPECT_EQ(S_OK, com_data->QueryGetData(&format_etc)); | 58 EXPECT_EQ(S_OK, com_data->QueryGetData(&format_etc)); |
59 | 59 |
60 STGMEDIUM medium; | 60 STGMEDIUM medium; |
61 EXPECT_EQ(S_OK, com_data->GetData(&format_etc, &medium)); | 61 EXPECT_EQ(S_OK, com_data->GetData(&format_etc, &medium)); |
62 std::wstring output = | 62 std::wstring output = |
63 base::win::ScopedHGlobal<wchar_t>(medium.hGlobal).get(); | 63 base::win::ScopedHGlobal<wchar_t>(medium.hGlobal).get(); |
64 EXPECT_EQ(input, output); | 64 EXPECT_EQ(input, output); |
65 ReleaseStgMedium(&medium); | 65 ReleaseStgMedium(&medium); |
66 } | 66 } |
67 | 67 |
68 // Test setting using the IDataObject COM API | 68 // Test setting using the IDataObject COM API |
69 TEST(OSExchangeDataTest, StringDataWritingViaCOM) { | 69 TEST(OSExchangeDataTest, StringDataWritingViaCOM) { |
70 OSExchangeData data; | 70 OSExchangeData data; |
71 std::wstring input = L"http://www.google.com/"; | 71 std::wstring input = L"http://www.google.com/"; |
72 | 72 |
73 ScopedComPtr<IDataObject> com_data( | 73 base::win::ScopedComPtr<IDataObject> com_data( |
74 OSExchangeDataProviderWin::GetIDataObject(data)); | 74 OSExchangeDataProviderWin::GetIDataObject(data)); |
75 | 75 |
76 // Store data in the object using the COM SetData API. | 76 // Store data in the object using the COM SetData API. |
77 CLIPFORMAT cfstr_ineturl = RegisterClipboardFormat(CFSTR_INETURL); | 77 CLIPFORMAT cfstr_ineturl = RegisterClipboardFormat(CFSTR_INETURL); |
78 FORMATETC format_etc = | 78 FORMATETC format_etc = |
79 { cfstr_ineturl, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; | 79 { cfstr_ineturl, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; |
80 STGMEDIUM medium; | 80 STGMEDIUM medium; |
81 medium.tymed = TYMED_HGLOBAL; | 81 medium.tymed = TYMED_HGLOBAL; |
82 HGLOBAL glob = GlobalAlloc(GPTR, sizeof(wchar_t) * (input.size() + 1)); | 82 HGLOBAL glob = GlobalAlloc(GPTR, sizeof(wchar_t) * (input.size() + 1)); |
83 size_t stringsz = input.size(); | 83 size_t stringsz = input.size(); |
(...skipping 13 matching lines...) Expand all Loading... |
97 std::wstring title; | 97 std::wstring title; |
98 EXPECT_TRUE(data2.GetURLAndTitle(&url_from_data, &title)); | 98 EXPECT_TRUE(data2.GetURLAndTitle(&url_from_data, &title)); |
99 GURL reference_url(input); | 99 GURL reference_url(input); |
100 EXPECT_EQ(reference_url.spec(), url_from_data.spec()); | 100 EXPECT_EQ(reference_url.spec(), url_from_data.spec()); |
101 } | 101 } |
102 | 102 |
103 TEST(OSExchangeDataTest, URLDataAccessViaCOM) { | 103 TEST(OSExchangeDataTest, URLDataAccessViaCOM) { |
104 OSExchangeData data; | 104 OSExchangeData data; |
105 GURL url("http://www.google.com/"); | 105 GURL url("http://www.google.com/"); |
106 data.SetURL(url, L""); | 106 data.SetURL(url, L""); |
107 ScopedComPtr<IDataObject> com_data( | 107 base::win::ScopedComPtr<IDataObject> com_data( |
108 OSExchangeDataProviderWin::GetIDataObject(data)); | 108 OSExchangeDataProviderWin::GetIDataObject(data)); |
109 | 109 |
110 CLIPFORMAT cfstr_ineturl = RegisterClipboardFormat(CFSTR_INETURL); | 110 CLIPFORMAT cfstr_ineturl = RegisterClipboardFormat(CFSTR_INETURL); |
111 FORMATETC format_etc = | 111 FORMATETC format_etc = |
112 { cfstr_ineturl, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; | 112 { cfstr_ineturl, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; |
113 EXPECT_EQ(S_OK, com_data->QueryGetData(&format_etc)); | 113 EXPECT_EQ(S_OK, com_data->QueryGetData(&format_etc)); |
114 | 114 |
115 STGMEDIUM medium; | 115 STGMEDIUM medium; |
116 EXPECT_EQ(S_OK, com_data->GetData(&format_etc, &medium)); | 116 EXPECT_EQ(S_OK, com_data->GetData(&format_etc, &medium)); |
117 std::wstring output = | 117 std::wstring output = |
118 base::win::ScopedHGlobal<wchar_t>(medium.hGlobal).get(); | 118 base::win::ScopedHGlobal<wchar_t>(medium.hGlobal).get(); |
119 EXPECT_EQ(url.spec(), WideToUTF8(output)); | 119 EXPECT_EQ(url.spec(), WideToUTF8(output)); |
120 ReleaseStgMedium(&medium); | 120 ReleaseStgMedium(&medium); |
121 } | 121 } |
122 | 122 |
123 TEST(OSExchangeDataTest, MultipleFormatsViaCOM) { | 123 TEST(OSExchangeDataTest, MultipleFormatsViaCOM) { |
124 OSExchangeData data; | 124 OSExchangeData data; |
125 std::string url_spec = "http://www.google.com/"; | 125 std::string url_spec = "http://www.google.com/"; |
126 GURL url(url_spec); | 126 GURL url(url_spec); |
127 std::wstring text = L"O hai googlz."; | 127 std::wstring text = L"O hai googlz."; |
128 data.SetURL(url, L"Google"); | 128 data.SetURL(url, L"Google"); |
129 data.SetString(text); | 129 data.SetString(text); |
130 | 130 |
131 ScopedComPtr<IDataObject> com_data( | 131 base::win::ScopedComPtr<IDataObject> com_data( |
132 OSExchangeDataProviderWin::GetIDataObject(data)); | 132 OSExchangeDataProviderWin::GetIDataObject(data)); |
133 | 133 |
134 CLIPFORMAT cfstr_ineturl = RegisterClipboardFormat(CFSTR_INETURL); | 134 CLIPFORMAT cfstr_ineturl = RegisterClipboardFormat(CFSTR_INETURL); |
135 FORMATETC url_format_etc = | 135 FORMATETC url_format_etc = |
136 { cfstr_ineturl, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; | 136 { cfstr_ineturl, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; |
137 EXPECT_EQ(S_OK, com_data->QueryGetData(&url_format_etc)); | 137 EXPECT_EQ(S_OK, com_data->QueryGetData(&url_format_etc)); |
138 FORMATETC text_format_etc = | 138 FORMATETC text_format_etc = |
139 { CF_UNICODETEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; | 139 { CF_UNICODETEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; |
140 EXPECT_EQ(S_OK, com_data->QueryGetData(&text_format_etc)); | 140 EXPECT_EQ(S_OK, com_data->QueryGetData(&text_format_etc)); |
141 | 141 |
(...skipping 15 matching lines...) Expand all Loading... |
157 | 157 |
158 TEST(OSExchangeDataTest, EnumerationViaCOM) { | 158 TEST(OSExchangeDataTest, EnumerationViaCOM) { |
159 OSExchangeData data; | 159 OSExchangeData data; |
160 data.SetURL(GURL("http://www.google.com/"), L""); | 160 data.SetURL(GURL("http://www.google.com/"), L""); |
161 data.SetString(L"O hai googlz."); | 161 data.SetString(L"O hai googlz."); |
162 | 162 |
163 CLIPFORMAT cfstr_file_group_descriptor = | 163 CLIPFORMAT cfstr_file_group_descriptor = |
164 RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR); | 164 RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR); |
165 CLIPFORMAT text_x_moz_url = RegisterClipboardFormat(L"text/x-moz-url"); | 165 CLIPFORMAT text_x_moz_url = RegisterClipboardFormat(L"text/x-moz-url"); |
166 | 166 |
167 ScopedComPtr<IDataObject> com_data( | 167 base::win::ScopedComPtr<IDataObject> com_data( |
168 OSExchangeDataProviderWin::GetIDataObject(data)); | 168 OSExchangeDataProviderWin::GetIDataObject(data)); |
169 ScopedComPtr<IEnumFORMATETC> enumerator; | 169 base::win::ScopedComPtr<IEnumFORMATETC> enumerator; |
170 EXPECT_EQ(S_OK, com_data.get()->EnumFormatEtc(DATADIR_GET, | 170 EXPECT_EQ(S_OK, com_data.get()->EnumFormatEtc(DATADIR_GET, |
171 enumerator.Receive())); | 171 enumerator.Receive())); |
172 | 172 |
173 // Test that we can get one item. | 173 // Test that we can get one item. |
174 { | 174 { |
175 // Explictly don't reset the first time, to verify the creation state is | 175 // Explictly don't reset the first time, to verify the creation state is |
176 // OK. | 176 // OK. |
177 ULONG retrieved = 0; | 177 ULONG retrieved = 0; |
178 FORMATETC elements_array[1]; | 178 FORMATETC elements_array[1]; |
179 EXPECT_EQ(S_OK, enumerator->Next(1, | 179 EXPECT_EQ(S_OK, enumerator->Next(1, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 reinterpret_cast<FORMATETC*>(&elements_array), &retrieved)); | 213 reinterpret_cast<FORMATETC*>(&elements_array), &retrieved)); |
214 EXPECT_EQ(1, retrieved); | 214 EXPECT_EQ(1, retrieved); |
215 EXPECT_EQ(cfstr_file_group_descriptor, elements_array[0].cfFormat); | 215 EXPECT_EQ(cfstr_file_group_descriptor, elements_array[0].cfFormat); |
216 } | 216 } |
217 | 217 |
218 // Test that we can skip the first item, and create a clone that matches in | 218 // Test that we can skip the first item, and create a clone that matches in |
219 // this state, and modify the original without affecting the clone. | 219 // this state, and modify the original without affecting the clone. |
220 { | 220 { |
221 EXPECT_EQ(S_OK, enumerator->Reset()); | 221 EXPECT_EQ(S_OK, enumerator->Reset()); |
222 EXPECT_EQ(S_OK, enumerator->Skip(1)); | 222 EXPECT_EQ(S_OK, enumerator->Skip(1)); |
223 ScopedComPtr<IEnumFORMATETC> cloned_enumerator; | 223 base::win::ScopedComPtr<IEnumFORMATETC> cloned_enumerator; |
224 EXPECT_EQ(S_OK, enumerator.get()->Clone(cloned_enumerator.Receive())); | 224 EXPECT_EQ(S_OK, enumerator.get()->Clone(cloned_enumerator.Receive())); |
225 EXPECT_EQ(S_OK, enumerator.get()->Reset()); | 225 EXPECT_EQ(S_OK, enumerator.get()->Reset()); |
226 | 226 |
227 { | 227 { |
228 ULONG retrieved = 0; | 228 ULONG retrieved = 0; |
229 FORMATETC elements_array[1]; | 229 FORMATETC elements_array[1]; |
230 EXPECT_EQ(S_OK, cloned_enumerator->Next(1, | 230 EXPECT_EQ(S_OK, cloned_enumerator->Next(1, |
231 reinterpret_cast<FORMATETC*>(&elements_array), &retrieved)); | 231 reinterpret_cast<FORMATETC*>(&elements_array), &retrieved)); |
232 EXPECT_EQ(1, retrieved); | 232 EXPECT_EQ(1, retrieved); |
233 EXPECT_EQ(cfstr_file_group_descriptor, elements_array[0].cfFormat); | 233 EXPECT_EQ(cfstr_file_group_descriptor, elements_array[0].cfFormat); |
(...skipping 26 matching lines...) Expand all Loading... |
260 EXPECT_TRUE(data2.GetURLAndTitle(&output_url, &output_title)); | 260 EXPECT_TRUE(data2.GetURLAndTitle(&output_url, &output_title)); |
261 EXPECT_EQ(url_spec, output_url.spec()); | 261 EXPECT_EQ(url_spec, output_url.spec()); |
262 EXPECT_EQ(url_title, output_title); | 262 EXPECT_EQ(url_title, output_title); |
263 std::wstring output_string; | 263 std::wstring output_string; |
264 | 264 |
265 // URL should be the raw text response | 265 // URL should be the raw text response |
266 EXPECT_TRUE(data2.GetString(&output_string)); | 266 EXPECT_TRUE(data2.GetString(&output_string)); |
267 EXPECT_EQ(url_spec, WideToUTF8(output_string)); | 267 EXPECT_EQ(url_spec, WideToUTF8(output_string)); |
268 | 268 |
269 // File contents access via COM | 269 // File contents access via COM |
270 ScopedComPtr<IDataObject> com_data( | 270 base::win::ScopedComPtr<IDataObject> com_data( |
271 OSExchangeDataProviderWin::GetIDataObject(data)); | 271 OSExchangeDataProviderWin::GetIDataObject(data)); |
272 { | 272 { |
273 CLIPFORMAT cfstr_file_contents = | 273 CLIPFORMAT cfstr_file_contents = |
274 RegisterClipboardFormat(CFSTR_FILECONTENTS); | 274 RegisterClipboardFormat(CFSTR_FILECONTENTS); |
275 FORMATETC format_etc = | 275 FORMATETC format_etc = |
276 { cfstr_file_contents, NULL, DVASPECT_CONTENT, 0, TYMED_HGLOBAL }; | 276 { cfstr_file_contents, NULL, DVASPECT_CONTENT, 0, TYMED_HGLOBAL }; |
277 EXPECT_EQ(S_OK, com_data->QueryGetData(&format_etc)); | 277 EXPECT_EQ(S_OK, com_data->QueryGetData(&format_etc)); |
278 | 278 |
279 STGMEDIUM medium; | 279 STGMEDIUM medium; |
280 EXPECT_EQ(S_OK, com_data->GetData(&format_etc, &medium)); | 280 EXPECT_EQ(S_OK, com_data->GetData(&format_etc, &medium)); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 | 368 |
369 OSExchangeData data2(CloneProvider(data)); | 369 OSExchangeData data2(CloneProvider(data)); |
370 ASSERT_TRUE(data2.HasURL()); | 370 ASSERT_TRUE(data2.HasURL()); |
371 GURL read_url; | 371 GURL read_url; |
372 std::wstring title; | 372 std::wstring title; |
373 EXPECT_TRUE(data2.GetURLAndTitle(&read_url, &title)); | 373 EXPECT_TRUE(data2.GetURLAndTitle(&read_url, &title)); |
374 EXPECT_EQ(GURL("http://google.com"), read_url); | 374 EXPECT_EQ(GURL("http://google.com"), read_url); |
375 } | 375 } |
376 | 376 |
377 } // namespace ui | 377 } // namespace ui |
OLD | NEW |