Skeleton implementation of dialog.showModal()
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 24 Sep 2012 07:41:04 +0000 (07:41 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 24 Sep 2012 07:41:04 +0000 (07:41 +0000)
https://bugs.webkit.org/show_bug.cgi?id=97425

Patch by Matt Falkenhagen <falken@chromium.org> on 2012-09-24
Reviewed by Kent Tamura.

Source/WebCore:

This adds a basic implementation of showModal(), so it later can be
used to test the top layer, once it is implemented. The main features
of showModal(), modality and the top layer, are not yet implemented.

Test: fast/dom/HTMLDialogElement/dialog-show-modal.html

* html/HTMLDialogElement.cpp:
(WebCore::HTMLDialogElement::showModal): The same as show(), but throws an error in the cases specified in the spec.
(WebCore):
* html/HTMLDialogElement.h:
(HTMLDialogElement):
* html/HTMLDialogElement.idl:

LayoutTests:

Add a test that showModal() opens the dialog or throws an error in the cases specified in the spec.

* fast/dom/HTMLDialogElement/dialog-show-modal-expected.txt: Added.
* fast/dom/HTMLDialogElement/dialog-show-modal.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@129330 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/dom/HTMLDialogElement/dialog-show-modal-expected.txt [new file with mode: 0644]
LayoutTests/fast/dom/HTMLDialogElement/dialog-show-modal.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLDialogElement.cpp
Source/WebCore/html/HTMLDialogElement.h
Source/WebCore/html/HTMLDialogElement.idl

index 13b6e1e..bb11412 100644 (file)
@@ -1,3 +1,15 @@
+2012-09-24  Matt Falkenhagen  <falken@chromium.org>
+
+        Skeleton implementation of dialog.showModal()
+        https://bugs.webkit.org/show_bug.cgi?id=97425
+
+        Reviewed by Kent Tamura.
+
+        Add a test that showModal() opens the dialog or throws an error in the cases specified in the spec.
+
+        * fast/dom/HTMLDialogElement/dialog-show-modal-expected.txt: Added.
+        * fast/dom/HTMLDialogElement/dialog-show-modal.html: Added.
+
 2012-09-23  Gavin Barraclough  <barraclough@apple.com>
 
         Sorting a non-array creates propreties (spec-violation)
diff --git a/LayoutTests/fast/dom/HTMLDialogElement/dialog-show-modal-expected.txt b/LayoutTests/fast/dom/HTMLDialogElement/dialog-show-modal-expected.txt
new file mode 100644 (file)
index 0000000..a3dc453
--- /dev/null
@@ -0,0 +1,19 @@
+Tests that showModal() performs the steps specified in the HTML spec. bug 97425
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS computedStyle.getPropertyValue('display') is "none"
+PASS computedStyle.getPropertyValue('display') is "block"
+"If dialog already has an open attribute, then throw an InvalidStateError exception."
+PASS dialog.showModal(); threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+PASS computedStyle.getPropertyValue('display') is "none"
+"If dialog is not in a Document, then throw an InvalidStateError exception."
+PASS dialog.showModal(); threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+PASS dialog.open is false
+Although the document is not attached to any pages, showModal() should execute as normal.
+PASS dialog.open is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/HTMLDialogElement/dialog-show-modal.html b/LayoutTests/fast/dom/HTMLDialogElement/dialog-show-modal.html
new file mode 100644 (file)
index 0000000..44d043a
--- /dev/null
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../js/resources/js-test-pre.js"></script>
+<script>
+if (window.internals)
+    internals.settings.setDialogElementEnabled(true);
+</script>
+</head>
+<body>
+<dialog id="mydialog">It's my dialog.</dialog>
+<script>
+description("Tests that showModal() performs the steps specified in the HTML spec. bug 97425");
+
+dialog = document.getElementById('mydialog');
+computedStyle = window.getComputedStyle(dialog, null);
+shouldBeEqualToString("computedStyle.getPropertyValue('display')", "none");
+
+dialog.showModal();
+shouldBeEqualToString("computedStyle.getPropertyValue('display')", "block");
+
+// The quoted texts output below are from <http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#dom-dialog-showmodal>.
+debug('"If dialog already has an open attribute, then throw an InvalidStateError exception."');
+shouldThrow('dialog.showModal();', "'Error: INVALID_STATE_ERR: DOM Exception 11'");
+
+dialog.close();
+shouldBeEqualToString("computedStyle.getPropertyValue('display')", "none");
+
+dialog.parentNode.removeChild(dialog);
+debug('"If dialog is not in a Document, then throw an InvalidStateError exception."');
+shouldThrow('dialog.showModal();', "'Error: INVALID_STATE_ERR: DOM Exception 11'");
+
+doc = document.implementation.createHTMLDocument();
+doc.body.appendChild(dialog);
+shouldBeFalse("dialog.open");
+dialog.showModal();
+debug('Although the document is not attached to any pages, showModal() should execute as normal.');
+shouldBeTrue("dialog.open");
+</script>
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>
index a5e9407..2ca8a23 100644 (file)
@@ -1,3 +1,23 @@
+2012-09-24  Matt Falkenhagen  <falken@chromium.org>
+
+        Skeleton implementation of dialog.showModal()
+        https://bugs.webkit.org/show_bug.cgi?id=97425
+
+        Reviewed by Kent Tamura.
+
+        This adds a basic implementation of showModal(), so it later can be
+        used to test the top layer, once it is implemented. The main features
+        of showModal(), modality and the top layer, are not yet implemented.
+
+        Test: fast/dom/HTMLDialogElement/dialog-show-modal.html
+
+        * html/HTMLDialogElement.cpp:
+        (WebCore::HTMLDialogElement::showModal): The same as show(), but throws an error in the cases specified in the spec.
+        (WebCore):
+        * html/HTMLDialogElement.h:
+        (HTMLDialogElement):
+        * html/HTMLDialogElement.idl:
+
 2012-09-24  Ryuan Choi  <ryuan.choi@samsung.com>
 
         [EFL] Regression after r129328
index 5374329..7d4d645 100644 (file)
@@ -62,6 +62,15 @@ void HTMLDialogElement::show()
     setBooleanAttribute(openAttr, true);
 }
 
+void HTMLDialogElement::showModal(ExceptionCode& ec)
+{
+    if (fastHasAttribute(openAttr) || !inDocument()) {
+        ec = INVALID_STATE_ERR;
+        return;
+    }
+    setBooleanAttribute(openAttr, true);
+}
+
 bool HTMLDialogElement::isPresentationAttribute(const QualifiedName& name) const
 {
     // FIXME: Workaround for <https://bugs.webkit.org/show_bug.cgi?id=91058>: modifying an attribute for which there is an attribute selector
index 7a7b011..e01045b 100644 (file)
@@ -41,6 +41,7 @@ public:
 
     void close(ExceptionCode&);
     void show();
+    void showModal(ExceptionCode&);
 
 private:
     HTMLDialogElement(const QualifiedName&, Document*);
index 442f93f..3c70c0c 100644 (file)
@@ -31,6 +31,7 @@ module html {
         attribute [Reflect] boolean open;
         void close() raises(DOMException);
         void show();
+        void showModal() raises(DOMException);
     };
 
 }