| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/paint/PaintLayerScrollableAreaTest.h" | 5 #include "core/paint/PaintLayerScrollableAreaTest.h" |
| 6 | 6 |
| 7 #include "platform/graphics/GraphicsLayer.h" | 7 #include "platform/graphics/GraphicsLayer.h" |
| 8 | 8 |
| 9 namespace blink { | 9 namespace blink { |
| 10 | 10 |
| 11 TEST_F(PaintLayerScrollableAreaTest, ShouldPaintBackgroundOntoScrollingContentsL
ayer) | 11 TEST_F(PaintLayerScrollableAreaTest, CanPaintBackgroundOntoScrollingContentsLaye
r) |
| 12 { | 12 { |
| 13 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); | 13 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); |
| 14 setBodyInnerHTML( | 14 setBodyInnerHTML( |
| 15 "<style>" | 15 "<style>" |
| 16 ".scroller { overflow: scroll; will-change: transform; width: 300px; hei
ght: 300px;} .spacer { height: 1000px; }" | 16 ".scroller { overflow: scroll; will-change: transform; width: 300px; hei
ght: 300px;} .spacer { height: 1000px; }" |
| 17 "#scroller13::-webkit-scrollbar { width: 13px; height: 13px;}" | 17 "#scroller13::-webkit-scrollbar { width: 13px; height: 13px;}" |
| 18 "</style>" | 18 "</style>" |
| 19 "<div id='scroller1' class='scroller' style='background: white local;'>" | 19 "<div id='scroller1' class='scroller' style='background: white local;'>" |
| 20 " <div id='negative-composited-child' style='background-color: red; w
idth: 1px; height: 1px; position: absolute; backface-visibility: hidden; z-index
: -1'></div>" | 20 " <div id='negative-composited-child' style='background-color: red; w
idth: 1px; height: 1px; position: absolute; backface-visibility: hidden; z-index
: -1'></div>" |
| 21 " <div class='spacer'></div>" | 21 " <div class='spacer'></div>" |
| 22 "</div>" | 22 "</div>" |
| 23 "<div id='scroller2' class='scroller' style='background: white content-b
ox; padding: 10px;'><div class='spacer'></div></div>" | 23 "<div id='scroller2' class='scroller' style='background: white content-b
ox; padding: 10px;'><div class='spacer'></div></div>" |
| 24 "<div id='scroller3' class='scroller' style='background: white local con
tent-box; padding: 10px;'><div class='spacer'></div></div>" | 24 "<div id='scroller3' class='scroller' style='background: white local con
tent-box; padding: 10px;'><div class='spacer'></div></div>" |
| 25 "<div id='scroller4' class='scroller' style='background: url(data:image/
png;base64,iVBORw0KGgoAAAANSUhEUg), white local;'><div class='spacer'></div></di
v>" | 25 "<div id='scroller4' class='scroller' style='background: url(data:image/
png;base64,iVBORw0KGgoAAAANSUhEUg), white local;'><div class='spacer'></div></di
v>" |
| 26 "<div id='scroller5' class='scroller' style='background: url(data:image/
png;base64,iVBORw0KGgoAAAANSUhEUg) local, white local;'><div class='spacer'></di
v></div>" | 26 "<div id='scroller5' class='scroller' style='background: url(data:image/
png;base64,iVBORw0KGgoAAAANSUhEUg) local, white local;'><div class='spacer'></di
v></div>" |
| 27 "<div id='scroller6' class='scroller' style='background: url(data:image/
png;base64,iVBORw0KGgoAAAANSUhEUg) local, white padding-box; padding: 10px;'><di
v class='spacer'></div></div>" | 27 "<div id='scroller6' class='scroller' style='background: url(data:image/
png;base64,iVBORw0KGgoAAAANSUhEUg) local, white padding-box; padding: 10px;'><di
v class='spacer'></div></div>" |
| 28 "<div id='scroller7' class='scroller' style='background: url(data:image/
png;base64,iVBORw0KGgoAAAANSUhEUg) local, white content-box; padding: 10px;'><di
v class='spacer'></div></div>" | 28 "<div id='scroller7' class='scroller' style='background: url(data:image/
png;base64,iVBORw0KGgoAAAANSUhEUg) local, white content-box; padding: 10px;'><di
v class='spacer'></div></div>" |
| 29 "<div id='scroller8' class='scroller' style='background: white border-bo
x;'><div class='spacer'></div></div>" | 29 "<div id='scroller8' class='scroller' style='background: white border-bo
x;'><div class='spacer'></div></div>" |
| 30 "<div id='scroller9' class='scroller' style='background: white border-bo
x; border: 10px solid black;'><div class='spacer'></div></div>" | 30 "<div id='scroller9' class='scroller' style='background: white border-bo
x; border: 10px solid black;'><div class='spacer'></div></div>" |
| 31 "<div id='scroller10' class='scroller' style='background: white border-b
ox; border: 10px solid rgba(0, 0, 0, 0.5);'><div class='spacer'></div></div>" | 31 "<div id='scroller10' class='scroller' style='background: white border-b
ox; border: 10px solid rgba(0, 0, 0, 0.5);'><div class='spacer'></div></div>" |
| 32 "<div id='scroller11' class='scroller' style='background: white content-
box;'><div class='spacer'></div></div>" | 32 "<div id='scroller11' class='scroller' style='background: white content-
box;'><div class='spacer'></div></div>" |
| 33 "<div id='scroller12' class='scroller' style='background: white content-
box; padding: 10px;'><div class='spacer'></div></div>" | 33 "<div id='scroller12' class='scroller' style='background: white content-
box; padding: 10px;'><div class='spacer'></div></div>" |
| 34 "<div id='scroller13' class='scroller' style='background: white border-b
ox;'><div class='spacer'></div></div>" | 34 "<div id='scroller13' class='scroller' style='background: white border-b
ox;'><div class='spacer'></div></div>" |
| 35 "<div id='scroller14' class='scroller' style='background: white; border:
1px solid black; outline: 1px solid blue; outline-offset: -1px;'><div class='sp
acer'></div></div>" | 35 "<div id='scroller14' class='scroller' style='background: white; border:
1px solid black; outline: 1px solid blue; outline-offset: -1px;'><div class='sp
acer'></div></div>" |
| 36 "<div id='scroller15' class='scroller' style='background: white; border:
1px solid black; outline: 1px solid blue; outline-offset: -2px;'><div class='sp
acer'></div></div>" | 36 "<div id='scroller15' class='scroller' style='background: white; border:
1px solid black; outline: 1px solid blue; outline-offset: -2px;'><div class='sp
acer'></div></div>" |
| 37 "<div id='scroller16' class='scroller' style='background: white; border
1px solid black; border-radius: 2px;'><div class='spacer'></div></div>" | 37 "<div id='scroller16' class='scroller' style='background: white; clip: r
ect(0px,10px,10px,0px);'><div class='spacer'></div></div>" |
| 38 "<div id='scroller17' class='scroller' style='background: white; clip: r
ect(0px,10px,10px,0px);'><div class='spacer'></div></div>" | |
| 39 ); | 38 ); |
| 40 | 39 |
| 41 // #scroller1 cannot paint background into scrolling contents layer because
it has a negative z-index child. | 40 // #scroller1 cannot paint background into scrolling contents layer because
it has a negative z-index child. |
| 42 EXPECT_FALSE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller1")); | 41 EXPECT_FALSE(canPaintBackgroundOntoScrollingContentsLayer("scroller1")); |
| 43 | 42 |
| 44 // #scroller2 cannot paint background into scrolling contents layer because
it has a content-box clip without local attachment. | 43 // #scroller2 cannot paint background into scrolling contents layer because
it has a content-box clip without local attachment. |
| 45 EXPECT_FALSE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller2")); | 44 EXPECT_FALSE(canPaintBackgroundOntoScrollingContentsLayer("scroller2")); |
| 46 | 45 |
| 47 // #scroller3 can paint background into scrolling contents layer. | 46 // #scroller3 can paint background into scrolling contents layer. |
| 48 EXPECT_TRUE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller3")); | 47 EXPECT_TRUE(canPaintBackgroundOntoScrollingContentsLayer("scroller3")); |
| 49 | 48 |
| 50 // #scroller4 cannot paint background into scrolling contents layer because
the background image is not locally attached. | 49 // #scroller4 cannot paint background into scrolling contents layer because
the background image is not locally attached. |
| 51 EXPECT_FALSE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller4")); | 50 EXPECT_FALSE(canPaintBackgroundOntoScrollingContentsLayer("scroller4")); |
| 52 | 51 |
| 53 // #scroller5 can paint background into scrolling contents layer because bot
h the image and color are locally attached. | 52 // #scroller5 can paint background into scrolling contents layer because bot
h the image and color are locally attached. |
| 54 EXPECT_TRUE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller5")); | 53 EXPECT_TRUE(canPaintBackgroundOntoScrollingContentsLayer("scroller5")); |
| 55 | 54 |
| 56 // #scroller6 can paint background into scrolling contents layer because the
image is locally attached and even though | 55 // #scroller6 can paint background into scrolling contents layer because the
image is locally attached and even though |
| 57 // the color is not, it is filled to the padding box so it will be drawn the
same as a locally attached background. | 56 // the color is not, it is filled to the padding box so it will be drawn the
same as a locally attached background. |
| 58 EXPECT_TRUE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller6")); | 57 EXPECT_TRUE(canPaintBackgroundOntoScrollingContentsLayer("scroller6")); |
| 59 | 58 |
| 60 // #scroller7 cannot paint background into scrolling contents layer because
the color is filled to the content | 59 // #scroller7 cannot paint background into scrolling contents layer because
the color is filled to the content |
| 61 // box and we have padding so it is not equivalent to a locally attached bac
kground. | 60 // box and we have padding so it is not equivalent to a locally attached bac
kground. |
| 62 EXPECT_FALSE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller7")); | 61 EXPECT_FALSE(canPaintBackgroundOntoScrollingContentsLayer("scroller7")); |
| 63 | 62 |
| 64 // #scroller8 can paint background into scrolling contents layer because its
border-box is equivalent to its | 63 // #scroller8 can paint background into scrolling contents layer because its
border-box is equivalent to its |
| 65 // padding box since it has no border. | 64 // padding box since it has no border. |
| 66 EXPECT_TRUE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller8")); | 65 EXPECT_TRUE(canPaintBackgroundOntoScrollingContentsLayer("scroller8")); |
| 67 | 66 |
| 68 // #scroller9 can paint background into scrolling contents layer because its
border is opaque so it completely | 67 // #scroller9 can paint background into scrolling contents layer because its
border is opaque so it completely |
| 69 // covers the background outside of the padding-box. | 68 // covers the background outside of the padding-box. |
| 70 EXPECT_TRUE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller9")); | 69 EXPECT_TRUE(canPaintBackgroundOntoScrollingContentsLayer("scroller9")); |
| 71 | 70 |
| 72 // #scroller10 cannot paint background into scrolling contents layer because
its border is partially transparent | 71 // #scroller10 cannot paint background into scrolling contents layer because
its border is partially transparent |
| 73 // so the background must be drawn to the border-box edges. | 72 // so the background must be drawn to the border-box edges. |
| 74 EXPECT_FALSE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller10")); | 73 EXPECT_FALSE(canPaintBackgroundOntoScrollingContentsLayer("scroller10")); |
| 75 | 74 |
| 76 // #scroller11 can paint background into scrolling contents layer because it
s content-box is equivalent to its | 75 // #scroller11 can paint background into scrolling contents layer because it
s content-box is equivalent to its |
| 77 // padding box since it has no padding. | 76 // padding box since it has no padding. |
| 78 EXPECT_TRUE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller11")); | 77 EXPECT_TRUE(canPaintBackgroundOntoScrollingContentsLayer("scroller11")); |
| 79 | 78 |
| 80 // #scroller12 cannot paint background into scrolling contents layer because
it has padding so its content-box | 79 // #scroller12 cannot paint background into scrolling contents layer because
it has padding so its content-box |
| 81 // is not equivalent to its padding-box. | 80 // is not equivalent to its padding-box. |
| 82 EXPECT_FALSE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller12")); | 81 EXPECT_FALSE(canPaintBackgroundOntoScrollingContentsLayer("scroller12")); |
| 83 | 82 |
| 84 // #scroller13 cannot paint background into scrolling contents layer because
it has a custom | 83 // #scroller13 cannot paint background into scrolling contents layer because
it has a custom |
| 85 // scrollbar which the background may need to draw under. | 84 // scrollbar which the background may need to draw under. |
| 86 EXPECT_FALSE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller13")); | 85 EXPECT_FALSE(canPaintBackgroundOntoScrollingContentsLayer("scroller13")); |
| 87 | 86 |
| 88 // #scroller14 can paint background into scrolling contents layer because th
e outline is drawn outside the | 87 // #scroller14 can paint background into scrolling contents layer because th
e outline is drawn outside the |
| 89 // padding box. | 88 // padding box. |
| 90 EXPECT_TRUE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller14")); | 89 EXPECT_TRUE(canPaintBackgroundOntoScrollingContentsLayer("scroller14")); |
| 91 | 90 |
| 92 // #scroller15 cannot paint background into scrolling contents layer because
the outline is drawn inside | 91 // #scroller15 cannot paint background into scrolling contents layer because
the outline is drawn inside |
| 93 // the padding box. | 92 // the padding box. |
| 94 EXPECT_FALSE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller15")); | 93 EXPECT_FALSE(canPaintBackgroundOntoScrollingContentsLayer("scroller15")); |
| 95 | 94 |
| 96 // #scroller16 cannot paint background into scrolling contents layer because
it has a | 95 // #scroller16 cannot paint background into scrolling contents layer because
the scroller has a clip which |
| 97 // border radius. | |
| 98 EXPECT_FALSE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller16")); | |
| 99 | |
| 100 // #scroller17 cannot paint background into scrolling contents layer because
the scroller has a clip which | |
| 101 // would not be respected by the scrolling contents layer. | 96 // would not be respected by the scrolling contents layer. |
| 102 EXPECT_FALSE(shouldPaintBackgroundOntoScrollingContentsLayer("scroller17")); | 97 EXPECT_FALSE(canPaintBackgroundOntoScrollingContentsLayer("scroller16")); |
| 103 } | 98 } |
| 104 | 99 |
| 105 TEST_F(PaintLayerScrollableAreaTest, OpaqueLayersPromoted) | 100 TEST_F(PaintLayerScrollableAreaTest, OpaqueLayersPromoted) |
| 106 { | 101 { |
| 107 RuntimeEnabledFeatures::setCompositeOpaqueScrollersEnabled(true); | 102 RuntimeEnabledFeatures::setCompositeOpaqueScrollersEnabled(true); |
| 108 | 103 |
| 109 setBodyInnerHTML( | 104 setBodyInnerHTML( |
| 110 "<style>" | 105 "<style>" |
| 111 "#scroller { overflow: scroll; height: 200px; width: 200px; background:
white local content-box; border: 10px solid rgba(0, 255, 0, 0.5); }" | 106 "#scroller { overflow: scroll; height: 200px; width: 200px; background:
white local content-box; border: 10px solid rgba(0, 255, 0, 0.5); }" |
| 112 "#scrolled { height: 300px; }" | 107 "#scrolled { height: 300px; }" |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 paintLayer = toLayoutBoxModelObject(scroller->layoutObject())->layer(); | 192 paintLayer = toLayoutBoxModelObject(scroller->layoutObject())->layer(); |
| 198 ASSERT_TRUE(paintLayer); | 193 ASSERT_TRUE(paintLayer); |
| 199 EXPECT_TRUE(paintLayer->needsCompositedScrolling()); | 194 EXPECT_TRUE(paintLayer->needsCompositedScrolling()); |
| 200 EXPECT_TRUE(paintLayer->graphicsLayerBacking()); | 195 EXPECT_TRUE(paintLayer->graphicsLayerBacking()); |
| 201 ASSERT_TRUE(paintLayer->graphicsLayerBackingForScrolling()); | 196 ASSERT_TRUE(paintLayer->graphicsLayerBackingForScrolling()); |
| 202 EXPECT_TRUE(paintLayer->graphicsLayerBackingForScrolling()->contentsOpaque()
); | 197 EXPECT_TRUE(paintLayer->graphicsLayerBackingForScrolling()->contentsOpaque()
); |
| 203 } | 198 } |
| 204 | 199 |
| 205 | 200 |
| 206 } | 201 } |
| OLD | NEW |