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.
5 #ifndef MOJO_SERVICES_HTML_VIEWER_WEBLAYERTREEVIEW_IMPL_H_
6 #define MOJO_SERVICES_HTML_VIEWER_WEBLAYERTREEVIEW_IMPL_H_
8 #include "base/macros.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/weak_ptr.h"
12 #include "base/single_thread_task_runner.h"
13 #include "cc/trees/layer_tree_host_client.h"
14 #include "mojo/cc/output_surface_mojo.h"
15 #include "mojo/services/public/interfaces/gpu/gpu.mojom.h"
16 #include "mojo/services/public/interfaces/surfaces/surfaces_service.mojom.h"
17 #include "third_party/WebKit/public/platform/WebLayerTreeView.h"
20 class MessageLoopProxy
;
34 class WebLayerTreeViewImpl
: public blink::WebLayerTreeView
,
35 public cc::LayerTreeHostClient
,
36 public OutputSurfaceMojoClient
{
39 scoped_refptr
<base::MessageLoopProxy
> compositor_message_loop_proxy
,
40 SurfacesServicePtr surfaces_service
,
42 virtual ~WebLayerTreeViewImpl();
44 void set_widget(blink::WebWidget
* widget
) { widget_
= widget
; }
45 void set_view(View
* view
) { view_
= view
; }
47 // cc::LayerTreeHostClient implementation.
48 void WillBeginMainFrame(int frame_id
) override
;
49 void DidBeginMainFrame() override
;
50 void BeginMainFrame(const cc::BeginFrameArgs
& args
) override
;
51 void Layout() override
;
52 void ApplyViewportDeltas(const gfx::Vector2d
& inner_delta
,
53 const gfx::Vector2d
& outer_delta
,
54 const gfx::Vector2dF
& elastic_overscroll_delta
,
56 float top_controls_delta
) override
;
57 void ApplyViewportDeltas(const gfx::Vector2d
& scroll_delta
,
59 float top_controls_delta
) override
;
60 void RequestNewOutputSurface() override
;
61 void DidFailToInitializeOutputSurface() override
;
62 void DidInitializeOutputSurface() override
;
63 void WillCommit() override
;
64 void DidCommit() override
;
65 void DidCommitAndDrawFrame() override
;
66 void DidCompleteSwapBuffers() override
;
67 void RateLimitSharedMainThreadContext() override
{}
69 // blink::WebLayerTreeView implementation.
70 virtual void setSurfaceReady() override
;
71 virtual void setRootLayer(const blink::WebLayer
& layer
) override
;
72 virtual void clearRootLayer() override
;
73 virtual void setViewportSize(
74 const blink::WebSize
& device_viewport_size
) override
;
75 virtual blink::WebSize
deviceViewportSize() const override
;
76 virtual void setDeviceScaleFactor(float) override
;
77 virtual float deviceScaleFactor() const override
;
78 virtual void setBackgroundColor(blink::WebColor color
) override
;
79 virtual void setHasTransparentBackground(
80 bool has_transparent_background
) override
;
81 virtual void setOverhangBitmap(const SkBitmap
& bitmap
) override
;
82 virtual void setVisible(bool visible
) override
;
83 virtual void setPageScaleFactorAndLimits(float page_scale_factor
,
85 float maximum
) override
;
86 virtual void startPageScaleAnimation(const blink::WebPoint
& destination
,
89 double duration_sec
) override
;
90 virtual void heuristicsForGpuRasterizationUpdated(bool matches_heuristic
) {}
91 virtual void setTopControlsContentOffset(float offset
) {}
92 virtual void setNeedsAnimate() override
;
93 virtual bool commitRequested() const override
;
94 virtual void didStopFlinging() {}
95 virtual void compositeAndReadbackAsync(
96 blink::WebCompositeAndReadbackAsyncCallback
* callback
) {}
97 virtual void finishAllRendering() override
;
98 virtual void setDeferCommits(bool defer_commits
) {}
99 virtual void registerForAnimations(blink::WebLayer
* layer
) override
;
100 virtual void registerViewportLayers(
101 const blink::WebLayer
* overscrollElasticityLayer
,
102 const blink::WebLayer
* pageScaleLayerLayer
,
103 const blink::WebLayer
* innerViewportScrollLayer
,
104 const blink::WebLayer
* outerViewportScrollLayer
) override
;
105 virtual void clearViewportLayers() override
;
106 virtual void registerSelection(const blink::WebSelectionBound
& start
,
107 const blink::WebSelectionBound
& end
) {}
108 virtual void clearSelection() {}
109 virtual void setShowFPSCounter(bool) {}
110 virtual void setShowPaintRects(bool) {}
111 virtual void setShowDebugBorders(bool) {}
112 virtual void setContinuousPaintingEnabled(bool) {}
113 virtual void setShowScrollBottleneckRects(bool) {}
115 // OutputSurfaceMojoClient implementation.
116 void DidCreateSurface(cc::SurfaceId id
) override
;
119 void OnSurfaceConnectionCreated(SurfacePtr surface
, uint32_t id_namespace
);
120 void DidCreateSurfaceOnMainThread(cc::SurfaceId id
);
122 // widget_ and view_ will outlive us.
123 blink::WebWidget
* widget_
;
125 scoped_ptr
<cc::LayerTreeHost
> layer_tree_host_
;
126 SurfacesServicePtr surfaces_service_
;
127 scoped_ptr
<cc::OutputSurface
> output_surface_
;
129 scoped_refptr
<base::SingleThreadTaskRunner
>
130 main_thread_compositor_task_runner_
;
131 base::WeakPtr
<WebLayerTreeViewImpl
> main_thread_bound_weak_ptr_
;
133 base::WeakPtrFactory
<WebLayerTreeViewImpl
> weak_factory_
;
134 DISALLOW_COPY_AND_ASSIGN(WebLayerTreeViewImpl
);
139 #endif // MOJO_SERVICES_HTML_VIEWER_WEBLAYERTREEVIEW_IMPL_H_