Index: ui/native_theme/native_theme_win.cc |
diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc |
index 043a3d47278a278e01d1c455157a9ae06ceec4b9..6dc57e9dbc0aa3a53ed107c84153bcb225112d2a 100644 |
--- a/ui/native_theme/native_theme_win.cc |
+++ b/ui/native_theme/native_theme_win.cc |
@@ -665,11 +665,21 @@ void NativeThemeWin::PaintIndirect(SkCanvas* destination_canvas, |
// keeping a cache of the resulting bitmaps. |
// Create an offscreen canvas that is backed by an HDC. |
+ // This can fail if we don't have access to GDI or if lower-level Windows |
+ // calls fail, possibly due to GDI handle exhaustion. |
base::win::ScopedCreateDC offscreen_hdc( |
skia::CreateOffscreenSurface(rect.width(), rect.height())); |
+ if (!offscreen_hdc.IsValid()) |
+ return; |
+ |
+ // Will be NULL if lower-level Windows calls fail, or if the backing |
+ // allocated is 0 pixels in size (which should never happen according to |
+ // Windows documentation). |
sk_sp<SkSurface> offscreen_surface = |
skia::MapPlatformSurface(offscreen_hdc.Get()); |
- DCHECK(offscreen_surface); |
+ if (!offscreen_surface) |
+ return; |
+ |
SkCanvas* offscreen_canvas = offscreen_surface->getCanvas(); |
DCHECK(offscreen_canvas); |