Title: [279414] trunk
Revision
279414
Author
[email protected]
Date
2021-06-30 09:31:57 -0700 (Wed, 30 Jun 2021)

Log Message

Add modal dialog UA styles
https://bugs.webkit.org/show_bug.cgi?id=226175

Reviewed by Antti Koivisto.

This adds an :-internal-modal-dialog pseudo class and a test to make sure it does not leak.

This improves WPT results a lot and expectations have been updated. Some tests start failing,
but those are mainly top-layer related (which isn't implemented yet).

LayoutTests/imported/w3c:

* web-platform-tests/html/rendering/non-replaced-elements/flow-content-0/dialog-expected.txt:
* web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout-expected.txt:
* web-platform-tests/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt:

Source/WebCore:

* css/CSSSelector.cpp:
(WebCore::CSSSelector::selectorText const):
* css/CSSSelector.h:
* css/SelectorChecker.cpp:
(WebCore::SelectorChecker::checkOne const):
* css/SelectorCheckerTestFunctions.h:
(WebCore::matchesModalDialogPseudoClass):
* css/SelectorPseudoClassAndCompatibilityElementMap.in:
* css/dialog.css:
(dialog:-internal-modal-dialog):
* css/parser/CSSSelectorParser.cpp:
(WebCore::CSSSelectorParser::consumePseudo):
* cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::JSC_DEFINE_JIT_OPERATION):
(WebCore::SelectorCompiler::addPseudoClassType):
* html/HTMLDialogElement.cpp:
(WebCore::HTMLDialogElement::showModal):
(WebCore::HTMLDialogElement::parseAttribute):
(WebCore::HTMLDialogElement::isModal const):
* html/HTMLDialogElement.h:

LayoutTests:

* TestExpectations:
* fast/css/pseudo-class-internal-expected.txt: Added.
* fast/css/pseudo-class-internal.html: Added.
* platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout-expected.txt:
* platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt: Removed.

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (279413 => 279414)


--- trunk/LayoutTests/ChangeLog	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/LayoutTests/ChangeLog	2021-06-30 16:31:57 UTC (rev 279414)
@@ -1,5 +1,23 @@
 2021-06-30  Tim Nguyen  <[email protected]>
 
+        Add modal dialog UA styles
+        https://bugs.webkit.org/show_bug.cgi?id=226175
+
+        Reviewed by Antti Koivisto.
+
+        This adds an :-internal-modal-dialog pseudo class and a test to make sure it does not leak.
+
+        This improves WPT results a lot and expectations have been updated. Some tests start failing,
+        but those are mainly top-layer related (which isn't implemented yet).
+
+        * TestExpectations:
+        * fast/css/pseudo-class-internal-expected.txt: Added.
+        * fast/css/pseudo-class-internal.html: Added.
+        * platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout-expected.txt:
+        * platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt: Removed.
+
+2021-06-30  Tim Nguyen  <[email protected]>
+
         Re-import html/semantics/interactive-elements/the-dialog-element WPT
         https://bugs.webkit.org/show_bug.cgi?id=227523
 

Modified: trunk/LayoutTests/TestExpectations (279413 => 279414)


--- trunk/LayoutTests/TestExpectations	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/LayoutTests/TestExpectations	2021-06-30 16:31:57 UTC (rev 279414)
@@ -2227,10 +2227,10 @@
 imported/blink/fast/multicol/outlines-at-column-boundaries.html [ ImageOnlyFailure ]
 fast/multicol/multicol-with-child-renderLayer-for-input.html [ ImageOnlyFailure ]
 
-# Modal <dialog> support
-webkit.org/b/226175 imported/blink/dialog/modal-dialog-in-replaced-renderer.html [ ImageOnlyFailure ]
-webkit.org/b/226175 imported/blink/dialog/modal-dialog-in-table-column.html [ ImageOnlyFailure ]
-webkit.org/b/226175 imported/blink/dialog/modal-dialog-sibling.html [ ImageOnlyFailure ]
+# Modal <dialog> in top layer
+webkit.org/b/84796 imported/blink/dialog/modal-dialog-in-replaced-renderer.html [ ImageOnlyFailure ]
+webkit.org/b/84796 imported/blink/dialog/modal-dialog-in-table-column.html [ ImageOnlyFailure ]
+webkit.org/b/84796 imported/blink/fast/dom/HTMLDialogElement/dont-share-style-to-top-layer.html [ ImageOnlyFailure ]
 
 # Assertion failure in MessagePort::contextDestroyed, usually attributed to later tests
 webkit.org/b/94458 http/tests/security/MessagePort/event-listener-context.html [ Skip ]

Added: trunk/LayoutTests/fast/css/pseudo-class-internal-expected.txt (0 => 279414)


--- trunk/LayoutTests/fast/css/pseudo-class-internal-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/css/pseudo-class-internal-expected.txt	2021-06-30 16:31:57 UTC (rev 279414)
@@ -0,0 +1,11 @@
+This tests that -internal- pseudo classes are not exposed
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS target.matches(":-internal-direct-focus") threw exception SyntaxError: The string did not match the expected pattern..
+PASS target.matches(":-internal-modal-dialog") threw exception SyntaxError: The string did not match the expected pattern..
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/css/pseudo-class-internal.html (0 => 279414)


--- trunk/LayoutTests/fast/css/pseudo-class-internal.html	                        (rev 0)
+++ trunk/LayoutTests/fast/css/pseudo-class-internal.html	2021-06-30 16:31:57 UTC (rev 279414)
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<div id="target"></div>
+<script>
+
+description('This tests that -internal- pseudo classes are not exposed');
+
+function runTest() {
+    const internalPseudoClasses = [
+        ':-internal-direct-focus',
+        ':-internal-modal-dialog',
+    ];
+    for (const pseudo of internalPseudoClasses) {
+        shouldThrowErrorName('target.matches("' + pseudo + '")', 'SyntaxError');
+    }
+    finishJSTest();
+}
+
+window._onload_ = runTest;
+</script>
+</body>
+</html>

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (279413 => 279414)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2021-06-30 16:31:57 UTC (rev 279414)
@@ -1,5 +1,21 @@
 2021-06-30  Tim Nguyen  <[email protected]>
 
+        Add modal dialog UA styles
+        https://bugs.webkit.org/show_bug.cgi?id=226175
+
+        Reviewed by Antti Koivisto.
+
+        This adds an :-internal-modal-dialog pseudo class and a test to make sure it does not leak.
+
+        This improves WPT results a lot and expectations have been updated. Some tests start failing,
+        but those are mainly top-layer related (which isn't implemented yet).
+
+        * web-platform-tests/html/rendering/non-replaced-elements/flow-content-0/dialog-expected.txt:
+        * web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout-expected.txt:
+        * web-platform-tests/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt:
+
+2021-06-30  Tim Nguyen  <[email protected]>
+
         Re-import html/semantics/interactive-elements/the-dialog-element WPT
         https://bugs.webkit.org/show_bug.cgi?id=227523
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/flow-content-0/dialog-expected.txt (279413 => 279414)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/flow-content-0/dialog-expected.txt	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/rendering/non-replaced-elements/flow-content-0/dialog-expected.txt	2021-06-30 16:31:57 UTC (rev 279414)
@@ -3,8 +3,8 @@
 
 PASS Closed dialog in width: 540px iframe
 PASS Open dialog in width: 540px iframe
-FAIL Modal dialog in width: 540px iframe assert_equals: top expected "56px" but got "8px"
+FAIL Modal dialog in width: 540px iframe assert_equals: top expected "56px" but got "0px"
 PASS Closed dialog in width: 538px iframe
 PASS Open dialog in width: 538px iframe
-FAIL Modal dialog in width: 538px iframe assert_equals: top expected "56px" but got "8px"
+FAIL Modal dialog in width: 538px iframe assert_equals: top expected "56px" but got "0px"
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout-expected.txt (279413 => 279414)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout-expected.txt	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout-expected.txt	2021-06-30 16:31:57 UTC (rev 279414)
@@ -1,12 +1,12 @@
 
-FAIL showModal() should center in the viewport assert_approx_equals: expected 291 +/- 1 but got -500
-FAIL Dialog should be recentered if showModal() is called after close() assert_approx_equals: expected 291 +/- 1 but got -1000
+PASS showModal() should center in the viewport
+PASS Dialog should be recentered if showModal() is called after close()
 PASS Dialog should not recenter on relayout.
-FAIL A tall dialog should be positioned at the top of the viewport. assert_equals: expected 0 but got -500
-FAIL The dialog should be centered regardless of the presence of a horizontal scrollbar. assert_approx_equals: expected 0 +/- 1 but got -500
-FAIL Centering should work when dialog is inside positioned containers. assert_approx_equals: expected 275 +/- 1 but got 330
+PASS A tall dialog should be positioned at the top of the viewport.
+PASS The dialog should be centered regardless of the presence of a horizontal scrollbar.
+PASS Centering should work when dialog is inside positioned containers.
 PASS A centered dialog's position should survive becoming display:none temporarily.
-FAIL Dialog should not still be centered when removed, and re-added to the document. assert_approx_equals: expected 285 +/- 1 but got 320
+FAIL Dialog should not still be centered when removed, and re-added to the document. assert_equals: expected 291 but got 320
 PASS Dialog's specified position should survive after close() and showModal().
-FAIL Dialog should be recentered if showModal() is called after removing 'open'. assert_approx_equals: expected 0 +/- 1 but got -500
+PASS Dialog should be recentered if showModal() is called after removing 'open'.
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt (279413 => 279414)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt	2021-06-30 16:31:57 UTC (rev 279414)
@@ -1,25 +1,25 @@
 
-FAIL horizontal-tb: tall viewport, default-sizes: true assert_approx_equals: expected 41 +/- 0.016666666666666666 but got 8
-FAIL horizontal-tb: tall viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL horizontal-tb: wide viewport, default-sizes: true assert_approx_equals: expected 11 +/- 0.016666666666666666 but got 8
-FAIL horizontal-tb: wide viewport, default-sizes: false assert_equals: expected 15 but got 8
-FAIL horizontal-tb: square viewport, default-sizes: true assert_approx_equals: expected 41 +/- 0.016666666666666666 but got 8
-FAIL horizontal-tb: square viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL horizontal-tb: dialog and viewport match, default-sizes: false assert_equals: expected 0 but got 8
-FAIL vertical-rl: tall viewport, default-sizes: true assert_approx_equals: expected 11 +/- 0.016666666666666666 but got 14
-FAIL vertical-rl: tall viewport, default-sizes: false assert_equals: expected 10 but got 12
-FAIL vertical-lr: tall viewport, default-sizes: true assert_approx_equals: expected 11 +/- 0.016666666666666666 but got 8
-FAIL vertical-lr: tall viewport, default-sizes: false assert_equals: expected 10 but got 8
-FAIL vertical-rl (dialog horizontal-tb): tall viewport, default-sizes: true assert_approx_equals: expected 41 +/- 0.016666666666666666 but got 8
-FAIL vertical-rl (dialog horizontal-tb): tall viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL vertical-lr (dialog horizontal-tb): tall viewport, default-sizes: true assert_approx_equals: expected 41 +/- 0.016666666666666666 but got 8
-FAIL vertical-lr (dialog horizontal-tb): tall viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL horizontal-tb (container vertical-rl): tall viewport, default-sizes: true assert_approx_equals: expected 11 +/- 0.016666666666666666 but got 14
-FAIL horizontal-tb (container vertical-rl): tall viewport, default-sizes: false assert_equals: expected 10 but got 12
-FAIL vertical-rl (container horizontal-tb): tall viewport, default-sizes: true assert_approx_equals: expected 41 +/- 0.016666666666666666 but got 8
-FAIL vertical-rl (container horizontal-tb): tall viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL horizontal-tb (container vertical-rl) (dialog horizontal-tb): tall viewport, default-sizes: true assert_approx_equals: expected 41 +/- 0.016666666666666666 but got 8
-FAIL horizontal-tb (container vertical-rl) (dialog horizontal-tb): tall viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL vertical-rl (container horizontal-tb) (dialog vertical-rl): tall viewport, default-sizes: true assert_approx_equals: expected 11 +/- 0.016666666666666666 but got 14
-FAIL vertical-rl (container horizontal-tb) (dialog vertical-rl): tall viewport, default-sizes: false assert_equals: expected 10 but got 12
+PASS horizontal-tb: tall viewport, default-sizes: true
+PASS horizontal-tb: tall viewport, default-sizes: false
+PASS horizontal-tb: wide viewport, default-sizes: true
+PASS horizontal-tb: wide viewport, default-sizes: false
+PASS horizontal-tb: square viewport, default-sizes: true
+PASS horizontal-tb: square viewport, default-sizes: false
+PASS horizontal-tb: dialog and viewport match, default-sizes: false
+PASS vertical-rl: tall viewport, default-sizes: true
+PASS vertical-rl: tall viewport, default-sizes: false
+PASS vertical-lr: tall viewport, default-sizes: true
+PASS vertical-lr: tall viewport, default-sizes: false
+PASS vertical-rl (dialog horizontal-tb): tall viewport, default-sizes: true
+PASS vertical-rl (dialog horizontal-tb): tall viewport, default-sizes: false
+PASS vertical-lr (dialog horizontal-tb): tall viewport, default-sizes: true
+PASS vertical-lr (dialog horizontal-tb): tall viewport, default-sizes: false
+PASS horizontal-tb (container vertical-rl): tall viewport, default-sizes: true
+PASS horizontal-tb (container vertical-rl): tall viewport, default-sizes: false
+PASS vertical-rl (container horizontal-tb): tall viewport, default-sizes: true
+PASS vertical-rl (container horizontal-tb): tall viewport, default-sizes: false
+PASS horizontal-tb (container vertical-rl) (dialog horizontal-tb): tall viewport, default-sizes: true
+PASS horizontal-tb (container vertical-rl) (dialog horizontal-tb): tall viewport, default-sizes: false
+PASS vertical-rl (container horizontal-tb) (dialog vertical-rl): tall viewport, default-sizes: true
+PASS vertical-rl (container horizontal-tb) (dialog vertical-rl): tall viewport, default-sizes: false
 

Modified: trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout-expected.txt (279413 => 279414)


--- trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout-expected.txt	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout-expected.txt	2021-06-30 16:31:57 UTC (rev 279414)
@@ -1,12 +1,12 @@
 
-FAIL showModal() should center in the viewport assert_approx_equals: expected 290 +/- 1 but got -500
-FAIL Dialog should be recentered if showModal() is called after close() assert_approx_equals: expected 290 +/- 1 but got -1000
+PASS showModal() should center in the viewport
+PASS Dialog should be recentered if showModal() is called after close()
 PASS Dialog should not recenter on relayout.
-FAIL A tall dialog should be positioned at the top of the viewport. assert_equals: expected 0 but got -500
-FAIL The dialog should be centered regardless of the presence of a horizontal scrollbar. assert_approx_equals: expected 0 +/- 1 but got -500
-FAIL Centering should work when dialog is inside positioned containers. assert_approx_equals: expected 275 +/- 1 but got 330
+PASS A tall dialog should be positioned at the top of the viewport.
+PASS The dialog should be centered regardless of the presence of a horizontal scrollbar.
+PASS Centering should work when dialog is inside positioned containers.
 PASS A centered dialog's position should survive becoming display:none temporarily.
-FAIL Dialog should not still be centered when removed, and re-added to the document. assert_approx_equals: expected 285 +/- 1 but got 320
+FAIL Dialog should not still be centered when removed, and re-added to the document. assert_equals: expected 290 but got 320
 PASS Dialog's specified position should survive after close() and showModal().
-FAIL Dialog should be recentered if showModal() is called after removing 'open'. assert_approx_equals: expected 0 +/- 1 but got -500
+PASS Dialog should be recentered if showModal() is called after removing 'open'.
 

Deleted: trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt (279413 => 279414)


--- trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt	2021-06-30 16:31:57 UTC (rev 279414)
@@ -1,25 +0,0 @@
-
-FAIL horizontal-tb: tall viewport, default-sizes: true assert_approx_equals: expected 40 +/- 0.016666666666666666 but got 8
-FAIL horizontal-tb: tall viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL horizontal-tb: wide viewport, default-sizes: true assert_approx_equals: expected 10 +/- 0.016666666666666666 but got 8
-FAIL horizontal-tb: wide viewport, default-sizes: false assert_equals: expected 15 but got 8
-FAIL horizontal-tb: square viewport, default-sizes: true assert_approx_equals: expected 40 +/- 0.016666666666666666 but got 8
-FAIL horizontal-tb: square viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL horizontal-tb: dialog and viewport match, default-sizes: false assert_equals: expected 0 but got 8
-FAIL vertical-rl: tall viewport, default-sizes: true assert_approx_equals: expected 10 +/- 0.016666666666666666 but got 12
-FAIL vertical-rl: tall viewport, default-sizes: false assert_equals: expected 10 but got 12
-FAIL vertical-lr: tall viewport, default-sizes: true assert_approx_equals: expected 10 +/- 0.016666666666666666 but got 8
-FAIL vertical-lr: tall viewport, default-sizes: false assert_equals: expected 10 but got 8
-FAIL vertical-rl (dialog horizontal-tb): tall viewport, default-sizes: true assert_approx_equals: expected 40 +/- 0.016666666666666666 but got 8
-FAIL vertical-rl (dialog horizontal-tb): tall viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL vertical-lr (dialog horizontal-tb): tall viewport, default-sizes: true assert_approx_equals: expected 40 +/- 0.016666666666666666 but got 8
-FAIL vertical-lr (dialog horizontal-tb): tall viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL horizontal-tb (container vertical-rl): tall viewport, default-sizes: true assert_approx_equals: expected 10 +/- 0.016666666666666666 but got 12
-FAIL horizontal-tb (container vertical-rl): tall viewport, default-sizes: false assert_equals: expected 10 but got 12
-FAIL vertical-rl (container horizontal-tb): tall viewport, default-sizes: true assert_approx_equals: expected 40 +/- 0.016666666666666666 but got 8
-FAIL vertical-rl (container horizontal-tb): tall viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL horizontal-tb (container vertical-rl) (dialog horizontal-tb): tall viewport, default-sizes: true assert_approx_equals: expected 40 +/- 0.016666666666666666 but got 8
-FAIL horizontal-tb (container vertical-rl) (dialog horizontal-tb): tall viewport, default-sizes: false assert_equals: expected 45 but got 8
-FAIL vertical-rl (container horizontal-tb) (dialog vertical-rl): tall viewport, default-sizes: true assert_approx_equals: expected 10 +/- 0.016666666666666666 but got 12
-FAIL vertical-rl (container horizontal-tb) (dialog vertical-rl): tall viewport, default-sizes: false assert_equals: expected 10 but got 12
-

Modified: trunk/Source/WebCore/ChangeLog (279413 => 279414)


--- trunk/Source/WebCore/ChangeLog	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/Source/WebCore/ChangeLog	2021-06-30 16:31:57 UTC (rev 279414)
@@ -1,3 +1,36 @@
+2021-06-30  Tim Nguyen  <[email protected]>
+
+        Add modal dialog UA styles
+        https://bugs.webkit.org/show_bug.cgi?id=226175
+
+        Reviewed by Antti Koivisto.
+
+        This adds an :-internal-modal-dialog pseudo class and a test to make sure it does not leak.
+
+        This improves WPT results a lot and expectations have been updated. Some tests start failing,
+        but those are mainly top-layer related (which isn't implemented yet).
+
+        * css/CSSSelector.cpp:
+        (WebCore::CSSSelector::selectorText const):
+        * css/CSSSelector.h:
+        * css/SelectorChecker.cpp:
+        (WebCore::SelectorChecker::checkOne const):
+        * css/SelectorCheckerTestFunctions.h:
+        (WebCore::matchesModalDialogPseudoClass):
+        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
+        * css/dialog.css:
+        (dialog:-internal-modal-dialog):
+        * css/parser/CSSSelectorParser.cpp:
+        (WebCore::CSSSelectorParser::consumePseudo):
+        * cssjit/SelectorCompiler.cpp:
+        (WebCore::SelectorCompiler::JSC_DEFINE_JIT_OPERATION):
+        (WebCore::SelectorCompiler::addPseudoClassType):
+        * html/HTMLDialogElement.cpp:
+        (WebCore::HTMLDialogElement::showModal):
+        (WebCore::HTMLDialogElement::parseAttribute):
+        (WebCore::HTMLDialogElement::isModal const):
+        * html/HTMLDialogElement.h:
+
 2021-06-30  Carlos Garcia Campos  <[email protected]>
 
         REGRESSION(r278884): [Nicosia] Fix empty stack check in CairoOperationRecorder::restore()

Modified: trunk/Source/WebCore/css/CSSSelector.cpp (279413 => 279414)


--- trunk/Source/WebCore/css/CSSSelector.cpp	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/Source/WebCore/css/CSSSelector.cpp	2021-06-30 16:31:57 UTC (rev 279414)
@@ -544,6 +544,9 @@
             case CSSSelector::PseudoClassLink:
                 builder.append(":link");
                 break;
+            case CSSSelector::PseudoClassModalDialog:
+                builder.append(":-internal-modal-dialog");
+                break;
             case CSSSelector::PseudoClassNoButton:
                 builder.append(":no-button");
                 break;

Modified: trunk/Source/WebCore/css/CSSSelector.h (279413 => 279414)


--- trunk/Source/WebCore/css/CSSSelector.h	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/Source/WebCore/css/CSSSelector.h	2021-06-30 16:31:57 UTC (rev 279414)
@@ -174,6 +174,7 @@
 #if ENABLE(ATTACHMENT_ELEMENT)
             PseudoClassHasAttachment,
 #endif
+            PseudoClassModalDialog,
         };
 
         enum PseudoElementType {

Modified: trunk/Source/WebCore/css/SelectorChecker.cpp (279413 => 279414)


--- trunk/Source/WebCore/css/SelectorChecker.cpp	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/Source/WebCore/css/SelectorChecker.cpp	2021-06-30 16:31:57 UTC (rev 279414)
@@ -1081,6 +1081,9 @@
             return hasAttachment(element);
 #endif
 
+        case CSSSelector::PseudoClassModalDialog:
+            return matchesModalDialogPseudoClass(element);
+
         case CSSSelector::PseudoClassUnknown:
             ASSERT_NOT_REACHED();
             break;

Modified: trunk/Source/WebCore/css/SelectorCheckerTestFunctions.h (279413 => 279414)


--- trunk/Source/WebCore/css/SelectorCheckerTestFunctions.h	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/Source/WebCore/css/SelectorCheckerTestFunctions.h	2021-06-30 16:31:57 UTC (rev 279414)
@@ -30,6 +30,7 @@
 #include "Frame.h"
 #include "FrameSelection.h"
 #include "FullscreenManager.h"
+#include "HTMLDialogElement.h"
 #include "HTMLFrameElement.h"
 #include "HTMLIFrameElement.h"
 #include "HTMLImageElement.h"
@@ -488,4 +489,11 @@
     return element.hasFocusWithin() && isFrameFocused(element);
 }
 
+ALWAYS_INLINE bool matchesModalDialogPseudoClass(const Element& element)
+{
+    if (is<HTMLDialogElement>(element))
+        return downcast<HTMLDialogElement>(element).isModal();
+    return false;
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/css/SelectorPseudoClassAndCompatibilityElementMap.in (279413 => 279414)


--- trunk/Source/WebCore/css/SelectorPseudoClassAndCompatibilityElementMap.in	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/Source/WebCore/css/SelectorPseudoClassAndCompatibilityElementMap.in	2021-06-30 16:31:57 UTC (rev 279414)
@@ -1,4 +1,5 @@
 -internal-direct-focus
+-internal-modal-dialog
 -khtml-drag
 -webkit-any
 -webkit-any-link, PseudoClassAnyLinkDeprecated, PseudoElementUnknown

Modified: trunk/Source/WebCore/css/dialog.css (279413 => 279414)


--- trunk/Source/WebCore/css/dialog.css	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/Source/WebCore/css/dialog.css	2021-06-30 16:31:57 UTC (rev 279414)
@@ -15,3 +15,12 @@
 dialog[open] {
     display: block;
 }
+
+dialog:-internal-modal-dialog {
+    position: fixed;
+    overflow: auto;
+    inset-block-start: 0;
+    inset-block-end: 0;
+    max-width: calc(100% - 6px - 2em);
+    max-height: calc(100% - 6px - 2em);
+}

Modified: trunk/Source/WebCore/css/parser/CSSSelectorParser.cpp (279413 => 279414)


--- trunk/Source/WebCore/css/parser/CSSSelectorParser.cpp	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/Source/WebCore/css/parser/CSSSelectorParser.cpp	2021-06-30 16:31:57 UTC (rev 279414)
@@ -583,6 +583,8 @@
         if (selector->match() == CSSSelector::PseudoClass) {
             if (m_context.mode != UASheetMode && selector->pseudoClassType() == CSSSelector::PseudoClassDirectFocus)
                 return nullptr;
+            if (m_context.mode != UASheetMode && selector->pseudoClassType() == CSSSelector::PseudoClassModalDialog)
+                return nullptr;
             if (!m_context.focusVisibleEnabled && selector->pseudoClassType() == CSSSelector::PseudoClassFocusVisible)
                 return nullptr;
 #if ENABLE(ATTACHMENT_ELEMENT)

Modified: trunk/Source/WebCore/cssjit/SelectorCompiler.cpp (279413 => 279414)


--- trunk/Source/WebCore/cssjit/SelectorCompiler.cpp	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/Source/WebCore/cssjit/SelectorCompiler.cpp	2021-06-30 16:31:57 UTC (rev 279414)
@@ -115,6 +115,7 @@
 #if ENABLE(ATTACHMENT_ELEMENT)
 static JSC_DECLARE_JIT_OPERATION_WITHOUT_WTF_INTERNAL(operationHasAttachment, bool, (const Element&));
 #endif
+static JSC_DECLARE_JIT_OPERATION_WITHOUT_WTF_INTERNAL(operationMatchesModalDialogPseudoClass, bool, (const Element&));
 
 static JSC_DECLARE_JIT_OPERATION_WITHOUT_WTF_INTERNAL(operationAttributeValueBeginsWithCaseSensitive, bool, (const Attribute* attribute, AtomStringImpl* expectedString));
 static JSC_DECLARE_JIT_OPERATION_WITHOUT_WTF_INTERNAL(operationAttributeValueBeginsWithCaseInsensitive, bool, (const Attribute* attribute, AtomStringImpl* expectedString));
@@ -754,6 +755,11 @@
     return matchesLangPseudoClass(element, argumentList);
 }
 
+JSC_DEFINE_JIT_OPERATION(operationMatchesModalDialogPseudoClass, bool, (const Element& element))
+{
+    return matchesModalDialogPseudoClass(element);
+}
+
 static inline FunctionType addPseudoClassType(const CSSSelector& selector, SelectorFragment& fragment, SelectorContext selectorContext, FragmentsLevel fragmentLevel, FragmentPositionInRootFragments positionInRootFragments, bool visitedMatchEnabled, VisitedMode& visitedMode, PseudoElementMatchingBehavior pseudoElementMatchingBehavior)
 {
     CSSSelector::PseudoClassType type = selector.pseudoClassType();
@@ -869,6 +875,10 @@
         return FunctionType::SimpleSelectorChecker;
 #endif
 
+    case CSSSelector::PseudoClassModalDialog:
+        fragment.unoptimizedPseudoClasses.append(JSC::FunctionPtr<JSC::OperationPtrTag>(operationMatchesModalDialogPseudoClass));
+        return FunctionType::SimpleSelectorChecker;
+
     // These pseudo-classes only have meaning with scrollbars.
     case CSSSelector::PseudoClassHorizontal:
     case CSSSelector::PseudoClassVertical:

Modified: trunk/Source/WebCore/html/HTMLDialogElement.cpp (279413 => 279414)


--- trunk/Source/WebCore/html/HTMLDialogElement.cpp	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/Source/WebCore/html/HTMLDialogElement.cpp	2021-06-30 16:31:57 UTC (rev 279414)
@@ -88,6 +88,8 @@
         return Exception { InvalidStateError };
 
     setOpen(true);
+    m_isModal = true;
+
     return { };
 }
 
@@ -115,6 +117,7 @@
 
         // Emit close event
         if (oldValue != m_isOpen && !m_isOpen) {
+            m_isModal = false;
             dialogCloseEventSender().cancelEvent(*this);
             dialogCloseEventSender().dispatchEventSoon(*this);
         }
@@ -129,4 +132,9 @@
     setAttributeWithoutSynchronization(HTMLNames::openAttr, value ? emptyAtom() : nullAtom());
 }
 
+bool HTMLDialogElement::isModal() const
+{
+    return m_isModal;
 }
+
+}

Modified: trunk/Source/WebCore/html/HTMLDialogElement.h (279413 => 279414)


--- trunk/Source/WebCore/html/HTMLDialogElement.h	2021-06-30 16:28:43 UTC (rev 279413)
+++ trunk/Source/WebCore/html/HTMLDialogElement.h	2021-06-30 16:31:57 UTC (rev 279414)
@@ -49,6 +49,8 @@
 
     void dispatchPendingEvent(DialogEventSender*);
 
+    bool isModal() const;
+
 private:
     HTMLDialogElement(const QualifiedName&, Document&);
 
@@ -57,6 +59,7 @@
     void setOpen(bool);
 
     String m_returnValue;
+    bool m_isModal { false };
     bool m_isOpen { false };
 };
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to