| 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 99e6ad202a1efb4789b6456a895c77c7e91c8cf4..f3f31fa3f47e31343fc97ef643923f836c464c88 100644
|
| --- a/content/browser/devtools/protocol/page_handler.cc
|
| +++ b/content/browser/devtools/protocol/page_handler.cc
|
| @@ -51,9 +51,9 @@ static int kFrameRetryDelayMs = 100;
|
| static int kCaptureRetryLimit = 2;
|
| static int kMaxScreencastFramesInFlight = 2;
|
|
|
| -std::string EncodeScreencastFrame(const SkBitmap& bitmap,
|
| - const std::string& format,
|
| - int quality) {
|
| +std::string EncodeBitmap(const SkBitmap& bitmap,
|
| + const std::string& format,
|
| + int quality) {
|
| std::vector<unsigned char> data;
|
| SkAutoLockPixels lock_image(bitmap);
|
| bool encoded;
|
| @@ -277,15 +277,21 @@ Response PageHandler::NavigateToHistoryEntry(int entry_id) {
|
| }
|
|
|
| void PageHandler::CaptureScreenshot(
|
| + Maybe<std::string> format,
|
| + Maybe<int> quality,
|
| std::unique_ptr<CaptureScreenshotCallback> callback) {
|
| if (!host_ || !host_->GetRenderWidgetHost()) {
|
| callback->sendFailure(Response::InternalError());
|
| return;
|
| }
|
|
|
| + std::string screenshot_format = format.fromMaybe(kPng);
|
| + int screenshot_quality = quality.fromMaybe(kDefaultScreenshotQuality);
|
| +
|
| host_->GetRenderWidgetHost()->GetSnapshotFromBrowser(
|
| - base::Bind(&PageHandler::ScreenshotCaptured,
|
| - weak_factory_.GetWeakPtr(), base::Passed(std::move(callback))));
|
| + base::Bind(&PageHandler::ScreenshotCaptured, weak_factory_.GetWeakPtr(),
|
| + base::Passed(std::move(callback)), screenshot_format,
|
| + screenshot_quality));
|
| }
|
|
|
| Response PageHandler::StartScreencast(Maybe<std::string> format,
|
| @@ -510,7 +516,7 @@ void PageHandler::ScreencastFrameCaptured(cc::CompositorFrameMetadata metadata,
|
| }
|
| base::PostTaskAndReplyWithResult(
|
| base::WorkerPool::GetTaskRunner(true).get(), FROM_HERE,
|
| - base::Bind(&EncodeScreencastFrame, bitmap, screencast_format_,
|
| + base::Bind(&EncodeBitmap, bitmap, screencast_format_,
|
| screencast_quality_),
|
| base::Bind(&PageHandler::ScreencastFrameEncoded,
|
| weak_factory_.GetWeakPtr(), base::Passed(&metadata),
|
| @@ -552,18 +558,25 @@ void PageHandler::ScreencastFrameEncoded(cc::CompositorFrameMetadata metadata,
|
|
|
| void PageHandler::ScreenshotCaptured(
|
| std::unique_ptr<CaptureScreenshotCallback> callback,
|
| - const unsigned char* png_data,
|
| - size_t png_size) {
|
| - if (!png_data || !png_size) {
|
| + const std::string& format,
|
| + int quality,
|
| + const SkBitmap& bitmap) {
|
| + if (bitmap.drawsNothing()) {
|
| callback->sendFailure(Response::Error("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);
|
| - callback->sendSuccess(base_64_data);
|
| + base::PostTaskAndReplyWithResult(
|
| + base::WorkerPool::GetTaskRunner(true).get(), FROM_HERE,
|
| + base::Bind(&EncodeBitmap, bitmap, format, quality),
|
| + base::Bind(&PageHandler::ScreenshotEncoded, weak_factory_.GetWeakPtr(),
|
| + base::Passed(std::move(callback))));
|
| +}
|
| +
|
| +void PageHandler::ScreenshotEncoded(
|
| + std::unique_ptr<CaptureScreenshotCallback> callback,
|
| + const std::string& data) {
|
| + callback->sendSuccess(data);
|
| }
|
|
|
| void PageHandler::OnColorPicked(int r, int g, int b, int a) {
|
|
|