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