From 1ff6a1f60a5846ad7f2cd448b80d3e3ee556a180 Mon Sep 17 00:00:00 2001 From: Jaydeep Date: Sun, 3 Jan 2016 17:14:30 -0800 Subject: [PATCH] Implement HTMLHyperlinkElementUtils for HTMLAnchorElement --- components/script/dom/htmlanchorelement.rs | 343 ++++++++++++++++++ components/script/dom/urlhelper.rs | 5 + .../dom/webidls/HTMLAnchorElement.webidl | 2 +- .../webidls/HTMLHyperlinkElementUtils.webidl | 30 +- ...Implementation-createHTMLDocument.html.ini | 5 - .../dom/nodes/Document-constructor.html.ini | 5 - .../metadata/encoding/big5-encoder.html.ini | 3 - .../encoding/gb18030-encoder.html.ini | 3 - .../metadata/encoding/gbk-encoder.html.ini | 3 - .../encoding/iso-2022-jp-encoder.html.ini | 6 - .../wpt/metadata/html/dom/interfaces.html.ini | 60 --- .../html/dom/reflection-embedded.html.ini | 222 ------------ .../html/dom/reflection-forms.html.ini | 81 ----- .../html/dom/reflection-grouping.html.ini | 78 ---- .../html/dom/reflection-metadata.html.ini | 159 -------- .../html/dom/reflection-misc.html.ini | 183 ---------- .../html/dom/reflection-obsolete.html.ini | 63 ---- .../html/dom/reflection-sections.html.ini | 78 ---- .../html/dom/reflection-tabular.html.ini | 63 ---- .../html/dom/reflection-text.html.ini | 237 ------------ .../formaction.html.ini | 5 - .../the-a-element/a-stringifier.html.ini | 26 -- .../metadata/url/a-element-xhtml.xhtml.ini | 153 -------- tests/wpt/metadata/url/a-element.html.ini | 153 -------- .../websockets/constructor/006.html.ini | 5 - 25 files changed, 367 insertions(+), 1604 deletions(-) delete mode 100644 tests/wpt/metadata/dom/nodes/DOMImplementation-createHTMLDocument.html.ini delete mode 100644 tests/wpt/metadata/dom/nodes/Document-constructor.html.ini delete mode 100644 tests/wpt/metadata/html/semantics/forms/attributes-common-to-form-controls/formaction.html.ini delete mode 100644 tests/wpt/metadata/html/semantics/text-level-semantics/the-a-element/a-stringifier.html.ini delete mode 100644 tests/wpt/metadata/websockets/constructor/006.html.ini diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs index 0a1e15ef193a5..16f47315b76b6 100644 --- a/components/script/dom/htmlanchorelement.rs +++ b/components/script/dom/htmlanchorelement.rs @@ -5,6 +5,7 @@ use dom::activation::Activatable; use dom::attr::AttrValue; +use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::AttrBinding::AttrMethods; use dom::bindings::codegen::Bindings::HTMLAnchorElementBinding; use dom::bindings::codegen::Bindings::HTMLAnchorElementBinding::HTMLAnchorElementMethods; @@ -12,6 +13,7 @@ use dom::bindings::codegen::Bindings::MouseEventBinding::MouseEventMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, MutNullableHeap, Root}; +use dom::bindings::str::USVString; use dom::document::Document; use dom::domtokenlist::DOMTokenList; use dom::element::Element; @@ -21,16 +23,19 @@ use dom::htmlelement::HTMLElement; use dom::htmlimageelement::HTMLImageElement; use dom::mouseevent::MouseEvent; use dom::node::{Node, document_from_node, window_from_node}; +use dom::urlhelper::UrlHelper; use dom::virtualmethods::VirtualMethods; use num::ToPrimitive; use std::default::Default; use string_cache::Atom; +use url::{Url, UrlParser}; use util::str::DOMString; #[dom_struct] pub struct HTMLAnchorElement { htmlelement: HTMLElement, rel_list: MutNullableHeap>, + url: DOMRefCell>, } impl HTMLAnchorElement { @@ -41,6 +46,7 @@ impl HTMLAnchorElement { htmlelement: HTMLElement::new_inherited(localName, prefix, document), rel_list: Default::default(), + url: DOMRefCell::new(None), } } @@ -51,6 +57,37 @@ impl HTMLAnchorElement { let element = HTMLAnchorElement::new_inherited(localName, prefix, document); Node::reflect_node(box element, document, HTMLAnchorElementBinding::Wrap) } + + // https://html.spec.whatwg.org/multipage/#concept-hyperlink-url-set + fn set_url(&self) { + let attribute = self.upcast::().get_attribute(&ns!(), &atom!("href")); + *self.url.borrow_mut() = attribute.and_then(|attribute| { + let document = document_from_node(self); + let mut parser = UrlParser::new(); + parser.base_url(document.url()); + parser.parse(&attribute.value()).ok() + }); + } + + // https://html.spec.whatwg.org/multipage/#reinitialise-url + fn reinitialize_url(&self) { + // Step 1. + match *self.url.borrow() { + None => return, + Some(ref url) if url.scheme == "blob" && + url.non_relative_scheme_data().is_some() => return, + _ => (), + } + + // Step 2. + self.set_url(); + } + + // https://html.spec.whatwg.org/multipage/#update-href + fn update_href(&self) { + self.upcast::().set_string_attribute(&atom!("href"), + self.url.borrow().as_ref().unwrap().serialize().into()); + } } impl VirtualMethods for HTMLAnchorElement { @@ -107,6 +144,312 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // https://html.spec.whatwg.org/multipage/#dom-a-shape make_setter!(SetShape, "shape"); + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-hash + fn Hash(&self) -> USVString { + // Step 1. + self.reinitialize_url(); + + match *self.url.borrow() { + // Step 3. + None => USVString(String::new()), + Some(ref url) => { + // Steps 3-4. + UrlHelper::Hash(url) + } + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-hash + fn SetHash(&self, value: USVString) { + // Step 1. + self.reinitialize_url(); + + // Step 3. + if let Some(url) = self.url.borrow_mut().as_mut() { + if url.scheme == "javascript" { return; } + // Steps 4-5. + UrlHelper::SetHash(url, value); + // Step 6. + self.update_href(); + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-host + fn Host(&self) -> USVString { + // Step 1. + self.reinitialize_url(); + + match *self.url.borrow() { + // Step 3. + None => USVString(String::new()), + Some(ref url) => { + if url.host().is_none() { + USVString(String::new()) + } else { + // Steps 4-5. + UrlHelper::Host(url) + } + } + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-host + fn SetHost(&self, value: USVString) { + // Step 1. + self.reinitialize_url(); + + // Step 3. + if let Some(url) = self.url.borrow_mut().as_mut() { + if url.non_relative_scheme_data().is_some() { + return; + } + // Step 4. + UrlHelper::SetHost(url, value); + // Step 5. + self.update_href(); + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-hostname + fn Hostname(&self) -> USVString { + // Step 1. + self.reinitialize_url(); + + match *self.url.borrow() { + // Step 3. + None => USVString(String::new()), + Some(ref url) => { + // Step 4. + UrlHelper::Hostname(url) + } + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-hostname + fn SetHostname(&self, value: USVString) { + // Step 1. + self.reinitialize_url(); + + // Step 3. + if let Some(url) = self.url.borrow_mut().as_mut() { + if url.non_relative_scheme_data().is_some() { + return; + } + // Step 4. + UrlHelper::SetHostname(url, value); + // Step 5. + self.update_href(); + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-href + fn Href(&self) -> USVString { + // Step 1. + self.reinitialize_url(); + + USVString(match *self.url.borrow() { + None => { + match self.upcast::().get_attribute(&ns!(), &atom!("href")) { + // Step 3. + None => String::new(), + // Step 4. + Some(attribute) => (**attribute.value()).to_owned(), + } + }, + // Step 5. + Some(ref url) => url.serialize(), + }) + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-href + fn SetHref(&self, value: USVString) { + self.upcast::().set_string_attribute(&atom!("href"), + DOMString::from_string(value.0)); + self.set_url(); + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-password + fn Password(&self) -> USVString { + // Step 1. + self.reinitialize_url(); + + match *self.url.borrow() { + // Step 3. + None => USVString(String::new()), + // Steps 3-4. + Some(ref url) => UrlHelper::Password(url) + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-password + fn SetPassword(&self, value: USVString) { + // Step 1. + self.reinitialize_url(); + + // Step 3. + if let Some(url) = self.url.borrow_mut().as_mut() { + if url.host().is_none() || url.non_relative_scheme_data().is_some() { + return; + } + // Step 4. + UrlHelper::SetPassword(url, value); + // Step 5. + self.update_href(); + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-pathname + fn Pathname(&self) -> USVString { + // Step 1. + self.reinitialize_url(); + + match *self.url.borrow() { + // Step 3. + None => USVString(String::new()), + // Steps 4-5. + Some(ref url) => UrlHelper::Pathname(url) + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-pathname + fn SetPathname(&self, value: USVString) { + // Step 1. + self.reinitialize_url(); + + // Step 3. + if let Some(url) = self.url.borrow_mut().as_mut() { + if url.non_relative_scheme_data().is_some() { return; } + // Step 5. + UrlHelper::SetPathname(url, value); + // Step 6. + self.update_href(); + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-port + fn Port(&self) -> USVString { + // Step 1. + self.reinitialize_url(); + + match *self.url.borrow() { + // Step 3. + None => USVString(String::new()), + // Step 4. + Some(ref url) => UrlHelper::Port(url) + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-port + fn SetPort(&self, value: USVString) { + // Step 1. + self.reinitialize_url(); + + // Step 3. + if let Some(url) = self.url.borrow_mut().as_mut() { + if url.host().is_none() || + url.non_relative_scheme_data().is_some() || + url.scheme == "file" { + return; + } + // Step 4. + UrlHelper::SetPort(url, value); + // Step 5. + self.update_href(); + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-protocol + fn Protocol(&self) -> USVString { + // Step 1. + self.reinitialize_url(); + + match *self.url.borrow() { + // Step 2. + None => USVString(":".to_owned()), + // Step 3. + Some(ref url) => UrlHelper::Protocol(url) + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-protocol + fn SetProtocol(&self, value: USVString) { + // Step 1. + self.reinitialize_url(); + + // Step 2. + if let Some(url) = self.url.borrow_mut().as_mut() { + // Step 3. + UrlHelper::SetProtocol(url, value); + // Step 4. + self.update_href(); + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-search + fn Search(&self) -> USVString { + // Step 1. + self.reinitialize_url(); + + match *self.url.borrow() { + // Step 2. + None => USVString(String::new()), + // Step 3. + Some(ref url) => UrlHelper::Search(url) + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-search + fn SetSearch(&self, value: USVString) { + // Step 1. + self.reinitialize_url(); + + // Step 3. + if let Some(url) = self.url.borrow_mut().as_mut() { + // Steps 4-5. + // TODO add this element's node document character encoding as + // encoding override (as described in the spec) + UrlHelper::SetSearch(url, value); + // Step 6. + self.update_href(); + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-username + fn Username(&self) -> USVString { + // Step 1. + self.reinitialize_url(); + + match *self.url.borrow() { + // Step 2. + None => USVString(String::new()), + // Step 3. + Some(ref url) => UrlHelper::Username(url) + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-username + fn SetUsername(&self, value: USVString) { + // Step 1. + self.reinitialize_url(); + + // Step 3. + if let Some(url) = self.url.borrow_mut().as_mut() { + if url.host().is_none() || url.non_relative_scheme_data().is_some() { + return; + } + + // Step 4. + UrlHelper::SetUsername(url, value); + // Step 5. + self.update_href(); + } + } + + // https://html.spec.whatwg.org/multipage/#dom-hyperlink-href + fn Stringifier(&self) -> DOMString { + DOMString::from(self.Href().0) + } } impl Activatable for HTMLAnchorElement { diff --git a/components/script/dom/urlhelper.rs b/components/script/dom/urlhelper.rs index 580c541502dff..ab0a0c5f8c0c5 100644 --- a/components/script/dom/urlhelper.rs +++ b/components/script/dom/urlhelper.rs @@ -21,6 +21,7 @@ impl UrlHelper { } pub fn SetHash(url: &mut Url, value: USVString) { + url.fragment = Some(String::new()); let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; let _ = wrapper.set_fragment(&value.0); } @@ -101,6 +102,9 @@ impl UrlHelper { } pub fn SetPathname(url: &mut Url, value: USVString) { + if let Some(path) = url.path_mut() { + path.clear(); + } let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; let _ = wrapper.set_path(&value.0); } @@ -149,6 +153,7 @@ impl UrlHelper { } pub fn SetSearch(url: &mut Url, value: USVString) { + url.query = Some(String::new()); let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; let _ = wrapper.set_query(&value.0); } diff --git a/components/script/dom/webidls/HTMLAnchorElement.webidl b/components/script/dom/webidls/HTMLAnchorElement.webidl index 6585e1ccc56a1..bfca9b31b7d74 100644 --- a/components/script/dom/webidls/HTMLAnchorElement.webidl +++ b/components/script/dom/webidls/HTMLAnchorElement.webidl @@ -26,7 +26,7 @@ interface HTMLAnchorElement : HTMLElement { // also has obsolete members }; -//HTMLAnchorElement implements HTMLHyperlinkElementUtils; +HTMLAnchorElement implements HTMLHyperlinkElementUtils; // https://html.spec.whatwg.org/multipage/#HTMLAnchorElement-partial partial interface HTMLAnchorElement { diff --git a/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl b/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl index c8d7a35493db4..0efcea0971021 100644 --- a/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl +++ b/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl @@ -4,17 +4,23 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlhyperlinkelementutils -//[NoInterfaceObject/*, Exposed=Window*/] -//interface HTMLHyperlinkElementUtils { +[NoInterfaceObject/*, Exposed=Window*/] +interface HTMLHyperlinkElementUtils { // stringifier attribute USVString href; + attribute USVString href; // attribute USVString origin; -// attribute USVString protocol; -// attribute USVString username; -// attribute USVString password; -// attribute USVString host; -// attribute USVString hostname; -// attribute USVString port; -// attribute USVString pathname; -// attribute USVString search; -// attribute USVString hash; -//}; + attribute USVString protocol; + attribute USVString username; + attribute USVString password; + attribute USVString host; + attribute USVString hostname; + attribute USVString port; + attribute USVString pathname; + attribute USVString search; + attribute USVString hash; + + // Adding a separate stringifier method until + // https://github.com/servo/servo/issues/7590 adds attribute stringifier + // support. + stringifier; +}; diff --git a/tests/wpt/metadata/dom/nodes/DOMImplementation-createHTMLDocument.html.ini b/tests/wpt/metadata/dom/nodes/DOMImplementation-createHTMLDocument.html.ini deleted file mode 100644 index e3b7441b11196..0000000000000 --- a/tests/wpt/metadata/dom/nodes/DOMImplementation-createHTMLDocument.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[DOMImplementation-createHTMLDocument.html] - type: testharness - [createHTMLDocument(): URL parsing] - expected: FAIL - diff --git a/tests/wpt/metadata/dom/nodes/Document-constructor.html.ini b/tests/wpt/metadata/dom/nodes/Document-constructor.html.ini deleted file mode 100644 index d86bc27bc9a0e..0000000000000 --- a/tests/wpt/metadata/dom/nodes/Document-constructor.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Document-constructor.html] - type: testharness - [new Document(): URL parsing] - expected: FAIL - diff --git a/tests/wpt/metadata/encoding/big5-encoder.html.ini b/tests/wpt/metadata/encoding/big5-encoder.html.ini index 5974166bd02a1..431c4e645415e 100644 --- a/tests/wpt/metadata/encoding/big5-encoder.html.ini +++ b/tests/wpt/metadata/encoding/big5-encoder.html.ini @@ -1,8 +1,5 @@ [big5-encoder.html] type: testharness - [big5 encoder: very basic] - expected: FAIL - [big5 encoder: Highest-pointer BMP character excluded from encoder] expected: FAIL diff --git a/tests/wpt/metadata/encoding/gb18030-encoder.html.ini b/tests/wpt/metadata/encoding/gb18030-encoder.html.ini index 75992eb01e787..f62ff10c0f271 100644 --- a/tests/wpt/metadata/encoding/gb18030-encoder.html.ini +++ b/tests/wpt/metadata/encoding/gb18030-encoder.html.ini @@ -1,8 +1,5 @@ [gb18030-encoder.html] type: testharness - [gb18030 encoder: very basic] - expected: FAIL - [gb18030 encoder: Euro] expected: FAIL diff --git a/tests/wpt/metadata/encoding/gbk-encoder.html.ini b/tests/wpt/metadata/encoding/gbk-encoder.html.ini index 05dda500d111e..7450b41b6ede8 100644 --- a/tests/wpt/metadata/encoding/gbk-encoder.html.ini +++ b/tests/wpt/metadata/encoding/gbk-encoder.html.ini @@ -1,8 +1,5 @@ [gbk-encoder.html] type: testharness - [gbk encoder: very basic] - expected: FAIL - [gbk encoder: Euro] expected: FAIL diff --git a/tests/wpt/metadata/encoding/iso-2022-jp-encoder.html.ini b/tests/wpt/metadata/encoding/iso-2022-jp-encoder.html.ini index 867e2dd11aeda..cbecd5b613050 100644 --- a/tests/wpt/metadata/encoding/iso-2022-jp-encoder.html.ini +++ b/tests/wpt/metadata/encoding/iso-2022-jp-encoder.html.ini @@ -1,11 +1,5 @@ [iso-2022-jp-encoder.html] type: testharness - [iso-2022-jp encoder: very basic] - expected: FAIL - [iso-2022-jp encoder: basics] expected: FAIL - [iso-2022-jp encoder: SO/SI ESC] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index 3f6344d90265a..f7a77b6c4fabd 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -8676,72 +8676,12 @@ [Document interface: document.implementation.createDocument(null, "", null) must inherit property "onwaiting" with the proper type (156)] expected: FAIL - [HTMLAnchorElement interface: attribute href] - expected: FAIL - [HTMLAnchorElement interface: attribute origin] expected: FAIL - [HTMLAnchorElement interface: attribute protocol] - expected: FAIL - - [HTMLAnchorElement interface: attribute username] - expected: FAIL - - [HTMLAnchorElement interface: attribute password] - expected: FAIL - - [HTMLAnchorElement interface: attribute host] - expected: FAIL - - [HTMLAnchorElement interface: attribute hostname] - expected: FAIL - - [HTMLAnchorElement interface: attribute port] - expected: FAIL - - [HTMLAnchorElement interface: attribute pathname] - expected: FAIL - - [HTMLAnchorElement interface: attribute search] - expected: FAIL - - [HTMLAnchorElement interface: attribute hash] - expected: FAIL - - [HTMLAnchorElement interface: document.createElement("a") must inherit property "href" with the proper type (13)] - expected: FAIL - [HTMLAnchorElement interface: document.createElement("a") must inherit property "origin" with the proper type (14)] expected: FAIL - [HTMLAnchorElement interface: document.createElement("a") must inherit property "protocol" with the proper type (15)] - expected: FAIL - - [HTMLAnchorElement interface: document.createElement("a") must inherit property "username" with the proper type (16)] - expected: FAIL - - [HTMLAnchorElement interface: document.createElement("a") must inherit property "password" with the proper type (17)] - expected: FAIL - - [HTMLAnchorElement interface: document.createElement("a") must inherit property "host" with the proper type (18)] - expected: FAIL - - [HTMLAnchorElement interface: document.createElement("a") must inherit property "hostname" with the proper type (19)] - expected: FAIL - - [HTMLAnchorElement interface: document.createElement("a") must inherit property "port" with the proper type (20)] - expected: FAIL - - [HTMLAnchorElement interface: document.createElement("a") must inherit property "pathname" with the proper type (21)] - expected: FAIL - - [HTMLAnchorElement interface: document.createElement("a") must inherit property "search" with the proper type (22)] - expected: FAIL - - [HTMLAnchorElement interface: document.createElement("a") must inherit property "hash" with the proper type (23)] - expected: FAIL - [HTMLAreaElement interface: attribute href] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/reflection-embedded.html.ini b/tests/wpt/metadata/html/dom/reflection-embedded.html.ini index d2a84f1cdbe69..32ed942382662 100644 --- a/tests/wpt/metadata/html/dom/reflection-embedded.html.ini +++ b/tests/wpt/metadata/html/dom/reflection-embedded.html.ini @@ -459,114 +459,6 @@ [img.tabIndex: IDL set to -2147483648 followed by getAttribute()] expected: FAIL - [img.src: setAttribute() to "" followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to " foo " followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to "http://site.example/" followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to "//site.example/path???@#l" followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f " followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to undefined followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to 7 followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to 1.5 followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to true followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to false followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to object "[object Object\]" followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to NaN followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to Infinity followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to -Infinity followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to "\\0" followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to null followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to object "test-toString" followed by IDL get] - expected: FAIL - - [img.src: setAttribute() to object "test-valueOf" followed by IDL get] - expected: FAIL - - [img.src: IDL set to "" followed by IDL get] - expected: FAIL - - [img.src: IDL set to " foo " followed by IDL get] - expected: FAIL - - [img.src: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - - [img.src: IDL set to "//site.example/path???@#l" followed by IDL get] - expected: FAIL - - [img.src: IDL set to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f " followed by IDL get] - expected: FAIL - - [img.src: IDL set to undefined followed by IDL get] - expected: FAIL - - [img.src: IDL set to 7 followed by IDL get] - expected: FAIL - - [img.src: IDL set to 1.5 followed by IDL get] - expected: FAIL - - [img.src: IDL set to true followed by IDL get] - expected: FAIL - - [img.src: IDL set to false followed by IDL get] - expected: FAIL - - [img.src: IDL set to object "[object Object\]" followed by IDL get] - expected: FAIL - - [img.src: IDL set to NaN followed by IDL get] - expected: FAIL - - [img.src: IDL set to Infinity followed by IDL get] - expected: FAIL - - [img.src: IDL set to -Infinity followed by IDL get] - expected: FAIL - - [img.src: IDL set to "\\0" followed by IDL get] - expected: FAIL - - [img.src: IDL set to null followed by IDL get] - expected: FAIL - - [img.src: IDL set to object "test-toString" followed by IDL get] - expected: FAIL - - [img.src: IDL set to object "test-valueOf" followed by IDL get] - expected: FAIL - [img.srcset: typeof IDL attribute] expected: FAIL @@ -1002,9 +894,6 @@ [img.lowsrc: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [img.lowsrc: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [img.lowsrc: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -1098,9 +987,6 @@ [img.longDesc: setAttribute() to " foo " followed by IDL get] expected: FAIL - [img.longDesc: setAttribute() to "http://site.example/" followed by IDL get] - expected: FAIL - [img.longDesc: setAttribute() to "//site.example/path???@#l" followed by IDL get] expected: FAIL @@ -1152,9 +1038,6 @@ [img.longDesc: IDL set to " foo " followed by IDL get] expected: FAIL - [img.longDesc: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [img.longDesc: IDL set to "//site.example/path???@#l" followed by IDL get] expected: FAIL @@ -1383,9 +1266,6 @@ [img.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [img.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [img.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -1938,9 +1818,6 @@ [iframe.src: setAttribute() to " foo " followed by IDL get] expected: FAIL - [iframe.src: setAttribute() to "http://site.example/" followed by IDL get] - expected: FAIL - [iframe.src: setAttribute() to "//site.example/path???@#l" followed by IDL get] expected: FAIL @@ -1992,9 +1869,6 @@ [iframe.src: IDL set to " foo " followed by IDL get] expected: FAIL - [iframe.src: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [iframe.src: IDL set to "//site.example/path???@#l" followed by IDL get] expected: FAIL @@ -2976,9 +2850,6 @@ [iframe.longDesc: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [iframe.longDesc: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [iframe.longDesc: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -3507,9 +3378,6 @@ [iframe.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [iframe.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [iframe.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -4131,9 +3999,6 @@ [embed.src: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [embed.src: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [embed.src: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -5049,9 +4914,6 @@ [embed.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [embed.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [embed.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -5673,9 +5535,6 @@ [object.data: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [object.data: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [object.data: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -7452,9 +7311,6 @@ [object.codeBase: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [object.codeBase: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [object.codeBase: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -7983,9 +7839,6 @@ [object.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [object.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [object.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -9231,9 +9084,6 @@ [param.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [param.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [param.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -9855,9 +9705,6 @@ [video.src: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [video.src: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [video.src: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -11277,9 +11124,6 @@ [video.poster: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [video.poster: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [video.poster: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -11550,9 +11394,6 @@ [video.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [video.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [video.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -12174,9 +12015,6 @@ [audio.src: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [audio.src: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [audio.src: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -13338,9 +13176,6 @@ [audio.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [audio.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [audio.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -13962,9 +13797,6 @@ [source.src: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [source.src: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [source.src: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -14493,9 +14325,6 @@ [source.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [source.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [source.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -15462,9 +15291,6 @@ [track.src: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [track.src: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [track.src: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -16101,9 +15927,6 @@ [track.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [track.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [track.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -16833,9 +16656,6 @@ [canvas.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [canvas.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [canvas.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -17694,9 +17514,6 @@ [map.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [map.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [map.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -19512,9 +19329,6 @@ [area.href: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [area.href: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [area.href: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -19893,9 +19707,6 @@ [area.itemId: IDL set to "http://site.example/" followed by getAttribute()] expected: FAIL - [area.itemId: IDL set to "http://site.example/" followed by IDL get] - expected: FAIL - [area.itemId: IDL set to "//site.example/path???@#l" followed by getAttribute()] expected: FAIL @@ -20187,9 +19998,6 @@ [audio.itemValue (