diff options
33 files changed, 206 insertions, 218 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index df7085e64d2..62d23a77118 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -2086,20 +2086,23 @@ class CGDefineProxyHandler(CGAbstractMethod): return CGAbstractMethod.define(self) def definition_body(self): + customDefineProperty = 'defineProperty_' + if self.descriptor.operations['IndexedSetter'] or self.descriptor.operations['NamedSetter']: + customDefineProperty = 'defineProperty' body = """\ let traps = ProxyTraps { getPropertyDescriptor: Some(getPropertyDescriptor), getOwnPropertyDescriptor: Some(getOwnPropertyDescriptor), - defineProperty: Some(defineProperty_), - getOwnPropertyNames: ptr::null(), + defineProperty: Some(%s), + getOwnPropertyNames: Some(getOwnPropertyNames_), delete_: Some(delete_), - enumerate: ptr::null(), + enumerate: Some(enumerate_), has: None, hasOwn: Some(hasOwn), get: Some(get), set: None, - keys: ptr::null(), + keys: None, iterate: None, call: None, @@ -2120,7 +2123,7 @@ let traps = ProxyTraps { }; CreateProxyHandler(&traps, &Class as *const _ as *const _) -""" % (FINALIZE_HOOK_NAME, +""" % (customDefineProperty, FINALIZE_HOOK_NAME, TRACE_HOOK_NAME) return CGGeneric(body) @@ -2276,8 +2279,15 @@ class CGPerSignatureCall(CGThing): invalidEnumValueFatal=not setter) for i in range(argConversionStartsAt, self.argCount)]) + errorResult = None + if self.isFallible(): + if nativeMethodName == "NamedSetter": + errorResult = " false" + else: + errorResult = " false as JSBool" + cgThings.append(CGCallGenerator( - ' false as JSBool' if self.isFallible() else None, + errorResult, self.getArguments(), self.argsPre, returnType, self.extendedAttributes, descriptor, nativeMethodName, static)) @@ -3836,14 +3846,14 @@ if expando.is_not_null() { getIndexedOrExpando = getFromExpando + "\n" namedGetter = self.descriptor.operations['NamedGetter'] - if namedGetter and False: #XXXjdm unfinished - getNamed = ("if (JSID_IS_STRING(id)) {\n" + + if namedGetter: + getNamed = ("if (RUST_JSID_IS_STRING(id) != 0) {\n" + " let name = jsid_to_str(cx, id);\n" + " let this = UnwrapProxy(proxy);\n" + " let this = JS::from_raw(this);\n" + " let this = this.root();\n" + CGIndenter(CGProxyNamedGetter(self.descriptor, templateValues)).define() + - "}\n") % (self.descriptor.concreteType) + "}\n") else: getNamed = "" @@ -4522,6 +4532,7 @@ class CGBindingRoot(CGThing): 'dom::bindings::proxyhandler::{_obj_toString, defineProperty_}', 'dom::bindings::proxyhandler::{FillPropertyDescriptor, GetExpandoObject}', 'dom::bindings::proxyhandler::{delete_, getPropertyDescriptor}', + 'dom::bindings::proxyhandler::{getOwnPropertyNames_, enumerate_}', 'dom::bindings::str::ByteString', 'page::JSPageInfo', 'libc', diff --git a/components/script/dom/bindings/proxyhandler.rs b/components/script/dom/bindings/proxyhandler.rs index bbfb7118b76..0d77ff63cdd 100644 --- a/components/script/dom/bindings/proxyhandler.rs +++ b/components/script/dom/bindings/proxyhandler.rs @@ -16,6 +16,7 @@ use js::glue::GetProxyExtra; use js::glue::{GetObjectProto, GetObjectParent, SetProxyExtra, GetProxyHandler}; use js::glue::InvokeGetOwnPropertyDescriptor; use js::glue::RUST_js_GetErrorMessage; +use js::glue::AutoIdVector; use js::{JSPROP_GETTER, JSPROP_ENUMERATE, JSPROP_READONLY, JSRESOLVE_QUALIFIED}; use libc; @@ -130,3 +131,14 @@ pub fn FillPropertyDescriptor(desc: &mut JSPropertyDescriptor, obj: *mut JSObjec desc.setter = None; desc.shortid = 0; } + +pub unsafe extern fn getOwnPropertyNames_(_cx: *mut JSContext, + _obj: *mut JSObject, + _v: *mut AutoIdVector) -> bool { + true +} + +pub unsafe extern fn enumerate_(_cx: *mut JSContext, _obj: *mut JSObject, + _v: *mut AutoIdVector) -> bool { + true +} diff --git a/components/script/dom/browsercontext.rs b/components/script/dom/browsercontext.rs index 3391da89fea..ed987f3a687 100644 --- a/components/script/dom/browsercontext.rs +++ b/components/script/dom/browsercontext.rs @@ -84,15 +84,15 @@ static PROXY_HANDLER: ProxyTraps = ProxyTraps { getPropertyDescriptor: None, getOwnPropertyDescriptor: None, defineProperty: None, - getOwnPropertyNames: 0 as *const u8, + getOwnPropertyNames: None, delete_: None, - enumerate: 0 as *const u8, + enumerate: None, has: None, hasOwn: None, get: None, set: None, - keys: 0 as *const u8, + keys: None, iterate: None, call: None, diff --git a/components/script/dom/domstringmap.rs b/components/script/dom/domstringmap.rs index 26218445c80..ff4990eb5f6 100644 --- a/components/script/dom/domstringmap.rs +++ b/components/script/dom/domstringmap.rs @@ -2,51 +2,56 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::DOMStringMapBinding; use dom::bindings::codegen::Bindings::DOMStringMapBinding::DOMStringMapMethods; +use dom::bindings::error::ErrorResult; use dom::bindings::global::GlobalRef; -use dom::bindings::js::{JSRef, Temporary}; +use dom::bindings::js::{JS, JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; +use dom::node::window_from_node; +use dom::htmlelement::{HTMLElement, HTMLElementCustomAttributeHelpers}; use servo_util::str::DOMString; -use std::collections::HashMap; - #[dom_struct] pub struct DOMStringMap { - map: DOMRefCell<HashMap<DOMString, DOMString>>, reflector_: Reflector, + element: JS<HTMLElement>, } impl DOMStringMap { - fn new_inherited() -> DOMStringMap { + fn new_inherited(element: JSRef<HTMLElement>) -> DOMStringMap { DOMStringMap { - map: DOMRefCell::new(HashMap::new()), reflector_: Reflector::new(), + element: JS::from_rooted(element), } } - pub fn new(global: GlobalRef) -> Temporary<DOMStringMap> { - reflect_dom_object(box DOMStringMap::new_inherited(), - global, DOMStringMapBinding::Wrap) + pub fn new(element: JSRef<HTMLElement>) -> Temporary<DOMStringMap> { + let window = window_from_node(element).root(); + reflect_dom_object(box DOMStringMap::new_inherited(element), + GlobalRef::Window(window.root_ref()), DOMStringMapBinding::Wrap) } } +// https://html.spec.whatwg.org/#domstringmap impl<'a> DOMStringMapMethods for JSRef<'a, DOMStringMap> { - fn NamedCreator(self, name: DOMString, value: DOMString) { - self.map.borrow_mut().insert(name, value); + fn NamedCreator(self, name: DOMString, value: DOMString) -> ErrorResult { + self.NamedSetter(name, value) } fn NamedDeleter(self, name: DOMString) { - self.map.borrow_mut().remove(&name); + let element = self.element.root(); + element.delete_custom_attr(name) } - fn NamedSetter(self, name: DOMString, value: DOMString) { - self.map.borrow_mut().insert(name, value); + fn NamedSetter(self, name: DOMString, value: DOMString) -> ErrorResult { + let element = self.element.root(); + element.set_custom_attr(name, value) } fn NamedGetter(self, name: DOMString, found: &mut bool) -> DOMString { - match self.map.borrow().get(&name) { + let element = self.element.root(); + match element.get_custom_attr(name) { Some(value) => { *found = true; value.clone() diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index ca2d6109f12..52a16fc6ea4 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -465,6 +465,7 @@ pub enum StylePriority { pub trait ElementHelpers<'a> { fn html_element_in_html_document(self) -> bool; fn local_name(self) -> &'a Atom; + fn parsed_name(self, name: DOMString) -> DOMString; fn namespace(self) -> &'a Namespace; fn prefix(self) -> &'a Option<DOMString>; fn attrs(&self) -> Ref<Vec<JS<Attr>>>; @@ -488,6 +489,15 @@ impl<'a> ElementHelpers<'a> for JSRef<'a, Element> { &self.extended_deref().local_name } + // https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name + fn parsed_name(self, name: DOMString) -> DOMString { + if self.html_element_in_html_document() { + name.as_slice().to_ascii_lower() + } else { + name + } + } + fn namespace(self) -> &'a Namespace { &self.extended_deref().namespace } @@ -626,6 +636,7 @@ pub trait AttributeHandlers { value: DOMString, prefix: Option<DOMString>); fn set_attribute(self, name: &Atom, value: AttrValue); + fn set_custom_attribute(self, name: DOMString, value: DOMString) -> ErrorResult; fn do_set_attribute(self, local_name: Atom, value: AttrValue, name: Atom, namespace: Namespace, prefix: Option<DOMString>, cb: |JSRef<Attr>| -> bool); @@ -695,6 +706,23 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { ns!(""), None, |attr| *attr.local_name() == *name); } + // https://html.spec.whatwg.org/multipage/dom.html#attr-data-* + fn set_custom_attribute(self, name: DOMString, value: DOMString) -> ErrorResult { + // Step 1. + match xml_name_type(name.as_slice()) { + InvalidXMLName => return Err(InvalidCharacter), + _ => {} + } + + // Steps 2-5. + let name = Atom::from_slice(name.as_slice()); + let value = self.parse_attribute(&ns!(""), &name, value); + self.do_set_attribute(name.clone(), value, name.clone(), ns!(""), None, |attr| { + *attr.name() == name && *attr.namespace() == ns!("") + }); + Ok(()) + } + fn do_set_attribute(self, local_name: Atom, value: AttrValue, name: Atom, namespace: Namespace, prefix: Option<DOMString>, cb: |JSRef<Attr>| -> bool) { @@ -919,11 +947,7 @@ impl<'a> ElementMethods for JSRef<'a, Element> { // http://dom.spec.whatwg.org/#dom-element-getattribute fn GetAttribute(self, name: DOMString) -> Option<DOMString> { - let name = if self.html_element_in_html_document() { - name.as_slice().to_ascii_lower() - } else { - name - }; + let name = self.parsed_name(name); self.get_attribute(ns!(""), &Atom::from_slice(name.as_slice())).root() .map(|s| s.Value()) } @@ -948,17 +972,13 @@ impl<'a> ElementMethods for JSRef<'a, Element> { } // Step 2. - let name = if self.html_element_in_html_document() { - name.as_slice().to_ascii_lower() - } else { - name - }; + let name = self.parsed_name(name); // Step 3-5. let name = Atom::from_slice(name.as_slice()); let value = self.parse_attribute(&ns!(""), &name, value); self.do_set_attribute(name.clone(), value, name.clone(), ns!(""), None, |attr| { - attr.name().as_slice() == name.as_slice() + *attr.name() == name }); Ok(()) } @@ -1029,11 +1049,7 @@ impl<'a> ElementMethods for JSRef<'a, Element> { // http://dom.spec.whatwg.org/#dom-element-removeattribute fn RemoveAttribute(self, name: DOMString) { - let name = if self.html_element_in_html_document() { - name.as_slice().to_ascii_lower() - } else { - name - }; + let name = self.parsed_name(name); self.remove_attribute(ns!(""), name.as_slice()) } diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs index e38ab5ff523..f36e84a078e 100644 --- a/components/script/dom/htmlelement.rs +++ b/components/script/dom/htmlelement.rs @@ -13,10 +13,13 @@ use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLFrameSetElementDeriv use dom::bindings::codegen::InheritTypes::{EventTargetCast, HTMLInputElementCast}; use dom::bindings::codegen::InheritTypes::{HTMLElementDerived, HTMLBodyElementDerived}; use dom::bindings::js::{JSRef, Temporary, MutNullableJS}; +use dom::bindings::error::ErrorResult; +use dom::bindings::error::Error::Syntax; use dom::bindings::utils::{Reflectable, Reflector}; use dom::cssstyledeclaration::CSSStyleDeclaration; use dom::document::Document; -use dom::element::{Element, ElementTypeId, ActivationElementHelpers}; +use dom::domstringmap::DOMStringMap; +use dom::element::{Element, ElementTypeId, ActivationElementHelpers, AttributeHandlers}; use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId}; use dom::node::{Node, NodeTypeId, window_from_node}; use dom::virtualmethods::VirtualMethods; @@ -31,6 +34,7 @@ use std::default::Default; pub struct HTMLElement { element: Element, style_decl: MutNullableJS<CSSStyleDeclaration>, + dataset: MutNullableJS<DOMStringMap>, } impl HTMLElementDerived for EventTarget { @@ -48,6 +52,7 @@ impl HTMLElement { HTMLElement { element: Element::new_inherited(type_id, tag_name, ns!(HTML), prefix, document), style_decl: Default::default(), + dataset: Default::default(), } } @@ -89,6 +94,11 @@ impl<'a> HTMLElementMethods for JSRef<'a, HTMLElement> { global_event_handlers!(NoOnload) + // https://html.spec.whatwg.org/multipage/dom.html#dom-dataset + fn Dataset(self) -> Temporary<DOMStringMap> { + self.dataset.or_init(|| DOMStringMap::new(self)) + } + fn GetOnload(self) -> Option<EventHandlerNonNull> { if self.is_body_or_frameset() { let win = window_from_node(self).root(); @@ -122,6 +132,51 @@ impl<'a> HTMLElementMethods for JSRef<'a, HTMLElement> { } } +// https://html.spec.whatwg.org/#attr-data-* +pub trait HTMLElementCustomAttributeHelpers { + fn set_custom_attr(self, name: DOMString, value: DOMString) -> ErrorResult; + fn get_custom_attr(self, name: DOMString) -> Option<DOMString>; + fn delete_custom_attr(self, name: DOMString); +} + +fn to_snake_case(name: DOMString) -> DOMString { + let mut attr_name = "data-".into_string(); + for ch in name.as_slice().chars() { + if ch.is_uppercase() { + attr_name.push('\x2d'); + attr_name.push(ch.to_lowercase()); + } else { + attr_name.push(ch); + } + } + attr_name +} + +impl<'a> HTMLElementCustomAttributeHelpers for JSRef<'a, HTMLElement> { + fn set_custom_attr(self, name: DOMString, value: DOMString) -> ErrorResult { + if name.as_slice().chars() + .skip_while(|&ch| ch != '\u002d') + .nth(1).map_or(false, |ch| ch as u8 - b'a' < 26) { + return Err(Syntax); + } + let element: JSRef<Element> = ElementCast::from_ref(self); + element.set_custom_attribute(to_snake_case(name), value) + } + + fn get_custom_attr(self, name: DOMString) -> Option<DOMString> { + let element: JSRef<Element> = ElementCast::from_ref(self); + element.get_attribute(ns!(""), &Atom::from_slice(to_snake_case(name).as_slice())).map(|attr| { + let attr = attr.root(); + attr.value().as_slice().to_string() + }) + } + + fn delete_custom_attr(self, name: DOMString) { + let element: JSRef<Element> = ElementCast::from_ref(self); + element.remove_attribute(ns!(""), to_snake_case(name).as_slice()) + } +} + impl<'a> VirtualMethods for JSRef<'a, HTMLElement> { fn super_type<'a>(&'a self) -> Option<&'a VirtualMethods> { let element: &JSRef<Element> = ElementCast::from_borrowed_ref(self); diff --git a/components/script/dom/webidls/DOMStringMap.webidl b/components/script/dom/webidls/DOMStringMap.webidl index aa4d3ed9673..c11d47c5a85 100644 --- a/components/script/dom/webidls/DOMStringMap.webidl +++ b/components/script/dom/webidls/DOMStringMap.webidl @@ -7,6 +7,7 @@ [OverrideBuiltins] interface DOMStringMap { getter DOMString (DOMString name); + [Throws] setter creator void (DOMString name, DOMString value); deleter void (DOMString name); }; diff --git a/components/script/dom/webidls/HTMLElement.webidl b/components/script/dom/webidls/HTMLElement.webidl index 39c7699900d..90ef09d7a9f 100644 --- a/components/script/dom/webidls/HTMLElement.webidl +++ b/components/script/dom/webidls/HTMLElement.webidl @@ -10,7 +10,7 @@ interface HTMLElement : Element { attribute DOMString lang; // attribute boolean translate; // attribute DOMString dir; - //readonly attribute DOMStringMap dataset; + readonly attribute DOMStringMap dataset; // microdata // attribute boolean itemScope; diff --git a/components/script/tests.rs b/components/script/tests.rs index 8f7bbda8385..e4636c5b5ad 100644 --- a/components/script/tests.rs +++ b/components/script/tests.rs @@ -41,8 +41,8 @@ macro_rules! sizeof_checker ( sizeof_checker!(size_event_target, EventTarget, 56) sizeof_checker!(size_node, Node, 304) sizeof_checker!(size_element, Element, 448) -sizeof_checker!(size_htmlelement, HTMLElement, 464) -sizeof_checker!(size_div, HTMLDivElement, 464) -sizeof_checker!(size_span, HTMLSpanElement, 464) +sizeof_checker!(size_htmlelement, HTMLElement, 480) +sizeof_checker!(size_div, HTMLDivElement, 480) +sizeof_checker!(size_span, HTMLSpanElement, 480) sizeof_checker!(size_text, Text, 336) sizeof_checker!(size_characterdata, CharacterData, 336) diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 6ef9522ae6b..f09a4de3093 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -412,7 +412,7 @@ dependencies = [ [[package]] name = "js" version = "0.1.0" -source = "git+https://github.com/servo/rust-mozjs#e04e7307a3e52f46bc9ba3d5682188285110bc67" +source = "git+https://github.com/servo/rust-mozjs#2d86d6fb7ece49ff2f469c391e15e13f2b02af42" dependencies = [ "mozjs-sys 0.0.0 (git+https://github.com/servo/mozjs)", ] diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index a291aee967c..9c70c1e8c43 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -380,7 +380,7 @@ dependencies = [ [[package]] name = "js" version = "0.1.0" -source = "git+https://github.com/servo/rust-mozjs#e04e7307a3e52f46bc9ba3d5682188285110bc67" +source = "git+https://github.com/servo/rust-mozjs#2d86d6fb7ece49ff2f469c391e15e13f2b02af42" dependencies = [ "mozjs-sys 0.0.0 (git+https://github.com/servo/mozjs)", ] diff --git a/ports/gonk/Cargo.lock b/ports/gonk/Cargo.lock index 36c1d38c884..c5209915585 100644 --- a/ports/gonk/Cargo.lock +++ b/ports/gonk/Cargo.lock @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "js" version = "0.1.0" -source = "git+https://github.com/servo/rust-mozjs#e04e7307a3e52f46bc9ba3d5682188285110bc67" +source = "git+https://github.com/servo/rust-mozjs#2d86d6fb7ece49ff2f469c391e15e13f2b02af42" dependencies = [ "mozjs-sys 0.0.0 (git+https://github.com/servo/mozjs)", ] diff --git a/tests/wpt/metadata/dom/nodes/Element-children.html.ini b/tests/wpt/metadata/dom/nodes/Element-children.html.ini index 3a571e8e438..5cab09c0321 100644 --- a/tests/wpt/metadata/dom/nodes/Element-children.html.ini +++ b/tests/wpt/metadata/dom/nodes/Element-children.html.ini @@ -1,3 +1,5 @@ [Element-children.html] type: testharness - expected: CRASH + [HTMLCollection edge cases 1] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/nodes/Element-getElementsByTagName.html.ini b/tests/wpt/metadata/dom/nodes/Element-getElementsByTagName.html.ini index e7df74ba227..b5154c2e985 100644 --- a/tests/wpt/metadata/dom/nodes/Element-getElementsByTagName.html.ini +++ b/tests/wpt/metadata/dom/nodes/Element-getElementsByTagName.html.ini @@ -5,3 +5,4 @@ [hasOwnProperty, getOwnPropertyDescriptor, getOwnPropertyNames] expected: FAIL + diff --git a/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.forms.html.ini b/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.forms.html.ini index 1d1cad91e2e..e91f95fe3df 100644 --- a/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.forms.html.ini +++ b/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.forms.html.ini @@ -1,3 +1,11 @@ [document.forms.html] type: testharness - expected: CRASH + [document.forms] + expected: FAIL + + [document.forms iteration] + expected: FAIL + + [document.forms getOwnPropertyNames] + expected: FAIL + diff --git a/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.images.html.ini b/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.images.html.ini deleted file mode 100644 index 37986ac7c73..00000000000 --- a/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.images.html.ini +++ /dev/null @@ -1,17 +0,0 @@ -[document.images.html] - type: testharness - [img with id] - expected: FAIL - - [img with name] - expected: FAIL - - [img with id and name] - expected: FAIL - - [Two img elements with the same id] - expected: FAIL - - [Two img elements with the same name] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/elements/global-attributes/custom-attrs.html.ini b/tests/wpt/metadata/html/dom/elements/global-attributes/custom-attrs.html.ini deleted file mode 100644 index 2a68450037d..00000000000 --- a/tests/wpt/metadata/html/dom/elements/global-attributes/custom-attrs.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[custom-attrs.html] - type: testharness - [Setting an Element\'s dataset property should not interfere with namespaced attributes with same name] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/elements/global-attributes/data_unicode_attr.html.ini b/tests/wpt/metadata/html/dom/elements/global-attributes/data_unicode_attr.html.ini deleted file mode 100644 index 7590d513387..00000000000 --- a/tests/wpt/metadata/html/dom/elements/global-attributes/data_unicode_attr.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[data_unicode_attr.html] - type: testharness - [dataset - SBCS] - expected: FAIL - - [dataset - UNICODE] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-delete.html.ini b/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-delete.html.ini index a88947eac79..5718c7b3ebb 100644 --- a/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-delete.html.ini +++ b/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-delete.html.ini @@ -12,9 +12,6 @@ [Deleting element.dataset[\'Foo\'\] should also remove an attribute with name \'data--foo\' should it exist.] expected: FAIL - [Deleting element.dataset[\'-foo\'\] should also remove an attribute with name \'data--foo\' should it exist.] - expected: FAIL - [Deleting element.dataset[\'-Foo\'\] should also remove an attribute with name \'data---foo\' should it exist.] expected: FAIL @@ -24,6 +21,3 @@ [Deleting element.dataset[\'\xc3\xa0\'\] should also remove an attribute with name \'data-\xc3\xa0\' should it exist.] expected: FAIL - [Deleting element.dataset[\'foo\'\] should not throw if even if the element does now have an attribute with the name data-foo.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-get.html.ini b/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-get.html.ini index 135cbd44b1a..8294873d2ff 100644 --- a/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-get.html.ini +++ b/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-get.html.ini @@ -1,32 +1,5 @@ [dataset-get.html] type: testharness - [Getting element.dataset[\'foo\'\] should return the value of element.getAttribute(\'data-foo\')\'] - expected: FAIL - - [Getting element.dataset[\'fooBar\'\] should return the value of element.getAttribute(\'data-foo-bar\')\'] - expected: FAIL - - [Getting element.dataset[\'-\'\] should return the value of element.getAttribute(\'data--\')\'] - expected: FAIL - - [Getting element.dataset[\'Foo\'\] should return the value of element.getAttribute(\'data--foo\')\'] - expected: FAIL - - [Getting element.dataset[\'-Foo\'\] should return the value of element.getAttribute(\'data---foo\')\'] - expected: FAIL - - [Getting element.dataset[\'foo\'\] should return the value of element.getAttribute(\'data-Foo\')\'] - expected: FAIL - - [Getting element.dataset[\'\'\] should return the value of element.getAttribute(\'data-\')\'] - expected: FAIL - - [Getting element.dataset[\'\xc3\xa0\'\] should return the value of element.getAttribute(\'data-\xc3\xa0\')\'] - expected: FAIL - [Getting element.dataset[\'toString\'\] should return the value of element.getAttribute(\'data-to-string\')\'] expected: FAIL - [Tests that an attribute named dataFoo does not make an entry in the dataset DOMStringMap.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-prototype.html.ini b/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-prototype.html.ini deleted file mode 100644 index 69c8e9c2f83..00000000000 --- a/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-prototype.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[dataset-prototype.html] - type: testharness - [An elements dataset property is an instance of a DOMStringMap] - expected: FAIL - - [Properties on Object.prototype should shine through.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-set.html.ini b/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-set.html.ini index de7d444eca4..8887ec05b9e 100644 --- a/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-set.html.ini +++ b/tests/wpt/metadata/html/dom/elements/global-attributes/dataset-set.html.ini @@ -1,32 +1,5 @@ [dataset-set.html] type: testharness - [Setting element.dataset[\'foo\'\] should also change the value of element.getAttribute(\'data-foo\')\'] - expected: FAIL - - [Setting element.dataset[\'fooBar\'\] should also change the value of element.getAttribute(\'data-foo-bar\')\'] - expected: FAIL - - [Setting element.dataset[\'-\'\] should also change the value of element.getAttribute(\'data--\')\'] - expected: FAIL - - [Setting element.dataset[\'Foo\'\] should also change the value of element.getAttribute(\'data--foo\')\'] - expected: FAIL - - [Setting element.dataset[\'-Foo\'\] should also change the value of element.getAttribute(\'data---foo\')\'] - expected: FAIL - - [Setting element.dataset[\'\'\] should also change the value of element.getAttribute(\'data-\')\'] - expected: FAIL - - [Setting element.dataset[\'\xc3\xa0\'\] should also change the value of element.getAttribute(\'data-\xc3\xa0\')\'] - expected: FAIL - - [Setting element.dataset[\'-foo\'\] should throw a SYNTAX_ERR\'] - expected: FAIL - - [Setting element.dataset[\'foo \'\] should throw an INVALID_CHARACTER_ERR\'] - expected: FAIL - [Setting element.dataset[\'foo\xef\xa4\x80\'\] should throw an INVALID_CHARACTER_ERR\'] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/elements/global-attributes/dataset.html.ini b/tests/wpt/metadata/html/dom/elements/global-attributes/dataset.html.ini deleted file mode 100644 index 299c83c3c93..00000000000 --- a/tests/wpt/metadata/html/dom/elements/global-attributes/dataset.html.ini +++ /dev/null @@ -1,14 +0,0 @@ -[dataset.html] - type: testharness - [Should return \'undefined\' before setting an attribute] - expected: FAIL - - [Should return \'value\' if that\'s the value] - expected: FAIL - - [Should return the empty string if that\'s the value] - expected: FAIL - - [Should return \'undefined\' after removing an attribute] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index 57602d29da9..0a0250c004f 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -921,12 +921,6 @@ [DOMStringMap interface object length] expected: FAIL - [DOMStringMap must be primary interface of document.head.dataset] - expected: FAIL - - [Stringification of document.head.dataset] - expected: FAIL - [DOMElementMap interface: existence and properties of interface object] expected: FAIL @@ -954,9 +948,6 @@ [HTMLElement interface: attribute dir] expected: FAIL - [HTMLElement interface: attribute dataset] - expected: FAIL - [HTMLElement interface: attribute itemScope] expected: FAIL @@ -1215,9 +1206,6 @@ [HTMLElement interface: document.createElement("noscript") must inherit property "dir" with the proper type (3)] expected: FAIL - [HTMLElement interface: document.createElement("noscript") must inherit property "dataset" with the proper type (4)] - expected: FAIL - [HTMLElement interface: document.createElement("noscript") must inherit property "itemScope" with the proper type (5)] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini index 674a4bf6ceb..e5fd8560c78 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini @@ -1,3 +1,35 @@ [basic.html] type: testharness - expected: TIMEOUT + [<img src="/images/green-256x256.png" data-expect="256">] + expected: FAIL + + [<img srcset="/images/green-256x256.png 1x" data-expect="256">] + expected: FAIL + + [<img srcset="/images/green-256x256.png 1.6x" data-expect="160">] + expected: FAIL + + [<img srcset="/images/green-256x256.png 2x" data-expect="128">] + expected: FAIL + + [<img srcset="/images/green-256x256.png 10000x" data-expect="0">] + expected: FAIL + + [<img srcset="/images/green-256x256.png 9e99999999999999999999999x" data-expect="0">] + expected: FAIL + + [<img srcset="/images/green-256x256.png 256w" sizes="256px" data-expect="256">] + expected: FAIL + + [<img srcset="/images/green-256x256.png 512w" sizes="256px" data-expect="128">] + expected: FAIL + + [<img srcset="/images/green-256x256.png 256w" sizes="512px" data-expect="512">] + expected: FAIL + + [<img srcset="/images/green-256x256.png 256w" sizes="1px" data-expect="1">] + expected: FAIL + + [<img srcset="/images/green-256x256.png 256w" sizes="0px" data-expect="0">] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/the-button-element/button-events.html.ini b/tests/wpt/metadata/html/semantics/forms/the-button-element/button-events.html.ini index fee05396743..0267bcc8560 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-button-element/button-events.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-button-element/button-events.html.ini @@ -2,11 +2,11 @@ type: testharness expected: TIMEOUT [The submit event must be fired when click a button in submit status] - expected: NOTRUN + expected: TIMEOUT [The reset event must be fired when click a button in reset status] - expected: NOTRUN + expected: TIMEOUT [The show event must be fired when click a button in menu status] - expected: NOTRUN + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/forms/the-fieldset-element/HTMLFieldSetElement.html.ini b/tests/wpt/metadata/html/semantics/forms/the-fieldset-element/HTMLFieldSetElement.html.ini index 32e084e0c78..d8668a3b537 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-fieldset-element/HTMLFieldSetElement.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-fieldset-element/HTMLFieldSetElement.html.ini @@ -9,3 +9,6 @@ [The controls must root at the fieldset element] expected: FAIL + [The form attribute must return the fieldset\'s form owner] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/password.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/password.html.ini index c5b79f2fd5f..98cc912d3f4 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/password.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/password.html.ini @@ -5,3 +5,4 @@ [sanitization algorithm strips line breaks] expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/reset.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/reset.html.ini index 9bc56e188a3..20a3f17079a 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/reset.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/reset.html.ini @@ -8,3 +8,4 @@ [reset button resets controls associated with a form using the form attribute] expected: FAIL + diff --git a/tests/wpt/metadata/webstorage/storage_session_clear_js.html.ini b/tests/wpt/metadata/webstorage/storage_session_clear_js.html.ini deleted file mode 100644 index 68207e3a95c..00000000000 --- a/tests/wpt/metadata/webstorage/storage_session_clear_js.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[storage_session_clear_js.html] - type: testharness - [Web Storage] - expected: FAIL - diff --git a/tests/wpt/metadata/webstorage/storage_session_getitem_js.html.ini b/tests/wpt/metadata/webstorage/storage_session_getitem_js.html.ini deleted file mode 100644 index bfa36046966..00000000000 --- a/tests/wpt/metadata/webstorage/storage_session_getitem_js.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[storage_session_getitem_js.html] - type: testharness - [array access should be correct] - expected: FAIL - diff --git a/tests/wpt/metadata/webstorage/storage_session_length_js.html.ini b/tests/wpt/metadata/webstorage/storage_session_length_js.html.ini deleted file mode 100644 index 07e11f463cf..00000000000 --- a/tests/wpt/metadata/webstorage/storage_session_length_js.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[storage_session_length_js.html] - type: testharness - [Web Storage] - expected: FAIL - diff --git a/tests/wpt/metadata/webstorage/storage_session_setitem_js.html.ini b/tests/wpt/metadata/webstorage/storage_session_setitem_js.html.ini index 7486cce7dc6..d28f5207ae3 100644 --- a/tests/wpt/metadata/webstorage/storage_session_setitem_js.html.ini +++ b/tests/wpt/metadata/webstorage/storage_session_setitem_js.html.ini @@ -1,17 +1,8 @@ [storage_session_setitem_js.html] type: testharness - [Web Storage 2] - expected: FAIL - - [Web Storage 3] - expected: FAIL - [Web Storage 4] expected: FAIL - [Web Storage 5] - expected: FAIL - [Web Storage 6] expected: FAIL @@ -27,15 +18,3 @@ [Web Storage 10] expected: FAIL - [Web Storage 11] - expected: FAIL - - [Web Storage 12] - expected: FAIL - - [Web Storage 13] - expected: FAIL - - [Web Storage 14] - expected: FAIL - |