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>