diff --git a/ash/clipboard/clipboard_history_resource_manager.cc b/ash/clipboard/clipboard_history_resource_manager.cc index 6e726cc9562d7..d7569f55de3a9 100644 --- a/ash/clipboard/clipboard_history_resource_manager.cc +++ b/ash/clipboard/clipboard_history_resource_manager.cc @@ -159,7 +159,7 @@ std::u16string ClipboardHistoryResourceManager::GetLabel( const ClipboardHistoryItem& item) const { const ui::ClipboardData& data = item.data(); switch (ClipboardHistoryUtil::CalculateMainFormat(data).value()) { - case ui::ClipboardInternalFormat::kBitmap: + case ui::ClipboardInternalFormat::kPng: RecordPlaceholderString(ClipboardHistoryPlaceholderStringType::kBitmap); return GetLocalizedString(IDS_CLIPBOARD_MENU_IMAGE); case ui::ClipboardInternalFormat::kText: diff --git a/ash/clipboard/clipboard_history_resource_manager_unittest.cc b/ash/clipboard/clipboard_history_resource_manager_unittest.cc index cbe619f4caac5..18efb2a08730f 100644 --- a/ash/clipboard/clipboard_history_resource_manager_unittest.cc +++ b/ash/clipboard/clipboard_history_resource_manager_unittest.cc @@ -131,16 +131,16 @@ TEST_F(ClipboardHistoryResourceManagerTest, GetLabel) { .SetFilenames({ui::FileInfo(base::FilePath("/dir/filename"), base::FilePath("filename"))}) .SetBookmarkTitle("Bookmark Title") - .SetBitmap(gfx::test::CreateBitmap(10, 10)) + .SetPng(gfx::test::CreatePNGBytes(10)) .SetFileSystemData({u"/path/to/File.txt", u"/path/to/Other%20File.txt"}) .SetWebSmartPaste(true); - // Bitmap data always take precedence. + // PNG data always take precedence. EXPECT_EQ(resource_manager()->GetLabel(builder.Build()), u"Image"); - builder.ClearBitmap(); + builder.ClearPng(); - // In the absence of bitmap data, HTML data takes precedence, but we use + // In the absence of PNG data, HTML data takes precedence, but we use // plain-text format for the label. EXPECT_EQ(resource_manager()->GetLabel(builder.Build()), u"Text"); diff --git a/ash/clipboard/clipboard_history_util.cc b/ash/clipboard/clipboard_history_util.cc index 7659fd8aeec09..fbc9e89b4f32b 100644 --- a/ash/clipboard/clipboard_history_util.cc +++ b/ash/clipboard/clipboard_history_util.cc @@ -29,7 +29,7 @@ constexpr char16_t kFileSystemSourcesType[] = u"fs/sources"; // The array of formats in order of decreasing priority. constexpr ui::ClipboardInternalFormat kPrioritizedFormats[] = { - ui::ClipboardInternalFormat::kBitmap, + ui::ClipboardInternalFormat::kPng, ui::ClipboardInternalFormat::kHtml, ui::ClipboardInternalFormat::kText, ui::ClipboardInternalFormat::kRtf, @@ -53,7 +53,8 @@ absl::optional<ui::ClipboardInternalFormat> CalculateMainFormat( ClipboardHistoryDisplayFormat CalculateDisplayFormat( const ui::ClipboardData& data) { switch (CalculateMainFormat(data).value()) { - case ui::ClipboardInternalFormat::kBitmap: + case ui::ClipboardInternalFormat::kPng: + // TODO(crbug.com/1207638): Rename this to kImage or kPng. return ClipboardHistoryDisplayFormat::kBitmap; case ui::ClipboardInternalFormat::kHtml: if ((data.markup_data().find("<img") == std::string::npos) && diff --git a/ash/clipboard/clipboard_history_util_unittest.cc b/ash/clipboard/clipboard_history_util_unittest.cc index 62246787372e6..d9f735d690de9 100644 --- a/ash/clipboard/clipboard_history_util_unittest.cc +++ b/ash/clipboard/clipboard_history_util_unittest.cc @@ -19,7 +19,7 @@ namespace ClipboardHistoryUtil { namespace { constexpr std::array<ui::ClipboardInternalFormat, 7> kAllFormats = { - ui::ClipboardInternalFormat::kBitmap, + ui::ClipboardInternalFormat::kPng, ui::ClipboardInternalFormat::kHtml, ui::ClipboardInternalFormat::kText, ui::ClipboardInternalFormat::kRtf, @@ -47,7 +47,7 @@ TEST_F(ClipboardHistoryUtilTest, CalculateMainFormat) { // We will cycle through all formats in prioritized order. std::deque<ui::ClipboardInternalFormat> prioritized_formats = { - ui::ClipboardInternalFormat::kBitmap, + ui::ClipboardInternalFormat::kPng, ui::ClipboardInternalFormat::kHtml, ui::ClipboardInternalFormat::kText, ui::ClipboardInternalFormat::kRtf, diff --git a/ash/clipboard/test_support/clipboard_history_item_builder.cc b/ash/clipboard/test_support/clipboard_history_item_builder.cc index 3bc5e9ef49efc..782ac1227fc53 100644 --- a/ash/clipboard/test_support/clipboard_history_item_builder.cc +++ b/ash/clipboard/test_support/clipboard_history_item_builder.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "ash/clipboard/test_support/clipboard_history_item_builder.h" +#include <vector> #include "ash/clipboard/clipboard_history_item.h" #include "base/notreached.h" @@ -12,6 +13,7 @@ #include "ui/base/clipboard/clipboard_data.h" #include "ui/base/clipboard/clipboard_format_type.h" #include "ui/base/clipboard/custom_data_helper.h" +#include "ui/gfx/codec/png_codec.h" #include "ui/gfx/image/image_unittest_util.h" namespace ash { @@ -32,8 +34,8 @@ ClipboardHistoryItem ClipboardHistoryItemBuilder::Build() const { data.set_filenames(filenames_); if (bookmark_title_.has_value()) data.set_bookmark_title(bookmark_title_.value()); - if (bitmap_.has_value()) - data.SetBitmapData(bitmap_.value()); + if (png_.has_value()) + data.SetPngData(png_.value()); if (custom_format_.has_value() && custom_data_.has_value()) data.SetCustomData(custom_format_.value(), custom_data_.value()); if (web_smart_paste_.has_value()) @@ -46,7 +48,7 @@ ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::Clear() { markup_ = absl::nullopt; rtf_ = absl::nullopt; bookmark_title_ = absl::nullopt; - bitmap_ = absl::nullopt; + png_ = absl::nullopt; custom_format_ = absl::nullopt; custom_data_ = absl::nullopt; web_smart_paste_ = absl::nullopt; @@ -69,8 +71,8 @@ ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetFormat( base::FilePath("filename"))}); case ui::ClipboardInternalFormat::kBookmark: return SetBookmarkTitle("Bookmark Title"); - case ui::ClipboardInternalFormat::kBitmap: - return SetBitmap(gfx::test::CreateBitmap(10, 10)); + case ui::ClipboardInternalFormat::kPng: + return SetPng(gfx::test::CreatePNGBytes(10)); case ui::ClipboardInternalFormat::kCustom: return SetCustomData("Custom Format", "Custom Data"); case ui::ClipboardInternalFormat::kWeb: @@ -94,8 +96,8 @@ ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearFormat( return ClearFilenames(); case ui::ClipboardInternalFormat::kBookmark: return ClearBookmarkTitle(); - case ui::ClipboardInternalFormat::kBitmap: - return ClearBitmap(); + case ui::ClipboardInternalFormat::kPng: + return ClearPng(); case ui::ClipboardInternalFormat::kCustom: return ClearCustomData(); case ui::ClipboardInternalFormat::kWeb: @@ -171,14 +173,20 @@ ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearBookmarkTitle() { return *this; } -ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetBitmap( - const SkBitmap& bitmap) { - bitmap_ = bitmap; +ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetPng( + const scoped_refptr<base::RefCountedMemory>& png) { + std::vector<uint8_t> data(png->data(), png->data() + png->size()); + return SetPng(std::move(data)); +} + +ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::SetPng( + std::vector<uint8_t> png) { + png_ = std::move(png); return *this; } -ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearBitmap() { - bitmap_ = absl::nullopt; +ClipboardHistoryItemBuilder& ClipboardHistoryItemBuilder::ClearPng() { + png_ = absl::nullopt; return *this; } diff --git a/ash/clipboard/test_support/clipboard_history_item_builder.h b/ash/clipboard/test_support/clipboard_history_item_builder.h index 5a9ea88e43a2f..6665efee55a19 100644 --- a/ash/clipboard/test_support/clipboard_history_item_builder.h +++ b/ash/clipboard/test_support/clipboard_history_item_builder.h @@ -8,8 +8,8 @@ #include <string> #include "ash/ash_export.h" +#include "base/memory/ref_counted_memory.h" #include "third_party/abseil-cpp/absl/types/optional.h" -#include "third_party/skia/include/core/SkBitmap.h" #include "ui/base/clipboard/file_info.h" namespace ui { @@ -67,9 +67,11 @@ class ASH_EXPORT ClipboardHistoryItemBuilder { const std::string& bookmark_title); ClipboardHistoryItemBuilder& ClearBookmarkTitle(); - // Sets/clears `bitmap_` data. - ClipboardHistoryItemBuilder& SetBitmap(const SkBitmap& bitmap); - ClipboardHistoryItemBuilder& ClearBitmap(); + // Sets/clears `png_` data. + ClipboardHistoryItemBuilder& SetPng(std::vector<uint8_t> png); + ClipboardHistoryItemBuilder& SetPng( + const scoped_refptr<base::RefCountedMemory>& png); + ClipboardHistoryItemBuilder& ClearPng(); // Sets/clears `custom_format_` and `custom_data_` data. ClipboardHistoryItemBuilder& SetCustomData(const std::string& custom_format, @@ -93,7 +95,7 @@ class ASH_EXPORT ClipboardHistoryItemBuilder { absl::optional<std::string> rtf_; std::vector<ui::FileInfo> filenames_; absl::optional<std::string> bookmark_title_; - absl::optional<SkBitmap> bitmap_; + absl::optional<std::vector<uint8_t>> png_; absl::optional<std::string> custom_format_; absl::optional<std::string> custom_data_; absl::optional<bool> web_smart_paste_; diff --git a/ash/clipboard/views/clipboard_history_bitmap_item_view.cc b/ash/clipboard/views/clipboard_history_bitmap_item_view.cc index df18376f598cb..31cf4f7e6baeb 100644 --- a/ash/clipboard/views/clipboard_history_bitmap_item_view.cc +++ b/ash/clipboard/views/clipboard_history_bitmap_item_view.cc @@ -15,9 +15,11 @@ #include "base/time/time.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/base/models/image_model.h" #include "ui/compositor/layer.h" #include "ui/compositor/layer_animation_observer.h" #include "ui/compositor/scoped_layer_animation_settings.h" +#include "ui/gfx/image/image.h" #include "ui/gfx/image/image_skia.h" #include "ui/strings/grit/ui_strings.h" #include "ui/views/controls/image_view.h" @@ -235,11 +237,13 @@ class ClipboardHistoryBitmapItemView::BitmapContentsView clipboard_history_item, container_->resource_manager_, base::BindRepeating(&BitmapContentsView::UpdateImageViewSize, weak_ptr_factory_.GetWeakPtr())); - case ui::ClipboardInternalFormat::kBitmap: { + case ui::ClipboardInternalFormat::kPng: { auto image_view = std::make_unique<views::ImageView>(); - gfx::ImageSkia bitmap_image = gfx::ImageSkia::CreateFrom1xBitmap( - clipboard_history_item->data().bitmap()); - image_view->SetImage(bitmap_image); + gfx::Image image = gfx::Image::CreateFrom1xPNGBytes( + clipboard_history_item->data().png().data(), + clipboard_history_item->data().png().size()); + ui::ImageModel image_model = ui::ImageModel::FromImage(image); + image_view->SetImage(image_model); return image_view; } default: @@ -262,7 +266,7 @@ class ClipboardHistoryBitmapItemView::BitmapContentsView // should meet at least one edge of the contents bounds. float scaling_up_ratio = 0.f; switch (container_->data_format_) { - case ui::ClipboardInternalFormat::kBitmap: { + case ui::ClipboardInternalFormat::kPng: { scaling_up_ratio = std::fmin(width_ratio, height_ratio); break; } @@ -318,8 +322,8 @@ std::u16string ClipboardHistoryBitmapItemView::GetAccessibleName() const { switch (data_format_) { case ui::ClipboardInternalFormat::kHtml: return l10n_util::GetStringUTF16(IDS_CLIPBOARD_HISTORY_MENU_HTML_IMAGE); - case ui::ClipboardInternalFormat::kBitmap: - return l10n_util::GetStringUTF16(IDS_CLIPBOARD_HISTORY_MENU_BITMAP_IMAGE); + case ui::ClipboardInternalFormat::kPng: + return l10n_util::GetStringUTF16(IDS_CLIPBOARD_HISTORY_MENU_PNG_IMAGE); default: NOTREACHED(); return std::u16string(); diff --git a/content/browser/renderer_host/clipboard_host_impl.cc b/content/browser/renderer_host/clipboard_host_impl.cc index a65d7b5675e19..3981ffdd7c6c0 100644 --- a/content/browser/renderer_host/clipboard_host_impl.cc +++ b/content/browser/renderer_host/clipboard_host_impl.cc @@ -335,9 +335,8 @@ void ClipboardHostImpl::OnReadPng(ui::ClipboardBuffer clipboard_buffer, const std::vector<uint8_t>& data) { std::string string_data( reinterpret_cast<const char*>(data.data(), data.data() + data.size())); - // TODO(crbug.com/1201018): Create GetPngType() and use it here. PasteIfPolicyAllowed( - clipboard_buffer, ui::ClipboardFormatType::GetBitmapType(), + clipboard_buffer, ui::ClipboardFormatType::GetPngType(), std::move(string_data), base::BindOnce( [](std::vector<uint8_t> data, ReadPngCallback callback, diff --git a/ui/base/clipboard/BUILD.gn b/ui/base/clipboard/BUILD.gn index 86e7a85d7b7bc..42d2fb48145b0 100644 --- a/ui/base/clipboard/BUILD.gn +++ b/ui/base/clipboard/BUILD.gn @@ -211,6 +211,7 @@ source_set("clipboard_test_support") { "//build:chromecast_buildflags", "//build:chromeos_buildflags", "//ui/base:features", + "//ui/gfx", ] if (is_android) { diff --git a/ui/base/clipboard/clipboard_data.cc b/ui/base/clipboard/clipboard_data.cc index 0f93ad7484cc9..0bc1e93ec74e1 100644 --- a/ui/base/clipboard/clipboard_data.cc +++ b/ui/base/clipboard/clipboard_data.cc @@ -10,6 +10,7 @@ #include "base/notreached.h" #include "skia/ext/skia_utils_base.h" #include "ui/base/data_transfer_policy/data_transfer_endpoint.h" +#include "ui/gfx/codec/png_codec.h" #include "ui/gfx/skia_util.h" namespace ui { @@ -22,7 +23,7 @@ ClipboardData::ClipboardData(const ClipboardData& other) { markup_data_ = other.markup_data_; url_ = other.url_; rtf_data_ = other.rtf_data_; - bitmap_ = other.bitmap(); + png_ = other.png_; bookmark_title_ = other.bookmark_title_; bookmark_url_ = other.bookmark_url_; custom_data_format_ = other.custom_data_format_; @@ -48,7 +49,7 @@ bool ClipboardData::operator==(const ClipboardData& that) const { custom_data_data_ == that.custom_data_data() && web_smart_paste_ == that.web_smart_paste() && svg_data_ == that.svg_data() && filenames_ == that.filenames() && - gfx::BitmapsAreEqual(bitmap_, that.bitmap()) && + png_ == that.png() && (src_.get() ? (that.source() && *src_.get() == *that.source()) : !that.source()); } @@ -57,10 +58,22 @@ bool ClipboardData::operator!=(const ClipboardData& that) const { return !(*this == that); } +void ClipboardData::SetPngData(std::vector<uint8_t> png) { + png_ = std::move(png); + format_ |= static_cast<int>(ClipboardInternalFormat::kPng); +} + +SkBitmap ClipboardData::bitmap() const { + SkBitmap bitmap; + gfx::PNGCodec::Decode(png_.data(), png_.size(), &bitmap); + return bitmap; +} + void ClipboardData::SetBitmapData(const SkBitmap& bitmap) { DCHECK_EQ(bitmap.colorType(), kN32_SkColorType); - bitmap_ = bitmap; - format_ |= static_cast<int>(ClipboardInternalFormat::kBitmap); + gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, /*discard_transparency=*/false, + &png_); + format_ |= static_cast<int>(ClipboardInternalFormat::kPng); } void ClipboardData::SetCustomData(const std::string& data_format, diff --git a/ui/base/clipboard/clipboard_data.h b/ui/base/clipboard/clipboard_data.h index 5f7fef4e97a51..3f4a550655af8 100644 --- a/ui/base/clipboard/clipboard_data.h +++ b/ui/base/clipboard/clipboard_data.h @@ -24,7 +24,7 @@ enum class ClipboardInternalFormat { kSvg = 1 << 2, kRtf = 1 << 3, kBookmark = 1 << 4, - kBitmap = 1 << 5, + kPng = 1 << 5, kCustom = 1 << 6, kWeb = 1 << 7, kFilenames = 1 << 8, @@ -88,7 +88,12 @@ class COMPONENT_EXPORT(UI_BASE_CLIPBOARD) ClipboardData { format_ |= static_cast<int>(ClipboardInternalFormat::kBookmark); } - const SkBitmap& bitmap() const { return bitmap_; } + const std::vector<uint8_t>& png() const { return png_; } + void SetPngData(std::vector<uint8_t> png); + + // Bitmaps are stored as encoded bytes in the `png_` member. This means we + // cannot return a const reference, since the bitmap is created on request. + SkBitmap bitmap() const; void SetBitmapData(const SkBitmap& bitmap); const std::string& custom_data_format() const { return custom_data_format_; } @@ -130,8 +135,8 @@ class COMPONENT_EXPORT(UI_BASE_CLIPBOARD) ClipboardData { std::string bookmark_title_; std::string bookmark_url_; - // Bitmap images. - SkBitmap bitmap_; + // PNG image data. Bitmaps are encoded into and decoded from this member. + std::vector<uint8_t> png_; // Data with custom format. std::string custom_data_format_; diff --git a/ui/base/clipboard/clipboard_data_unittest.cc b/ui/base/clipboard/clipboard_data_unittest.cc index 627793fd3c1f4..35baa44f0d21f 100644 --- a/ui/base/clipboard/clipboard_data_unittest.cc +++ b/ui/base/clipboard/clipboard_data_unittest.cc @@ -9,13 +9,14 @@ #include "base/strings/string_piece_forward.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/data_transfer_policy/data_transfer_endpoint.h" +#include "ui/gfx/skia_util.h" #include "url/gurl.h" namespace ui { // Tests that two ClipboardData objects won't be equal if they don't have the // same bitmap. -TEST(ClipboardDataTest, BitMapTest) { +TEST(ClipboardDataTest, BitmapTest) { ClipboardData data1; SkBitmap test_bitmap; test_bitmap.allocN32Pixels(3, 2); @@ -43,4 +44,15 @@ TEST(ClipboardDataTest, DataSrcTest) { EXPECT_EQ(data1, data2); } +// Tests that encoding/decoding bitmaps as PNG bytes works as intended. +TEST(ClipboardDataTest, BitmapAsBytesTest) { + ClipboardData data1; + SkBitmap test_bitmap; + test_bitmap.allocN32Pixels(3, 2); + test_bitmap.eraseARGB(255, 0, 255, 0); + EXPECT_FALSE(gfx::BitmapsAreEqual(data1.bitmap(), test_bitmap)); + data1.SetBitmapData(test_bitmap); + EXPECT_TRUE(gfx::BitmapsAreEqual(data1.bitmap(), test_bitmap)); +} + } // namespace ui \ No newline at end of file diff --git a/ui/base/clipboard/clipboard_format_type.h b/ui/base/clipboard/clipboard_format_type.h index 210343f308418..0345196491811 100644 --- a/ui/base/clipboard/clipboard_format_type.h +++ b/ui/base/clipboard/clipboard_format_type.h @@ -62,6 +62,8 @@ class COMPONENT_EXPORT(UI_BASE_CLIPBOARD_TYPES) ClipboardFormatType { static const ClipboardFormatType& GetHtmlType(); static const ClipboardFormatType& GetSvgType(); static const ClipboardFormatType& GetRtfType(); + static const ClipboardFormatType& GetPngType(); + // TODO(crbug.com/1201018): Remove this type. static const ClipboardFormatType& GetBitmapType(); static const ClipboardFormatType& GetWebCustomDataType(); @@ -83,9 +85,6 @@ class COMPONENT_EXPORT(UI_BASE_CLIPBOARD_TYPES) ClipboardFormatType { static const ClipboardFormatType& GetFilenameType(); static const ClipboardFormatType& GetIDListType(); static const ClipboardFormatType& GetMozUrlType(); - - // Specific image types that handle transparency on Windows. - static const ClipboardFormatType& GetPNGType(); #endif // ClipboardFormatType can be used in a set on some platforms. diff --git a/ui/base/clipboard/clipboard_format_type_android.cc b/ui/base/clipboard/clipboard_format_type_android.cc index 2e1b66e0fbbd9..ded6f0c1d1a2c 100644 --- a/ui/base/clipboard/clipboard_format_type_android.cc +++ b/ui/base/clipboard/clipboard_format_type_android.cc @@ -90,11 +90,16 @@ const ClipboardFormatType& ClipboardFormatType::GetRtfType() { } // static -const ClipboardFormatType& ClipboardFormatType::GetBitmapType() { +const ClipboardFormatType& ClipboardFormatType::GetPngType() { static base::NoDestructor<ClipboardFormatType> type(kMimeTypePNG); return *type; } +// static +const ClipboardFormatType& ClipboardFormatType::GetBitmapType() { + return ClipboardFormatType::GetPngType(); +} + // static const ClipboardFormatType& ClipboardFormatType::GetWebCustomDataType() { static base::NoDestructor<ClipboardFormatType> type(kMimeTypeWebCustomData); diff --git a/ui/base/clipboard/clipboard_format_type_aura.cc b/ui/base/clipboard/clipboard_format_type_aura.cc index 0e182341f4989..a47fd9ae24601 100644 --- a/ui/base/clipboard/clipboard_format_type_aura.cc +++ b/ui/base/clipboard/clipboard_format_type_aura.cc @@ -86,11 +86,16 @@ const ClipboardFormatType& ClipboardFormatType::GetRtfType() { } // static -const ClipboardFormatType& ClipboardFormatType::GetBitmapType() { +const ClipboardFormatType& ClipboardFormatType::GetPngType() { static base::NoDestructor<ClipboardFormatType> type(kMimeTypePNG); return *type; } +// static +const ClipboardFormatType& ClipboardFormatType::GetBitmapType() { + return ClipboardFormatType::GetPngType(); +} + // static const ClipboardFormatType& ClipboardFormatType::GetWebKitSmartPasteType() { static base::NoDestructor<ClipboardFormatType> type( diff --git a/ui/base/clipboard/clipboard_format_type_mac.mm b/ui/base/clipboard/clipboard_format_type_mac.mm index c87c9bc4cb62c..719582aa1da4c 100644 --- a/ui/base/clipboard/clipboard_format_type_mac.mm +++ b/ui/base/clipboard/clipboard_format_type_mac.mm @@ -98,6 +98,12 @@ const ClipboardFormatType& ClipboardFormatType::GetRtfType() { return *type; } +// static +const ClipboardFormatType& ClipboardFormatType::GetPngType() { + static base::NoDestructor<ClipboardFormatType> type(NSPasteboardTypePNG); + return *type; +} + // static const ClipboardFormatType& ClipboardFormatType::GetBitmapType() { static base::NoDestructor<ClipboardFormatType> type(NSTIFFPboardType); diff --git a/ui/base/clipboard/clipboard_format_type_win.cc b/ui/base/clipboard/clipboard_format_type_win.cc index 8486fc41b5449..8834346f7aedf 100644 --- a/ui/base/clipboard/clipboard_format_type_win.cc +++ b/ui/base/clipboard/clipboard_format_type_win.cc @@ -211,6 +211,13 @@ const ClipboardFormatType& ClipboardFormatType::GetRtfType() { return *format; } +// static +const ClipboardFormatType& ClipboardFormatType::GetPngType() { + static base::NoDestructor<ClipboardFormatType> format( + ::RegisterClipboardFormat(L"PNG")); + return *format; +} + // static const ClipboardFormatType& ClipboardFormatType::GetBitmapType() { static base::NoDestructor<ClipboardFormatType> format(CF_DIBV5); @@ -340,11 +347,4 @@ const ClipboardFormatType& ClipboardFormatType::GetWebCustomDataType() { return *format; } -// static -const ClipboardFormatType& ClipboardFormatType::GetPNGType() { - static base::NoDestructor<ClipboardFormatType> format( - ::RegisterClipboardFormat(L"PNG")); - return *format; -} - } // namespace ui diff --git a/ui/base/clipboard/clipboard_non_backed.cc b/ui/base/clipboard/clipboard_non_backed.cc index 10a78445f78a5..3cacd71de8140 100644 --- a/ui/base/clipboard/clipboard_non_backed.cc +++ b/ui/base/clipboard/clipboard_non_backed.cc @@ -183,7 +183,7 @@ class ClipboardInternal { // Reads image from the ClipboardData. SkBitmap ReadImage() const { SkBitmap img; - if (!HasFormat(ClipboardInternalFormat::kBitmap)) + if (!HasFormat(ClipboardInternalFormat::kPng)) return img; // A shallow copy should be fine here, but just to be safe... @@ -435,9 +435,10 @@ bool ClipboardNonBacked::IsFormatAvailable( if (format == ClipboardFormatType::GetRtfType()) return clipboard_internal_->IsFormatAvailable( ClipboardInternalFormat::kRtf); - if (format == ClipboardFormatType::GetBitmapType()) + if (format == ClipboardFormatType::GetPngType() || + format == ClipboardFormatType::GetBitmapType()) return clipboard_internal_->IsFormatAvailable( - ClipboardInternalFormat::kBitmap); + ClipboardInternalFormat::kPng); if (format == ClipboardFormatType::GetWebKitSmartPasteType()) return clipboard_internal_->IsFormatAvailable( ClipboardInternalFormat::kWeb); diff --git a/ui/base/clipboard/clipboard_win.cc b/ui/base/clipboard/clipboard_win.cc index d1f10922b82e4..868de231d1021 100644 --- a/ui/base/clipboard/clipboard_win.cc +++ b/ui/base/clipboard/clipboard_win.cc @@ -779,7 +779,7 @@ void ClipboardWin::WriteBitmap(const SkBitmap& bitmap) { &png_encoded_bitmap)) { HGLOBAL png_hglobal = skia::CreateHGlobalForByteArray(png_encoded_bitmap); if (png_hglobal) - WriteToClipboard(ClipboardFormatType::GetPNGType(), png_hglobal); + WriteToClipboard(ClipboardFormatType::GetPngType(), png_hglobal); } HGLOBAL dibv5_hglobal = skia::CreateDIBV5ImageDataFromN32SkBitmap(bitmap); if (dibv5_hglobal) diff --git a/ui/strings/ui_strings.grd b/ui/strings/ui_strings.grd index 1613ffe6de351..32b38281c6f5c 100644 --- a/ui/strings/ui_strings.grd +++ b/ui/strings/ui_strings.grd @@ -1074,7 +1074,7 @@ need to be translated for each locale.--> </message> <!-- Clipboard history menu --> - <message name="IDS_CLIPBOARD_HISTORY_MENU_BITMAP_IMAGE" desc="Accessibility text for the bitmap image shown on the clipboard history menu"> + <message name="IDS_CLIPBOARD_HISTORY_MENU_PNG_IMAGE" desc="Accessibility text for the PNG image shown on the clipboard history menu"> Image. </message> <message name="IDS_CLIPBOARD_HISTORY_MENU_HTML_IMAGE" desc="Accessibility text for the HTML-rendered image shown on the clipboard history menu"> diff --git a/ui/strings/ui_strings_grd/IDS_CLIPBOARD_HISTORY_MENU_BITMAP_IMAGE.png.sha1 b/ui/strings/ui_strings_grd/IDS_CLIPBOARD_HISTORY_MENU_PNG_IMAGE.png.sha1 similarity index 100% rename from ui/strings/ui_strings_grd/IDS_CLIPBOARD_HISTORY_MENU_BITMAP_IMAGE.png.sha1 rename to ui/strings/ui_strings_grd/IDS_CLIPBOARD_HISTORY_MENU_PNG_IMAGE.png.sha1