Chromium Code Reviews| Index: content/browser/devtools/protocol/page_handler.cc |
| diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc |
| index c31a27ecd24d5e9ce7fe1173af498aea53808243..6d301b9b70e3ef3129b34e29e76811c2184a6e48 100644 |
| --- a/content/browser/devtools/protocol/page_handler.cc |
| +++ b/content/browser/devtools/protocol/page_handler.cc |
| @@ -4,7 +4,11 @@ |
| #include "content/browser/devtools/protocol/page_handler.h" |
| +#include <algorithm> |
| +#include <memory> |
| #include <string> |
| +#include <utility> |
| +#include <vector> |
| #include "base/base64.h" |
| #include "base/bind.h" |
| @@ -41,6 +45,7 @@ |
| #include "ui/gfx/geometry/size_conversions.h" |
| #include "ui/gfx/image/image.h" |
| #include "ui/gfx/image/image_util.h" |
| +#include "ui/gfx/switches.h" |
| #include "ui/snapshot/snapshot.h" |
| #include "url/gurl.h" |
| @@ -284,6 +289,7 @@ Response PageHandler::NavigateToHistoryEntry(int entry_id) { |
| void PageHandler::CaptureScreenshot( |
| Maybe<std::string> format, |
| Maybe<int> quality, |
| + Maybe<bool> from_surface, |
| std::unique_ptr<CaptureScreenshotCallback> callback) { |
| if (!host_ || !host_->GetRenderWidgetHost()) { |
| callback->sendFailure(Response::InternalError()); |
| @@ -292,7 +298,15 @@ void PageHandler::CaptureScreenshot( |
| std::string screenshot_format = format.fromMaybe(kPng); |
| int screenshot_quality = quality.fromMaybe(kDefaultScreenshotQuality); |
| + bool screenshot_from_surface = from_surface.fromMaybe(false); |
| + if (screenshot_from_surface) { |
| + host_->GetRenderWidgetHost()->GetSurfaceSnapshotFromBrowser(base::Bind( |
| + &PageHandler::ScreenshotFromSurfaceCaptured, weak_factory_.GetWeakPtr(), |
| + base::Passed(std::move(callback)), screenshot_format, |
| + screenshot_quality)); |
| + return; |
| + } |
| host_->GetRenderWidgetHost()->GetSnapshotFromBrowser( |
| base::Bind(&PageHandler::ScreenshotCaptured, weak_factory_.GetWeakPtr(), |
| base::Passed(std::move(callback)), screenshot_format, |
| @@ -581,6 +595,31 @@ void PageHandler::ScreenshotCaptured( |
| callback->sendSuccess(EncodeImage(image, format, quality)); |
| } |
| +void PageHandler::ScreenshotFromSurfaceCaptured( |
| + std::unique_ptr<CaptureScreenshotCallback> callback, |
| + const std::string& format, |
| + int quality, |
| + const SkBitmap& bitmap) { |
| + if (bitmap.drawsNothing()) { |
| + callback->sendFailure(Response::Error("Unable to capture screenshot")); |
| + return; |
| + } |
| + |
| + base::PostTaskAndReplyWithResult( |
| + FROM_HERE, |
| + base::Bind(&EncodeImage, gfx::Image::CreateFrom1xBitmap(bitmap), format, |
| + quality), |
| + base::Bind(&PageHandler::ScreenshotFromSurfaceEncoded, |
|
dgozman
2017/03/08 19:21:36
You can bind directly to callback:
base::Bind(&Ca
dvallet
2017/03/09 06:19:47
Done.
|
| + weak_factory_.GetWeakPtr(), |
| + base::Passed(std::move(callback)))); |
| +} |
| + |
| +void PageHandler::ScreenshotFromSurfaceEncoded( |
| + std::unique_ptr<CaptureScreenshotCallback> callback, |
| + const std::string& data) { |
| + callback->sendSuccess(data); |
| +} |
| + |
| void PageHandler::OnColorPicked(int r, int g, int b, int a) { |
| frontend_->ColorPicked( |
| DOM::RGBA::Create().SetR(r).SetG(g).SetB(b).SetA(a).Build()); |