summaryrefslogtreecommitdiffstats
path: root/chromium/content/browser/devtools/renderer_overrides_handler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/devtools/renderer_overrides_handler.cc')
-rw-r--r--chromium/content/browser/devtools/renderer_overrides_handler.cc168
1 files changed, 98 insertions, 70 deletions
diff --git a/chromium/content/browser/devtools/renderer_overrides_handler.cc b/chromium/content/browser/devtools/renderer_overrides_handler.cc
index 4901f34cc12..7370275cd45 100644
--- a/chromium/content/browser/devtools/renderer_overrides_handler.cc
+++ b/chromium/content/browser/devtools/renderer_overrides_handler.cc
@@ -13,6 +13,7 @@
#include "base/bind_helpers.h"
#include "base/files/file_path.h"
#include "base/strings/string16.h"
+#include "base/thread_task_runner_handle.h"
#include "base/values.h"
#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/devtools/devtools_protocol_constants.h"
@@ -20,9 +21,10 @@
#include "content/browser/renderer_host/dip_util.h"
#include "content/browser/renderer_host/render_view_host_delegate.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "content/common/view_messages.h"
-#include "content/port/browser/render_widget_host_view_port.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/javascript_dialog_manager.h"
#include "content/public/browser/navigation_controller.h"
@@ -41,6 +43,8 @@
#include "third_party/WebKit/public/web/WebInputEvent.h"
#include "ui/gfx/codec/jpeg_codec.h"
#include "ui/gfx/codec/png_codec.h"
+#include "ui/gfx/display.h"
+#include "ui/gfx/screen.h"
#include "ui/gfx/size_conversions.h"
#include "ui/snapshot/snapshot.h"
#include "url/gurl.h"
@@ -91,6 +95,16 @@ RendererOverridesHandler::RendererOverridesHandler(DevToolsAgentHost* agent)
&RendererOverridesHandler::GrantPermissionsForSetFileInputFiles,
base::Unretained(this)));
RegisterCommandHandler(
+ devtools::Network::clearBrowserCache::kName,
+ base::Bind(
+ &RendererOverridesHandler::ClearBrowserCache,
+ base::Unretained(this)));
+ RegisterCommandHandler(
+ devtools::Network::clearBrowserCookies::kName,
+ base::Bind(
+ &RendererOverridesHandler::ClearBrowserCookies,
+ base::Unretained(this)));
+ RegisterCommandHandler(
devtools::Page::disable::kName,
base::Bind(
&RendererOverridesHandler::PageDisable, base::Unretained(this)));
@@ -192,19 +206,22 @@ void RendererOverridesHandler::InnerSwapCompositorFrame() {
double scale = 1;
ParseCaptureParameters(screencast_command_.get(), &format, &quality, &scale);
- RenderWidgetHostViewPort* view_port =
- RenderWidgetHostViewPort::FromRWHV(host->GetView());
+ const gfx::Display& display =
+ gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
+ float device_scale_factor = display.device_scale_factor();
gfx::Rect view_bounds = host->GetView()->GetViewBounds();
- gfx::Size snapshot_size = gfx::ToFlooredSize(
- gfx::ScaleSize(view_bounds.size(), scale));
+ gfx::Size snapshot_size(gfx::ToCeiledSize(
+ gfx::ScaleSize(view_bounds.size(), scale / device_scale_factor)));
- view_port->CopyFromCompositingSurface(
+ RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
+ host->GetView());
+ view->CopyFromCompositingSurface(
view_bounds, snapshot_size,
- base::Bind(&RendererOverridesHandler::ScreenshotCaptured,
+ base::Bind(&RendererOverridesHandler::ScreencastFrameCaptured,
weak_factory_.GetWeakPtr(),
- scoped_refptr<DevToolsProtocol::Command>(), format, quality,
- last_compositor_frame_metadata_));
+ format, quality, last_compositor_frame_metadata_),
+ SkBitmap::kARGB_8888_Config);
}
void RendererOverridesHandler::ParseCaptureParameters(
@@ -218,13 +235,13 @@ void RendererOverridesHandler::ParseCaptureParameters(
double max_height = -1;
base::DictionaryValue* params = command->params();
if (params) {
- params->GetString(devtools::Page::captureScreenshot::kParamFormat,
+ params->GetString(devtools::Page::startScreencast::kParamFormat,
format);
- params->GetInteger(devtools::Page::captureScreenshot::kParamQuality,
+ params->GetInteger(devtools::Page::startScreencast::kParamQuality,
quality);
- params->GetDouble(devtools::Page::captureScreenshot::kParamMaxWidth,
+ params->GetDouble(devtools::Page::startScreencast::kParamMaxWidth,
&max_width);
- params->GetDouble(devtools::Page::captureScreenshot::kParamMaxHeight,
+ params->GetDouble(devtools::Page::startScreencast::kParamMaxHeight,
&max_height);
}
@@ -246,6 +263,20 @@ void RendererOverridesHandler::ParseCaptureParameters(
*scale = 5;
}
+base::DictionaryValue* RendererOverridesHandler::CreateScreenshotResponse(
+ const std::vector<unsigned char>& png_data) {
+ std::string base_64_data;
+ base::Base64Encode(
+ base::StringPiece(reinterpret_cast<const char*>(&png_data[0]),
+ png_data.size()),
+ &base_64_data);
+
+ base::DictionaryValue* response = new base::DictionaryValue();
+ response->SetString(
+ devtools::Page::captureScreenshot::kResponseData, base_64_data);
+ return response;
+}
+
// DOM agent handlers --------------------------------------------------------
scoped_refptr<DevToolsProtocol::Response>
@@ -272,6 +303,23 @@ RendererOverridesHandler::GrantPermissionsForSetFileInputFiles(
}
+// Network agent handlers ----------------------------------------------------
+
+scoped_refptr<DevToolsProtocol::Response>
+RendererOverridesHandler::ClearBrowserCache(
+ scoped_refptr<DevToolsProtocol::Command> command) {
+ GetContentClient()->browser()->ClearCache(agent_->GetRenderViewHost());
+ return command->SuccessResponse(NULL);
+}
+
+scoped_refptr<DevToolsProtocol::Response>
+RendererOverridesHandler::ClearBrowserCookies(
+ scoped_refptr<DevToolsProtocol::Command> command) {
+ GetContentClient()->browser()->ClearCookies(agent_->GetRenderViewHost());
+ return command->SuccessResponse(NULL);
+}
+
+
// Page agent handlers -------------------------------------------------------
scoped_refptr<DevToolsProtocol::Response>
@@ -306,7 +354,7 @@ RendererOverridesHandler::PageHandleJavaScriptDialog(
web_contents->GetDelegate()->GetJavaScriptDialogManager();
if (manager && manager->HandleJavaScriptDialog(
web_contents, accept, prompt_override_ptr)) {
- return NULL;
+ return command->SuccessResponse(new base::DictionaryValue());
}
}
}
@@ -367,7 +415,7 @@ RendererOverridesHandler::PageGetNavigationHistory(
result->SetInteger(
devtools::Page::getNavigationHistory::kResponseCurrentIndex,
controller.GetCurrentEntryIndex());
- ListValue* entries = new ListValue();
+ base::ListValue* entries = new base::ListValue();
for (int i = 0; i != controller.GetEntryCount(); ++i) {
const NavigationEntry* entry = controller.GetEntryAtIndex(i);
base::DictionaryValue* entry_value = new base::DictionaryValue();
@@ -426,44 +474,41 @@ RendererOverridesHandler::PageCaptureScreenshot(
if (!host->GetView())
return command->InternalErrorResponse("Unable to access the view");
- std::string format;
- int quality = kDefaultScreenshotQuality;
- double scale = 1;
- ParseCaptureParameters(command.get(), &format, &quality, &scale);
-
gfx::Rect view_bounds = host->GetView()->GetViewBounds();
- gfx::Size snapshot_size = gfx::ToFlooredSize(
- gfx::ScaleSize(view_bounds.size(), scale));
-
- // Grab screen pixels if available for current platform.
- // TODO(pfeldman): support format, scale and quality in ui::GrabViewSnapshot.
- std::vector<unsigned char> png;
- bool is_unscaled_png = scale == 1 && format == kPng;
- if (is_unscaled_png && ui::GrabViewSnapshot(host->GetView()->GetNativeView(),
- &png,
- gfx::Rect(snapshot_size))) {
- std::string base64_data;
- base::Base64Encode(
- base::StringPiece(reinterpret_cast<char*>(&*png.begin()), png.size()),
- &base64_data);
- base::DictionaryValue* result = new base::DictionaryValue();
- result->SetString(
- devtools::Page::captureScreenshot::kResponseData, base64_data);
- return command->SuccessResponse(result);
+ gfx::Rect snapshot_bounds(view_bounds.size());
+ gfx::Size snapshot_size = snapshot_bounds.size();
+
+ std::vector<unsigned char> png_data;
+ if (ui::GrabViewSnapshot(host->GetView()->GetNativeView(),
+ &png_data,
+ snapshot_bounds)) {
+ if (png_data.size())
+ return command->SuccessResponse(CreateScreenshotResponse(png_data));
+ else
+ return command->InternalErrorResponse("Unable to capture screenshot");
}
- // Fallback to copying from compositing surface.
- RenderWidgetHostViewPort* view_port =
- RenderWidgetHostViewPort::FromRWHV(host->GetView());
-
- view_port->CopyFromCompositingSurface(
- view_bounds, snapshot_size,
+ ui::GrabViewSnapshotAsync(
+ host->GetView()->GetNativeView(),
+ snapshot_bounds,
+ base::ThreadTaskRunnerHandle::Get(),
base::Bind(&RendererOverridesHandler::ScreenshotCaptured,
- weak_factory_.GetWeakPtr(), command, format, quality,
- last_compositor_frame_metadata_));
+ weak_factory_.GetWeakPtr(), command));
return command->AsyncResponsePromise();
}
+void RendererOverridesHandler::ScreenshotCaptured(
+ scoped_refptr<DevToolsProtocol::Command> command,
+ scoped_refptr<base::RefCountedBytes> png_data) {
+ if (png_data) {
+ SendAsyncResponse(
+ command->SuccessResponse(CreateScreenshotResponse(png_data->data())));
+ } else {
+ SendAsyncResponse(
+ command->InternalErrorResponse("Unable to capture screenshot"));
+ }
+}
+
scoped_refptr<DevToolsProtocol::Response>
RendererOverridesHandler::PageCanScreencast(
scoped_refptr<DevToolsProtocol::Command> command) {
@@ -497,18 +542,14 @@ RendererOverridesHandler::PageStopScreencast(
return command->SuccessResponse(NULL);
}
-void RendererOverridesHandler::ScreenshotCaptured(
- scoped_refptr<DevToolsProtocol::Command> command,
+void RendererOverridesHandler::ScreencastFrameCaptured(
const std::string& format,
int quality,
const cc::CompositorFrameMetadata& metadata,
bool success,
const SkBitmap& bitmap) {
if (!success) {
- if (command) {
- SendAsyncResponse(
- command->InternalErrorResponse("Unable to capture screenshot"));
- } else if (capture_retry_count_) {
+ if (capture_retry_count_) {
--capture_retry_count_;
base::MessageLoop::current()->PostDelayedTask(
FROM_HERE,
@@ -541,13 +582,8 @@ void RendererOverridesHandler::ScreenshotCaptured(
encoded = false;
}
- if (!encoded) {
- if (command) {
- SendAsyncResponse(
- command->InternalErrorResponse("Unable to encode screenshot"));
- }
+ if (!encoded)
return;
- }
std::string base_64_data;
base::Base64Encode(
@@ -593,20 +629,11 @@ void RendererOverridesHandler::ScreenshotCaptured(
response_metadata->Set(
devtools::Page::ScreencastFrameMetadata::kParamViewport, viewport);
- if (command) {
- response->Set(devtools::Page::captureScreenshot::kResponseMetadata,
- response_metadata);
- } else {
- response->Set(devtools::Page::screencastFrame::kParamMetadata,
- response_metadata);
- }
+ response->Set(devtools::Page::screencastFrame::kParamMetadata,
+ response_metadata);
}
- if (command) {
- SendAsyncResponse(command->SuccessResponse(response));
- } else {
- SendNotification(devtools::Page::screencastFrame::kName, response);
- }
+ SendNotification(devtools::Page::screencastFrame::kName, response);
}
// Quota and Usage ------------------------------------------
@@ -906,6 +933,7 @@ RendererOverridesHandler::InputDispatchGestureEvent(
agent_->GetRenderViewHost());
blink::WebGestureEvent event;
ParseGenericInputParams(params, &event);
+ event.sourceDevice = blink::WebGestureDeviceTouchscreen;
std::string type;
if (params->GetString(devtools::Input::dispatchGestureEvent::kParamType,