diff --git a/components/script/dom/htmldialogelement.rs b/components/script/dom/htmldialogelement.rs index d6e2a724461..febfbc38f81 100644 --- a/components/script/dom/htmldialogelement.rs +++ b/components/script/dom/htmldialogelement.rs @@ -3,18 +3,25 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::codegen::Bindings::HTMLDialogElementBinding; +use dom::bindings::codegen::Bindings::HTMLDialogElementBinding::HTMLDialogElementMethods; use dom::bindings::codegen::InheritTypes::HTMLDialogElementDerived; +use dom::bindings::cell::DOMRefCell; use dom::bindings::js::{JSRef, Temporary}; use dom::document::Document; use dom::element::ElementTypeId; use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; use dom::node::{Node, NodeTypeId}; + use util::str::DOMString; +use string_cache::Atom; + +use std::borrow::ToOwned; #[dom_struct] pub struct HTMLDialogElement { htmlelement: HTMLElement, + return_value: DOMRefCell, } impl HTMLDialogElementDerived for EventTarget { @@ -26,7 +33,8 @@ impl HTMLDialogElementDerived for EventTarget { impl HTMLDialogElement { fn new_inherited(localName: DOMString, prefix: Option, document: JSRef) -> HTMLDialogElement { HTMLDialogElement { - htmlelement: HTMLElement::new_inherited(HTMLElementTypeId::HTMLDialogElement, localName, prefix, document) + htmlelement: HTMLElement::new_inherited(HTMLElementTypeId::HTMLDialogElement, localName, prefix, document), + return_value: DOMRefCell::new("".to_owned()), } } @@ -37,3 +45,21 @@ impl HTMLDialogElement { } } +impl<'a> HTMLDialogElementMethods for JSRef<'a, HTMLDialogElement> { + // https://html.spec.whatwg.org/multipage/#dom-dialog-open + make_bool_getter!(Open); + + // https://html.spec.whatwg.org/multipage/#dom-dialog-open + make_bool_setter!(SetOpen, "open"); + + // https://html.spec.whatwg.org/multipage/#dom-dialog-returnvalue + fn ReturnValue(self) -> DOMString { + let return_value = self.return_value.borrow(); + return_value.clone() + } + + // https://html.spec.whatwg.org/multipage/#dom-dialog-returnvalue + fn SetReturnValue(self, return_value: DOMString) { + *self.return_value.borrow_mut() = return_value; + } +} diff --git a/components/script/dom/webidls/HTMLDialogElement.webidl b/components/script/dom/webidls/HTMLDialogElement.webidl index 659096994e7..aa78cb38aea 100644 --- a/components/script/dom/webidls/HTMLDialogElement.webidl +++ b/components/script/dom/webidls/HTMLDialogElement.webidl @@ -5,8 +5,8 @@ // https://www.whatwg.org/html/#htmldialogelement interface HTMLDialogElement : HTMLElement { - //attribute boolean open; - //attribute DOMString returnValue; + attribute boolean open; + attribute DOMString returnValue; //void show(optional (MouseEvent or Element) anchor); //void showModal(optional (MouseEvent or Element) anchor); //void close(optional DOMString returnValue); diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index efbe6e1a5b8..b0048beb2f8 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -6678,12 +6678,6 @@ [HTMLDialogElement interface object length] expected: FAIL - [HTMLDialogElement interface: attribute open] - expected: FAIL - - [HTMLDialogElement interface: attribute returnValue] - expected: FAIL - [HTMLDialogElement interface: operation show([object Object\],[object Object\])] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/reflection-misc.html.ini b/tests/wpt/metadata/html/dom/reflection-misc.html.ini index c3fcda41468..831c5f16c10 100644 --- a/tests/wpt/metadata/html/dom/reflection-misc.html.ini +++ b/tests/wpt/metadata/html/dom/reflection-misc.html.ini @@ -12834,114 +12834,6 @@ [dialog.tabIndex: IDL set to -2147483648 followed by getAttribute()] expected: FAIL - [dialog.open: typeof IDL attribute] - expected: FAIL - - [dialog.open: IDL get with DOM attribute unset] - expected: FAIL - - [dialog.open: setAttribute() to "" followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to " foo " followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to undefined followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to null followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to 7 followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to 1.5 followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to true followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to false followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to object "[object Object\]" followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to NaN followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to Infinity followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to -Infinity followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to "\\0" followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to object "test-toString" followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to object "test-valueOf" followed by IDL get] - expected: FAIL - - [dialog.open: setAttribute() to "open" followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to "" followed by hasAttribute()] - expected: FAIL - - [dialog.open: IDL set to "" followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to " foo " followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to undefined followed by hasAttribute()] - expected: FAIL - - [dialog.open: IDL set to undefined followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to null followed by hasAttribute()] - expected: FAIL - - [dialog.open: IDL set to null followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to 7 followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to 1.5 followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to false followed by hasAttribute()] - expected: FAIL - - [dialog.open: IDL set to object "[object Object\]" followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to NaN followed by hasAttribute()] - expected: FAIL - - [dialog.open: IDL set to NaN followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to Infinity followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to -Infinity followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to "\\0" followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to object "test-toString" followed by IDL get] - expected: FAIL - - [dialog.open: IDL set to object "test-valueOf" followed by IDL get] - expected: FAIL - [dialog.itemScope: typeof IDL attribute] expected: FAIL