OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 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 "config.h" | |
6 | |
7 #include "core/frame/FrameView.h" | |
8 #include "core/layout/LayoutView.h" | |
9 #include "core/layout/compositing/CompositedLayerMapping.h" | |
10 #include "core/layout/compositing/PaintLayerCompositor.h" | |
11 #include "core/page/Page.h" | |
12 #include "platform/graphics/GraphicsLayer.h" | |
13 #include "platform/testing/URLTestHelpers.h" | |
14 #include "public/platform/Platform.h" | |
15 #include "public/platform/WebCompositorMutableProperties.h" | |
16 #include "public/platform/WebLayer.h" | |
17 #include "public/platform/WebLayerTreeView.h" | |
18 #include "public/platform/WebUnitTestSupport.h" | |
19 #include "public/web/WebSettings.h" | |
20 #include "public/web/WebViewClient.h" | |
21 #include "web/WebLocalFrameImpl.h" | |
22 #include "web/WebViewImpl.h" | |
23 #include "web/tests/FrameTestHelpers.h" | |
24 #include <gtest/gtest.h> | |
25 | |
26 namespace blink { | |
27 | |
28 class CompositorWorkerTest : public testing::Test { | |
29 public: | |
30 CompositorWorkerTest() | |
31 : m_baseURL("http://www.test.com/") | |
32 { | |
33 RuntimeEnabledFeatures::setCompositorWorkerEnabled(true); | |
34 m_helper.initialize(true, 0, &m_mockWebViewClient, &configureSettings); | |
35 webViewImpl()->resize(IntSize(320, 240)); | |
36 | |
37 // OSX attaches main frame scrollbars to the VisualViewport so the Visua lViewport layers need | |
chrishtr
2015/12/01 23:17:03
Use the mock theme?
Ian Vollick
2015/12/02 00:39:33
These lines were copied from ScrollingCoordinatorT
| |
38 // to be initialized. | |
39 webViewImpl()->updateAllLifecyclePhases(); | |
40 webViewImpl()->setRootGraphicsLayer( | |
41 webViewImpl()->mainFrameImpl()->frame()->view()->layoutView()->compo sitor()->rootGraphicsLayer()); | |
42 } | |
43 | |
44 ~CompositorWorkerTest() override | |
45 { | |
46 Platform::current()->unitTestSupport()->unregisterAllMockedURLs(); | |
47 } | |
48 | |
49 void navigateTo(const std::string& url) | |
50 { | |
51 FrameTestHelpers::loadFrame(webViewImpl()->mainFrame(), url); | |
52 } | |
53 | |
54 void forceFullCompositingUpdate() | |
55 { | |
56 webViewImpl()->updateAllLifecyclePhases(); | |
57 } | |
58 | |
59 void registerMockedHttpURLLoad(const std::string& fileName) | |
60 { | |
61 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseU RL.c_str()), WebString::fromUTF8(fileName.c_str())); | |
62 } | |
63 | |
64 WebLayer* getRootScrollLayer() | |
65 { | |
66 PaintLayerCompositor* compositor = frame()->contentLayoutObject()->compo sitor(); | |
67 ASSERT(compositor); | |
68 ASSERT(compositor->scrollLayer()); | |
69 | |
70 WebLayer* webScrollLayer = compositor->scrollLayer()->platformLayer(); | |
71 return webScrollLayer; | |
72 } | |
73 | |
74 WebViewImpl* webViewImpl() const { return m_helper.webViewImpl(); } | |
75 LocalFrame* frame() const { return m_helper.webViewImpl()->mainFrameImpl()-> frame(); } | |
76 | |
77 protected: | |
78 std::string m_baseURL; | |
79 FrameTestHelpers::TestWebViewClient m_mockWebViewClient; | |
80 | |
81 private: | |
82 static void configureSettings(WebSettings* settings) | |
83 { | |
84 settings->setJavaScriptEnabled(true); | |
85 settings->setAcceleratedCompositingEnabled(true); | |
86 settings->setPreferCompositingToLCDTextEnabled(true); | |
87 } | |
88 | |
89 FrameTestHelpers::WebViewHelper m_helper; | |
90 FrameTestHelpers::UseMockScrollbarSettings m_mockScrollbarSettings; | |
91 }; | |
92 | |
93 static CompositedLayerMapping* mappingFromElement(Element* element) | |
94 { | |
95 if (!element) | |
96 return nullptr; | |
97 LayoutObject* layoutObject = element->layoutObject(); | |
98 if (!layoutObject || !layoutObject->isBoxModelObject()) | |
99 return nullptr; | |
100 PaintLayer* layer = toLayoutBoxModelObject(layoutObject)->layer(); | |
101 if (!layer) | |
102 return nullptr; | |
103 if (!layer->hasCompositedLayerMapping()) | |
104 return nullptr; | |
105 return layer->compositedLayerMapping(); | |
106 } | |
107 | |
108 static WebLayer* webLayerFromGraphicsLayer(GraphicsLayer* graphicsLayer) | |
109 { | |
110 if (!graphicsLayer) | |
111 return nullptr; | |
112 return graphicsLayer->platformLayer(); | |
113 } | |
114 | |
115 static WebLayer* scrollingWebLayerFromElement(Element* element) | |
116 { | |
117 CompositedLayerMapping* compositedLayerMapping = mappingFromElement(element) ; | |
118 if (!compositedLayerMapping) | |
119 return nullptr; | |
120 return webLayerFromGraphicsLayer(compositedLayerMapping->scrollingContentsLa yer()); | |
121 } | |
122 | |
123 static WebLayer* webLayerFromElement(Element* element) | |
124 { | |
125 CompositedLayerMapping* compositedLayerMapping = mappingFromElement(element) ; | |
126 if (!compositedLayerMapping) | |
127 return nullptr; | |
128 return webLayerFromGraphicsLayer(compositedLayerMapping->mainGraphicsLayer() ); | |
129 } | |
130 | |
131 TEST_F(CompositorWorkerTest, plumbingElementIdAndMutableProperties) | |
132 { | |
133 registerMockedHttpURLLoad("compositor-proxy-basic.html"); | |
134 navigateTo(m_baseURL + "compositor-proxy-basic.html"); | |
135 | |
136 forceFullCompositingUpdate(); | |
137 | |
138 Document* document = frame()->document(); | |
139 | |
140 Element* tallElement = document->getElementById("tall"); | |
141 WebLayer* tallLayer = webLayerFromElement(tallElement); | |
142 EXPECT_TRUE(!tallLayer); | |
143 | |
144 Element* proxiedElement = document->getElementById("proxied"); | |
145 WebLayer* proxiedLayer = webLayerFromElement(proxiedElement); | |
146 EXPECT_TRUE(proxiedLayer->compositorMutableProperties() & WebCompositorMutab lePropertyTransform); | |
147 EXPECT_FALSE(proxiedLayer->compositorMutableProperties() & (WebCompositorMut ablePropertyScrollLeft | WebCompositorMutablePropertyScrollTop | WebCompositorMu tablePropertyOpacity)); | |
148 EXPECT_NE(0UL, proxiedLayer->elementId()); | |
149 | |
150 Element* scrollElement = document->getElementById("proxied-scroller"); | |
151 WebLayer* scrollLayer = scrollingWebLayerFromElement(scrollElement); | |
152 EXPECT_TRUE(scrollLayer->compositorMutableProperties() & (WebCompositorMutab lePropertyScrollLeft | WebCompositorMutablePropertyScrollTop)); | |
153 EXPECT_FALSE(scrollLayer->compositorMutableProperties() & (WebCompositorMuta blePropertyTransform | WebCompositorMutablePropertyOpacity)); | |
154 EXPECT_NE(0UL, scrollLayer->elementId()); | |
155 | |
156 WebLayer* rootScrollLayer = getRootScrollLayer(); | |
157 EXPECT_TRUE(rootScrollLayer->compositorMutableProperties() & (WebCompositorM utablePropertyScrollLeft | WebCompositorMutablePropertyScrollTop)); | |
158 EXPECT_FALSE(rootScrollLayer->compositorMutableProperties() & (WebCompositor MutablePropertyTransform | WebCompositorMutablePropertyOpacity)); | |
159 | |
160 EXPECT_NE(0UL, rootScrollLayer->elementId()); | |
161 } | |
162 | |
163 TEST_F(CompositorWorkerTest, noProxies) | |
164 { | |
165 // This case is identical to compositor-proxy-basic, but no proxies have | |
166 // actually been created. | |
167 registerMockedHttpURLLoad("compositor-proxy-plumbing-no-proxies.html"); | |
168 navigateTo(m_baseURL + "compositor-proxy-plumbing-no-proxies.html"); | |
169 | |
170 forceFullCompositingUpdate(); | |
171 | |
172 Document* document = frame()->document(); | |
173 | |
174 Element* tallElement = document->getElementById("tall"); | |
175 WebLayer* tallLayer = webLayerFromElement(tallElement); | |
176 EXPECT_TRUE(!tallLayer); | |
177 | |
178 Element* proxiedElement = document->getElementById("proxied"); | |
179 WebLayer* proxiedLayer = webLayerFromElement(proxiedElement); | |
180 EXPECT_TRUE(!proxiedLayer); | |
181 | |
182 Element* scrollElement = document->getElementById("proxied-scroller"); | |
183 WebLayer* scrollLayer = scrollingWebLayerFromElement(scrollElement); | |
184 EXPECT_FALSE(!!scrollLayer->compositorMutableProperties()); | |
185 EXPECT_EQ(0UL, scrollLayer->elementId()); | |
186 | |
187 WebLayer* rootScrollLayer = getRootScrollLayer(); | |
188 EXPECT_FALSE(!!rootScrollLayer->compositorMutableProperties()); | |
189 EXPECT_EQ(0UL, rootScrollLayer->elementId()); | |
190 } | |
191 | |
192 TEST_F(CompositorWorkerTest, disconnectedProxies) | |
193 { | |
194 // This case is identical to compositor-proxy-basic, but the proxies are | |
195 // disconnected (the result should be the same as compositor-proxy-plumbing- no-proxies). | |
196 registerMockedHttpURLLoad("compositor-proxy-basic-disconnected.html"); | |
197 navigateTo(m_baseURL + "compositor-proxy-basic-disconnected.html"); | |
198 | |
199 forceFullCompositingUpdate(); | |
200 | |
201 Document* document = frame()->document(); | |
202 | |
203 Element* tallElement = document->getElementById("tall"); | |
204 WebLayer* tallLayer = webLayerFromElement(tallElement); | |
205 EXPECT_TRUE(!tallLayer); | |
206 | |
207 Element* proxiedElement = document->getElementById("proxied"); | |
208 WebLayer* proxiedLayer = webLayerFromElement(proxiedElement); | |
209 EXPECT_TRUE(!proxiedLayer); | |
210 | |
211 Element* scrollElement = document->getElementById("proxied-scroller"); | |
212 WebLayer* scrollLayer = scrollingWebLayerFromElement(scrollElement); | |
213 EXPECT_FALSE(!!scrollLayer->compositorMutableProperties()); | |
214 EXPECT_EQ(0UL, scrollLayer->elementId()); | |
215 | |
216 WebLayer* rootScrollLayer = getRootScrollLayer(); | |
217 EXPECT_FALSE(!!rootScrollLayer->compositorMutableProperties()); | |
218 EXPECT_EQ(0UL, rootScrollLayer->elementId()); | |
219 } | |
220 | |
221 } // namespace blink | |
OLD | NEW |