| Index: ui/compositor/compositor.cc
 | 
| diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
 | 
| index 58297e6848f0737683557eb52aa7f41c4b3627de..7fd7fe90317dc3f9783d0313c676f8ba41d4d550 100644
 | 
| --- a/ui/compositor/compositor.cc
 | 
| +++ b/ui/compositor/compositor.cc
 | 
| @@ -108,7 +108,7 @@ Compositor::Compositor(gfx::AcceleratedWidget widget,
 | 
|        draw_on_compositing_end_(false),
 | 
|        swap_state_(SWAP_NONE),
 | 
|        layer_animator_collection_(this),
 | 
| -      schedule_draw_factory_(this) {
 | 
| +      weak_ptr_factory_(this) {
 | 
|    root_web_layer_ = cc::Layer::Create();
 | 
|  
 | 
|    CommandLine* command_line = CommandLine::ForCurrentProcess();
 | 
| @@ -210,10 +210,27 @@ void Compositor::ScheduleDraw() {
 | 
|      defer_draw_scheduling_ = true;
 | 
|      task_runner_->PostTask(
 | 
|          FROM_HERE,
 | 
| -        base::Bind(&Compositor::Draw, schedule_draw_factory_.GetWeakPtr()));
 | 
| +        base::Bind(&Compositor::Draw, weak_ptr_factory_.GetWeakPtr()));
 | 
|    }
 | 
|  }
 | 
|  
 | 
| +void Compositor::DidInitializeOutputSurface() {
 | 
| +  num_failed_recreate_attempts_ = 0;
 | 
| +}
 | 
| +
 | 
| +void Compositor::DidFailToInitializeOutputSurface() {
 | 
| +  num_failed_recreate_attempts_++;
 | 
| +
 | 
| +  // Tolerate a certain number of recreation failures to work around races
 | 
| +  // in the output-surface-lost machinery.
 | 
| +  if (num_failed_recreate_attempts_ >= MAX_OUTPUT_SURFACE_RETRIES)
 | 
| +    LOG(FATAL) << "Failed to create a fallback OutputSurface.";
 | 
| +
 | 
| +  base::MessageLoop::current()->PostTask(
 | 
| +      FROM_HERE, base::Bind(&Compositor::RequestNewOutputSurface,
 | 
| +                            weak_ptr_factory_.GetWeakPtr()));
 | 
| +}
 | 
| +
 | 
|  void Compositor::SetRootLayer(Layer* root_layer) {
 | 
|    if (root_layer_ == root_layer)
 | 
|      return;
 | 
| @@ -367,9 +384,11 @@ void Compositor::Layout() {
 | 
|    disable_schedule_composite_ = false;
 | 
|  }
 | 
|  
 | 
| -void Compositor::RequestNewOutputSurface(bool fallback) {
 | 
| -  host_->SetOutputSurface(
 | 
| -      context_factory_->CreateOutputSurface(this, fallback));
 | 
| +void Compositor::RequestNewOutputSurface() {
 | 
| +  bool fallback =
 | 
| +      num_failed_recreate_attempts_ >= OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK;
 | 
| +  context_factory_->CreateOutputSurface(weak_ptr_factory_.GetWeakPtr().get(),
 | 
| +                                        fallback);
 | 
|  }
 | 
|  
 | 
|  void Compositor::DidCommit() {
 | 
| 
 |