1// Copyright 2013 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#include "content/test/web_layer_tree_view_impl_for_testing.h"
6
7#include "base/command_line.h"
8#include "base/strings/string_number_conversions.h"
9#include "base/synchronization/lock.h"
10#include "cc/base/switches.h"
11#include "cc/blink/web_layer_impl.h"
12#include "cc/input/input_handler.h"
13#include "cc/layers/layer.h"
14#include "cc/output/output_surface.h"
15#include "cc/test/test_context_provider.h"
16#include "cc/trees/layer_tree_host.h"
17#include "content/test/test_webkit_platform_support.h"
18#include "third_party/WebKit/public/platform/Platform.h"
19#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
20#include "third_party/WebKit/public/platform/WebLayer.h"
21#include "third_party/WebKit/public/platform/WebLayerTreeView.h"
22#include "third_party/WebKit/public/platform/WebSize.h"
23#include "ui/gfx/frame_time.h"
24
25using blink::WebColor;
26using blink::WebGraphicsContext3D;
27using blink::WebRect;
28using blink::WebSize;
29
30namespace content {
31
32WebLayerTreeViewImplForTesting::WebLayerTreeViewImplForTesting() {}
33
34WebLayerTreeViewImplForTesting::~WebLayerTreeViewImplForTesting() {}
35
36void WebLayerTreeViewImplForTesting::Initialize() {
37  cc::LayerTreeSettings settings;
38
39  // For web contents, layer transforms should scale up the contents of layers
40  // to keep content always crisp when possible.
41  settings.layer_transforms_should_scale_layer_contents = true;
42
43  // Accelerated animations are enabled for unit tests.
44  settings.accelerated_animation_enabled = true;
45  layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded(
46      this, this, NULL, settings, base::MessageLoopProxy::current());
47  DCHECK(layer_tree_host_);
48}
49
50void WebLayerTreeViewImplForTesting::setSurfaceReady() {
51  layer_tree_host_->SetLayerTreeHostClientReady();
52}
53
54void WebLayerTreeViewImplForTesting::setRootLayer(
55    const blink::WebLayer& root) {
56  layer_tree_host_->SetRootLayer(
57      static_cast<const cc_blink::WebLayerImpl*>(&root)->layer());
58}
59
60void WebLayerTreeViewImplForTesting::clearRootLayer() {
61  layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>());
62}
63
64void WebLayerTreeViewImplForTesting::setViewportSize(
65    const WebSize& unused_deprecated,
66    const WebSize& device_viewport_size) {
67  layer_tree_host_->SetViewportSize(device_viewport_size);
68}
69
70void WebLayerTreeViewImplForTesting::setViewportSize(
71    const WebSize& device_viewport_size) {
72  layer_tree_host_->SetViewportSize(device_viewport_size);
73}
74
75WebSize WebLayerTreeViewImplForTesting::layoutViewportSize() const {
76  return layer_tree_host_->device_viewport_size();
77}
78
79WebSize WebLayerTreeViewImplForTesting::deviceViewportSize() const {
80  return layer_tree_host_->device_viewport_size();
81}
82
83void WebLayerTreeViewImplForTesting::setDeviceScaleFactor(
84    float device_scale_factor) {
85  layer_tree_host_->SetDeviceScaleFactor(device_scale_factor);
86}
87
88float WebLayerTreeViewImplForTesting::deviceScaleFactor() const {
89  return layer_tree_host_->device_scale_factor();
90}
91
92void WebLayerTreeViewImplForTesting::setBackgroundColor(WebColor color) {
93  layer_tree_host_->set_background_color(color);
94}
95
96void WebLayerTreeViewImplForTesting::setHasTransparentBackground(
97    bool transparent) {
98  layer_tree_host_->set_has_transparent_background(transparent);
99}
100
101void WebLayerTreeViewImplForTesting::setVisible(bool visible) {
102  layer_tree_host_->SetVisible(visible);
103}
104
105void WebLayerTreeViewImplForTesting::setPageScaleFactorAndLimits(
106    float page_scale_factor,
107    float minimum,
108    float maximum) {
109  layer_tree_host_->SetPageScaleFactorAndLimits(
110      page_scale_factor, minimum, maximum);
111}
112
113void WebLayerTreeViewImplForTesting::startPageScaleAnimation(
114    const blink::WebPoint& scroll,
115    bool use_anchor,
116    float new_page_scale,
117    double duration_sec) {}
118
119void WebLayerTreeViewImplForTesting::setNeedsAnimate() {
120  layer_tree_host_->SetNeedsAnimate();
121}
122
123bool WebLayerTreeViewImplForTesting::commitRequested() const {
124  return layer_tree_host_->CommitRequested();
125}
126
127void WebLayerTreeViewImplForTesting::didStopFlinging() {}
128
129void WebLayerTreeViewImplForTesting::finishAllRendering() {
130  layer_tree_host_->FinishAllRendering();
131}
132
133void WebLayerTreeViewImplForTesting::setDeferCommits(bool defer_commits) {
134  layer_tree_host_->SetDeferCommits(defer_commits);
135}
136
137void WebLayerTreeViewImplForTesting::Layout() {
138}
139
140void WebLayerTreeViewImplForTesting::ApplyViewportDeltas(
141    const gfx::Vector2d& scroll_delta,
142    float page_scale,
143    float top_controls_delta) {}
144
145void WebLayerTreeViewImplForTesting::RequestNewOutputSurface(
146    bool fallback) {
147  layer_tree_host_->SetOutputSurface(make_scoped_ptr(
148      new cc::OutputSurface(cc::TestContextProvider::Create())));
149}
150
151void WebLayerTreeViewImplForTesting::registerViewportLayers(
152    const blink::WebLayer* pageScaleLayer,
153    const blink::WebLayer* innerViewportScrollLayer,
154    const blink::WebLayer* outerViewportScrollLayer) {
155  layer_tree_host_->RegisterViewportLayers(
156      static_cast<const cc_blink::WebLayerImpl*>(pageScaleLayer)->layer(),
157      static_cast<const cc_blink::WebLayerImpl*>(innerViewportScrollLayer)
158          ->layer(),
159      // The outer viewport layer will only exist when using pinch virtual
160      // viewports.
161      outerViewportScrollLayer ? static_cast<const cc_blink::WebLayerImpl*>(
162                                     outerViewportScrollLayer)->layer()
163                               : NULL);
164}
165
166void WebLayerTreeViewImplForTesting::clearViewportLayers() {
167  layer_tree_host_->RegisterViewportLayers(scoped_refptr<cc::Layer>(),
168                                           scoped_refptr<cc::Layer>(),
169                                           scoped_refptr<cc::Layer>());
170}
171
172void WebLayerTreeViewImplForTesting::registerSelection(
173    const blink::WebSelectionBound& start,
174    const blink::WebSelectionBound& end) {
175}
176
177void WebLayerTreeViewImplForTesting::clearSelection() {
178}
179
180}  // namespace content
181