| Index: third_party/WebKit/Source/core/css/AffectedByFocusTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/AffectedByFocusTest.cpp b/third_party/WebKit/Source/core/css/AffectedByFocusTest.cpp
|
| index 8ce377046bfd8eaa2ad34b07b3e8270f403236c3..40ef36dc7e5b6a58a7f3f1d82e6a39e644636387 100644
|
| --- a/third_party/WebKit/Source/core/css/AffectedByFocusTest.cpp
|
| +++ b/third_party/WebKit/Source/core/css/AffectedByFocusTest.cpp
|
| @@ -312,4 +312,42 @@ TEST_F(AffectedByFocusTest, NoInvalidationSetFocusUpdate) {
|
| ASSERT_EQ(1U, element_count);
|
| }
|
|
|
| +TEST_F(AffectedByFocusTest, FocusWithinCommonAncestor) {
|
| + // Check that when changing the focus between 2 elements we don't need a style
|
| + // recalc for all the ancestors affected by ":focus-within".
|
| +
|
| + SetHtmlInnerHTML(
|
| + "<style>div:focus-within { background-color: lime; }</style>"
|
| + "<div>"
|
| + " <div>"
|
| + " <div id=focusme1 tabIndex=1></div>"
|
| + " <div id=focusme2 tabIndex=2></div>"
|
| + " <div>"
|
| + "</div>");
|
| +
|
| + GetDocument().View()->UpdateAllLifecyclePhases();
|
| +
|
| + unsigned start_count = GetDocument().GetStyleEngine().StyleForElementCount();
|
| +
|
| + GetDocument().GetElementById("focusme1")->focus();
|
| + GetDocument().View()->UpdateAllLifecyclePhases();
|
| +
|
| + unsigned element_count =
|
| + GetDocument().GetStyleEngine().StyleForElementCount() - start_count;
|
| +
|
| + EXPECT_EQ(3U, element_count);
|
| +
|
| + start_count += element_count;
|
| +
|
| + GetDocument().GetElementById("focusme2")->focus();
|
| + GetDocument().View()->UpdateAllLifecyclePhases();
|
| +
|
| + element_count =
|
| + GetDocument().GetStyleEngine().StyleForElementCount() - start_count;
|
| +
|
| + // Only "focusme1" & "focusme2" elements need a recalc thanks to the common
|
| + // ancestor strategy.
|
| + EXPECT_EQ(2U, element_count);
|
| +}
|
| +
|
| } // namespace blink
|
|
|