Chromium Code Reviews| 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 84e6db4c7a7f3de60cb7a5bc16f971f6fede195d..9c106d552ee0d52bd5e2fe65029208a4b45f8ed9 100644 |
| --- a/chrome/renderer/chrome_render_frame_observer.cc |
| +++ b/chrome/renderer/chrome_render_frame_observer.cc |
| @@ -116,6 +116,9 @@ ChromeRenderFrameObserver::ChromeRenderFrameObserver( |
| render_frame->GetInterfaceRegistry()->AddInterface( |
| base::Bind(&ChromeRenderFrameObserver::OnImageContextMenuRendererRequest, |
| base::Unretained(this))); |
| + render_frame->GetInterfaceRegistry()->AddInterface( |
| + base::Bind(&ChromeRenderFrameObserver::OnThumbnailCapturerRequest, |
| + base::Unretained(this))); |
| // Don't do anything else for subframes. |
| if (!render_frame->IsMainFrame()) |
| @@ -149,8 +152,6 @@ bool ChromeRenderFrameObserver::OnMessageReceived(const IPC::Message& message) { |
| // tab_android.cc's use is converted to Mojo. |
| IPC_MESSAGE_HANDLER(ChromeViewMsg_RequestReloadImageForContextNode, |
| RequestReloadImageForContextNode) |
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_RequestThumbnailForContextNode, |
| - OnRequestThumbnailForContextNode) |
| IPC_MESSAGE_HANDLER(ChromeViewMsg_SetClientSidePhishingDetection, |
| OnSetClientSidePhishingDetection) |
| #if BUILDFLAG(ENABLE_PRINTING) |
| @@ -189,19 +190,18 @@ void ChromeRenderFrameObserver::RequestReloadImageForContextNode() { |
| } |
| } |
| -void ChromeRenderFrameObserver::OnRequestThumbnailForContextNode( |
| - int thumbnail_min_area_pixels, |
| +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,7 +210,7 @@ void ChromeRenderFrameObserver::OnRequestThumbnailForContextNode( |
| else |
| thumbnail.copyTo(&bitmap, kN32_SkColorType); |
| - std::string thumbnail_data; |
| + std::vector<uint8_t> thumbnail_data; |
| SkAutoLockPixels lock(bitmap); |
| if (bitmap.getPixels()) { |
| const int kDefaultQuality = 90; |
| @@ -218,12 +218,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)) |
| - thumbnail_data = std::string(data.begin(), data.end()); |
| + static_cast<int>(bitmap.rowBytes()), kDefaultQuality, &data)) { |
| + std::swap(thumbnail_data, data); |
|
dcheng
2017/03/13 07:49:29
The standard mechanism for using swap is:
using s
watk
2017/03/13 23:34:04
Ah thanks, I wasn't aware. I just like how the non
|
| + } |
| } |
| - Send(new ChromeViewHostMsg_RequestThumbnailForContextNode_ACK( |
| - routing_id(), thumbnail_data, original_size, callback_id)); |
| + callback.Run(thumbnail_data, original_size); |
| } |
| void ChromeRenderFrameObserver::OnPrintNodeUnderContextMenu() { |
| @@ -360,3 +360,8 @@ void ChromeRenderFrameObserver::OnImageContextMenuRendererRequest( |
| chrome::mojom::ImageContextMenuRendererRequest request) { |
| image_context_menu_renderer_bindings_.AddBinding(this, std::move(request)); |
| } |
| + |
| +void ChromeRenderFrameObserver::OnThumbnailCapturerRequest( |
| + chrome::mojom::ThumbnailCapturerRequest request) { |
| + thumbnail_capturer_bindings_.AddBinding(this, std::move(request)); |
| +} |