diff options
Diffstat (limited to 'content/browser/renderer_host/render_view_host_impl.cc')
-rw-r--r-- | content/browser/renderer_host/render_view_host_impl.cc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc index a578297..b49410c 100644 --- a/content/browser/renderer_host/render_view_host_impl.cc +++ b/content/browser/renderer_host/render_view_host_impl.cc @@ -65,6 +65,7 @@ #include "ui/base/dialogs/selected_file_info.h" #include "ui/gfx/image/image_skia.h" #include "ui/gfx/native_widget_types.h" +#include "ui/snapshot/snapshot.h" #include "webkit/fileapi/isolated_context.h" #include "webkit/glue/webdropdata.h" #include "webkit/glue/webkit_glue.h" @@ -1020,6 +1021,7 @@ bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) { IPC_MESSAGE_HANDLER(ViewHostMsg_ScriptEvalResponse, OnScriptEvalResponse) IPC_MESSAGE_HANDLER(ViewHostMsg_DidZoomURL, OnDidZoomURL) IPC_MESSAGE_HANDLER(ViewHostMsg_MediaNotification, OnMediaNotification) + IPC_MESSAGE_HANDLER(ViewHostMsg_GetWindowSnapshot, OnGetWindowSnapshot) #if defined(OS_ANDROID) IPC_MESSAGE_HANDLER(ViewHostMsg_StartContentIntent, OnStartContentIntent) IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeBodyBackgroundColor, @@ -2058,4 +2060,27 @@ void RenderViewHostImpl::ClearPowerSaveBlockers() { STLDeleteValues(&power_save_blockers_); } +void RenderViewHostImpl::OnGetWindowSnapshot(const int snapshot_id) { + std::vector<unsigned char> png; + + // This feature is behind the kEnableGpuBenchmarking command line switch + // because it poses security concerns and should only be used for testing. + const CommandLine& command_line = *CommandLine::ForCurrentProcess(); + if (command_line.HasSwitch(switches::kEnableGpuBenchmarking)) { + gfx::Rect view_bounds = GetView()->GetViewBounds(); + gfx::Rect snapshot_bounds(view_bounds.size()); + gfx::Size snapshot_size = snapshot_bounds.size(); + + if (ui::GrabViewSnapshot(GetView()->GetNativeView(), + &png, snapshot_bounds)) { + Send(new ViewMsg_WindowSnapshotCompleted( + GetRoutingID(), snapshot_id, snapshot_size, png)); + return; + } + } + + Send(new ViewMsg_WindowSnapshotCompleted( + GetRoutingID(), snapshot_id, gfx::Size(), png)); +} + } // namespace content |