Index: Source/core/css/AffectedByFocusTest.cpp |
diff --git a/Source/core/css/AffectedByFocusTest.cpp b/Source/core/css/AffectedByFocusTest.cpp |
index c12f07c7a8fb0f0aa1329f1e09967e3c068ced9d..de9dc0aebdc049573a7a9e05e3151763475ccb88 100644 |
--- a/Source/core/css/AffectedByFocusTest.cpp |
+++ b/Source/core/css/AffectedByFocusTest.cpp |
@@ -250,4 +250,67 @@ TEST_F(AffectedByFocusTest, ChildrenAffectedByFocusUpdate) |
ASSERT_EQ(11U, accessCount); |
} |
+TEST_F(AffectedByFocusTest, InvalidationSetFocusUpdate) |
+{ |
+ // Check that when focussing the outer div in the document below, you get a |
+ // style recalc for the outer div and the class=a div only. |
+ |
+ setHtmlInnerHTML("<style>:focus .a { border: 1px solid lime; }</style>" |
+ "<div id=d tabIndex=1>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div class='a'></div>" |
+ "</div>"); |
+ |
+ document().view()->updateLayoutAndStyleIfNeededRecursive(); |
+ |
+ unsigned startCount = document().styleEngine()->resolverAccessCount(); |
+ |
+ document().getElementById("d")->focus(); |
+ document().view()->updateLayoutAndStyleIfNeededRecursive(); |
+ |
+ unsigned accessCount = document().styleEngine()->resolverAccessCount() - startCount; |
+ |
+ ASSERT_EQ(2U, accessCount); |
+} |
+ |
+TEST_F(AffectedByFocusTest, NoInvalidationSetFocusUpdate) |
+{ |
+ // Check that when focussing the outer div in the document below, you get a |
+ // style recalc for the outer div only. The invalidation set for :focus will |
+ // include 'a', but the id=d div should be affectedByFocus, not childrenAffectedByFocus. |
+ |
+ setHtmlInnerHTML("<style>#nomatch:focus .a { border: 1px solid lime; }</style>" |
+ "<div id=d tabIndex=1>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div></div>" |
+ "<div class='a'></div>" |
+ "</div>"); |
+ |
+ document().view()->updateLayoutAndStyleIfNeededRecursive(); |
+ |
+ unsigned startCount = document().styleEngine()->resolverAccessCount(); |
+ |
+ document().getElementById("d")->focus(); |
+ document().view()->updateLayoutAndStyleIfNeededRecursive(); |
+ |
+ unsigned accessCount = document().styleEngine()->resolverAccessCount() - startCount; |
+ |
+ ASSERT_EQ(1U, accessCount); |
+} |
+ |
} // namespace |