| Index: cc/trees/layer_tree_host_unittest_context.cc
 | 
| diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc
 | 
| index b646e6adc52d6d009066dd01672f22d9ec02879b..cc4f28fb05fad1fcb1b638fc0338e85e89a5e199 100644
 | 
| --- a/cc/trees/layer_tree_host_unittest_context.cc
 | 
| +++ b/cc/trees/layer_tree_host_unittest_context.cc
 | 
| @@ -17,6 +17,7 @@
 | 
|  #include "cc/layers/texture_layer_impl.h"
 | 
|  #include "cc/output/filter_operations.h"
 | 
|  #include "cc/resources/single_release_callback.h"
 | 
| +#include "cc/test/failure_output_surface.h"
 | 
|  #include "cc/test/fake_content_layer.h"
 | 
|  #include "cc/test/fake_content_layer_client.h"
 | 
|  #include "cc/test/fake_content_layer_impl.h"
 | 
| @@ -74,12 +75,11 @@ class LayerTreeHostContextTest : public LayerTreeTest {
 | 
|      return TestWebGraphicsContext3D::Create();
 | 
|    }
 | 
|  
 | 
| -  scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(
 | 
| -      bool fallback) override {
 | 
| +  scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface() override {
 | 
|      if (times_to_fail_create_) {
 | 
|        --times_to_fail_create_;
 | 
|        ExpectCreateToFail();
 | 
| -      return nullptr;
 | 
| +      return make_scoped_ptr(new FailureOutputSurface(delegating_renderer()));
 | 
|      }
 | 
|  
 | 
|      scoped_ptr<TestWebGraphicsContext3D> context3d = CreateContext3d();
 | 
| @@ -167,22 +167,22 @@ class LayerTreeHostContextTestLostContextSucceeds
 | 
|  
 | 
|    void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 | 
|  
 | 
| -  void RequestNewOutputSurface(bool fallback) override {
 | 
| +  void RequestNewOutputSurface() override {
 | 
|      if (async_output_surface_creation_) {
 | 
|        MainThreadTaskRunner()->PostTask(
 | 
| -          FROM_HERE,
 | 
| -          base::Bind(&LayerTreeHostContextTestLostContextSucceeds::
 | 
| -                         CreateAndSetOutputSurface,
 | 
| -                     base::Unretained(this),
 | 
| -                     fallback));
 | 
| +          FROM_HERE, base::Bind(&LayerTreeHostContextTestLostContextSucceeds::
 | 
| +                                    CreateAndSetOutputSurface,
 | 
| +                                base::Unretained(this)));
 | 
|      } else {
 | 
| -      CreateAndSetOutputSurface(fallback);
 | 
| +      CreateAndSetOutputSurface();
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -  void CreateAndSetOutputSurface(bool fallback) {
 | 
| -    layer_tree_host()->SetOutputSurface(
 | 
| -        LayerTreeHostContextTest::CreateOutputSurface(fallback));
 | 
| +  void CreateAndSetOutputSurface() {
 | 
| +    scoped_ptr<OutputSurface> surface(
 | 
| +        LayerTreeHostContextTest::CreateOutputSurface());
 | 
| +    CHECK(surface);
 | 
| +    layer_tree_host()->SetOutputSurface(surface.Pass());
 | 
|    }
 | 
|  
 | 
|    void DidInitializeOutputSurface() override {
 | 
| @@ -357,7 +357,7 @@ class LayerTreeHostClientNotReadyDoesNotCreateOutputSurface
 | 
|      EndTest();
 | 
|    }
 | 
|  
 | 
| -  scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) override {
 | 
| +  scoped_ptr<OutputSurface> CreateOutputSurface() override {
 | 
|      EXPECT_TRUE(false);
 | 
|      return nullptr;
 | 
|    }
 | 
| @@ -380,7 +380,7 @@ class MultipleCompositeDoesNotCreateOutputSurface
 | 
|      settings->single_thread_proxy_scheduler = false;
 | 
|    }
 | 
|  
 | 
| -  void RequestNewOutputSurface(bool fallback) override {
 | 
| +  void RequestNewOutputSurface() override {
 | 
|      EXPECT_GE(1, ++request_count_);
 | 
|      EndTest();
 | 
|    }
 | 
| @@ -390,7 +390,7 @@ class MultipleCompositeDoesNotCreateOutputSurface
 | 
|      layer_tree_host()->Composite(base::TimeTicks());
 | 
|    }
 | 
|  
 | 
| -  scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) override {
 | 
| +  scoped_ptr<OutputSurface> CreateOutputSurface() override {
 | 
|      EXPECT_TRUE(false);
 | 
|      return nullptr;
 | 
|    }
 | 
| @@ -414,13 +414,12 @@ class FailedCreateDoesNotCreateExtraOutputSurface
 | 
|      settings->single_thread_proxy_scheduler = false;
 | 
|    }
 | 
|  
 | 
| -  void RequestNewOutputSurface(bool fallback) override {
 | 
| +  void RequestNewOutputSurface() override {
 | 
|      if (request_count_ == 0) {
 | 
|        ExpectCreateToFail();
 | 
| -      layer_tree_host()->SetOutputSurface(nullptr);
 | 
| +      layer_tree_host()->SetOutputSurface(
 | 
| +          make_scoped_ptr(new FailureOutputSurface(false)));
 | 
|      }
 | 
| -    EXPECT_GE(2, ++request_count_);
 | 
| -    EndTest();
 | 
|    }
 | 
|  
 | 
|    void BeginTest() override {
 | 
| @@ -428,13 +427,14 @@ class FailedCreateDoesNotCreateExtraOutputSurface
 | 
|      layer_tree_host()->Composite(base::TimeTicks());
 | 
|    }
 | 
|  
 | 
| -  scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) override {
 | 
| -    EXPECT_TRUE(false);
 | 
| -    return nullptr;
 | 
| -  }
 | 
| -
 | 
|    void DidInitializeOutputSurface() override { EXPECT_TRUE(false); }
 | 
|  
 | 
| +  void DidFailToInitializeOutputSurface() override {
 | 
| +    LayerTreeHostContextTest::DidFailToInitializeOutputSurface();
 | 
| +    EXPECT_GE(2, ++request_count_);
 | 
| +    EndTest();
 | 
| +  }
 | 
| +
 | 
|    void AfterTest() override {}
 | 
|  
 | 
|    int request_count_;
 | 
| @@ -452,19 +452,18 @@ class LayerTreeHostContextTestCommitAfterDelayedOutputSurface
 | 
|      settings->single_thread_proxy_scheduler = false;
 | 
|    }
 | 
|  
 | 
| -  void RequestNewOutputSurface(bool fallback) override {
 | 
| +  void RequestNewOutputSurface() override {
 | 
|      MainThreadTaskRunner()->PostTask(
 | 
|          FROM_HERE,
 | 
|          base::Bind(&LayerTreeHostContextTestCommitAfterDelayedOutputSurface::
 | 
|                         CreateAndSetOutputSurface,
 | 
| -                   base::Unretained(this),
 | 
| -                   fallback));
 | 
| +                   base::Unretained(this)));
 | 
|    }
 | 
|  
 | 
| -  void CreateAndSetOutputSurface(bool fallback) {
 | 
| +  void CreateAndSetOutputSurface() {
 | 
|      creating_output_ = true;
 | 
|      layer_tree_host()->SetOutputSurface(
 | 
| -        LayerTreeHostContextTest::CreateOutputSurface(fallback));
 | 
| +        LayerTreeHostContextTest::CreateOutputSurface());
 | 
|    }
 | 
|  
 | 
|    void BeginTest() override { layer_tree_host()->Composite(base::TimeTicks()); }
 | 
| @@ -492,9 +491,9 @@ class LayerTreeHostContextTestAvoidUnnecessaryComposite
 | 
|      settings->single_thread_proxy_scheduler = false;
 | 
|    }
 | 
|  
 | 
| -  void RequestNewOutputSurface(bool fallback) override {
 | 
| +  void RequestNewOutputSurface() override {
 | 
|      layer_tree_host()->SetOutputSurface(
 | 
| -        LayerTreeHostContextTest::CreateOutputSurface(fallback));
 | 
| +        LayerTreeHostContextTest::CreateOutputSurface());
 | 
|      EndTest();
 | 
|    }
 | 
|  
 | 
| @@ -572,35 +571,16 @@ class LayerTreeHostContextTestLostContextSucceedsWithContent
 | 
|  SINGLE_AND_MULTI_THREAD_TEST_F(
 | 
|      LayerTreeHostContextTestLostContextSucceedsWithContent);
 | 
|  
 | 
| -class LayerTreeHostContextTestCreateOutputSurfaceFails
 | 
| +class LayerTreeHostContextTestCreateOutputSurfaceFailsOnce
 | 
|      : public LayerTreeHostContextTest {
 | 
|   public:
 | 
| -  // Run a test that initially fails OutputSurface creation |times_to_fail|
 | 
| -  // times. If |expect_fallback_attempt| is |true|, an attempt to create a
 | 
| -  // fallback/software OutputSurface is expected to occur.
 | 
| -  LayerTreeHostContextTestCreateOutputSurfaceFails(int times_to_fail,
 | 
| -                                                   bool expect_fallback_attempt)
 | 
| -      : times_to_fail_(times_to_fail),
 | 
| -        expect_fallback_attempt_(expect_fallback_attempt),
 | 
| -        did_attempt_fallback_(false),
 | 
| -        times_initialized_(0) {
 | 
| +  LayerTreeHostContextTestCreateOutputSurfaceFailsOnce()
 | 
| +      : times_to_fail_(1), times_initialized_(0) {
 | 
|      times_to_fail_create_ = times_to_fail_;
 | 
|    }
 | 
|  
 | 
|    void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 | 
|  
 | 
| -  scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(
 | 
| -      bool fallback) override {
 | 
| -    scoped_ptr<FakeOutputSurface> surface =
 | 
| -        LayerTreeHostContextTest::CreateFakeOutputSurface(fallback);
 | 
| -
 | 
| -    if (surface)
 | 
| -      EXPECT_EQ(times_to_fail_, times_create_failed_);
 | 
| -
 | 
| -    did_attempt_fallback_ = fallback;
 | 
| -    return surface.Pass();
 | 
| -  }
 | 
| -
 | 
|    void DidInitializeOutputSurface() override { times_initialized_++; }
 | 
|  
 | 
|    void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { EndTest(); }
 | 
| @@ -608,38 +588,16 @@ class LayerTreeHostContextTestCreateOutputSurfaceFails
 | 
|    void AfterTest() override {
 | 
|      EXPECT_EQ(times_to_fail_, times_create_failed_);
 | 
|      EXPECT_NE(0, times_initialized_);
 | 
| -    EXPECT_EQ(expect_fallback_attempt_, did_attempt_fallback_);
 | 
|    }
 | 
|  
 | 
|   private:
 | 
|    int times_to_fail_;
 | 
| -  bool expect_fallback_attempt_;
 | 
| -  bool did_attempt_fallback_;
 | 
|    int times_initialized_;
 | 
|  };
 | 
|  
 | 
| -class LayerTreeHostContextTestCreateOutputSurfaceFailsOnce
 | 
| -    : public LayerTreeHostContextTestCreateOutputSurfaceFails {
 | 
| - public:
 | 
| -  LayerTreeHostContextTestCreateOutputSurfaceFailsOnce()
 | 
| -      : LayerTreeHostContextTestCreateOutputSurfaceFails(1, false) {}
 | 
| -};
 | 
| -
 | 
|  SINGLE_AND_MULTI_THREAD_TEST_F(
 | 
|      LayerTreeHostContextTestCreateOutputSurfaceFailsOnce);
 | 
|  
 | 
| -// After 4 failures we expect an attempt to create a fallback/software
 | 
| -// OutputSurface.
 | 
| -class LayerTreeHostContextTestCreateOutputSurfaceFailsWithFallback
 | 
| -    : public LayerTreeHostContextTestCreateOutputSurfaceFails {
 | 
| - public:
 | 
| -  LayerTreeHostContextTestCreateOutputSurfaceFailsWithFallback()
 | 
| -      : LayerTreeHostContextTestCreateOutputSurfaceFails(4, true) {}
 | 
| -};
 | 
| -
 | 
| -SINGLE_AND_MULTI_THREAD_TEST_F(
 | 
| -    LayerTreeHostContextTestCreateOutputSurfaceFailsWithFallback);
 | 
| -
 | 
|  class LayerTreeHostContextTestLostContextAndEvictTextures
 | 
|      : public LayerTreeHostContextTest {
 | 
|   public:
 | 
| @@ -1118,15 +1076,14 @@ class LayerTreeHostContextTestDontUseLostResources
 | 
|      return draw_result;
 | 
|    }
 | 
|  
 | 
| -  scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(
 | 
| -      bool fallback) override {
 | 
| +  scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface() override {
 | 
|      // This will get called twice:
 | 
|      // First when we create the initial output surface...
 | 
|      if (layer_tree_host()->source_frame_number() > 0) {
 | 
|        // ... and then again after we forced the context to be lost.
 | 
|        lost_context_ = true;
 | 
|      }
 | 
| -    return LayerTreeHostContextTest::CreateFakeOutputSurface(fallback);
 | 
| +    return LayerTreeHostContextTest::CreateFakeOutputSurface();
 | 
|    }
 | 
|  
 | 
|    void DidCommitAndDrawFrame() override {
 | 
| 
 |