diff options
author | Josh Matthews <josh@joshmatthews.net> | 2015-11-08 09:25:59 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2016-05-03 18:05:26 -0400 |
commit | f78d88acbe6693235380bea49f2f4fad16433fd3 (patch) | |
tree | a8e142617770acb3a781a3dd6e8059b5c0c85b57 | |
parent | ef10393ba6262ca6408581da800462c80955c6cc (diff) | |
download | servo-f78d88acbe6693235380bea49f2f4fad16433fd3.tar.gz servo-f78d88acbe6693235380bea49f2f4fad16433fd3.zip |
Implement partial spec-recommended preload=none support.
5 files changed, 20 insertions, 247 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 951f6e47b70..fcb192cd250 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -387,7 +387,19 @@ impl HTMLMediaElement { // Step 4 if let Resource::Url(url) = resource { - // TODO 4.1 (preload=none) + // 4.1 + if self.Preload() == "none" && !self.autoplaying.get(){ + // 4.1.1 + self.network_state.set(NETWORK_IDLE); + + // 4.1.2 + self.queue_fire_simple_event("suspend"); + + // TODO 4.1.3 (delay load flag) + + // TODO 4.1.5-7 (state for load that initiates later) + return; + } // 4.2 let context = Arc::new(Mutex::new(HTMLMediaElementContext::new(self, url.clone()))); @@ -509,6 +521,12 @@ impl HTMLMediaElementMethods for HTMLMediaElement { // https://html.spec.whatwg.org/multipage/#dom-media-src make_setter!(SetSrc, "src"); + // https://html.spec.whatwg.org/multipage/#attr-media-preload + // Missing value default is user-agent defined. + make_enumerated_getter!(Preload, "preload", "", ("none") | ("metadata") | ("auto")); + // https://html.spec.whatwg.org/multipage/#attr-media-preload + make_setter!(SetPreload, "preload"); + // https://html.spec.whatwg.org/multipage/#dom-media-currentsrc fn CurrentSrc(&self) -> DOMString { DOMString::from(self.current_src.borrow().clone()) diff --git a/components/script/dom/webidls/HTMLMediaElement.webidl b/components/script/dom/webidls/HTMLMediaElement.webidl index ba81478be46..ce952c9b539 100644 --- a/components/script/dom/webidls/HTMLMediaElement.webidl +++ b/components/script/dom/webidls/HTMLMediaElement.webidl @@ -19,7 +19,7 @@ interface HTMLMediaElement : HTMLElement { const unsigned short NETWORK_LOADING = 2; const unsigned short NETWORK_NO_SOURCE = 3; readonly attribute unsigned short networkState; - // attribute DOMString preload; + attribute DOMString preload; //readonly attribute TimeRanges buffered; void load(); CanPlayTypeResult canPlayType(DOMString type); diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index 78f775ca587..49996d27548 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -2505,9 +2505,6 @@ [HTMLMediaElement interface: document.createElement("video") must inherit property "crossOrigin" with the proper type (3)] expected: FAIL - [HTMLMediaElement interface: document.createElement("video") must inherit property "preload" with the proper type (9)] - expected: FAIL - [HTMLMediaElement interface: document.createElement("video") must inherit property "buffered" with the proper type (10)] expected: FAIL @@ -2583,9 +2580,6 @@ [HTMLMediaElement interface: document.createElement("audio") must inherit property "crossOrigin" with the proper type (3)] expected: FAIL - [HTMLMediaElement interface: document.createElement("audio") must inherit property "preload" with the proper type (9)] - expected: FAIL - [HTMLMediaElement interface: document.createElement("audio") must inherit property "buffered" with the proper type (10)] expected: FAIL @@ -2916,9 +2910,6 @@ [HTMLMediaElement interface: attribute crossOrigin] expected: FAIL - [HTMLMediaElement interface: attribute preload] - expected: FAIL - [HTMLMediaElement interface: attribute buffered] 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 adb86b793cb..b642ef919b3 100644 --- a/tests/wpt/metadata/html/dom/reflection-embedded.html.ini +++ b/tests/wpt/metadata/html/dom/reflection-embedded.html.ini @@ -9645,120 +9645,6 @@ [video.crossOrigin: IDL set to "USE-CREDENTIALS" followed by IDL get] expected: FAIL - [video.preload: typeof IDL attribute] - expected: FAIL - - [video.preload: setAttribute() to "none" followed by IDL get] - expected: FAIL - - [video.preload: setAttribute() to "NONE" followed by IDL get] - expected: FAIL - - [video.preload: setAttribute() to "metadata" followed by IDL get] - expected: FAIL - - [video.preload: setAttribute() to "METADATA" followed by IDL get] - expected: FAIL - - [video.preload: setAttribute() to "auto" followed by IDL get] - expected: FAIL - - [video.preload: setAttribute() to "AUTO" followed by IDL get] - expected: FAIL - - [video.preload: IDL set to "" followed by getAttribute()] - expected: FAIL - - [video.preload: 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 foo " followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to undefined followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to 7 followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to 1.5 followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to true followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to false followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to object "[object Object\]" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to NaN followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to Infinity followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to -Infinity followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "\\0" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to object "test-toString" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to object "test-valueOf" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "none" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "xnone" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "none\\0" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "one" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "NONE" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "NONE" followed by IDL get] - expected: FAIL - - [video.preload: IDL set to "metadata" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "xmetadata" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "metadata\\0" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "etadata" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "METADATA" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "METADATA" followed by IDL get] - expected: FAIL - - [video.preload: IDL set to "auto" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "xauto" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "auto\\0" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "uto" followed by getAttribute()] - expected: FAIL - - [video.preload: IDL set to "AUTO" followed by IDL get] - expected: FAIL - [video.loop: typeof IDL attribute] expected: FAIL @@ -11685,120 +11571,6 @@ [audio.crossOrigin: IDL set to "USE-CREDENTIALS" followed by IDL get] expected: FAIL - [audio.preload: typeof IDL attribute] - expected: FAIL - - [audio.preload: setAttribute() to "none" followed by IDL get] - expected: FAIL - - [audio.preload: setAttribute() to "NONE" followed by IDL get] - expected: FAIL - - [audio.preload: setAttribute() to "metadata" followed by IDL get] - expected: FAIL - - [audio.preload: setAttribute() to "METADATA" followed by IDL get] - expected: FAIL - - [audio.preload: setAttribute() to "auto" followed by IDL get] - expected: FAIL - - [audio.preload: setAttribute() to "AUTO" followed by IDL get] - expected: FAIL - - [audio.preload: IDL set to "" followed by getAttribute()] - expected: FAIL - - [audio.preload: 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 foo " followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to undefined followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to 7 followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to 1.5 followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to true followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to false followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to object "[object Object\]" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to NaN followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to Infinity followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to -Infinity followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "\\0" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to object "test-toString" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to object "test-valueOf" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "none" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "xnone" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "none\\0" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "one" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "NONE" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "NONE" followed by IDL get] - expected: FAIL - - [audio.preload: IDL set to "metadata" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "xmetadata" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "metadata\\0" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "etadata" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "METADATA" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "METADATA" followed by IDL get] - expected: FAIL - - [audio.preload: IDL set to "auto" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "xauto" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "auto\\0" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "uto" followed by getAttribute()] - expected: FAIL - - [audio.preload: IDL set to "AUTO" followed by IDL get] - expected: FAIL - [audio.loop: typeof IDL attribute] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/preload_reflects_none_autoplay.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/preload_reflects_none_autoplay.html.ini deleted file mode 100644 index 320b6d2199e..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/preload_reflects_none_autoplay.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[preload_reflects_none_autoplay.html] - type: testharness - [audio.preload - reflection test] - expected: FAIL - - [video.preload - reflection test] - expected: FAIL - |