OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/layout/LayoutObject.h" | 5 #include "core/layout/LayoutObject.h" |
6 | 6 |
7 #include "core/frame/FrameView.h" | 7 #include "core/frame/FrameView.h" |
8 #include "core/layout/LayoutTestHelper.h" | 8 #include "core/layout/LayoutTestHelper.h" |
9 #include "core/layout/LayoutView.h" | 9 #include "core/layout/LayoutView.h" |
10 #include "platform/json/JSONValues.h" | 10 #include "platform/json/JSONValues.h" |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
132 " <div id='floating' style='float: left'>FLOAT</div>" | 132 " <div id='floating' style='float: left'>FLOAT</div>" |
133 " </div>" | 133 " </div>" |
134 "</div>"); | 134 "</div>"); |
135 | 135 |
136 LayoutBoxModelObject* layeredDiv = | 136 LayoutBoxModelObject* layeredDiv = |
137 toLayoutBoxModelObject(getLayoutObjectByElementId("layered-div")); | 137 toLayoutBoxModelObject(getLayoutObjectByElementId("layered-div")); |
138 LayoutBoxModelObject* container = | 138 LayoutBoxModelObject* container = |
139 toLayoutBoxModelObject(getLayoutObjectByElementId("container")); | 139 toLayoutBoxModelObject(getLayoutObjectByElementId("container")); |
140 LayoutObject* floating = getLayoutObjectByElementId("floating"); | 140 LayoutObject* floating = getLayoutObjectByElementId("floating"); |
141 | 141 |
142 EXPECT_TRUE(container->canContainFloatingObject(*floating)); | |
142 EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer()); | 143 EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer()); |
143 EXPECT_EQ(layeredDiv->layer(), floating->paintingLayer()); | 144 EXPECT_EQ(layeredDiv->layer(), floating->paintingLayer()); |
144 EXPECT_EQ(container, floating->container()); | 145 EXPECT_EQ(container, floating->container()); |
145 EXPECT_EQ(container, floating->containingBlock()); | 146 EXPECT_EQ(container, floating->containingBlock()); |
146 } | 147 } |
147 | 148 |
148 TEST_F(LayoutObjectTest, FloatUnderInline) { | 149 TEST_F(LayoutObjectTest, FloatUnderInline) { |
149 setBodyInnerHTML( | 150 setBodyInnerHTML( |
150 "<div id='layered-div' style='position: absolute'>" | 151 "<div id='layered-div' style='position: absolute'>" |
151 " <div id='container'>" | 152 " <div id='container'>" |
152 " <span id='layered-span' style='position: relative'>" | 153 " <span id='stacked-span' style='position: relative'>" |
153 " <div id='floating' style='float: left'>FLOAT</div>" | 154 " <div id='floating' style='float: left'>FLOAT</div>" |
154 " </span>" | 155 " </span>" |
155 " </div>" | 156 " </div>" |
156 "</div>"); | 157 "</div>"); |
157 | 158 |
158 LayoutBoxModelObject* layeredDiv = | 159 LayoutBoxModelObject* layeredDiv = |
159 toLayoutBoxModelObject(getLayoutObjectByElementId("layered-div")); | 160 toLayoutBoxModelObject(getLayoutObjectByElementId("layered-div")); |
160 LayoutBoxModelObject* container = | 161 LayoutBoxModelObject* container = |
161 toLayoutBoxModelObject(getLayoutObjectByElementId("container")); | 162 toLayoutBoxModelObject(getLayoutObjectByElementId("container")); |
162 LayoutBoxModelObject* layeredSpan = | 163 LayoutBoxModelObject* stackedSpan = |
163 toLayoutBoxModelObject(getLayoutObjectByElementId("layered-span")); | 164 toLayoutBoxModelObject(getLayoutObjectByElementId("stacked-span")); |
164 LayoutObject* floating = getLayoutObjectByElementId("floating"); | 165 LayoutObject* floating = getLayoutObjectByElementId("floating"); |
165 | 166 |
167 EXPECT_FALSE(stackedSpan->canContainFloatingObject(*floating)); | |
166 EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer()); | 168 EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer()); |
167 EXPECT_EQ(layeredSpan->layer(), layeredSpan->paintingLayer()); | 169 EXPECT_EQ(stackedSpan->layer(), stackedSpan->paintingLayer()); |
168 EXPECT_EQ(layeredDiv->layer(), floating->paintingLayer()); | 170 EXPECT_EQ(layeredDiv->layer(), floating->paintingLayer()); |
169 EXPECT_EQ(container, floating->container()); | 171 EXPECT_EQ(container, floating->container()); |
170 EXPECT_EQ(container, floating->containingBlock()); | 172 EXPECT_EQ(container, floating->containingBlock()); |
171 | 173 |
172 LayoutObject::AncestorSkipInfo skipInfo(layeredSpan); | 174 LayoutObject::AncestorSkipInfo skipInfo(stackedSpan); |
173 EXPECT_EQ(container, floating->container(&skipInfo)); | 175 EXPECT_EQ(container, floating->container(&skipInfo)); |
174 EXPECT_TRUE(skipInfo.ancestorSkipped()); | 176 EXPECT_TRUE(skipInfo.ancestorSkipped()); |
175 | 177 |
176 skipInfo = LayoutObject::AncestorSkipInfo(container); | 178 skipInfo = LayoutObject::AncestorSkipInfo(container); |
177 EXPECT_EQ(container, floating->container(&skipInfo)); | 179 EXPECT_EQ(container, floating->container(&skipInfo)); |
178 EXPECT_FALSE(skipInfo.ancestorSkipped()); | 180 EXPECT_FALSE(skipInfo.ancestorSkipped()); |
179 } | 181 } |
180 | 182 |
183 TEST_F(LayoutObjectTest, StackedFloatUnderStaticInline) { | |
184 setBodyInnerHTML( | |
185 "<div id='layered-div' style='position: absolute'>" | |
186 " <div id='container'>" | |
187 " <span id='span'>" | |
188 " <div id='floating' style='position: relative; float: left'>F</div>" | |
189 " </span>" | |
190 " </div>" | |
191 "</div>"); | |
192 | |
193 LayoutBoxModelObject* layeredDiv = | |
194 toLayoutBoxModelObject(getLayoutObjectByElementId("layered-div")); | |
195 LayoutBoxModelObject* container = | |
196 toLayoutBoxModelObject(getLayoutObjectByElementId("container")); | |
197 LayoutObject* span = getLayoutObjectByElementId("span"); | |
198 LayoutBoxModelObject* floating = | |
199 toLayoutBoxModelObject(getLayoutObjectByElementId("floating")); | |
200 | |
201 EXPECT_FALSE(span->canContainFloatingObject(*floating)); | |
202 EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer()); | |
203 EXPECT_EQ(layeredDiv->layer(), span->paintingLayer()); | |
204 EXPECT_EQ(floating->layer(), floating->paintingLayer()); | |
205 EXPECT_EQ(container, floating->container()); | |
206 EXPECT_EQ(container, floating->containingBlock()); | |
207 | |
208 LayoutObject::AncestorSkipInfo skipInfo(span); | |
209 EXPECT_EQ(container, floating->container(&skipInfo)); | |
210 EXPECT_TRUE(skipInfo.ancestorSkipped()); | |
211 | |
212 skipInfo = LayoutObject::AncestorSkipInfo(container); | |
213 EXPECT_EQ(container, floating->container(&skipInfo)); | |
214 EXPECT_FALSE(skipInfo.ancestorSkipped()); | |
215 } | |
216 | |
217 TEST_F(LayoutObjectTest, StackedFloatUnderStackedInline) { | |
218 setBodyInnerHTML( | |
219 "<div id='layered-div' style='position: absolute'>" | |
220 " <div id='container'>" | |
221 " <span id='stacked-span' style='position: relative'>" | |
222 " <div id='floating' style='position: relative; float: left'>F</div>" | |
223 " </span>" | |
224 " </div>" | |
225 "</div>"); | |
226 | |
227 LayoutBoxModelObject* layeredDiv = | |
228 toLayoutBoxModelObject(getLayoutObjectByElementId("layered-div")); | |
229 LayoutBoxModelObject* container = | |
230 toLayoutBoxModelObject(getLayoutObjectByElementId("container")); | |
231 LayoutBoxModelObject* stackedSpan = | |
232 toLayoutBoxModelObject(getLayoutObjectByElementId("stacked-span")); | |
233 LayoutBoxModelObject* floating = | |
234 toLayoutBoxModelObject(getLayoutObjectByElementId("floating")); | |
235 | |
236 EXPECT_TRUE(stackedSpan->canContainFloatingObject(*floating)); | |
237 EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer()); | |
238 EXPECT_EQ(stackedSpan->layer(), stackedSpan->paintingLayer()); | |
239 EXPECT_EQ(floating->layer(), floating->paintingLayer()); | |
240 EXPECT_EQ(stackedSpan, floating->container()); | |
241 EXPECT_EQ(container, floating->containingBlock()); | |
chrishtr
2017/01/21 02:14:59
Can you explain to me why containingBlock disagree
| |
242 | |
243 LayoutObject::AncestorSkipInfo skipInfo(stackedSpan); | |
244 EXPECT_EQ(stackedSpan, floating->container(&skipInfo)); | |
245 EXPECT_FALSE(skipInfo.ancestorSkipped()); | |
246 } | |
247 | |
248 TEST_F(LayoutObjectTest, StackedFloatIndirectlyUnderStackedInline) { | |
249 setBodyInnerHTML( | |
250 "<div id='layered-div' style='position: absolute'>" | |
251 " <div id='container'>" | |
252 " <span id='stacked-span' style='opacity: 0.5'>" | |
253 " <span id='span'>" | |
254 " <div id='floating' style='position: relative; float: left'>" | |
255 " FLOAT" | |
256 " </div>" | |
257 " </span>" | |
258 " </span>" | |
259 " </div>" | |
260 "</div>"); | |
261 | |
262 LayoutBoxModelObject* layeredDiv = | |
263 toLayoutBoxModelObject(getLayoutObjectByElementId("layered-div")); | |
264 LayoutBoxModelObject* container = | |
265 toLayoutBoxModelObject(getLayoutObjectByElementId("container")); | |
266 LayoutBoxModelObject* stackedSpan = | |
267 toLayoutBoxModelObject(getLayoutObjectByElementId("stacked-span")); | |
268 LayoutObject* span = getLayoutObjectByElementId("span"); | |
269 LayoutBoxModelObject* floating = | |
270 toLayoutBoxModelObject(getLayoutObjectByElementId("floating")); | |
271 | |
272 EXPECT_TRUE(stackedSpan->canContainFloatingObject(*floating)); | |
273 EXPECT_FALSE(span->canContainFloatingObject(*floating)); | |
274 EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer()); | |
275 EXPECT_EQ(stackedSpan->layer(), stackedSpan->paintingLayer()); | |
276 EXPECT_EQ(floating->layer(), floating->paintingLayer()); | |
277 EXPECT_EQ(stackedSpan, floating->container()); | |
278 EXPECT_EQ(container, floating->containingBlock()); | |
279 | |
280 LayoutObject::AncestorSkipInfo skipInfo(span); | |
281 EXPECT_EQ(stackedSpan, floating->container(&skipInfo)); | |
282 EXPECT_TRUE(skipInfo.ancestorSkipped()); | |
283 | |
284 skipInfo = LayoutObject::AncestorSkipInfo(stackedSpan); | |
285 EXPECT_EQ(stackedSpan, floating->container(&skipInfo)); | |
286 EXPECT_FALSE(skipInfo.ancestorSkipped()); | |
287 } | |
288 | |
181 TEST_F(LayoutObjectTest, MutableForPaintingClearPaintFlags) { | 289 TEST_F(LayoutObjectTest, MutableForPaintingClearPaintFlags) { |
182 LayoutObject* object = document().body()->layoutObject(); | 290 LayoutObject* object = document().body()->layoutObject(); |
183 object->setShouldDoFullPaintInvalidation(); | 291 object->setShouldDoFullPaintInvalidation(); |
184 EXPECT_TRUE(object->shouldDoFullPaintInvalidation()); | 292 EXPECT_TRUE(object->shouldDoFullPaintInvalidation()); |
185 object->m_bitfields.setChildShouldCheckForPaintInvalidation(true); | 293 object->m_bitfields.setChildShouldCheckForPaintInvalidation(true); |
186 EXPECT_TRUE(object->m_bitfields.childShouldCheckForPaintInvalidation()); | 294 EXPECT_TRUE(object->m_bitfields.childShouldCheckForPaintInvalidation()); |
187 object->setMayNeedPaintInvalidation(); | 295 object->setMayNeedPaintInvalidation(); |
188 EXPECT_TRUE(object->mayNeedPaintInvalidation()); | 296 EXPECT_TRUE(object->mayNeedPaintInvalidation()); |
189 object->setMayNeedPaintInvalidationSubtree(); | 297 object->setMayNeedPaintInvalidationSubtree(); |
190 EXPECT_TRUE(object->mayNeedPaintInvalidationSubtree()); | 298 EXPECT_TRUE(object->mayNeedPaintInvalidationSubtree()); |
(...skipping 17 matching lines...) Expand all Loading... | |
208 EXPECT_FALSE(object->mayNeedPaintInvalidation()); | 316 EXPECT_FALSE(object->mayNeedPaintInvalidation()); |
209 EXPECT_FALSE(object->mayNeedPaintInvalidationSubtree()); | 317 EXPECT_FALSE(object->mayNeedPaintInvalidationSubtree()); |
210 EXPECT_FALSE(object->mayNeedPaintInvalidationAnimatedBackgroundImage()); | 318 EXPECT_FALSE(object->mayNeedPaintInvalidationAnimatedBackgroundImage()); |
211 EXPECT_FALSE(object->shouldInvalidateSelection()); | 319 EXPECT_FALSE(object->shouldInvalidateSelection()); |
212 EXPECT_FALSE(object->backgroundChangedSinceLastPaintInvalidation()); | 320 EXPECT_FALSE(object->backgroundChangedSinceLastPaintInvalidation()); |
213 EXPECT_FALSE(object->needsPaintPropertyUpdate()); | 321 EXPECT_FALSE(object->needsPaintPropertyUpdate()); |
214 EXPECT_FALSE(object->descendantNeedsPaintPropertyUpdate()); | 322 EXPECT_FALSE(object->descendantNeedsPaintPropertyUpdate()); |
215 } | 323 } |
216 | 324 |
217 } // namespace blink | 325 } // namespace blink |
OLD | NEW |