aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2015-11-08 09:25:59 -0500
committerJosh Matthews <josh@joshmatthews.net>2016-05-03 18:05:26 -0400
commitf78d88acbe6693235380bea49f2f4fad16433fd3 (patch)
treea8e142617770acb3a781a3dd6e8059b5c0c85b57
parentef10393ba6262ca6408581da800462c80955c6cc (diff)
downloadservo-f78d88acbe6693235380bea49f2f4fad16433fd3.tar.gz
servo-f78d88acbe6693235380bea49f2f4fad16433fd3.zip
Implement partial spec-recommended preload=none support.
-rw-r--r--components/script/dom/htmlmediaelement.rs20
-rw-r--r--components/script/dom/webidls/HTMLMediaElement.webidl2
-rw-r--r--tests/wpt/metadata/html/dom/interfaces.html.ini9
-rw-r--r--tests/wpt/metadata/html/dom/reflection-embedded.html.ini228
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/preload_reflects_none_autoplay.html.ini8
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
-