Chromium Code Reviews| 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 |