Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index 960fa49933998665f336e8b1172c1682d9403995..ce7b54e1802ea83a32bf17e003c2645a427a83f7 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -534,8 +534,19 @@ void RenderWidget::PaintRect(const gfx::Rect& rect, |
SkShader::kRepeat_TileMode, |
SkShader::kRepeat_TileMode); |
paint.setShader(shader)->unref(); |
- paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); |
+ |
+ // Use kSrc_Mode to handle background_ transparency properly. |
+ paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
+ |
+ // Canvas could contain multiple update rects. Clip to given rect so that |
+ // we don't accidentally clear other update rects. |
+ canvas->save(); |
+ SkRect clip; |
+ clip.set(SkIntToScalar(rect.x()), SkIntToScalar(rect.y()), |
+ SkIntToScalar(rect.right()), SkIntToScalar(rect.bottom())); |
+ canvas->clipRect(clip); |
canvas->drawPaint(paint); |
+ canvas->restore(); |
} |
// First see if this rect is a plugin that can paint itself faster. |