| 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 |