Home | History | Annotate | Download | only in html_viewer
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef MOJO_SERVICES_HTML_VIEWER_WEBLAYERTREEVIEW_IMPL_H_
      6 #define MOJO_SERVICES_HTML_VIEWER_WEBLAYERTREEVIEW_IMPL_H_
      7 
      8 #include "base/memory/ref_counted.h"
      9 #include "base/memory/scoped_ptr.h"
     10 #include "base/memory/weak_ptr.h"
     11 #include "base/single_thread_task_runner.h"
     12 #include "cc/trees/layer_tree_host_client.h"
     13 #include "mojo/cc/output_surface_mojo.h"
     14 #include "mojo/services/public/interfaces/gpu/gpu.mojom.h"
     15 #include "mojo/services/public/interfaces/surfaces/surfaces_service.mojom.h"
     16 #include "third_party/WebKit/public/platform/WebLayerTreeView.h"
     17 
     18 namespace base {
     19 class MessageLoopProxy;
     20 }
     21 
     22 namespace blink {
     23 class WebWidget;
     24 }
     25 
     26 namespace cc {
     27 class LayerTreeHost;
     28 }
     29 
     30 namespace mojo {
     31 class View;
     32 
     33 class WebLayerTreeViewImpl : public blink::WebLayerTreeView,
     34                              public cc::LayerTreeHostClient,
     35                              public OutputSurfaceMojoClient {
     36  public:
     37   WebLayerTreeViewImpl(
     38       scoped_refptr<base::MessageLoopProxy> compositor_message_loop_proxy,
     39       SurfacesServicePtr surfaces_service,
     40       GpuPtr gpu_service);
     41   virtual ~WebLayerTreeViewImpl();
     42 
     43   void set_widget(blink::WebWidget* widget) { widget_ = widget; }
     44   void set_view(View* view) { view_ = view; }
     45 
     46   // cc::LayerTreeHostClient implementation.
     47   virtual void WillBeginMainFrame(int frame_id) OVERRIDE;
     48   virtual void DidBeginMainFrame() OVERRIDE;
     49   virtual void BeginMainFrame(const cc::BeginFrameArgs& args) OVERRIDE;
     50   virtual void Layout() OVERRIDE;
     51   virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
     52                                    float page_scale,
     53                                    float top_controls_delta) OVERRIDE;
     54   virtual void RequestNewOutputSurface(bool fallback) OVERRIDE;
     55   virtual void DidInitializeOutputSurface() OVERRIDE;
     56   virtual void WillCommit() OVERRIDE;
     57   virtual void DidCommit() OVERRIDE;
     58   virtual void DidCommitAndDrawFrame() OVERRIDE;
     59   virtual void DidCompleteSwapBuffers() OVERRIDE;
     60   virtual void RateLimitSharedMainThreadContext() OVERRIDE {}
     61 
     62   // blink::WebLayerTreeView implementation.
     63   virtual void setSurfaceReady() OVERRIDE;
     64   virtual void setRootLayer(const blink::WebLayer& layer) OVERRIDE;
     65   virtual void clearRootLayer() OVERRIDE;
     66   virtual void setViewportSize(
     67       const blink::WebSize& device_viewport_size) OVERRIDE;
     68   virtual blink::WebSize deviceViewportSize() const OVERRIDE;
     69   virtual void setDeviceScaleFactor(float) OVERRIDE;
     70   virtual float deviceScaleFactor() const OVERRIDE;
     71   virtual void setBackgroundColor(blink::WebColor color) OVERRIDE;
     72   virtual void setHasTransparentBackground(
     73       bool has_transparent_background) OVERRIDE;
     74   virtual void setOverhangBitmap(const SkBitmap& bitmap) OVERRIDE;
     75   virtual void setVisible(bool visible) OVERRIDE;
     76   virtual void setPageScaleFactorAndLimits(float page_scale_factor,
     77                                            float minimum,
     78                                            float maximum) OVERRIDE;
     79   virtual void startPageScaleAnimation(const blink::WebPoint& destination,
     80                                        bool use_anchor,
     81                                        float new_page_scale,
     82                                        double duration_sec) OVERRIDE;
     83   virtual void heuristicsForGpuRasterizationUpdated(bool matches_heuristic) {}
     84   virtual void setTopControlsContentOffset(float offset) {}
     85   virtual void setNeedsAnimate() OVERRIDE;
     86   virtual bool commitRequested() const OVERRIDE;
     87   virtual void didStopFlinging() {}
     88   virtual void compositeAndReadbackAsync(
     89       blink::WebCompositeAndReadbackAsyncCallback* callback) {}
     90   virtual void finishAllRendering() OVERRIDE;
     91   virtual void setDeferCommits(bool defer_commits) {}
     92   virtual void registerForAnimations(blink::WebLayer* layer) OVERRIDE;
     93   virtual void registerViewportLayers(
     94       const blink::WebLayer* page_scale_layer,
     95       const blink::WebLayer* inner_viewport_scroll_layer,
     96       const blink::WebLayer* outer_viewport_scroll_layer) OVERRIDE;
     97   virtual void clearViewportLayers() OVERRIDE;
     98   virtual void registerSelection(const blink::WebSelectionBound& start,
     99                                  const blink::WebSelectionBound& end) {}
    100   virtual void clearSelection() {}
    101   virtual void setShowFPSCounter(bool) {}
    102   virtual void setShowPaintRects(bool) {}
    103   virtual void setShowDebugBorders(bool) {}
    104   virtual void setContinuousPaintingEnabled(bool) {}
    105   virtual void setShowScrollBottleneckRects(bool) {}
    106 
    107   // OutputSurfaceMojoClient implementation.
    108   virtual void DidCreateSurface(cc::SurfaceId id) OVERRIDE;
    109 
    110  private:
    111   void OnSurfaceConnectionCreated(SurfacePtr surface, uint32_t id_namespace);
    112   void DidCreateSurfaceOnMainThread(cc::SurfaceId id);
    113 
    114   // widget_ and view_ will outlive us.
    115   blink::WebWidget* widget_;
    116   View* view_;
    117   scoped_ptr<cc::LayerTreeHost> layer_tree_host_;
    118   SurfacesServicePtr surfaces_service_;
    119   scoped_ptr<cc::OutputSurface> output_surface_;
    120   GpuPtr gpu_service_;
    121   scoped_refptr<base::SingleThreadTaskRunner>
    122       main_thread_compositor_task_runner_;
    123   base::WeakPtr<WebLayerTreeViewImpl> main_thread_bound_weak_ptr_;
    124 
    125   base::WeakPtrFactory<WebLayerTreeViewImpl> weak_factory_;
    126   DISALLOW_COPY_AND_ASSIGN(WebLayerTreeViewImpl);
    127 };
    128 
    129 }  // namespace mojo
    130 
    131 #endif  // MOJO_SERVICES_HTML_VIEWER_WEBLAYERTREEVIEW_IMPL_H_
    132