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..36547ba9e70a050a00a4b00c51c7f799ae3f150d |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/layout/PaintContainmentTest.cpp |
@@ -0,0 +1,55 @@ |
+// 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()); |
+ 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); |
+} |
+ |
+} |