Change context lost from callback to observer.

We want to have multiple LayerTreeFrameSinks share a ContextProvider.
The current ContextProvider implementation holds a single callback from
the LayerTreeFrameSink which won't work.

Add ContextLostObserver to observer ContextProvider. Update all
ContextProvider implementations to use the observer.

Bug: 770833
Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I646468e3708c3953acb16d94ae798bef7646bef8
Reviewed-on: https://chromium-review.googlesource.com/736259
Commit-Queue: kylechar <[email protected]>
Reviewed-by: Antoine Labour <[email protected]>
Reviewed-by: Richard Coles <[email protected]>
Cr-Commit-Position: refs/heads/master@{#511598}
diff --git a/content/renderer/webgraphicscontext3d_provider_impl.h b/content/renderer/webgraphicscontext3d_provider_impl.h
index 3ac2e43..fcda050f 100644
--- a/content/renderer/webgraphicscontext3d_provider_impl.h
+++ b/content/renderer/webgraphicscontext3d_provider_impl.h
@@ -7,6 +7,7 @@
 
 #include "base/compiler_specific.h"
 #include "base/memory/ref_counted.h"
+#include "components/viz/common/gpu/context_provider.h"
 #include "content/common/content_export.h"
 #include "third_party/WebKit/public/platform/WebGraphicsContext3DProvider.h"
 
@@ -23,9 +24,10 @@
 namespace content {
 
 class CONTENT_EXPORT WebGraphicsContext3DProviderImpl
-    : public blink::WebGraphicsContext3DProvider {
+    : public blink::WebGraphicsContext3DProvider,
+      public viz::ContextLostObserver {
  public:
-  explicit WebGraphicsContext3DProviderImpl(
+  WebGraphicsContext3DProviderImpl(
       scoped_refptr<ui::ContextProviderCommandBuffer> provider,
       bool software_rendering);
   ~WebGraphicsContext3DProviderImpl() override;
@@ -47,8 +49,14 @@
   }
 
  private:
+  // viz::ContextLostObserver implementation.
+  void OnContextLost() override;
+
   scoped_refptr<ui::ContextProviderCommandBuffer> provider_;
   const bool software_rendering_;
+  base::Closure context_lost_callback_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebGraphicsContext3DProviderImpl);
 };
 
 }  // namespace content