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 "ui/base/clipboard/clipboard.h" | 5 #include "ui/base/clipboard/clipboard_aura.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
13 #include "base/stl_util.h" | 13 #include "base/stl_util.h" |
14 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
15 #include "third_party/skia/include/core/SkBitmap.h" | 15 #include "third_party/skia/include/core/SkBitmap.h" |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 return current_data_; | 399 return current_data_; |
400 } | 400 } |
401 | 401 |
402 static ClipboardData* current_data_; | 402 static ClipboardData* current_data_; |
403 }; | 403 }; |
404 | 404 |
405 ClipboardData* ClipboardDataBuilder::current_data_ = NULL; | 405 ClipboardData* ClipboardDataBuilder::current_data_ = NULL; |
406 | 406 |
407 } // namespace | 407 } // namespace |
408 | 408 |
409 // Clipboard FormatType implementation. | 409 // Clipboard::FormatType implementation. |
410 Clipboard::FormatType::FormatType() { | 410 Clipboard::FormatType::FormatType() { |
411 } | 411 } |
412 | 412 |
413 Clipboard::FormatType::FormatType(const std::string& native_format) | 413 Clipboard::FormatType::FormatType(const std::string& native_format) |
414 : data_(native_format) { | 414 : data_(native_format) { |
415 } | 415 } |
416 | 416 |
417 Clipboard::FormatType::~FormatType() { | 417 Clipboard::FormatType::~FormatType() { |
418 } | 418 } |
419 | 419 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeWebCustomData)); | 504 CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeWebCustomData)); |
505 return type; | 505 return type; |
506 } | 506 } |
507 | 507 |
508 // static | 508 // static |
509 const Clipboard::FormatType& Clipboard::GetPepperCustomDataFormatType() { | 509 const Clipboard::FormatType& Clipboard::GetPepperCustomDataFormatType() { |
510 CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypePepperCustomData)); | 510 CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypePepperCustomData)); |
511 return type; | 511 return type; |
512 } | 512 } |
513 | 513 |
514 // Clipboard implementation. | 514 // Clipboard factory method. |
515 Clipboard::Clipboard() { | 515 Clipboard* Clipboard::Create() { |
| 516 return new ClipboardAura; |
| 517 } |
| 518 |
| 519 // ClipboardAura implementation. |
| 520 ClipboardAura::ClipboardAura() { |
516 DCHECK(CalledOnValidThread()); | 521 DCHECK(CalledOnValidThread()); |
517 // Make sure clipboard is created. | 522 // Make sure clipboard is created. |
518 GetClipboard(); | 523 GetClipboard(); |
519 } | 524 } |
520 | 525 |
521 Clipboard::~Clipboard() { | 526 ClipboardAura::~ClipboardAura() { |
522 DCHECK(CalledOnValidThread()); | 527 DCHECK(CalledOnValidThread()); |
523 DeleteClipboard(); | 528 DeleteClipboard(); |
524 } | 529 } |
525 | 530 |
526 uint64 Clipboard::GetSequenceNumber(ClipboardType type) { | 531 uint64 ClipboardAura::GetSequenceNumber(ClipboardType type) { |
527 DCHECK(CalledOnValidThread()); | 532 DCHECK(CalledOnValidThread()); |
528 return GetClipboard()->sequence_number(); | 533 return GetClipboard()->sequence_number(); |
529 } | 534 } |
530 | 535 |
531 bool Clipboard::IsFormatAvailable(const FormatType& format, | 536 bool ClipboardAura::IsFormatAvailable(const FormatType& format, |
532 ClipboardType type) const { | 537 ClipboardType type) const { |
533 DCHECK(CalledOnValidThread()); | 538 DCHECK(CalledOnValidThread()); |
534 DCHECK(IsSupportedClipboardType(type)); | 539 DCHECK(IsSupportedClipboardType(type)); |
535 AuraClipboard* clipboard = GetClipboard(); | 540 AuraClipboard* clipboard = GetClipboard(); |
536 if (GetPlainTextFormatType().Equals(format) || | 541 if (GetPlainTextFormatType().Equals(format) || |
537 GetUrlFormatType().Equals(format)) | 542 GetUrlFormatType().Equals(format)) |
538 return clipboard->IsFormatAvailable(TEXT); | 543 return clipboard->IsFormatAvailable(TEXT); |
539 else if (GetHtmlFormatType().Equals(format)) | 544 else if (GetHtmlFormatType().Equals(format)) |
540 return clipboard->IsFormatAvailable(HTML); | 545 return clipboard->IsFormatAvailable(HTML); |
541 else if (GetRtfFormatType().Equals(format)) | 546 else if (GetRtfFormatType().Equals(format)) |
542 return clipboard->IsFormatAvailable(RTF); | 547 return clipboard->IsFormatAvailable(RTF); |
543 else if (GetBitmapFormatType().Equals(format)) | 548 else if (GetBitmapFormatType().Equals(format)) |
544 return clipboard->IsFormatAvailable(BITMAP); | 549 return clipboard->IsFormatAvailable(BITMAP); |
545 else if (GetWebKitSmartPasteFormatType().Equals(format)) | 550 else if (GetWebKitSmartPasteFormatType().Equals(format)) |
546 return clipboard->IsFormatAvailable(WEB); | 551 return clipboard->IsFormatAvailable(WEB); |
547 else { | 552 else { |
548 const ClipboardData* data = clipboard->GetData(); | 553 const ClipboardData* data = clipboard->GetData(); |
549 if (data && data->custom_data_format() == format.ToString()) | 554 if (data && data->custom_data_format() == format.ToString()) |
550 return true; | 555 return true; |
551 } | 556 } |
552 return false; | 557 return false; |
553 } | 558 } |
554 | 559 |
555 void Clipboard::Clear(ClipboardType type) { | 560 void ClipboardAura::Clear(ClipboardType type) { |
556 DCHECK(CalledOnValidThread()); | 561 DCHECK(CalledOnValidThread()); |
557 DCHECK(IsSupportedClipboardType(type)); | 562 DCHECK(IsSupportedClipboardType(type)); |
558 AuraClipboard* clipboard = GetClipboard(); | 563 AuraClipboard* clipboard = GetClipboard(); |
559 clipboard->Clear(); | 564 clipboard->Clear(); |
560 } | 565 } |
561 | 566 |
562 void Clipboard::ReadAvailableTypes(ClipboardType type, | 567 void ClipboardAura::ReadAvailableTypes(ClipboardType type, |
563 std::vector<base::string16>* types, | 568 std::vector<base::string16>* types, |
564 bool* contains_filenames) const { | 569 bool* contains_filenames) const { |
565 DCHECK(CalledOnValidThread()); | 570 DCHECK(CalledOnValidThread()); |
566 if (!types || !contains_filenames) { | 571 if (!types || !contains_filenames) { |
567 NOTREACHED(); | 572 NOTREACHED(); |
568 return; | 573 return; |
569 } | 574 } |
570 | 575 |
571 types->clear(); | 576 types->clear(); |
572 *contains_filenames = false; | 577 *contains_filenames = false; |
573 if (IsFormatAvailable(GetPlainTextFormatType(), type)) | 578 if (IsFormatAvailable(GetPlainTextFormatType(), type)) |
574 types->push_back(base::UTF8ToUTF16(GetPlainTextFormatType().ToString())); | 579 types->push_back(base::UTF8ToUTF16(GetPlainTextFormatType().ToString())); |
575 if (IsFormatAvailable(GetHtmlFormatType(), type)) | 580 if (IsFormatAvailable(GetHtmlFormatType(), type)) |
576 types->push_back(base::UTF8ToUTF16(GetHtmlFormatType().ToString())); | 581 types->push_back(base::UTF8ToUTF16(GetHtmlFormatType().ToString())); |
577 if (IsFormatAvailable(GetRtfFormatType(), type)) | 582 if (IsFormatAvailable(GetRtfFormatType(), type)) |
578 types->push_back(base::UTF8ToUTF16(GetRtfFormatType().ToString())); | 583 types->push_back(base::UTF8ToUTF16(GetRtfFormatType().ToString())); |
579 if (IsFormatAvailable(GetBitmapFormatType(), type)) | 584 if (IsFormatAvailable(GetBitmapFormatType(), type)) |
580 types->push_back(base::UTF8ToUTF16(kMimeTypePNG)); | 585 types->push_back(base::UTF8ToUTF16(kMimeTypePNG)); |
581 | 586 |
582 AuraClipboard* clipboard = GetClipboard(); | 587 AuraClipboard* clipboard = GetClipboard(); |
583 if (clipboard->IsFormatAvailable(CUSTOM) && clipboard->GetData()) { | 588 if (clipboard->IsFormatAvailable(CUSTOM) && clipboard->GetData()) { |
584 ui::ReadCustomDataTypes(clipboard->GetData()->custom_data_data().c_str(), | 589 ui::ReadCustomDataTypes(clipboard->GetData()->custom_data_data().c_str(), |
585 clipboard->GetData()->custom_data_data().size(), types); | 590 clipboard->GetData()->custom_data_data().size(), types); |
586 } | 591 } |
587 } | 592 } |
588 | 593 |
589 void Clipboard::ReadText(ClipboardType type, base::string16* result) const { | 594 void ClipboardAura::ReadText(ClipboardType type, base::string16* result) const { |
590 DCHECK(CalledOnValidThread()); | 595 DCHECK(CalledOnValidThread()); |
591 GetClipboard()->ReadText(result); | 596 GetClipboard()->ReadText(result); |
592 } | 597 } |
593 | 598 |
594 void Clipboard::ReadAsciiText(ClipboardType type, std::string* result) const { | 599 void ClipboardAura::ReadAsciiText(ClipboardType type, |
| 600 std::string* result) const { |
595 DCHECK(CalledOnValidThread()); | 601 DCHECK(CalledOnValidThread()); |
596 GetClipboard()->ReadAsciiText(result); | 602 GetClipboard()->ReadAsciiText(result); |
597 } | 603 } |
598 | 604 |
599 void Clipboard::ReadHTML(ClipboardType type, | 605 void ClipboardAura::ReadHTML(ClipboardType type, |
600 base::string16* markup, | 606 base::string16* markup, |
601 std::string* src_url, | 607 std::string* src_url, |
602 uint32* fragment_start, | 608 uint32* fragment_start, |
603 uint32* fragment_end) const { | 609 uint32* fragment_end) const { |
604 DCHECK(CalledOnValidThread()); | 610 DCHECK(CalledOnValidThread()); |
605 GetClipboard()->ReadHTML(markup, src_url, fragment_start, fragment_end); | 611 GetClipboard()->ReadHTML(markup, src_url, fragment_start, fragment_end); |
606 } | 612 } |
607 | 613 |
608 void Clipboard::ReadRTF(ClipboardType type, std::string* result) const { | 614 void ClipboardAura::ReadRTF(ClipboardType type, std::string* result) const { |
609 DCHECK(CalledOnValidThread()); | 615 DCHECK(CalledOnValidThread()); |
610 GetClipboard()->ReadRTF(result); | 616 GetClipboard()->ReadRTF(result); |
611 } | 617 } |
612 | 618 |
613 SkBitmap Clipboard::ReadImage(ClipboardType type) const { | 619 SkBitmap ClipboardAura::ReadImage(ClipboardType type) const { |
614 DCHECK(CalledOnValidThread()); | 620 DCHECK(CalledOnValidThread()); |
615 return GetClipboard()->ReadImage(); | 621 return GetClipboard()->ReadImage(); |
616 } | 622 } |
617 | 623 |
618 void Clipboard::ReadCustomData(ClipboardType clipboard_type, | 624 void ClipboardAura::ReadCustomData(ClipboardType clipboard_type, |
619 const base::string16& type, | 625 const base::string16& type, |
620 base::string16* result) const { | 626 base::string16* result) const { |
621 DCHECK(CalledOnValidThread()); | 627 DCHECK(CalledOnValidThread()); |
622 GetClipboard()->ReadCustomData(type, result); | 628 GetClipboard()->ReadCustomData(type, result); |
623 } | 629 } |
624 | 630 |
625 void Clipboard::ReadBookmark(base::string16* title, std::string* url) const { | 631 void ClipboardAura::ReadBookmark(base::string16* title, |
| 632 std::string* url) const { |
626 DCHECK(CalledOnValidThread()); | 633 DCHECK(CalledOnValidThread()); |
627 GetClipboard()->ReadBookmark(title, url); | 634 GetClipboard()->ReadBookmark(title, url); |
628 } | 635 } |
629 | 636 |
630 void Clipboard::ReadData(const FormatType& format, std::string* result) const { | 637 void ClipboardAura::ReadData(const FormatType& format, |
| 638 std::string* result) const { |
631 DCHECK(CalledOnValidThread()); | 639 DCHECK(CalledOnValidThread()); |
632 GetClipboard()->ReadData(format.ToString(), result); | 640 GetClipboard()->ReadData(format.ToString(), result); |
633 } | 641 } |
634 | 642 |
635 void Clipboard::WriteObjects(ClipboardType type, const ObjectMap& objects) { | 643 void ClipboardAura::WriteObjects(ClipboardType type, const ObjectMap& objects) { |
636 DCHECK(CalledOnValidThread()); | 644 DCHECK(CalledOnValidThread()); |
637 DCHECK(IsSupportedClipboardType(type)); | 645 DCHECK(IsSupportedClipboardType(type)); |
638 for (ObjectMap::const_iterator iter = objects.begin(); | 646 for (ObjectMap::const_iterator iter = objects.begin(); iter != objects.end(); |
639 iter != objects.end(); ++iter) { | 647 ++iter) { |
640 DispatchObject(static_cast<ObjectType>(iter->first), iter->second); | 648 DispatchObject(static_cast<ObjectType>(iter->first), iter->second); |
641 } | 649 } |
642 ClipboardDataBuilder::CommitToClipboard(); | 650 ClipboardDataBuilder::CommitToClipboard(); |
643 } | 651 } |
644 | 652 |
645 void Clipboard::WriteText(const char* text_data, size_t text_len) { | 653 void ClipboardAura::WriteText(const char* text_data, size_t text_len) { |
646 ClipboardDataBuilder::WriteText(text_data, text_len); | 654 ClipboardDataBuilder::WriteText(text_data, text_len); |
647 } | 655 } |
648 | 656 |
649 void Clipboard::WriteHTML(const char* markup_data, | 657 void ClipboardAura::WriteHTML(const char* markup_data, |
650 size_t markup_len, | 658 size_t markup_len, |
651 const char* url_data, | 659 const char* url_data, |
652 size_t url_len) { | 660 size_t url_len) { |
653 ClipboardDataBuilder::WriteHTML(markup_data, markup_len, url_data, url_len); | 661 ClipboardDataBuilder::WriteHTML(markup_data, markup_len, url_data, url_len); |
654 } | 662 } |
655 | 663 |
656 void Clipboard::WriteRTF(const char* rtf_data, size_t data_len) { | 664 void ClipboardAura::WriteRTF(const char* rtf_data, size_t data_len) { |
657 ClipboardDataBuilder::WriteRTF(rtf_data, data_len); | 665 ClipboardDataBuilder::WriteRTF(rtf_data, data_len); |
658 } | 666 } |
659 | 667 |
660 void Clipboard::WriteBookmark(const char* title_data, | 668 void ClipboardAura::WriteBookmark(const char* title_data, |
661 size_t title_len, | 669 size_t title_len, |
662 const char* url_data, | 670 const char* url_data, |
663 size_t url_len) { | 671 size_t url_len) { |
664 ClipboardDataBuilder::WriteBookmark(title_data, title_len, url_data, url_len); | 672 ClipboardDataBuilder::WriteBookmark(title_data, title_len, url_data, url_len); |
665 } | 673 } |
666 | 674 |
667 void Clipboard::WriteWebSmartPaste() { | 675 void ClipboardAura::WriteWebSmartPaste() { |
668 ClipboardDataBuilder::WriteWebSmartPaste(); | 676 ClipboardDataBuilder::WriteWebSmartPaste(); |
669 } | 677 } |
670 | 678 |
671 void Clipboard::WriteBitmap(const SkBitmap& bitmap) { | 679 void ClipboardAura::WriteBitmap(const SkBitmap& bitmap) { |
672 ClipboardDataBuilder::WriteBitmap(bitmap); | 680 ClipboardDataBuilder::WriteBitmap(bitmap); |
673 } | 681 } |
674 | 682 |
675 void Clipboard::WriteData(const FormatType& format, | 683 void ClipboardAura::WriteData(const FormatType& format, |
676 const char* data_data, | 684 const char* data_data, |
677 size_t data_len) { | 685 size_t data_len) { |
678 ClipboardDataBuilder::WriteData(format.ToString(), data_data, data_len); | 686 ClipboardDataBuilder::WriteData(format.ToString(), data_data, data_len); |
679 } | 687 } |
680 | 688 |
681 } // namespace ui | 689 } // namespace ui |
OLD | NEW |