Index: chrome/renderer/render_widget.cc |
diff --git a/chrome/renderer/render_widget.cc b/chrome/renderer/render_widget.cc |
index 17c0ee73159a9a3d6c2fd517431079d2c71bdcf7..6ff6b09cf301c2080c10f0c4c45cc21292697005 100644 |
--- a/chrome/renderer/render_widget.cc |
+++ b/chrome/renderer/render_widget.cc |
@@ -819,8 +819,17 @@ void RenderWidget::OnMsgPaintAtSize(const TransportDIB::Handle& dib_handle, |
int tag, |
const gfx::Size& page_size, |
const gfx::Size& desired_size) { |
- if (!webwidget_ || dib_handle == TransportDIB::DefaultHandleValue()) |
+ if (!webwidget_ || !TransportDIB::is_valid(dib_handle)) { |
+ if (TransportDIB::is_valid(dib_handle)) { |
+ // Close our unused handle. |
+#if defined(OS_WIN) |
+ ::CloseHandle(dib_handle); |
+#elif defined(OS_MACOSX) |
+ base::SharedMemory::CloseHandle(dib_handle); |
+#endif |
+ } |
return; |
+ } |
if (page_size.IsEmpty() || desired_size.IsEmpty()) { |
// If one of these is empty, then we just return the dib we were |
@@ -831,11 +840,8 @@ void RenderWidget::OnMsgPaintAtSize(const TransportDIB::Handle& dib_handle, |
// Map the given DIB ID into this process, and unmap it at the end |
// of this function. |
- scoped_ptr<TransportDIB> paint_at_size_buffer(TransportDIB::Map(dib_handle)); |
- |
- DCHECK(paint_at_size_buffer.get()); |
- if (!paint_at_size_buffer.get()) |
- return; |
+ scoped_ptr<TransportDIB> paint_at_size_buffer( |
+ TransportDIB::CreateWithHandle(dib_handle)); |
gfx::Size canvas_size = page_size; |
float x_scale = static_cast<float>(desired_size.width()) / |