Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Side by Side Diff: ui/base/dragdrop/os_exchange_data_provider_win.cc

Issue 12217101: Replace FilePath with base::FilePath in some more top level directories. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "ui/base/dragdrop/os_exchange_data_provider_win.h" 5 #include "ui/base/dragdrop/os_exchange_data_provider_win.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/file_path.h" 10 #include "base/file_path.h"
(...skipping 18 matching lines...) Expand all
29 static STGMEDIUM* GetStorageForBytes(const char* data, size_t bytes); 29 static STGMEDIUM* GetStorageForBytes(const char* data, size_t bytes);
30 static STGMEDIUM* GetStorageForString16(const string16& data); 30 static STGMEDIUM* GetStorageForString16(const string16& data);
31 static STGMEDIUM* GetStorageForString(const std::string& data); 31 static STGMEDIUM* GetStorageForString(const std::string& data);
32 // Creates the contents of an Internet Shortcut file for the given URL. 32 // Creates the contents of an Internet Shortcut file for the given URL.
33 static void GetInternetShortcutFileContents(const GURL& url, std::string* data); 33 static void GetInternetShortcutFileContents(const GURL& url, std::string* data);
34 // Creates a valid file name given a suggested title and URL. 34 // Creates a valid file name given a suggested title and URL.
35 static void CreateValidFileNameFromTitle(const GURL& url, 35 static void CreateValidFileNameFromTitle(const GURL& url,
36 const string16& title, 36 const string16& title,
37 string16* validated); 37 string16* validated);
38 // Creates a new STGMEDIUM object to hold a file. 38 // Creates a new STGMEDIUM object to hold a file.
39 static STGMEDIUM* GetStorageForFileName(const FilePath& path); 39 static STGMEDIUM* GetStorageForFileName(const base::FilePath& path);
40 // Creates a File Descriptor for the creation of a file to the given URL and 40 // Creates a File Descriptor for the creation of a file to the given URL and
41 // returns a handle to it. 41 // returns a handle to it.
42 static STGMEDIUM* GetStorageForFileDescriptor(const FilePath& path); 42 static STGMEDIUM* GetStorageForFileDescriptor(const base::FilePath& path);
43 43
44 /////////////////////////////////////////////////////////////////////////////// 44 ///////////////////////////////////////////////////////////////////////////////
45 // FormatEtcEnumerator 45 // FormatEtcEnumerator
46 46
47 // 47 //
48 // This object implements an enumeration interface. The existence of an 48 // This object implements an enumeration interface. The existence of an
49 // implementation of this interface is exposed to clients through 49 // implementation of this interface is exposed to clients through
50 // OSExchangeData's EnumFormatEtc method. Our implementation is nobody's 50 // OSExchangeData's EnumFormatEtc method. Our implementation is nobody's
51 // business but our own, so it lives in this file. 51 // business but our own, so it lives in this file.
52 // 52 //
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 x_moz_url_str += title; 290 x_moz_url_str += title;
291 STGMEDIUM* storage = GetStorageForString16(x_moz_url_str); 291 STGMEDIUM* storage = GetStorageForString16(x_moz_url_str);
292 data_->contents_.push_back(new DataObjectImpl::StoredDataInfo( 292 data_->contents_.push_back(new DataObjectImpl::StoredDataInfo(
293 ClipboardUtil::GetMozUrlFormat()->cfFormat, storage)); 293 ClipboardUtil::GetMozUrlFormat()->cfFormat, storage));
294 294
295 // Add a .URL shortcut file for dragging to Explorer. 295 // Add a .URL shortcut file for dragging to Explorer.
296 string16 valid_file_name; 296 string16 valid_file_name;
297 CreateValidFileNameFromTitle(url, title, &valid_file_name); 297 CreateValidFileNameFromTitle(url, title, &valid_file_name);
298 std::string shortcut_url_file_contents; 298 std::string shortcut_url_file_contents;
299 GetInternetShortcutFileContents(url, &shortcut_url_file_contents); 299 GetInternetShortcutFileContents(url, &shortcut_url_file_contents);
300 SetFileContents(FilePath(valid_file_name), shortcut_url_file_contents); 300 SetFileContents(base::FilePath(valid_file_name), shortcut_url_file_contents);
301 301
302 // Add a UniformResourceLocator link for apps like IE and Word. 302 // Add a UniformResourceLocator link for apps like IE and Word.
303 storage = GetStorageForString16(UTF8ToUTF16(url.spec())); 303 storage = GetStorageForString16(UTF8ToUTF16(url.spec()));
304 data_->contents_.push_back(new DataObjectImpl::StoredDataInfo( 304 data_->contents_.push_back(new DataObjectImpl::StoredDataInfo(
305 ClipboardUtil::GetUrlWFormat()->cfFormat, storage)); 305 ClipboardUtil::GetUrlWFormat()->cfFormat, storage));
306 storage = GetStorageForString(url.spec()); 306 storage = GetStorageForString(url.spec());
307 data_->contents_.push_back(new DataObjectImpl::StoredDataInfo( 307 data_->contents_.push_back(new DataObjectImpl::StoredDataInfo(
308 ClipboardUtil::GetUrlFormat()->cfFormat, storage)); 308 ClipboardUtil::GetUrlFormat()->cfFormat, storage));
309 309
310 // TODO(beng): add CF_HTML. 310 // TODO(beng): add CF_HTML.
311 // http://code.google.com/p/chromium/issues/detail?id=6767 311 // http://code.google.com/p/chromium/issues/detail?id=6767
312 312
313 // Also add text representations (these should be last since they're the 313 // Also add text representations (these should be last since they're the
314 // least preferable). 314 // least preferable).
315 storage = GetStorageForString16(UTF8ToUTF16(url.spec())); 315 storage = GetStorageForString16(UTF8ToUTF16(url.spec()));
316 data_->contents_.push_back( 316 data_->contents_.push_back(
317 new DataObjectImpl::StoredDataInfo(CF_UNICODETEXT, storage)); 317 new DataObjectImpl::StoredDataInfo(CF_UNICODETEXT, storage));
318 storage = GetStorageForString(url.spec()); 318 storage = GetStorageForString(url.spec());
319 data_->contents_.push_back( 319 data_->contents_.push_back(
320 new DataObjectImpl::StoredDataInfo(CF_TEXT, storage)); 320 new DataObjectImpl::StoredDataInfo(CF_TEXT, storage));
321 } 321 }
322 322
323 void OSExchangeDataProviderWin::SetFilename(const FilePath& path) { 323 void OSExchangeDataProviderWin::SetFilename(const base::FilePath& path) {
324 STGMEDIUM* storage = GetStorageForFileName(path); 324 STGMEDIUM* storage = GetStorageForFileName(path);
325 DataObjectImpl::StoredDataInfo* info = 325 DataObjectImpl::StoredDataInfo* info =
326 new DataObjectImpl::StoredDataInfo(CF_HDROP, storage); 326 new DataObjectImpl::StoredDataInfo(CF_HDROP, storage);
327 data_->contents_.push_back(info); 327 data_->contents_.push_back(info);
328 } 328 }
329 329
330 void OSExchangeDataProviderWin::SetFilenames( 330 void OSExchangeDataProviderWin::SetFilenames(
331 const std::vector<OSExchangeData::FileInfo>& filenames) { 331 const std::vector<OSExchangeData::FileInfo>& filenames) {
332 for (size_t i = 0; i < filenames.size(); ++i) { 332 for (size_t i = 0; i < filenames.size(); ++i) {
333 STGMEDIUM* storage = GetStorageForFileName(filenames[i].path); 333 STGMEDIUM* storage = GetStorageForFileName(filenames[i].path);
334 DataObjectImpl::StoredDataInfo* info = 334 DataObjectImpl::StoredDataInfo* info =
335 new DataObjectImpl::StoredDataInfo(CF_HDROP, storage); 335 new DataObjectImpl::StoredDataInfo(CF_HDROP, storage);
336 data_->contents_.push_back(info); 336 data_->contents_.push_back(info);
337 } 337 }
338 } 338 }
339 339
340 void OSExchangeDataProviderWin::SetPickledData(CLIPFORMAT format, 340 void OSExchangeDataProviderWin::SetPickledData(CLIPFORMAT format,
341 const Pickle& data) { 341 const Pickle& data) {
342 STGMEDIUM* storage = GetStorageForBytes(static_cast<const char*>(data.data()), 342 STGMEDIUM* storage = GetStorageForBytes(static_cast<const char*>(data.data()),
343 data.size()); 343 data.size());
344 data_->contents_.push_back( 344 data_->contents_.push_back(
345 new DataObjectImpl::StoredDataInfo(format, storage)); 345 new DataObjectImpl::StoredDataInfo(format, storage));
346 } 346 }
347 347
348 void OSExchangeDataProviderWin::SetFileContents( 348 void OSExchangeDataProviderWin::SetFileContents(
349 const FilePath& filename, 349 const base::FilePath& filename,
350 const std::string& file_contents) { 350 const std::string& file_contents) {
351 // Add CFSTR_FILEDESCRIPTOR 351 // Add CFSTR_FILEDESCRIPTOR
352 STGMEDIUM* storage = GetStorageForFileDescriptor(filename); 352 STGMEDIUM* storage = GetStorageForFileDescriptor(filename);
353 data_->contents_.push_back(new DataObjectImpl::StoredDataInfo( 353 data_->contents_.push_back(new DataObjectImpl::StoredDataInfo(
354 ClipboardUtil::GetFileDescriptorFormat()->cfFormat, storage)); 354 ClipboardUtil::GetFileDescriptorFormat()->cfFormat, storage));
355 355
356 // Add CFSTR_FILECONTENTS 356 // Add CFSTR_FILECONTENTS
357 storage = GetStorageForBytes(file_contents.data(), file_contents.length()); 357 storage = GetStorageForBytes(file_contents.data(), file_contents.length());
358 data_->contents_.push_back(new DataObjectImpl::StoredDataInfo( 358 data_->contents_.push_back(new DataObjectImpl::StoredDataInfo(
359 ClipboardUtil::GetFileContentFormatZero(), storage)); 359 ClipboardUtil::GetFileContentFormatZero(), storage));
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 } else if (GetPlainTextURL(source_object_, url)) { 393 } else if (GetPlainTextURL(source_object_, url)) {
394 if (url->is_valid()) 394 if (url->is_valid())
395 *title = net::GetSuggestedFilename(*url, "", "", "", "", std::string()); 395 *title = net::GetSuggestedFilename(*url, "", "", "", "", std::string());
396 else 396 else
397 title->clear(); 397 title->clear();
398 return true; 398 return true;
399 } 399 }
400 return false; 400 return false;
401 } 401 }
402 402
403 bool OSExchangeDataProviderWin::GetFilename(FilePath* path) const { 403 bool OSExchangeDataProviderWin::GetFilename(base::FilePath* path) const {
404 std::vector<string16> filenames; 404 std::vector<string16> filenames;
405 bool success = ClipboardUtil::GetFilenames(source_object_, &filenames); 405 bool success = ClipboardUtil::GetFilenames(source_object_, &filenames);
406 if (success) 406 if (success)
407 *path = FilePath(filenames[0]); 407 *path = base::FilePath(filenames[0]);
408 return success; 408 return success;
409 } 409 }
410 410
411 bool OSExchangeDataProviderWin::GetFilenames( 411 bool OSExchangeDataProviderWin::GetFilenames(
412 std::vector<OSExchangeData::FileInfo>* filenames) const { 412 std::vector<OSExchangeData::FileInfo>* filenames) const {
413 std::vector<string16> filenames_local; 413 std::vector<string16> filenames_local;
414 bool success = ClipboardUtil::GetFilenames(source_object_, &filenames_local); 414 bool success = ClipboardUtil::GetFilenames(source_object_, &filenames_local);
415 if (success) { 415 if (success) {
416 for (size_t i = 0; i < filenames_local.size(); ++i) 416 for (size_t i = 0; i < filenames_local.size(); ++i)
417 filenames->push_back( 417 filenames->push_back(
418 OSExchangeData::FileInfo(FilePath(filenames_local[i]), FilePath())); 418 OSExchangeData::FileInfo(base::FilePath(filenames_local[i]),
419 base::FilePath()));
419 } 420 }
420 return success; 421 return success;
421 } 422 }
422 423
423 bool OSExchangeDataProviderWin::GetPickledData(CLIPFORMAT format, 424 bool OSExchangeDataProviderWin::GetPickledData(CLIPFORMAT format,
424 Pickle* data) const { 425 Pickle* data) const {
425 DCHECK(data); 426 DCHECK(data);
426 FORMATETC format_etc = 427 FORMATETC format_etc =
427 { format, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; 428 { format, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
428 bool success = false; 429 bool success = false;
429 STGMEDIUM medium; 430 STGMEDIUM medium;
430 if (SUCCEEDED(source_object_->GetData(&format_etc, &medium))) { 431 if (SUCCEEDED(source_object_->GetData(&format_etc, &medium))) {
431 if (medium.tymed & TYMED_HGLOBAL) { 432 if (medium.tymed & TYMED_HGLOBAL) {
432 base::win::ScopedHGlobal<char> c_data(medium.hGlobal); 433 base::win::ScopedHGlobal<char> c_data(medium.hGlobal);
433 DCHECK_GT(c_data.Size(), 0u); 434 DCHECK_GT(c_data.Size(), 0u);
434 *data = Pickle(c_data.get(), static_cast<int>(c_data.Size())); 435 *data = Pickle(c_data.get(), static_cast<int>(c_data.Size()));
435 success = true; 436 success = true;
436 } 437 }
437 ReleaseStgMedium(&medium); 438 ReleaseStgMedium(&medium);
438 } 439 }
439 return success; 440 return success;
440 } 441 }
441 442
442 bool OSExchangeDataProviderWin::GetFileContents( 443 bool OSExchangeDataProviderWin::GetFileContents(
443 FilePath* filename, 444 base::FilePath* filename,
444 std::string* file_contents) const { 445 std::string* file_contents) const {
445 string16 filename_str; 446 string16 filename_str;
446 if (!ClipboardUtil::GetFileContents(source_object_, &filename_str, 447 if (!ClipboardUtil::GetFileContents(source_object_, &filename_str,
447 file_contents)) { 448 file_contents)) {
448 return false; 449 return false;
449 } 450 }
450 *filename = FilePath(filename_str); 451 *filename = base::FilePath(filename_str);
451 return true; 452 return true;
452 } 453 }
453 454
454 bool OSExchangeDataProviderWin::GetHtml(string16* html, 455 bool OSExchangeDataProviderWin::GetHtml(string16* html,
455 GURL* base_url) const { 456 GURL* base_url) const {
456 std::string url; 457 std::string url;
457 bool success = ClipboardUtil::GetHtml(source_object_, html, &url); 458 bool success = ClipboardUtil::GetHtml(source_object_, html, &url);
458 if (success) 459 if (success)
459 *base_url = GURL(url); 460 *base_url = GURL(url);
460 return success; 461 return success;
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 format.dwAspect == (*i)->format_etc.dwAspect && 630 format.dwAspect == (*i)->format_etc.dwAspect &&
630 format.lindex == (*i)->format_etc.lindex && 631 format.lindex == (*i)->format_etc.lindex &&
631 format.tymed == (*i)->format_etc.tymed) { 632 format.tymed == (*i)->format_etc.tymed) {
632 delete *i; 633 delete *i;
633 contents_.erase(i); 634 contents_.erase(i);
634 return; 635 return;
635 } 636 }
636 } 637 }
637 } 638 }
638 639
639 void DataObjectImpl::OnDownloadCompleted(const FilePath& file_path) { 640 void DataObjectImpl::OnDownloadCompleted(const base::FilePath& file_path) {
640 CLIPFORMAT hdrop_format = ClipboardUtil::GetCFHDropFormat()->cfFormat; 641 CLIPFORMAT hdrop_format = ClipboardUtil::GetCFHDropFormat()->cfFormat;
641 DataObjectImpl::StoredData::iterator iter = contents_.begin(); 642 DataObjectImpl::StoredData::iterator iter = contents_.begin();
642 for (; iter != contents_.end(); ++iter) { 643 for (; iter != contents_.end(); ++iter) {
643 if ((*iter)->format_etc.cfFormat == hdrop_format) { 644 if ((*iter)->format_etc.cfFormat == hdrop_format) {
644 // Release the old storage. 645 // Release the old storage.
645 if ((*iter)->owns_medium) { 646 if ((*iter)->owns_medium) {
646 ReleaseStgMedium((*iter)->medium); 647 ReleaseStgMedium((*iter)->medium);
647 delete (*iter)->medium; 648 delete (*iter)->medium;
648 } 649 }
649 650
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 *validated = title; 928 *validated = title;
928 file_util::ReplaceIllegalCharactersInPath(validated, '-'); 929 file_util::ReplaceIllegalCharactersInPath(validated, '-');
929 } 930 }
930 static const wchar_t extension[] = L".url"; 931 static const wchar_t extension[] = L".url";
931 static const size_t max_length = MAX_PATH - arraysize(extension); 932 static const size_t max_length = MAX_PATH - arraysize(extension);
932 if (validated->size() > max_length) 933 if (validated->size() > max_length)
933 validated->erase(max_length); 934 validated->erase(max_length);
934 *validated += extension; 935 *validated += extension;
935 } 936 }
936 937
937 static STGMEDIUM* GetStorageForFileName(const FilePath& path) { 938 static STGMEDIUM* GetStorageForFileName(const base::FilePath& path) {
938 const size_t kDropSize = sizeof(DROPFILES); 939 const size_t kDropSize = sizeof(DROPFILES);
939 const size_t kTotalBytes = 940 const size_t kTotalBytes =
940 kDropSize + (path.value().length() + 2) * sizeof(wchar_t); 941 kDropSize + (path.value().length() + 2) * sizeof(wchar_t);
941 HANDLE hdata = GlobalAlloc(GMEM_MOVEABLE, kTotalBytes); 942 HANDLE hdata = GlobalAlloc(GMEM_MOVEABLE, kTotalBytes);
942 943
943 base::win::ScopedHGlobal<DROPFILES> locked_mem(hdata); 944 base::win::ScopedHGlobal<DROPFILES> locked_mem(hdata);
944 DROPFILES* drop_files = locked_mem.get(); 945 DROPFILES* drop_files = locked_mem.get();
945 drop_files->pFiles = sizeof(DROPFILES); 946 drop_files->pFiles = sizeof(DROPFILES);
946 drop_files->fWide = TRUE; 947 drop_files->fWide = TRUE;
947 wchar_t* data = reinterpret_cast<wchar_t*>( 948 wchar_t* data = reinterpret_cast<wchar_t*>(
948 reinterpret_cast<BYTE*>(drop_files) + kDropSize); 949 reinterpret_cast<BYTE*>(drop_files) + kDropSize);
949 const size_t copy_size = (path.value().length() + 1) * sizeof(wchar_t); 950 const size_t copy_size = (path.value().length() + 1) * sizeof(wchar_t);
950 memcpy(data, path.value().c_str(), copy_size); 951 memcpy(data, path.value().c_str(), copy_size);
951 data[path.value().length() + 1] = L'\0'; // Double NULL 952 data[path.value().length() + 1] = L'\0'; // Double NULL
952 953
953 STGMEDIUM* storage = new STGMEDIUM; 954 STGMEDIUM* storage = new STGMEDIUM;
954 storage->tymed = TYMED_HGLOBAL; 955 storage->tymed = TYMED_HGLOBAL;
955 storage->hGlobal = hdata; 956 storage->hGlobal = hdata;
956 storage->pUnkForRelease = NULL; 957 storage->pUnkForRelease = NULL;
957 return storage; 958 return storage;
958 } 959 }
959 960
960 static STGMEDIUM* GetStorageForFileDescriptor( 961 static STGMEDIUM* GetStorageForFileDescriptor(
961 const FilePath& path) { 962 const base::FilePath& path) {
962 string16 file_name = path.value(); 963 string16 file_name = path.value();
963 DCHECK(!file_name.empty()); 964 DCHECK(!file_name.empty());
964 HANDLE hdata = GlobalAlloc(GPTR, sizeof(FILEGROUPDESCRIPTOR)); 965 HANDLE hdata = GlobalAlloc(GPTR, sizeof(FILEGROUPDESCRIPTOR));
965 base::win::ScopedHGlobal<FILEGROUPDESCRIPTOR> locked_mem(hdata); 966 base::win::ScopedHGlobal<FILEGROUPDESCRIPTOR> locked_mem(hdata);
966 967
967 FILEGROUPDESCRIPTOR* descriptor = locked_mem.get(); 968 FILEGROUPDESCRIPTOR* descriptor = locked_mem.get();
968 descriptor->cItems = 1; 969 descriptor->cItems = 1;
969 descriptor->fgd[0].dwFlags = FD_LINKUI; 970 descriptor->fgd[0].dwFlags = FD_LINKUI;
970 wcsncpy_s(descriptor->fgd[0].cFileName, MAX_PATH, file_name.c_str(), 971 wcsncpy_s(descriptor->fgd[0].cFileName, MAX_PATH, file_name.c_str(),
971 std::min(file_name.size(), static_cast<size_t>(MAX_PATH - 1u))); 972 std::min(file_name.size(), static_cast<size_t>(MAX_PATH - 1u)));
(...skipping 13 matching lines...) Expand all
985 return new OSExchangeDataProviderWin(); 986 return new OSExchangeDataProviderWin();
986 } 987 }
987 988
988 // static 989 // static
989 OSExchangeData::CustomFormat OSExchangeData::RegisterCustomFormat( 990 OSExchangeData::CustomFormat OSExchangeData::RegisterCustomFormat(
990 const std::string& type) { 991 const std::string& type) {
991 return RegisterClipboardFormat(ASCIIToUTF16(type).c_str()); 992 return RegisterClipboardFormat(ASCIIToUTF16(type).c_str());
992 } 993 }
993 994
994 } // namespace ui 995 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/dragdrop/os_exchange_data_provider_win.h ('k') | ui/base/dragdrop/os_exchange_data_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698