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

Unified Diff: content/browser/devtools/protocol/page_handler.cc

Issue 2592983002: [devtools] Support different encodings for Page.CaptureScreenshot. (Closed)
Patch Set: fix return value description + rebase Created 4 years 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/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) {

Powered by Google App Engine
This is Rietveld 408576698