2010-05-18 Yuzo Fujishima <yuzo@google.com>
Reviewed by Shinichiro Hamaji.
Make CSS Parser properly handle only-for-pages pseudo-classes.
https://bugs.webkit.org/show_bug.cgi?id=38731
* fast/css/misplaced-paged-media-pseudo-expected.txt: Removed.
* fast/css/misplaced-paged-media-pseudo.html: Removed.
* printing/page-rule-css-text-expected.txt:
* printing/page-rule-css-text.html:
* printing/pseudo-class-outside-page-expected.txt:
* printing/pseudo-class-outside-page.html:
2010-05-18 Yuzo Fujishima <yuzo@google.com>
Reviewed by Shinichiro Hamaji.
Make CSS Parser properly handle only-for-pages pseudo-classes.
A new Match category, PagePseudoClass, is introduced to distinguish
only-for-pages pseudo-classes from others. A new symbol, pseudo_page,
is introduced to handle them separately.
https://bugs.webkit.org/show_bug.cgi?id=38731
* css/CSSGrammar.y:
* css/CSSParser.cpp:
(WebCore::CSSParser::createMarginAtRule):
* css/CSSParser.h:
* css/CSSSelector.cpp:
(WebCore::CSSSelector::extractPseudoType):
(WebCore::CSSSelector::selectorText):
* css/CSSSelector.h:
(WebCore::CSSSelector::):
* css/CSSStyleSelector.cpp:
(WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@59751 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/printing/pseudo-class-outside-page.html b/LayoutTests/printing/pseudo-class-outside-page.html
index 9d88a03..0909d98 100644
--- a/LayoutTests/printing/pseudo-class-outside-page.html
+++ b/LayoutTests/printing/pseudo-class-outside-page.html
@@ -6,19 +6,22 @@
#green {
background-color: green;
}
- #test {
+ #test1 {
width: 100px;
height: 100px;
background-color: green;
}
+ .exception_test {
+ color: red;
+ }
/* These selectors should be ignored */
- #test:first {
+ #test1:first {
background-color: red;
}
- #test:left {
+ #test1:left {
background-color: red;
}
- #test:right {
+ #test1:right {
background-color: red;
}
</style>
@@ -29,11 +32,25 @@
function test()
{
var expected = getComputedStyle(document.getElementById("green"), null).backgroundColor;
- var actual = getComputedStyle(document.getElementById("test"), null).backgroundColor;
+ var actual = getComputedStyle(document.getElementById("test1"), null).backgroundColor;
var result = "PASS";
if (actual != expected)
result = "Expected " + expected + ", but comes " + actual;
document.getElementById("result").innerHTML = result;
+
+ var invalidSelectors = [":first", ":left", ":right", "::first", "::left", "::right",
+ ".login-popup:first", ".login-popup:left", ".login-popup:right", ".login-popup::first", ".login-popup::left", ".login-popup::right"];
+ for (var testId = 2; testId <= 13; testId++) {
+ var element = document.getElementById("test" + testId);
+ var invalidSelector = invalidSelectors[testId - 2];
+ try {
+ document.querySelectorAll(invalidSelector);
+ element.innerHTML = "Test " + testId + ": FAIL";
+ } catch (e) {
+ element.innerHTML = "Test " + testId + ": PASS";
+ element.style.color = "green";
+ }
+ }
}
</script>
</head>
@@ -44,10 +61,22 @@
Paged media related pseudo-classes should be ignored outside of @page.
<p>
-You should see a green box.
+You should see a green box for Test 1, "Test n: PASS" for the rest.
<div id="green"></div>
-<div id="test"></div>
+<div id="test1"></div>
+<div id="test2" class="exception_test">Test 2: Didn't run</div>
+<div id="test3" class="exception_test">Test 3: Didn't run</div>
+<div id="test4" class="exception_test">Test 4: Didn't run</div>
+<div id="test5" class="exception_test">Test 5: Didn't run</div>
+<div id="test6" class="exception_test">Test 6: Didn't run</div>
+<div id="test7" class="exception_test">Test 7: Didn't run</div>
+<div id="test8" class="exception_test">Test 8: Didn't run</div>
+<div id="test9" class="exception_test">Test 9: Didn't run</div>
+<div id="test10" class="exception_test">Test 10: Didn't run</div>
+<div id="test11" class="exception_test">Test 11: Didn't run</div>
+<div id="test12" class="exception_test">Test 12: Didn't run</div>
+<div id="test13" class="exception_test">Test 13: Didn't run</div>
<div id="result"></div>
</body>