Commit 553c38ae authored by danakj's avatar danakj Committed by Commit Bot

Drop extensions use of legacy IPC serialization for SkBitmap, use mojo

This converts to using the skia::mojom::Bitmap serialize functions to
turn an SkBitmap into a string and back for putting into a base::Value
and sending over IPC.

TBR=senorblanco

Bug: 1144462
Change-Id: I10f28bff10aed703e59c500e7f4668f557b51785
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2521203
Commit-Queue: danakj <danakj@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#825007}
parent d527c3b4
......@@ -12,6 +12,7 @@ specific_include_rules = {
"+chrome/browser/ui/views/frame",
"+components/captive_portal",
"+components/web_package/test_support",
"+skia/public/mojom/bitmap.mojom.h",
],
"tls_socket_unittest\.cc": [
"+services/network/network_context.h",
......
......@@ -24,12 +24,11 @@
#include "extensions/common/extension.h"
#include "extensions/common/extension_builder.h"
#include "extensions/common/value_builder.h"
#include "ipc/ipc_message_utils.h"
#include "skia/public/mojom/bitmap.mojom.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/gfx/image/image.h"
#include "ui/gfx/ipc/skia/gfx_skia_param_traits.h"
namespace extensions {
namespace {
......@@ -220,12 +219,8 @@ TEST(DeclarativeContentActionTest, SetIcon) {
EXPECT_TRUE(bitmap.tryAllocN32Pixels(19, 19));
// Fill the bitmap with red pixels.
bitmap.eraseARGB(255, 255, 0, 0);
IPC::Message bitmap_pickle;
IPC::WriteParam(&bitmap_pickle, bitmap);
std::string binary_data = std::string(
static_cast<const char*>(bitmap_pickle.data()), bitmap_pickle.size());
std::string data64;
base::Base64Encode(binary_data, &data64);
std::string data64 =
base::Base64Encode(skia::mojom::Bitmap::Serialize(&bitmap));
std::unique_ptr<base::DictionaryValue> dict =
DictionaryBuilder()
......@@ -283,12 +278,8 @@ TEST(DeclarativeContentActionTest, SetInvisibleIcon) {
uint32_t* pixels = bitmap.getAddr32(0, 0);
// Set a single pixel, which isn't enough to consider the icon visible.
pixels[0] = SkColorSetARGB(255, 255, 0, 0);
IPC::Message bitmap_pickle;
IPC::WriteParam(&bitmap_pickle, bitmap);
std::string binary_data = std::string(
static_cast<const char*>(bitmap_pickle.data()), bitmap_pickle.size());
std::string data64;
base::Base64Encode(binary_data, &data64);
std::string data64 =
base::Base64Encode(skia::mojom::Bitmap::Serialize(&bitmap));
std::unique_ptr<base::DictionaryValue> dict =
DictionaryBuilder()
......
......@@ -18,6 +18,7 @@ include_rules = [
"+extensions/test",
"+mojo/public",
"+services/service_manager/public",
"+skia/public/mojom",
"+testing",
"+third_party/blink/public/common/loader/url_loader_throttle.h",
"+third_party/skia/include",
......
......@@ -17,8 +17,7 @@
#include "extensions/common/extension_icon_set.h"
#include "extensions/common/manifest_handlers/icons_handler.h"
#include "extensions/grit/extensions_browser_resources.h"
#include "ipc/ipc_message.h"
#include "ipc/ipc_message_utils.h"
#include "skia/public/mojom/bitmap.mojom.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkPaint.h"
......@@ -32,7 +31,6 @@
#include "ui/gfx/image/image.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/image/image_skia_source.h"
#include "ui/gfx/ipc/skia/gfx_skia_param_traits.h"
#include "ui/gfx/skbitmap_operations.h"
#include "url/gurl.h"
......@@ -123,23 +121,23 @@ ExtensionAction::IconParseResult ExtensionAction::ParseIconFromCanvasDictionary(
gfx::ImageSkia* icon) {
for (base::DictionaryValue::Iterator iter(dict); !iter.IsAtEnd();
iter.Advance()) {
std::string binary_string64;
IPC::Message pickle;
std::string byte_string;
std::string base64_string;
const void* bytes = nullptr;
size_t num_bytes = 0;
if (iter.value().is_blob()) {
pickle = IPC::Message(
reinterpret_cast<const char*>(iter.value().GetBlob().data()),
iter.value().GetBlob().size());
} else if (iter.value().GetAsString(&binary_string64)) {
std::string binary_string;
if (!base::Base64Decode(binary_string64, &binary_string))
bytes = iter.value().GetBlob().data();
num_bytes = iter.value().GetBlob().size();
} else if (iter.value().GetAsString(&base64_string)) {
if (!base::Base64Decode(base64_string, &byte_string))
return IconParseResult::kDecodeFailure;
pickle = IPC::Message(binary_string.c_str(), binary_string.length());
bytes = byte_string.c_str();
num_bytes = byte_string.length();
} else {
continue;
}
base::PickleIterator pickle_iter(pickle);
SkBitmap bitmap;
if (!IPC::ReadParam(&pickle, &pickle_iter, &bitmap))
if (!skia::mojom::Bitmap::Deserialize(bytes, num_bytes, &bitmap))
return IconParseResult::kUnpickleFailure;
CHECK(!bitmap.isNull());
......
......@@ -8,8 +8,6 @@
#include <tuple>
#include <vector>
#include "ui/gfx/ipc/skia/gfx_skia_param_traits.h"
class SkBitmap;
namespace base {
......
......@@ -13,10 +13,9 @@
#include "base/bind.h"
#include "base/macros.h"
#include "base/strings/string_number_conversions.h"
#include "content/public/common/common_param_traits.h"
#include "extensions/renderer/script_context.h"
#include "gin/data_object_builder.h"
#include "ipc/ipc_message_utils.h"
#include "skia/public/mojom/bitmap.mojom.h"
#include "third_party/blink/public/web/web_array_buffer_converter.h"
#include "third_party/skia/include/core/SkBitmap.h"
......@@ -144,11 +143,9 @@ bool SetIconNatives::ConvertImageDataToBitmapValue(
}
// Construct the Value object.
IPC::Message bitmap_pickle;
IPC::WriteParam(&bitmap_pickle, bitmap);
blink::WebArrayBuffer buffer =
blink::WebArrayBuffer::Create(bitmap_pickle.size(), 1);
memcpy(buffer.Data(), bitmap_pickle.data(), bitmap_pickle.size());
std::vector<uint8_t> s = skia::mojom::Bitmap::Serialize(&bitmap);
blink::WebArrayBuffer buffer = blink::WebArrayBuffer::Create(s.size(), 1);
memcpy(buffer.Data(), s.data(), s.size());
*image_data_bitmap = blink::WebArrayBufferConverter::ToV8Value(
&buffer, context()->v8_context()->Global(), isolate);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment