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

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

Issue 343033002: Revert 278472 "DevTools: Fix for Page.captureScreenshot" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: 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: trunk/src/content/browser/devtools/renderer_overrides_handler.cc
===================================================================
--- trunk/src/content/browser/devtools/renderer_overrides_handler.cc (revision 278497)
+++ trunk/src/content/browser/devtools/renderer_overrides_handler.cc (working copy)
@@ -263,6 +263,20 @@
*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>
@@ -456,37 +470,43 @@
scoped_refptr<DevToolsProtocol::Response>
RendererOverridesHandler::PageCaptureScreenshot(
scoped_refptr<DevToolsProtocol::Command> command) {
- RenderViewHostImpl* host = static_cast<RenderViewHostImpl*>(
- agent_->GetRenderViewHost());
+ RenderViewHost* host = agent_->GetRenderViewHost();
if (!host->GetView())
return command->InternalErrorResponse("Unable to access the view");
- host->GetSnapshotFromBrowser(
+ 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(),
base::Bind(&RendererOverridesHandler::ScreenshotCaptured,
- weak_factory_.GetWeakPtr(), command));
+ weak_factory_.GetWeakPtr(), command));
return command->AsyncResponsePromise();
}
void RendererOverridesHandler::ScreenshotCaptured(
scoped_refptr<DevToolsProtocol::Command> command,
- const unsigned char* png_data,
- size_t png_size) {
- if (!png_data || !png_size) {
+ scoped_refptr<base::RefCountedBytes> png_data) {
+ if (png_data) {
SendAsyncResponse(
+ command->SuccessResponse(CreateScreenshotResponse(png_data->data())));
+ } else {
+ 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