aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py29
-rw-r--r--components/script/dom/bindings/proxyhandler.rs12
-rw-r--r--components/script/dom/browsercontext.rs6
-rw-r--r--components/script/dom/domstringmap.rs37
-rw-r--r--components/script/dom/element.rs48
-rw-r--r--components/script/dom/htmlelement.rs57
-rw-r--r--components/script/dom/webidls/DOMStringMap.webidl1
-rw-r--r--components/script/dom/webidls/HTMLElement.webidl2
-rw-r--r--components/script/tests.rs6
-rw-r--r--components/servo/Cargo.lock2
-rw-r--r--ports/cef/Cargo.lock2
-rw-r--r--ports/gonk/Cargo.lock2
-rw-r--r--tests/wpt/metadata/dom/nodes/Element-children.html.ini4
-rw-r--r--tests/wpt/metadata/dom/nodes/Element-getElementsByTagName.html.ini1
-rw-r--r--tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.forms.html.ini10
-rw-r--r--tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.images.html.ini17
-rw-r--r--tests/wpt/metadata/html/dom/elements/global-attributes/custom-attrs.html.ini5
-rw-r--r--tests/wpt/metadata/html/dom/elements/global-attributes/data_unicode_attr.html.ini8
-rw-r--r--tests/wpt/metadata/html/dom/elements/global-attributes/dataset-delete.html.ini6
-rw-r--r--tests/wpt/metadata/html/dom/elements/global-attributes/dataset-get.html.ini27
-rw-r--r--tests/wpt/metadata/html/dom/elements/global-attributes/dataset-prototype.html.ini8
-rw-r--r--tests/wpt/metadata/html/dom/elements/global-attributes/dataset-set.html.ini27
-rw-r--r--tests/wpt/metadata/html/dom/elements/global-attributes/dataset.html.ini14
-rw-r--r--tests/wpt/metadata/html/dom/interfaces.html.ini12
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini34
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-button-element/button-events.html.ini6
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-fieldset-element/HTMLFieldSetElement.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-input-element/password.html.ini1
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-input-element/reset.html.ini1
-rw-r--r--tests/wpt/metadata/webstorage/storage_session_clear_js.html.ini5
-rw-r--r--tests/wpt/metadata/webstorage/storage_session_getitem_js.html.ini5
-rw-r--r--tests/wpt/metadata/webstorage/storage_session_length_js.html.ini5
-rw-r--r--tests/wpt/metadata/webstorage/storage_session_setitem_js.html.ini21
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
-