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

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

Issue 21777003: DevTools: [Android] implement RenderWidgetHostViewAndroid::CopyFromCompositingSurface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix clang bots. Created 7 years, 4 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 cbc26f4501be21772cfa241818aeabaf6e91b886..692212961d091d754b4e8dfa11ca30a5338efcc1 100644
--- a/content/browser/devtools/renderer_overrides_handler.cc
+++ b/content/browser/devtools/renderer_overrides_handler.cc
@@ -11,11 +11,13 @@
#include "base/bind_helpers.h"
#include "base/files/file_path.h"
#include "base/strings/string16.h"
+#include "base/time/time.h"
#include "base/values.h"
#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/devtools/devtools_protocol_constants.h"
#include "content/browser/devtools/devtools_tracing_handler.h"
#include "content/browser/renderer_host/render_view_host_delegate.h"
+#include "content/port/browser/render_view_host_delegate_view.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/javascript_dialog_manager.h"
#include "content/public/browser/navigation_controller.h"
@@ -26,9 +28,10 @@
#include "content/public/browser/web_contents_delegate.h"
#include "content/public/common/page_transition_types.h"
#include "content/public/common/referrer.h"
-#include "ui/snapshot/snapshot.h"
#include "url/gurl.h"
+using base::TimeTicks;
+
namespace content {
RendererOverridesHandler::RendererOverridesHandler(DevToolsAgentHost* agent)
@@ -139,9 +142,32 @@ RendererOverridesHandler::PageNavigate(
scoped_ptr<DevToolsProtocol::Response>
RendererOverridesHandler::PageCaptureScreenshot(
DevToolsProtocol::Command* command) {
+ std::string format;
+ int quality = 100;
+ double scale = 0;
+
+ base::DictionaryValue* params = command->params();
+ if (params) {
+ params->GetString(devtools::Page::captureScreenshot::kParamFormat,
+ &format);
+ params->GetInteger(devtools::Page::captureScreenshot::kParamQuality,
+ &quality);
+ params->GetDouble(devtools::Page::captureScreenshot::kParamScale,
+ &scale);
+ }
+
+ if (format.empty())
+ format = "png";
+ if (quality < 0 || quality > 100)
+ quality = 100;
+ if (scale <= 0 || scale > 1)
+ scale = 1;
+
std::string base_64_data;
- if (!CaptureScreenshot(&base_64_data))
- return command->InternalErrorResponse("Unable to capture a screenshot");
+ if (!CaptureScreenshot(format, quality, scale, &base_64_data))
+ return command->InternalErrorResponse(
+ "Unable to capture a screenshot or "
+ "image format is not supported by the target");
base::DictionaryValue* response = new base::DictionaryValue();
response->SetString(
@@ -149,21 +175,29 @@ RendererOverridesHandler::PageCaptureScreenshot(
return command->SuccessResponse(response);
}
-bool RendererOverridesHandler::CaptureScreenshot(std::string* base_64_data) {
+bool RendererOverridesHandler::CaptureScreenshot(const std::string& format,
+ int quality,
+ double scale,
+ std::string* base_64_data) {
RenderViewHost* host = agent_->GetRenderViewHost();
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;
- if (!ui::GrabViewSnapshot(host->GetView()->GetNativeView(),
- &png,
- snapshot_bounds))
+ RenderViewHostDelegate* delegate = host->GetDelegate();
+ RenderViewHostDelegateView* view = delegate->GetDelegateView();
+
+ if (!view)
+ return false;
+
+ std::vector<uint8> data;
+ if (!view->GrabSnapshot(format, quality, scale, &data))
return false;
- return base::Base64Encode(base::StringPiece(
- reinterpret_cast<char*>(&*png.begin()),
- png.size()),
+ bool res = base::Base64Encode(base::StringPiece(
+ reinterpret_cast<char*>(&*data.begin()),
+ data.size()),
base_64_data);
+ return res;
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698