| Index: chrome/renderer/chrome_render_frame_observer.cc
|
| diff --git a/chrome/renderer/chrome_render_frame_observer.cc b/chrome/renderer/chrome_render_frame_observer.cc
|
| index 729e75b33b0d1226356cf5c05b26a404246f02d2..5a6c6b8d864ca5b454656e6df52ae1e37cf14b62 100644
|
| --- a/chrome/renderer/chrome_render_frame_observer.cc
|
| +++ b/chrome/renderer/chrome_render_frame_observer.cc
|
| @@ -28,6 +28,7 @@
|
| #include "content/public/renderer/render_view.h"
|
| #include "extensions/common/constants.h"
|
| #include "printing/features/features.h"
|
| +#include "services/service_manager/public/cpp/interface_registry.h"
|
| #include "skia/ext/image_operations.h"
|
| #include "third_party/WebKit/public/platform/WebImage.h"
|
| #include "third_party/WebKit/public/platform/WebURLRequest.h"
|
| @@ -123,6 +124,10 @@ ChromeRenderFrameObserver::ChromeRenderFrameObserver(
|
| translate_helper_ = new translate::TranslateHelper(
|
| render_frame, chrome::ISOLATED_WORLD_ID_TRANSLATE,
|
| extensions::kExtensionScheme);
|
| +
|
| + render_frame->GetInterfaceRegistry()->AddInterface(
|
| + base::Bind(&ChromeRenderFrameObserver::OnThumbnailCapturerRequest,
|
| + base::Unretained(this)));
|
| }
|
|
|
| ChromeRenderFrameObserver::~ChromeRenderFrameObserver() {
|
| @@ -141,8 +146,6 @@ bool ChromeRenderFrameObserver::OnMessageReceived(const IPC::Message& message) {
|
| IPC_BEGIN_MESSAGE_MAP(ChromeRenderFrameObserver, message)
|
| IPC_MESSAGE_HANDLER(ChromeViewMsg_RequestReloadImageForContextNode,
|
| OnRequestReloadImageForContextNode)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_RequestThumbnailForContextNode,
|
| - OnRequestThumbnailForContextNode)
|
| IPC_MESSAGE_HANDLER(ChromeViewMsg_SetClientSidePhishingDetection,
|
| OnSetClientSidePhishingDetection)
|
| #if BUILDFLAG(ENABLE_PRINTING)
|
| @@ -181,19 +184,23 @@ void ChromeRenderFrameObserver::OnRequestReloadImageForContextNode() {
|
| }
|
| }
|
|
|
| -void ChromeRenderFrameObserver::OnRequestThumbnailForContextNode(
|
| - int thumbnail_min_area_pixels,
|
| +void ChromeRenderFrameObserver::OnThumbnailCapturerRequest(
|
| + chrome::mojom::ThumbnailCapturerRequest request) {
|
| + thumbnail_capturer_bindings_.AddBinding(this, std::move(request));
|
| +}
|
| +
|
| +void ChromeRenderFrameObserver::RequestThumbnailForContextNode(
|
| + int32_t thumbnail_min_area_pixels,
|
| const gfx::Size& thumbnail_max_size_pixels,
|
| - int callback_id) {
|
| + const RequestThumbnailForContextNodeCallback& callback) {
|
| WebNode context_node = render_frame()->GetWebFrame()->contextMenuNode();
|
| SkBitmap thumbnail;
|
| gfx::Size original_size;
|
| if (!context_node.isNull() && context_node.isElementNode()) {
|
| blink::WebImage image = context_node.to<WebElement>().imageContents();
|
| original_size = image.size();
|
| - thumbnail = Downscale(image,
|
| - thumbnail_min_area_pixels,
|
| - thumbnail_max_size_pixels);
|
| + thumbnail =
|
| + Downscale(image, thumbnail_min_area_pixels, thumbnail_max_size_pixels);
|
| }
|
|
|
| SkBitmap bitmap;
|
| @@ -210,12 +217,12 @@ void ChromeRenderFrameObserver::OnRequestThumbnailForContextNode(
|
| if (gfx::JPEGCodec::Encode(
|
| reinterpret_cast<unsigned char*>(bitmap.getAddr32(0, 0)),
|
| gfx::JPEGCodec::FORMAT_SkBitmap, bitmap.width(), bitmap.height(),
|
| - static_cast<int>(bitmap.rowBytes()), kDefaultQuality, &data))
|
| + static_cast<int>(bitmap.rowBytes()), kDefaultQuality, &data)) {
|
| thumbnail_data = std::string(data.begin(), data.end());
|
| + }
|
| }
|
|
|
| - Send(new ChromeViewHostMsg_RequestThumbnailForContextNode_ACK(
|
| - routing_id(), thumbnail_data, original_size, callback_id));
|
| + callback.Run(thumbnail_data, original_size);
|
| }
|
|
|
| void ChromeRenderFrameObserver::OnPrintNodeUnderContextMenu() {
|
|
|