Index: chrome/plugin/webplugin_proxy.cc |
=================================================================== |
--- chrome/plugin/webplugin_proxy.cc (revision 29945) |
+++ chrome/plugin/webplugin_proxy.cc (working copy) |
@@ -455,20 +455,33 @@ |
void WebPluginProxy::SetWindowlessBuffer( |
const TransportDIB::Handle& windowless_buffer, |
const TransportDIB::Handle& background_buffer) { |
- // Create a canvas that will reference the shared bits. |
- windowless_canvas_.reset(new skia::PlatformCanvas( |
- delegate_->GetRect().width(), |
- delegate_->GetRect().height(), |
- true, |
- win_util::GetSectionFromProcess(windowless_buffer, |
- channel_->renderer_handle(), false))); |
+ // Create a canvas that will reference the shared bits. We have to handle |
+ // errors here since we're mapping a large amount of memory that may not fit |
+ // in our address space, or go wrong in some other way. |
+ windowless_canvas_.reset(new skia::PlatformCanvas); |
+ if (!windowless_canvas_->initialize( |
+ delegate_->GetRect().width(), |
+ delegate_->GetRect().height(), |
+ true, |
+ win_util::GetSectionFromProcess(windowless_buffer, |
+ channel_->renderer_handle(), false))) { |
+ windowless_canvas_.reset(); |
+ background_canvas_.reset(); |
+ return; |
+ } |
+ |
if (background_buffer) { |
- background_canvas_.reset(new skia::PlatformCanvas( |
- delegate_->GetRect().width(), |
- delegate_->GetRect().height(), |
- true, |
- win_util::GetSectionFromProcess(background_buffer, |
- channel_->renderer_handle(), false))); |
+ background_canvas_.reset(new skia::PlatformCanvas); |
+ if (!background_canvas_->initialize( |
+ delegate_->GetRect().width(), |
+ delegate_->GetRect().height(), |
+ true, |
+ win_util::GetSectionFromProcess(background_buffer, |
+ channel_->renderer_handle(), false))) { |
+ windowless_canvas_.reset(); |
+ background_canvas_.reset(); |
+ return; |
+ } |
} |
} |