Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp

Issue 2642763009: Fix paint and rect mapping issues for stacked float under stacked inline (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698