Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/PaintContainmentTest.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/PaintContainmentTest.cpp b/third_party/WebKit/Source/core/layout/PaintContainmentTest.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ffaa50473e1f1e7d2ad374a1f0247c92623ad90f |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/core/layout/PaintContainmentTest.cpp |
| @@ -0,0 +1,54 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "config.h" |
| + |
| +#include "core/layout/LayoutBlock.h" |
| +#include "core/layout/LayoutInline.h" |
| +#include "core/layout/LayoutTestHelper.h" |
| +#include "core/paint/PaintLayer.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace blink { |
| + |
| +class PaintContainmentTest : public RenderingTest { |
| +}; |
| + |
| +static void checkIsClippingStackingContextAndContainer(LayoutBoxModelObject& obj) |
| +{ |
| + EXPECT_TRUE(obj.canContainFixedPositionObjects()); |
| + EXPECT_TRUE(obj.hasClipRelatedProperty()); |
|
chrishtr
2015/12/11 23:39:19
EXPECT_TRUE(obj.style()->containsPaint())
|
| + |
| + // TODO(leviw): Ideally, we wouldn't require a paint layer to handle the clipping |
| + // and stacking performed by paint containment. |
| + ASSERT(obj.layer()); |
| + PaintLayer* layer = obj.layer(); |
| + EXPECT_TRUE(layer->stackingNode() && layer->stackingNode()->isStackingContext()); |
| +} |
| + |
| +TEST_F(PaintContainmentTest, BlockPaintContainment) |
| +{ |
| + setBodyInnerHTML("<div id='div' style='contain: paint'></div>"); |
| + Element* div = document().getElementById(AtomicString("div")); |
| + ASSERT(div); |
| + LayoutObject* obj = div->layoutObject(); |
| + ASSERT(obj && obj->isLayoutBlock()); |
| + LayoutBlock& block = toLayoutBlock(*obj); |
| + EXPECT_TRUE(block.createsNewFormattingContext()); |
| + EXPECT_FALSE(block.canBeScrolledAndHasScrollableArea()); |
| + checkIsClippingStackingContextAndContainer(block); |
| +} |
| + |
| +TEST_F(PaintContainmentTest, InlinePaintContainment) |
| +{ |
| + setBodyInnerHTML("<div><span id='test' style='contain: paint'>Foo</span></div>"); |
| + Element* span = document().getElementById(AtomicString("test")); |
| + ASSERT(span); |
| + LayoutObject* obj = span->layoutObject(); |
| + ASSERT(obj && obj->isInline()); |
| + LayoutInline& layoutInline = toLayoutInline(*obj); |
| + checkIsClippingStackingContextAndContainer(layoutInline); |
| +} |
| + |
| +} |