Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Unified Diff: content/browser/devtools/renderer_overrides_handler.cc

Issue 311313003: DevTools: Fix for Page.captureScreenshot (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added test Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/devtools/renderer_overrides_handler.cc
diff --git a/content/browser/devtools/renderer_overrides_handler.cc b/content/browser/devtools/renderer_overrides_handler.cc
index 7370275cd4500142046b9af6a0d1fdef08f2d8a6..4b8ea1e322a95ed95af5b6b6d861f9aa7b163a2a 100644
--- a/content/browser/devtools/renderer_overrides_handler.cc
+++ b/content/browser/devtools/renderer_overrides_handler.cc
@@ -263,20 +263,6 @@ void RendererOverridesHandler::ParseCaptureParameters(
*scale = 5;
}
-base::DictionaryValue* RendererOverridesHandler::CreateScreenshotResponse(
- const std::vector<unsigned char>& png_data) {
- std::string base_64_data;
- base::Base64Encode(
- base::StringPiece(reinterpret_cast<const char*>(&png_data[0]),
- png_data.size()),
- &base_64_data);
-
- base::DictionaryValue* response = new base::DictionaryValue();
- response->SetString(
- devtools::Page::captureScreenshot::kResponseData, base_64_data);
- return response;
-}
-
// DOM agent handlers --------------------------------------------------------
scoped_refptr<DevToolsProtocol::Response>
@@ -470,43 +456,37 @@ RendererOverridesHandler::PageNavigateToHistoryEntry(
scoped_refptr<DevToolsProtocol::Response>
RendererOverridesHandler::PageCaptureScreenshot(
scoped_refptr<DevToolsProtocol::Command> command) {
- RenderViewHost* host = agent_->GetRenderViewHost();
+ RenderViewHostImpl* host = static_cast<RenderViewHostImpl*>(
+ agent_->GetRenderViewHost());
if (!host->GetView())
return command->InternalErrorResponse("Unable to access the view");
- gfx::Rect view_bounds = host->GetView()->GetViewBounds();
- gfx::Rect snapshot_bounds(view_bounds.size());
- gfx::Size snapshot_size = snapshot_bounds.size();
-
- std::vector<unsigned char> png_data;
- if (ui::GrabViewSnapshot(host->GetView()->GetNativeView(),
- &png_data,
- snapshot_bounds)) {
- if (png_data.size())
- return command->SuccessResponse(CreateScreenshotResponse(png_data));
- else
- return command->InternalErrorResponse("Unable to capture screenshot");
- }
-
- ui::GrabViewSnapshotAsync(
- host->GetView()->GetNativeView(),
- snapshot_bounds,
- base::ThreadTaskRunnerHandle::Get(),
+ host->GetSnapshotFromBrowser(
base::Bind(&RendererOverridesHandler::ScreenshotCaptured,
- weak_factory_.GetWeakPtr(), command));
+ weak_factory_.GetWeakPtr(), command));
return command->AsyncResponsePromise();
}
void RendererOverridesHandler::ScreenshotCaptured(
scoped_refptr<DevToolsProtocol::Command> command,
- scoped_refptr<base::RefCountedBytes> png_data) {
- if (png_data) {
- SendAsyncResponse(
- command->SuccessResponse(CreateScreenshotResponse(png_data->data())));
- } else {
+ const unsigned char* png_data,
+ size_t png_size) {
+ if (!png_data || !png_size) {
SendAsyncResponse(
command->InternalErrorResponse("Unable to capture screenshot"));
+ return;
}
+
+ std::string base_64_data;
+ base::Base64Encode(
+ base::StringPiece(reinterpret_cast<const char*>(png_data), png_size),
+ &base_64_data);
+
+ base::DictionaryValue* response = new base::DictionaryValue();
+ response->SetString(devtools::Page::screencastFrame::kParamData,
+ base_64_data);
+
+ SendAsyncResponse(command->SuccessResponse(response));
}
scoped_refptr<DevToolsProtocol::Response>

Powered by Google App Engine
This is Rietveld 408576698