| 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
|
|
|