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 // Many of these functions are based on those found in | 5 // Many of these functions are based on those found in |
6 // webkit/port/platform/PasteboardWin.cpp | 6 // webkit/port/platform/PasteboardWin.cpp |
7 | 7 |
8 #include "ui/base/clipboard/clipboard.h" | 8 #include "ui/base/clipboard/clipboard.h" |
9 | 9 |
10 #include <shlobj.h> | 10 #include <shlobj.h> |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 | 220 |
221 ::EmptyClipboard(); | 221 ::EmptyClipboard(); |
222 | 222 |
223 for (ObjectMap::const_iterator iter = objects.begin(); | 223 for (ObjectMap::const_iterator iter = objects.begin(); |
224 iter != objects.end(); ++iter) { | 224 iter != objects.end(); ++iter) { |
225 DispatchObject(static_cast<ObjectType>(iter->first), iter->second); | 225 DispatchObject(static_cast<ObjectType>(iter->first), iter->second); |
226 } | 226 } |
227 } | 227 } |
228 | 228 |
229 void Clipboard::WriteText(const char* text_data, size_t text_len) { | 229 void Clipboard::WriteText(const char* text_data, size_t text_len) { |
230 string16 text; | 230 base::string16 text; |
231 UTF8ToUTF16(text_data, text_len, &text); | 231 UTF8ToUTF16(text_data, text_len, &text); |
232 HGLOBAL glob = CreateGlobalData(text); | 232 HGLOBAL glob = CreateGlobalData(text); |
233 | 233 |
234 WriteToClipboard(CF_UNICODETEXT, glob); | 234 WriteToClipboard(CF_UNICODETEXT, glob); |
235 } | 235 } |
236 | 236 |
237 void Clipboard::WriteHTML(const char* markup_data, | 237 void Clipboard::WriteHTML(const char* markup_data, |
238 size_t markup_len, | 238 size_t markup_len, |
239 const char* url_data, | 239 const char* url_data, |
240 size_t url_len) { | 240 size_t url_len) { |
(...skipping 14 matching lines...) Expand all Loading... |
255 } | 255 } |
256 | 256 |
257 void Clipboard::WriteBookmark(const char* title_data, | 257 void Clipboard::WriteBookmark(const char* title_data, |
258 size_t title_len, | 258 size_t title_len, |
259 const char* url_data, | 259 const char* url_data, |
260 size_t url_len) { | 260 size_t url_len) { |
261 std::string bookmark(title_data, title_len); | 261 std::string bookmark(title_data, title_len); |
262 bookmark.append(1, L'\n'); | 262 bookmark.append(1, L'\n'); |
263 bookmark.append(url_data, url_len); | 263 bookmark.append(url_data, url_len); |
264 | 264 |
265 string16 wide_bookmark = UTF8ToWide(bookmark); | 265 base::string16 wide_bookmark = UTF8ToWide(bookmark); |
266 HGLOBAL glob = CreateGlobalData(wide_bookmark); | 266 HGLOBAL glob = CreateGlobalData(wide_bookmark); |
267 | 267 |
268 WriteToClipboard(GetUrlWFormatType().ToUINT(), glob); | 268 WriteToClipboard(GetUrlWFormatType().ToUINT(), glob); |
269 } | 269 } |
270 | 270 |
271 void Clipboard::WriteWebSmartPaste() { | 271 void Clipboard::WriteWebSmartPaste() { |
272 DCHECK(clipboard_owner_->hwnd() != NULL); | 272 DCHECK(clipboard_owner_->hwnd() != NULL); |
273 ::SetClipboardData(GetWebKitSmartPasteFormatType().ToUINT(), NULL); | 273 ::SetClipboardData(GetWebKitSmartPasteFormatType().ToUINT(), NULL); |
274 } | 274 } |
275 | 275 |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 void Clipboard::Clear(ClipboardType type) { | 388 void Clipboard::Clear(ClipboardType type) { |
389 DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE); | 389 DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE); |
390 ScopedClipboard clipboard; | 390 ScopedClipboard clipboard; |
391 if (!clipboard.Acquire(GetClipboardWindow())) | 391 if (!clipboard.Acquire(GetClipboardWindow())) |
392 return; | 392 return; |
393 | 393 |
394 ::EmptyClipboard(); | 394 ::EmptyClipboard(); |
395 } | 395 } |
396 | 396 |
397 void Clipboard::ReadAvailableTypes(ClipboardType type, | 397 void Clipboard::ReadAvailableTypes(ClipboardType type, |
398 std::vector<string16>* types, | 398 std::vector<base::string16>* types, |
399 bool* contains_filenames) const { | 399 bool* contains_filenames) const { |
400 if (!types || !contains_filenames) { | 400 if (!types || !contains_filenames) { |
401 NOTREACHED(); | 401 NOTREACHED(); |
402 return; | 402 return; |
403 } | 403 } |
404 | 404 |
405 types->clear(); | 405 types->clear(); |
406 if (::IsClipboardFormatAvailable(GetPlainTextFormatType().ToUINT())) | 406 if (::IsClipboardFormatAvailable(GetPlainTextFormatType().ToUINT())) |
407 types->push_back(UTF8ToUTF16(kMimeTypeText)); | 407 types->push_back(UTF8ToUTF16(kMimeTypeText)); |
408 if (::IsClipboardFormatAvailable(GetHtmlFormatType().ToUINT())) | 408 if (::IsClipboardFormatAvailable(GetHtmlFormatType().ToUINT())) |
(...skipping 10 matching lines...) Expand all Loading... |
419 return; | 419 return; |
420 | 420 |
421 HANDLE hdata = ::GetClipboardData(GetWebCustomDataFormatType().ToUINT()); | 421 HANDLE hdata = ::GetClipboardData(GetWebCustomDataFormatType().ToUINT()); |
422 if (!hdata) | 422 if (!hdata) |
423 return; | 423 return; |
424 | 424 |
425 ReadCustomDataTypes(::GlobalLock(hdata), ::GlobalSize(hdata), types); | 425 ReadCustomDataTypes(::GlobalLock(hdata), ::GlobalSize(hdata), types); |
426 ::GlobalUnlock(hdata); | 426 ::GlobalUnlock(hdata); |
427 } | 427 } |
428 | 428 |
429 void Clipboard::ReadText(ClipboardType type, string16* result) const { | 429 void Clipboard::ReadText(ClipboardType type, base::string16* result) const { |
430 DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE); | 430 DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE); |
431 if (!result) { | 431 if (!result) { |
432 NOTREACHED(); | 432 NOTREACHED(); |
433 return; | 433 return; |
434 } | 434 } |
435 | 435 |
436 result->clear(); | 436 result->clear(); |
437 | 437 |
438 // Acquire the clipboard. | 438 // Acquire the clipboard. |
439 ScopedClipboard clipboard; | 439 ScopedClipboard clipboard; |
(...skipping 24 matching lines...) Expand all Loading... |
464 | 464 |
465 HANDLE data = ::GetClipboardData(CF_TEXT); | 465 HANDLE data = ::GetClipboardData(CF_TEXT); |
466 if (!data) | 466 if (!data) |
467 return; | 467 return; |
468 | 468 |
469 result->assign(static_cast<const char*>(::GlobalLock(data))); | 469 result->assign(static_cast<const char*>(::GlobalLock(data))); |
470 ::GlobalUnlock(data); | 470 ::GlobalUnlock(data); |
471 } | 471 } |
472 | 472 |
473 void Clipboard::ReadHTML(ClipboardType type, | 473 void Clipboard::ReadHTML(ClipboardType type, |
474 string16* markup, | 474 base::string16* markup, |
475 std::string* src_url, | 475 std::string* src_url, |
476 uint32* fragment_start, | 476 uint32* fragment_start, |
477 uint32* fragment_end) const { | 477 uint32* fragment_end) const { |
478 DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE); | 478 DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE); |
479 | 479 |
480 markup->clear(); | 480 markup->clear(); |
481 // TODO(dcheng): Remove these checks, I don't think they should be optional. | 481 // TODO(dcheng): Remove these checks, I don't think they should be optional. |
482 DCHECK(src_url); | 482 DCHECK(src_url); |
483 if (src_url) | 483 if (src_url) |
484 src_url->clear(); | 484 src_url->clear(); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 BitmapHasInvalidPremultipliedColors(device_bitmap); | 592 BitmapHasInvalidPremultipliedColors(device_bitmap); |
593 if (has_invalid_alpha_channel) { | 593 if (has_invalid_alpha_channel) { |
594 MakeBitmapOpaque(device_bitmap); | 594 MakeBitmapOpaque(device_bitmap); |
595 } | 595 } |
596 } | 596 } |
597 | 597 |
598 return canvas.ExtractImageRep().sk_bitmap(); | 598 return canvas.ExtractImageRep().sk_bitmap(); |
599 } | 599 } |
600 | 600 |
601 void Clipboard::ReadCustomData(ClipboardType clipboard_type, | 601 void Clipboard::ReadCustomData(ClipboardType clipboard_type, |
602 const string16& type, | 602 const base::string16& type, |
603 string16* result) const { | 603 base::string16* result) const { |
604 DCHECK_EQ(clipboard_type, CLIPBOARD_TYPE_COPY_PASTE); | 604 DCHECK_EQ(clipboard_type, CLIPBOARD_TYPE_COPY_PASTE); |
605 | 605 |
606 // Acquire the clipboard. | 606 // Acquire the clipboard. |
607 ScopedClipboard clipboard; | 607 ScopedClipboard clipboard; |
608 if (!clipboard.Acquire(GetClipboardWindow())) | 608 if (!clipboard.Acquire(GetClipboardWindow())) |
609 return; | 609 return; |
610 | 610 |
611 HANDLE hdata = ::GetClipboardData(GetWebCustomDataFormatType().ToUINT()); | 611 HANDLE hdata = ::GetClipboardData(GetWebCustomDataFormatType().ToUINT()); |
612 if (!hdata) | 612 if (!hdata) |
613 return; | 613 return; |
614 | 614 |
615 ReadCustomDataForType(::GlobalLock(hdata), ::GlobalSize(hdata), type, result); | 615 ReadCustomDataForType(::GlobalLock(hdata), ::GlobalSize(hdata), type, result); |
616 ::GlobalUnlock(hdata); | 616 ::GlobalUnlock(hdata); |
617 } | 617 } |
618 | 618 |
619 void Clipboard::ReadBookmark(string16* title, std::string* url) const { | 619 void Clipboard::ReadBookmark(base::string16* title, std::string* url) const { |
620 if (title) | 620 if (title) |
621 title->clear(); | 621 title->clear(); |
622 | 622 |
623 if (url) | 623 if (url) |
624 url->clear(); | 624 url->clear(); |
625 | 625 |
626 // Acquire the clipboard. | 626 // Acquire the clipboard. |
627 ScopedClipboard clipboard; | 627 ScopedClipboard clipboard; |
628 if (!clipboard.Acquire(GetClipboardWindow())) | 628 if (!clipboard.Acquire(GetClipboardWindow())) |
629 return; | 629 return; |
630 | 630 |
631 HANDLE data = ::GetClipboardData(GetUrlWFormatType().ToUINT()); | 631 HANDLE data = ::GetClipboardData(GetUrlWFormatType().ToUINT()); |
632 if (!data) | 632 if (!data) |
633 return; | 633 return; |
634 | 634 |
635 string16 bookmark(static_cast<const char16*>(::GlobalLock(data))); | 635 base::string16 bookmark(static_cast<const char16*>(::GlobalLock(data))); |
636 ::GlobalUnlock(data); | 636 ::GlobalUnlock(data); |
637 | 637 |
638 ParseBookmarkClipboardFormat(bookmark, title, url); | 638 ParseBookmarkClipboardFormat(bookmark, title, url); |
639 } | 639 } |
640 | 640 |
641 void Clipboard::ReadData(const FormatType& format, std::string* result) const { | 641 void Clipboard::ReadData(const FormatType& format, std::string* result) const { |
642 if (!result) { | 642 if (!result) { |
643 NOTREACHED(); | 643 NOTREACHED(); |
644 return; | 644 return; |
645 } | 645 } |
646 | 646 |
647 ScopedClipboard clipboard; | 647 ScopedClipboard clipboard; |
648 if (!clipboard.Acquire(GetClipboardWindow())) | 648 if (!clipboard.Acquire(GetClipboardWindow())) |
649 return; | 649 return; |
650 | 650 |
651 HANDLE data = ::GetClipboardData(format.ToUINT()); | 651 HANDLE data = ::GetClipboardData(format.ToUINT()); |
652 if (!data) | 652 if (!data) |
653 return; | 653 return; |
654 | 654 |
655 result->assign(static_cast<const char*>(::GlobalLock(data)), | 655 result->assign(static_cast<const char*>(::GlobalLock(data)), |
656 ::GlobalSize(data)); | 656 ::GlobalSize(data)); |
657 ::GlobalUnlock(data); | 657 ::GlobalUnlock(data); |
658 } | 658 } |
659 | 659 |
660 // static | 660 // static |
661 void Clipboard::ParseBookmarkClipboardFormat(const string16& bookmark, | 661 void Clipboard::ParseBookmarkClipboardFormat(const base::string16& bookmark, |
662 string16* title, | 662 base::string16* title, |
663 std::string* url) { | 663 std::string* url) { |
664 const string16 kDelim = ASCIIToUTF16("\r\n"); | 664 const base::string16 kDelim = ASCIIToUTF16("\r\n"); |
665 | 665 |
666 const size_t title_end = bookmark.find_first_of(kDelim); | 666 const size_t title_end = bookmark.find_first_of(kDelim); |
667 if (title) | 667 if (title) |
668 title->assign(bookmark.substr(0, title_end)); | 668 title->assign(bookmark.substr(0, title_end)); |
669 | 669 |
670 if (url) { | 670 if (url) { |
671 const size_t url_start = bookmark.find_first_not_of(kDelim, title_end); | 671 const size_t url_start = bookmark.find_first_not_of(kDelim, title_end); |
672 if (url_start != string16::npos) | 672 if (url_start != base::string16::npos) |
673 *url = UTF16ToUTF8(bookmark.substr(url_start, string16::npos)); | 673 *url = UTF16ToUTF8(bookmark.substr(url_start, base::string16::npos)); |
674 } | 674 } |
675 } | 675 } |
676 | 676 |
677 // static | 677 // static |
678 Clipboard::FormatType Clipboard::GetFormatType( | 678 Clipboard::FormatType Clipboard::GetFormatType( |
679 const std::string& format_string) { | 679 const std::string& format_string) { |
680 return FormatType( | 680 return FormatType( |
681 ::RegisterClipboardFormat(ASCIIToWide(format_string).c_str())); | 681 ::RegisterClipboardFormat(ASCIIToWide(format_string).c_str())); |
682 } | 682 } |
683 | 683 |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 if (!clipboard_owner_) | 825 if (!clipboard_owner_) |
826 return NULL; | 826 return NULL; |
827 | 827 |
828 if (clipboard_owner_->hwnd() == NULL) | 828 if (clipboard_owner_->hwnd() == NULL) |
829 clipboard_owner_->Create(base::Bind(&ClipboardOwnerWndProc)); | 829 clipboard_owner_->Create(base::Bind(&ClipboardOwnerWndProc)); |
830 | 830 |
831 return clipboard_owner_->hwnd(); | 831 return clipboard_owner_->hwnd(); |
832 } | 832 } |
833 | 833 |
834 } // namespace ui | 834 } // namespace ui |
OLD | NEW |