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 };
};