| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "content/renderer/render_view_impl.h" | 5 #include "content/renderer/render_view_impl.h" | 
| 6 | 6 | 
| 7 #include <algorithm> | 7 #include <algorithm> | 
| 8 #include <cmath> | 8 #include <cmath> | 
| 9 | 9 | 
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" | 
| (...skipping 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1109                         OnPluginImeCompositionCompleted) | 1109                         OnPluginImeCompositionCompleted) | 
| 1110     IPC_MESSAGE_HANDLER(ViewMsg_SelectPopupMenuItem, OnSelectPopupMenuItem) | 1110     IPC_MESSAGE_HANDLER(ViewMsg_SelectPopupMenuItem, OnSelectPopupMenuItem) | 
| 1111     IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize) | 1111     IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize) | 
| 1112     IPC_MESSAGE_HANDLER(ViewMsg_SetWindowVisibility, OnSetWindowVisibility) | 1112     IPC_MESSAGE_HANDLER(ViewMsg_SetWindowVisibility, OnSetWindowVisibility) | 
| 1113     IPC_MESSAGE_HANDLER(ViewMsg_WindowFrameChanged, OnWindowFrameChanged) | 1113     IPC_MESSAGE_HANDLER(ViewMsg_WindowFrameChanged, OnWindowFrameChanged) | 
| 1114 #endif | 1114 #endif | 
| 1115     IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupDIB, | 1115     IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupDIB, | 
| 1116                         OnReleaseDisambiguationPopupDIB) | 1116                         OnReleaseDisambiguationPopupDIB) | 
| 1117     IPC_MESSAGE_HANDLER(ViewMsg_WindowSnapshotCompleted, | 1117     IPC_MESSAGE_HANDLER(ViewMsg_WindowSnapshotCompleted, | 
| 1118                         OnWindowSnapshotCompleted) | 1118                         OnWindowSnapshotCompleted) | 
|  | 1119     IPC_MESSAGE_HANDLER(ViewMsg_Snapshot, OnSnapshot) | 
| 1119 | 1120 | 
| 1120     // Have the super handle all other messages. | 1121     // Have the super handle all other messages. | 
| 1121     IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message)) | 1122     IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message)) | 
| 1122   IPC_END_MESSAGE_MAP() | 1123   IPC_END_MESSAGE_MAP() | 
| 1123 | 1124 | 
| 1124   if (!msg_is_ok) { | 1125   if (!msg_is_ok) { | 
| 1125     // The message had a handler, but its deserialization failed. | 1126     // The message had a handler, but its deserialization failed. | 
| 1126     // Kill the renderer to avoid potential spoofing attacks. | 1127     // Kill the renderer to avoid potential spoofing attacks. | 
| 1127     CHECK(false) << "Unable to deserialize message in RenderViewImpl."; | 1128     CHECK(false) << "Unable to deserialize message in RenderViewImpl."; | 
| 1128   } | 1129   } | 
| (...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1892 } | 1893 } | 
| 1893 | 1894 | 
| 1894 void RenderViewImpl::OnWindowSnapshotCompleted(const int snapshot_id, | 1895 void RenderViewImpl::OnWindowSnapshotCompleted(const int snapshot_id, | 
| 1895     const gfx::Size& size, const std::vector<unsigned char>& png) { | 1896     const gfx::Size& size, const std::vector<unsigned char>& png) { | 
| 1896   PendingSnapshotMap::iterator it = pending_snapshots_.find(snapshot_id); | 1897   PendingSnapshotMap::iterator it = pending_snapshots_.find(snapshot_id); | 
| 1897   DCHECK(it != pending_snapshots_.end()); | 1898   DCHECK(it != pending_snapshots_.end()); | 
| 1898   it->second.Run(size, png); | 1899   it->second.Run(size, png); | 
| 1899   pending_snapshots_.erase(it); | 1900   pending_snapshots_.erase(it); | 
| 1900 } | 1901 } | 
| 1901 | 1902 | 
|  | 1903 namespace { | 
|  | 1904 | 
|  | 1905 bool CaptureSnapshot(WebView* view, | 
|  | 1906                      const gfx::Rect& src_subrect, | 
|  | 1907                      SkBitmap* snapshot) { | 
|  | 1908   base::TimeTicks beginning_time = base::TimeTicks::Now(); | 
|  | 1909 | 
|  | 1910   view->layout(); | 
|  | 1911   const WebSize& size = view->size(); | 
|  | 1912   gfx::Rect viewport_size = gfx::IntersectRects( | 
|  | 1913       src_subrect, gfx::Rect(size.width, size.height)); | 
|  | 1914 | 
|  | 1915   skia::RefPtr<SkCanvas> canvas = skia::AdoptRef( | 
|  | 1916       skia::CreatePlatformCanvas(viewport_size.width(), | 
|  | 1917                                  viewport_size.height(), | 
|  | 1918                                  true, | 
|  | 1919                                  NULL, | 
|  | 1920                                  skia::RETURN_NULL_ON_FAILURE)); | 
|  | 1921   if (!canvas) | 
|  | 1922     return false; | 
|  | 1923 | 
|  | 1924   view->paint(webkit_glue::ToWebCanvas(canvas.get()), viewport_size); | 
|  | 1925 | 
|  | 1926   const SkBitmap& bitmap = skia::GetTopDevice(*canvas)->accessBitmap(false); | 
|  | 1927   if (!bitmap.copyTo(snapshot, SkBitmap::kARGB_8888_Config)) | 
|  | 1928     return false; | 
|  | 1929 | 
|  | 1930   UMA_HISTOGRAM_TIMES("Renderer4.Snapshot", | 
|  | 1931                       base::TimeTicks::Now() - beginning_time); | 
|  | 1932   return true; | 
|  | 1933 } | 
|  | 1934 | 
|  | 1935 }  // namespace | 
|  | 1936 | 
|  | 1937 void RenderViewImpl::OnSnapshot(const gfx::Rect& src_subrect) { | 
|  | 1938   SkBitmap snapshot; | 
|  | 1939   bool error = false; | 
|  | 1940 | 
|  | 1941   if (!webview()->mainFrame() || !CaptureSnapshot(webview(), | 
|  | 1942                                                   src_subrect, | 
|  | 1943                                                   &snapshot)) | 
|  | 1944     error = true; | 
|  | 1945 | 
|  | 1946   DCHECK(error == snapshot.empty()) << | 
|  | 1947       "Snapshot should be empty on error, non-empty otherwise."; | 
|  | 1948 | 
|  | 1949   Send(new ViewHostMsg_Snapshot(routing_id_, !error, snapshot)); | 
|  | 1950 } | 
|  | 1951 | 
| 1902 // WebKit::WebViewClient ------------------------------------------------------ | 1952 // WebKit::WebViewClient ------------------------------------------------------ | 
| 1903 | 1953 | 
| 1904 WebView* RenderViewImpl::createView( | 1954 WebView* RenderViewImpl::createView( | 
| 1905     WebFrame* creator, | 1955     WebFrame* creator, | 
| 1906     const WebURLRequest& request, | 1956     const WebURLRequest& request, | 
| 1907     const WebWindowFeatures& features, | 1957     const WebWindowFeatures& features, | 
| 1908     const WebString& frame_name, | 1958     const WebString& frame_name, | 
| 1909     WebNavigationPolicy policy) { | 1959     WebNavigationPolicy policy) { | 
| 1910   // Check to make sure we aren't overloading on popups. | 1960   // Check to make sure we aren't overloading on popups. | 
| 1911   if (shared_popup_counter_->data > kMaximumNumberOfUnacknowledgedPopups) | 1961   if (shared_popup_counter_->data > kMaximumNumberOfUnacknowledgedPopups) | 
| (...skipping 4680 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6592   TransportDIB* dib = TransportDIB::CreateWithHandle(dib_handle); | 6642   TransportDIB* dib = TransportDIB::CreateWithHandle(dib_handle); | 
| 6593   RenderProcess::current()->ReleaseTransportDIB(dib); | 6643   RenderProcess::current()->ReleaseTransportDIB(dib); | 
| 6594 } | 6644 } | 
| 6595 | 6645 | 
| 6596 void RenderViewImpl::DidCommitCompositorFrame() { | 6646 void RenderViewImpl::DidCommitCompositorFrame() { | 
| 6597   RenderWidget::DidCommitCompositorFrame(); | 6647   RenderWidget::DidCommitCompositorFrame(); | 
| 6598   FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidCommitCompositorFrame()); | 6648   FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidCommitCompositorFrame()); | 
| 6599 } | 6649 } | 
| 6600 | 6650 | 
| 6601 }  // namespace content | 6651 }  // namespace content | 
| OLD | NEW | 
|---|