Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index 21b30de751a5e3760cc887bf50099375046acaa7..b63027f439e051495a47419d5064e1e542332935 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -600,6 +600,7 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params) |
#endif |
session_storage_namespace_id_(params->session_storage_namespace_id), |
handling_select_range_(false), |
+ next_snapshot_id_(0), |
#if defined(OS_WIN) |
focused_plugin_id_(-1), |
#endif |
@@ -1043,6 +1044,8 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { |
#endif |
IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupDIB, |
OnReleaseDisambiguationPopupDIB) |
+ IPC_MESSAGE_HANDLER(ViewMsg_WindowSnapshotCompleted, |
+ OnWindowSnapshotCompleted) |
// Have the super handle all other messages. |
IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message)) |
@@ -1757,6 +1760,20 @@ bool RenderViewImpl::SendAndRunNestedMessageLoop(IPC::SyncMessage* message) { |
return Send(message); |
} |
+void RenderViewImpl::GetWindowSnapshot(const WindowSnapshotCallback& callback) { |
+ int id = next_snapshot_id_++; |
+ pending_snapshots_.insert(std::make_pair(id, callback)); |
+ Send(new ViewHostMsg_GetWindowSnapshot(routing_id_, id)); |
+} |
+ |
+void RenderViewImpl::OnWindowSnapshotCompleted(const int snapshot_id, |
+ const gfx::Size& size, const std::vector<unsigned char>& png) { |
+ PendingSnapshotMap::iterator it = pending_snapshots_.find(snapshot_id); |
+ DCHECK(it != pending_snapshots_.end()); |
+ it->second.Run(size, png); |
+ pending_snapshots_.erase(it); |
+} |
+ |
// WebKit::WebViewClient ------------------------------------------------------ |
WebView* RenderViewImpl::createView( |