add_ui_scopedcliboardwriter_writeunsaferawdata.patch 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: Henri Torgemane <[email protected]>
  3. Date: Thu, 23 Sep 2021 21:30:33 -0500
  4. Subject: add ui::ScopedCliboardWriter::WriteUnsafeRawData
  5. This restores some ability to write to the clipboard using raw formats, which
  6. was removed as part of the Raw Clipboard API scrubbing.
  7. https://bugs.chromium.org/p/chromium/issues/detail?id=1217643
  8. diff --git a/ui/base/clipboard/scoped_clipboard_writer.cc b/ui/base/clipboard/scoped_clipboard_writer.cc
  9. index e27df1c5b234490a2679fc3428e59b92970f1ec0..54a0be1dde7d059f5102ead4a77b828eff1eeadb 100644
  10. --- a/ui/base/clipboard/scoped_clipboard_writer.cc
  11. +++ b/ui/base/clipboard/scoped_clipboard_writer.cc
  12. @@ -239,6 +239,16 @@ void ScopedClipboardWriter::WriteEncodedDataTransferEndpointForTesting(
  13. }
  14. #endif // BUILDFLAG(IS_CHROMEOS_ASH)
  15. +void ScopedClipboardWriter::WriteUnsafeRawData(const std::u16string& format,
  16. + mojo_base::BigBuffer data) {
  17. + static constexpr int kMaxRegisteredFormats = 100;
  18. + if (counter_ >= kMaxRegisteredFormats)
  19. + return;
  20. + counter_++;
  21. + platform_representations_.push_back(
  22. + {base::UTF16ToUTF8(format), std::move(data)});
  23. +}
  24. +
  25. void ScopedClipboardWriter::Reset() {
  26. objects_.clear();
  27. platform_representations_.clear();
  28. diff --git a/ui/base/clipboard/scoped_clipboard_writer.h b/ui/base/clipboard/scoped_clipboard_writer.h
  29. index ec10abcafda69417044a4e792c3637bba5dcd54e..e4ef4f98f3c96c1813f000e185d81ec6082b48ca 100644
  30. --- a/ui/base/clipboard/scoped_clipboard_writer.h
  31. +++ b/ui/base/clipboard/scoped_clipboard_writer.h
  32. @@ -91,6 +91,10 @@ class COMPONENT_EXPORT(UI_BASE_CLIPBOARD) ScopedClipboardWriter {
  33. // This is only used to write custom format data.
  34. void WriteData(const std::u16string& format, mojo_base::BigBuffer data);
  35. + // write raw (non-pickled) data to the clipboard
  36. + void WriteUnsafeRawData(const std::u16string& format,
  37. + mojo_base::BigBuffer data);
  38. +
  39. void WriteImage(const SkBitmap& bitmap);
  40. #if BUILDFLAG(IS_CHROMEOS_LACROS)