aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/blob.rs18
-rw-r--r--components/script/dom/eventtarget.rs1
-rw-r--r--components/script/dom/filereader.rs491
-rw-r--r--components/script/dom/mod.rs1
-rw-r--r--components/script/dom/webidls/FileReader.webidl43
-rw-r--r--tests/wpt/metadata/FileAPI/FileReader/Progress_event_bubbles_cancelable.html.ini5
-rw-r--r--tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini48
-rw-r--r--tests/wpt/metadata/FileAPI/blob/Blob-slice.html.ini69
-rw-r--r--tests/wpt/metadata/FileAPI/fileReader.html.ini6
-rw-r--r--tests/wpt/metadata/FileAPI/historical.html.ini5
-rw-r--r--tests/wpt/metadata/FileAPI/idlharness.html.ini136
-rw-r--r--tests/wpt/metadata/FileAPI/reading-data-section/FileReader-event-handler-attributes.html.ini20
-rw-r--r--tests/wpt/metadata/FileAPI/reading-data-section/FileReader-multiple-reads.html.ini8
-rw-r--r--tests/wpt/metadata/FileAPI/reading-data-section/filereader_abort.html.ini8
-rw-r--r--tests/wpt/metadata/FileAPI/reading-data-section/filereader_error.html.ini5
-rw-r--r--tests/wpt/metadata/FileAPI/reading-data-section/filereader_readAsDataURL.html.ini5
-rw-r--r--tests/wpt/metadata/FileAPI/reading-data-section/filereader_readAsText.html.ini8
-rw-r--r--tests/wpt/metadata/FileAPI/reading-data-section/filereader_readystate.html.ini5
-rw-r--r--tests/wpt/metadata/FileAPI/reading-data-section/filereader_result.html.ini6
-rw-r--r--tests/wpt/mozilla/tests/mozilla/interfaces.html1
20 files changed, 564 insertions, 325 deletions
diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs
index 231216815f4..bfa85bb5784 100644
--- a/components/script/dom/blob.rs
+++ b/components/script/dom/blob.rs
@@ -9,6 +9,8 @@ use dom::bindings::utils::{Reflector, reflect_dom_object};
use dom::bindings::error::Fallible;
use dom::bindings::codegen::Bindings::BlobBinding;
use dom::bindings::codegen::Bindings::BlobBinding::BlobMethods;
+use std::sync::mpsc;
+use std::sync::mpsc::Receiver;
use util::str::DOMString;
@@ -79,6 +81,22 @@ impl Blob {
}
}
+pub trait BlobHelpers {
+ fn read_out_buffer(self) -> Receiver<Option<Vec<u8>>> ;
+ fn read_out_type(self) -> DOMString;
+}
+
+impl<'a> BlobHelpers for &'a Blob {
+ fn read_out_buffer(self) -> Receiver<Option<Vec<u8>>> {
+ let (send, recv) = mpsc::channel();
+ send.send(self.bytes.clone()).unwrap();
+ recv
+ }
+ fn read_out_type(self) -> DOMString {
+ self.typeString.clone()
+ }
+}
+
impl<'a> BlobMethods for &'a Blob {
// http://dev.w3.org/2006/webapi/FileAPI/#dfn-size
fn Size(self) -> u64{
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs
index 78e3eda47ff..d6de3f39617 100644
--- a/components/script/dom/eventtarget.rs
+++ b/components/script/dom/eventtarget.rs
@@ -48,6 +48,7 @@ pub enum EventTargetTypeId {
WebSocket,
Window,
Worker,
+ FileReader,
WorkerGlobalScope(WorkerGlobalScopeTypeId),
XMLHttpRequestEventTarget(XMLHttpRequestEventTargetTypeId)
}
diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs
new file mode 100644
index 00000000000..7ac8f876157
--- /dev/null
+++ b/components/script/dom/filereader.rs
@@ -0,0 +1,491 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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::codegen::Bindings::FileReaderBinding;
+use dom::bindings::codegen::Bindings::FileReaderBinding::{FileReaderConstants, FileReaderMethods};
+use dom::bindings::codegen::InheritTypes::{EventCast, EventTargetCast};
+use dom::bindings::codegen::Bindings::EventHandlerBinding::EventHandlerNonNull;
+use dom::bindings::error::{ErrorResult, Fallible};
+use dom::bindings::error::Error::InvalidState;
+use dom::bindings::global::{GlobalRef, GlobalField};
+use dom::bindings::js::{Root, JS, MutNullableHeap};
+use dom::bindings::refcounted::Trusted;
+use dom::bindings::utils::{reflect_dom_object, Reflectable};
+use dom::event::{EventHelpers, EventCancelable, EventBubbles};
+use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
+use dom::blob::Blob;
+use dom::blob::BlobHelpers;
+use dom::domexception::{DOMException, DOMErrorName};
+use dom::progressevent::ProgressEvent;
+use encoding::all::UTF_8;
+use encoding::types::{EncodingRef, DecoderTrap};
+use encoding::label::encoding_from_whatwg_label;
+use hyper::mime::{Mime, Attr};
+use script_task::{ScriptChan, ScriptMsg, Runnable, ScriptPort};
+use std::cell::{Cell, RefCell};
+use std::sync::mpsc::Receiver;
+use util::str::DOMString;
+use util::task::spawn_named;
+use rustc_serialize::base64::{Config, ToBase64, CharacterSet, Newline};
+
+#[derive(PartialEq, Clone, Copy, JSTraceable)]
+pub enum FileReaderFunction {
+ ReadAsText,
+ ReadAsDataUrl,
+}
+
+pub type TrustedFileReader = Trusted<FileReader>;
+
+pub struct ReadData {
+ pub bytes: Receiver<Option<Vec<u8>>>,
+ pub blobtype: DOMString,
+ pub label: Option<DOMString>,
+ pub function: FileReaderFunction
+}
+
+impl ReadData {
+ pub fn new(bytes: Receiver<Option<Vec<u8>>>, blobtype: DOMString,
+ label: Option<DOMString>, function: FileReaderFunction) -> ReadData {
+ ReadData {
+ bytes: bytes,
+ blobtype: blobtype,
+ label: label,
+ function: function,
+ }
+ }
+}
+
+#[derive(Clone)]
+pub struct BlobBody {
+ pub bytes: Vec<u8>,
+ pub blobtype: DOMString,
+ pub label: Option<DOMString>,
+ pub function: FileReaderFunction
+}
+
+impl BlobBody {
+ pub fn new(bytes: Vec<u8>, blobtype: DOMString,
+ label: Option<DOMString>, function: FileReaderFunction) -> BlobBody {
+ BlobBody {
+ bytes: bytes,
+ blobtype: blobtype,
+ label: label,
+ function: function,
+ }
+ }
+}
+
+#[derive(PartialEq, Clone, Copy, JSTraceable)]
+pub struct GenerationId(u32);
+
+#[repr(u16)]
+#[derive(Copy, Clone, Debug, PartialEq, JSTraceable)]
+pub enum FileReaderReadyState {
+ Empty = FileReaderConstants::EMPTY,
+ Loading = FileReaderConstants::LOADING,
+ Done = FileReaderConstants::DONE,
+}
+
+#[dom_struct]
+pub struct FileReader {
+ eventtarget: EventTarget,
+ global: GlobalField,
+ ready_state: Cell<FileReaderReadyState>,
+ error: MutNullableHeap<JS<DOMException>>,
+ result: RefCell<Option<DOMString>>,
+ generation_id: Cell<GenerationId>,
+}
+
+impl FileReader {
+ pub fn new_inherited(global: GlobalRef) -> FileReader {
+ FileReader {
+ eventtarget: EventTarget::new_inherited(EventTargetTypeId::FileReader),//?
+ global: GlobalField::from_rooted(&global),
+ ready_state: Cell::new(FileReaderReadyState::Empty),
+ error: MutNullableHeap::new(None),
+ result: RefCell::new(None),
+ generation_id: Cell::new(GenerationId(0)),
+ }
+ }
+
+ pub fn new(global: GlobalRef) -> Root<FileReader> {
+ reflect_dom_object(box FileReader::new_inherited(global),
+ global, FileReaderBinding::Wrap)
+ }
+
+ pub fn Constructor(global: GlobalRef) -> Fallible<Root<FileReader>> {
+ Ok(FileReader::new(global))
+ }
+
+ //https://w3c.github.io/FileAPI/#dfn-error-steps
+ pub fn process_read_error(filereader: TrustedFileReader, gen_id: GenerationId, error: DOMErrorName) {
+ let fr = filereader.root();
+
+ macro_rules! return_on_abort(
+ () => (
+ if gen_id != fr.generation_id.get() {
+ return
+ }
+ );
+ );
+
+ return_on_abort!();
+ // Step 1
+ fr.change_ready_state(FileReaderReadyState::Done);
+ *fr.result.borrow_mut() = None;
+
+ let global = fr.global.root();
+ let exception = DOMException::new(global.r(), error);
+ fr.error.set(Some(JS::from_rooted(&exception)));
+
+ fr.dispatch_progress_event("error".to_owned(), 0, None);
+ return_on_abort!();
+ // Step 3
+ fr.dispatch_progress_event("loadend".to_owned(), 0, None);
+ return_on_abort!();
+ // Step 4
+ fr.terminate_ongoing_reading();
+ }
+
+ // https://w3c.github.io/FileAPI/#dfn-readAsText
+ pub fn process_read_data(filereader: TrustedFileReader, gen_id: GenerationId) {
+ let fr = filereader.root();
+
+ macro_rules! return_on_abort(
+ () => (
+ if gen_id != fr.generation_id.get() {
+ return
+ }
+ );
+ );
+ return_on_abort!();
+ //FIXME Step 7 send current progress
+ fr.dispatch_progress_event("progress".to_owned(), 0, None);
+ }
+
+ // https://w3c.github.io/FileAPI/#dfn-readAsText
+ pub fn process_read(filereader: TrustedFileReader, gen_id: GenerationId) {
+ let fr = filereader.root();
+
+ macro_rules! return_on_abort(
+ () => (
+ if gen_id != fr.generation_id.get() {
+ return
+ }
+ );
+ );
+ return_on_abort!();
+ // Step 6
+ fr.dispatch_progress_event("loadstart".to_owned(), 0, None);
+ }
+
+ // https://w3c.github.io/FileAPI/#dfn-readAsText
+ pub fn process_read_eof(filereader: TrustedFileReader, gen_id: GenerationId, data: Option<BlobBody>) {
+ let fr = filereader.root();
+
+ macro_rules! return_on_abort(
+ () => (
+ if gen_id != fr.generation_id.get() {
+ return
+ }
+ );
+ );
+
+ return_on_abort!();
+ // Step 8.1
+ fr.change_ready_state(FileReaderReadyState::Done);
+ // Step 8.2
+ let output = match data {
+ Some(blob_body) => {
+ match blob_body.function {
+ FileReaderFunction::ReadAsDataUrl =>
+ FileReader::perform_readasdataurl(blob_body),
+ FileReaderFunction::ReadAsText =>
+ FileReader::perform_readastext(blob_body),
+ }
+ },
+ None => {
+ Ok(None)
+ }
+ };
+
+ //FIXME handle error if error is possible
+ *fr.result.borrow_mut() = output.unwrap();
+
+ // Step 8.3
+ fr.dispatch_progress_event("load".to_owned(), 0, None);
+ return_on_abort!();
+ // Step 8.4
+ if fr.ready_state.get() != FileReaderReadyState::Loading {
+ fr.dispatch_progress_event("loadend".to_owned(), 0, None);
+ }
+ return_on_abort!();
+ // Step 9
+ fr.terminate_ongoing_reading();
+ }
+
+ // https://w3c.github.io/FileAPI/#dfn-readAsText
+ fn perform_readastext(blob_body: BlobBody)
+ -> Result<Option<DOMString>, DOMErrorName> {
+
+ //https://w3c.github.io/FileAPI/#encoding-determination
+ // Steps 1 & 2 & 3
+ let mut encoding = match blob_body.label {
+ Some(e) => encoding_from_whatwg_label(&e),
+ None => None
+ };
+
+ // Step 4 & 5
+ encoding = match encoding {
+ Some(e) => Some(e),
+ None => {
+ let resultmime = blob_body.blobtype.parse::<Mime>().ok();
+ resultmime.and_then(|Mime(_, _, ref parameters)| {
+ parameters.iter()
+ .find(|&&(ref k, _)| &Attr::Charset == k)
+ .and_then(|&(_, ref v)| encoding_from_whatwg_label(&v.to_string()))
+ })
+ }
+ };
+
+ // Step 6
+ let enc = match encoding {
+ Some(code) => code,
+ None => UTF_8 as EncodingRef
+ };
+
+ let convert = &blob_body.bytes[..];
+ // Step 7
+ let output = enc.decode(convert, DecoderTrap::Replace).unwrap();
+ Ok(Some(output))
+ }
+
+ //https://w3c.github.io/FileAPI/#dfn-readAsDataURL
+ fn perform_readasdataurl(blob_body: BlobBody)
+ -> Result<Option<DOMString>, DOMErrorName> {
+ let config = Config {
+ char_set: CharacterSet::UrlSafe,
+ newline: Newline::LF,
+ pad: true,
+ line_length: None
+ };
+ let base64 = blob_body.bytes.to_base64(config);
+
+ let output = if blob_body.blobtype.is_empty() {
+ format!("data:base64,{}", base64)
+ } else {
+ format!("data:{};base64,{}", blob_body.blobtype, base64)
+ };
+
+ Ok(Some(output))
+ }
+
+}
+
+impl<'a> FileReaderMethods for &'a FileReader {
+ event_handler!(loadstart, GetOnloadstart, SetOnloadstart);
+ event_handler!(progress, GetOnprogress, SetOnprogress);
+ event_handler!(load, GetOnload, SetOnload);
+ event_handler!(abort, GetOnabort, SetOnabort);
+ event_handler!(error, GetOnerror, SetOnerror);
+ event_handler!(loadend, GetOnloadend, SetOnloadend);
+
+ //TODO https://w3c.github.io/FileAPI/#dfn-readAsArrayBuffer
+ //https://w3c.github.io/FileAPI/#dfn-readAsDataURL
+ fn ReadAsDataURL(self, blob: &Blob) -> ErrorResult {
+ let global = self.global.root();
+ // Step 1
+ if self.ready_state.get() == FileReaderReadyState::Loading {
+ return Err(InvalidState);
+ }
+ //TODO STEP 2 if isClosed implemented in Blob
+
+ // Step 3
+ self.change_ready_state(FileReaderReadyState::Loading);
+
+ let bytes = blob.read_out_buffer();
+ let type_ = blob.read_out_type();
+
+ let load_data = ReadData::new(bytes, type_, None, FileReaderFunction::ReadAsDataUrl);
+
+ self.read(load_data, global.r())
+ }
+
+ // https://w3c.github.io/FileAPI/#dfn-readAsText
+ fn ReadAsText(self, blob: &Blob, label:Option<DOMString>) -> ErrorResult {
+ let global = self.global.root();
+ // Step 1
+ if self.ready_state.get() == FileReaderReadyState::Loading {
+ return Err(InvalidState);
+ }
+ //TODO STEP 2 if isClosed implemented in Blob
+
+ // Step 3
+ self.change_ready_state(FileReaderReadyState::Loading);
+
+ let bytes = blob.read_out_buffer();
+ let type_ = blob.read_out_type();
+
+ let load_data = ReadData::new(bytes, type_, label, FileReaderFunction::ReadAsText);
+
+ self.read(load_data, global.r())
+ }
+
+
+ // https://w3c.github.io/FileAPI/#dfn-abort
+ fn Abort(self) {
+ // Step 2
+ if self.ready_state.get() == FileReaderReadyState::Loading {
+ self.change_ready_state(FileReaderReadyState::Done);
+ }
+ // Steps 1 & 3
+ *self.result.borrow_mut() = None;
+
+ let global = self.global.root();
+ let exception = DOMException::new(global.r(), DOMErrorName::AbortError);
+ self.error.set(Some(JS::from_rooted(&exception)));
+
+ self.terminate_ongoing_reading();
+ // Steps 5 & 6
+ self.dispatch_progress_event("abort".to_owned(), 0, None);
+ self.dispatch_progress_event("loadend".to_owned(), 0, None);
+ }
+
+ fn GetError(self) -> Option<Root<DOMException>> {
+ self.error.get().map(|error| error.root())
+ }
+
+ fn GetResult(self) -> Option<DOMString> {
+ self.result.borrow().clone()
+ }
+
+ fn ReadyState(self) -> u16 {
+ self.ready_state.get() as u16
+ }
+}
+
+trait PrivateFileReaderHelpers {
+ fn dispatch_progress_event(self, type_: DOMString, loaded: u64, total: Option<u64>);
+ fn terminate_ongoing_reading(self);
+ fn read(self, read_data: ReadData, global: GlobalRef) -> ErrorResult;
+ fn change_ready_state(self, state: FileReaderReadyState);
+}
+
+impl<'a> PrivateFileReaderHelpers for &'a FileReader {
+ fn dispatch_progress_event(self, type_: DOMString, loaded: u64, total: Option<u64>) {
+
+ let global = self.global.root();
+ let progressevent = ProgressEvent::new(global.r(),
+ type_, EventBubbles::DoesNotBubble, EventCancelable::NotCancelable,
+ total.is_some(), loaded, total.unwrap_or(0));
+
+ let target = EventTargetCast::from_ref(self);
+ let event = EventCast::from_ref(progressevent.r());
+ event.fire(target);
+ }
+
+ fn terminate_ongoing_reading(self) {
+ let GenerationId(prev_id) = self.generation_id.get();
+ self.generation_id.set(GenerationId(prev_id + 1));
+ }
+
+ fn read(self, read_data: ReadData, global: GlobalRef) -> ErrorResult {
+
+ let fr = Trusted::new(global.get_cx(), self, global.script_chan());
+ let gen_id = self.generation_id.get();
+
+ let script_chan = global.script_chan();
+
+ spawn_named("file reader async operation".to_owned(), move || {
+ perform_annotated_read_operation(gen_id, read_data, fr, script_chan)
+ });
+ Ok(())
+ }
+
+ fn change_ready_state(self, state: FileReaderReadyState) {
+ self.ready_state.set(state);
+ }
+}
+
+#[derive(Clone)]
+pub enum Process {
+ ProcessRead(TrustedFileReader, GenerationId),
+ ProcessReadData(TrustedFileReader, GenerationId, DOMString),
+ ProcessReadError(TrustedFileReader, GenerationId, DOMErrorName),
+ ProcessReadEOF(TrustedFileReader, GenerationId, Option<BlobBody>)
+}
+
+impl Process {
+ fn call(self, chan: &Box<ScriptChan + Send>) {
+ let task = box FileReaderEvent::new(self);
+ chan.send(ScriptMsg::RunnableMsg(task)).unwrap();
+ }
+
+ pub fn handle(process: Process) {
+ match process {
+ Process::ProcessRead(filereader, gen_id) => {
+ FileReader::process_read(filereader, gen_id);
+ },
+ Process::ProcessReadData(filereader, gen_id, _) => {
+ FileReader::process_read_data(filereader, gen_id);
+ },
+ Process::ProcessReadError(filereader, gen_id, error) => {
+ FileReader::process_read_error(filereader, gen_id, error);
+ },
+ Process::ProcessReadEOF(filereader, gen_id, blob_body) => {
+ FileReader::process_read_eof(filereader, gen_id, blob_body);
+ }
+ }
+ }
+}
+
+pub struct FileReaderEvent {
+ process: Process,
+}
+
+impl FileReaderEvent {
+ pub fn new(process: Process) -> FileReaderEvent {
+ FileReaderEvent {
+ process: process,
+ }
+ }
+
+}
+
+impl Runnable for FileReaderEvent {
+ fn handler(self: Box<FileReaderEvent>) {
+ let this = *self;
+ Process::handle(this.process);
+ }
+}
+
+//https://w3c.github.io/FileAPI/#task-read-operation
+fn perform_annotated_read_operation(gen_id: GenerationId, read_data: ReadData,
+ filereader: TrustedFileReader, script_chan: Box<ScriptChan + Send>) {
+ let chan = &script_chan;
+ // Step 4
+ Process::ProcessRead(filereader.clone(),
+ gen_id).call(chan);
+
+ Process::ProcessReadData(filereader.clone(),
+ gen_id, DOMString::new()).call(chan);
+
+ let output = match read_data.bytes.recv() {
+ Ok(bytes) => bytes,
+ Err(_) => {
+ Process::ProcessReadError(filereader,
+ gen_id, DOMErrorName::NotFoundError).call(chan);
+ return;
+ }
+ };
+
+ let blobtype = read_data.blobtype.clone();
+ let label = read_data.label.clone();
+
+ let blob_body = output.map(|bytes| {
+ BlobBody::new(bytes, blobtype, label, read_data.function)
+ });
+
+ Process::ProcessReadEOF(filereader, gen_id, blob_body).call(chan);
+}
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs
index d3294cb184b..b6e9667e034 100644
--- a/components/script/dom/mod.rs
+++ b/components/script/dom/mod.rs
@@ -215,6 +215,7 @@ pub mod event;
pub mod eventdispatcher;
pub mod eventtarget;
pub mod file;
+pub mod filereader;
pub mod formdata;
pub mod htmlanchorelement;
pub mod htmlappletelement;
diff --git a/components/script/dom/webidls/FileReader.webidl b/components/script/dom/webidls/FileReader.webidl
new file mode 100644
index 00000000000..0c599348ed7
--- /dev/null
+++ b/components/script/dom/webidls/FileReader.webidl
@@ -0,0 +1,43 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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/.
+ */
+
+ // http://dev.w3.org/2006/webapi/FileAPI/#APIASynch
+
+//typedef (DOMString or ArrayBuffer) FileReaderResult;
+[Constructor, Exposed=Window/*,Worker*/]
+interface FileReader: EventTarget {
+
+ // async read methods
+ //[Throws]
+ //void readAsArrayBuffer(Blob blob);
+ [Throws]
+ void readAsText(Blob blob, optional DOMString label);
+ [Throws]
+ void readAsDataURL(Blob blob);
+
+ void abort();
+
+ // states
+ const unsigned short EMPTY = 0;
+ const unsigned short LOADING = 1;
+ const unsigned short DONE = 2;
+ readonly attribute unsigned short readyState;
+
+ // File or Blob data
+ //readonly attribute FileReaderResult? result;
+ readonly attribute DOMString? result;
+
+ readonly attribute DOMException? error;
+
+ // event handler attributes
+ attribute EventHandler onloadstart;
+ attribute EventHandler onprogress;
+ attribute EventHandler onload;
+ attribute EventHandler onabort;
+ attribute EventHandler onerror;
+ attribute EventHandler onloadend;
+
+};
diff --git a/tests/wpt/metadata/FileAPI/FileReader/Progress_event_bubbles_cancelable.html.ini b/tests/wpt/metadata/FileAPI/FileReader/Progress_event_bubbles_cancelable.html.ini
deleted file mode 100644
index 9e2248b63c8..00000000000
--- a/tests/wpt/metadata/FileAPI/FileReader/Progress_event_bubbles_cancelable.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[Progress_event_bubbles_cancelable.html]
- type: testharness
- [Check the values of bubbles and cancelable are false when the progress event is dispatched]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini b/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini
index 24d11eb6ab6..d40989a91ef 100644
--- a/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini
+++ b/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini
@@ -9,9 +9,6 @@
[A plain object with a length property should be treated as a sequence for the blobParts argument.]
expected: FAIL
- [A String object should be treated as a sequence for the blobParts argument.]
- expected: FAIL
-
[A Uint8Array object should be treated as a sequence for the blobParts argument.]
expected: FAIL
@@ -48,9 +45,6 @@
[Passing an element as the blobParts array should work.]
expected: FAIL
- [Passing an platform object that supports indexed properties as the blobParts array should work (window).]
- expected: FAIL
-
[Passing an platform object that supports indexed properties as the blobParts array should work (window with custom toString).]
expected: FAIL
@@ -75,45 +69,3 @@
[Array with mixed types]
expected: FAIL
- [Passing null (index 0) for options should use the defaults.]
- expected: FAIL
-
- [Passing null (index 0) for options should use the defaults (with newlines).]
- expected: FAIL
-
- [Passing undefined (index 1) for options should use the defaults.]
- expected: FAIL
-
- [Passing undefined (index 1) for options should use the defaults (with newlines).]
- expected: FAIL
-
- [Passing object "[object Object\]" (index 2) for options should use the defaults.]
- expected: FAIL
-
- [Passing object "[object Object\]" (index 2) for options should use the defaults (with newlines).]
- expected: FAIL
-
- [Passing object "[object Object\]" (index 3) for options should use the defaults.]
- expected: FAIL
-
- [Passing object "[object Object\]" (index 3) for options should use the defaults (with newlines).]
- expected: FAIL
-
- [Passing object "/regex/" (index 4) for options should use the defaults.]
- expected: FAIL
-
- [Passing object "/regex/" (index 4) for options should use the defaults (with newlines).]
- expected: FAIL
-
- [Passing function "function () {}" (index 5) for options should use the defaults.]
- expected: FAIL
-
- [Passing function "function () {}" (index 5) for options should use the defaults (with newlines).]
- expected: FAIL
-
- [Newlines should not change when endings is 'transparent'.]
- expected: FAIL
-
- [Newlines should not change when endings is 'native'.]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/blob/Blob-slice.html.ini b/tests/wpt/metadata/FileAPI/blob/Blob-slice.html.ini
index d594d79442b..9e78feb7d4e 100644
--- a/tests/wpt/metadata/FileAPI/blob/Blob-slice.html.ini
+++ b/tests/wpt/metadata/FileAPI/blob/Blob-slice.html.ini
@@ -1,47 +1,8 @@
[Blob-slice.html]
type: testharness
- [no-argument Blob slice]
- expected: FAIL
-
- [blob1.]
- expected: FAIL
-
- [blob2.]
- expected: FAIL
-
- [Slicing test: slice (0,0).]
- expected: FAIL
-
- [Slicing test: slice (0,1).]
- expected: FAIL
-
- [Slicing test: slice (0,2).]
- expected: FAIL
-
- [Slicing test: slice (0,3).]
- expected: FAIL
-
- [Slicing test: slice (0,4).]
- expected: FAIL
-
- [Slicing test: slice (0,5).]
- expected: FAIL
-
- [Slicing test: slice (0,6).]
- expected: FAIL
-
- [Slicing test: slice (0,7).]
- expected: FAIL
-
- [Slicing test: slice (0,8).]
- expected: FAIL
-
[Slicing test: slice (1,0).]
expected: FAIL
- [Slicing test: slice (1,1).]
- expected: FAIL
-
[Slicing test: slice (1,2).]
expected: FAIL
@@ -60,9 +21,6 @@
[Slicing test: slice (1,7).]
expected: FAIL
- [Slicing test: slice (2,0).]
- expected: FAIL
-
[Slicing test: slice (2,1).]
expected: FAIL
@@ -87,9 +45,6 @@
[Slicing test: slice (3,4).]
expected: FAIL
- [Slicing test: slice (3,5).]
- expected: FAIL
-
[Slicing test: slice (4,0).]
expected: FAIL
@@ -150,9 +105,6 @@
[Slicing test: slice (8,3).]
expected: FAIL
- [Invalid contentType ("ÿ")]
- expected: FAIL
-
[Invalid contentType ("te(xt/plain")]
expected: FAIL
@@ -207,24 +159,3 @@
[Invalid contentType ("te xt/plain")]
expected: FAIL
- [Invalid contentType ("te\\txt/plain")]
- expected: FAIL
-
- [Invalid contentType ("te\\0xt/plain")]
- expected: FAIL
-
- [Invalid contentType ("te\\x1fxt/plain")]
- expected: FAIL
-
- [Invalid contentType ("text/plain")]
- expected: FAIL
-
- [Valid contentType ("TEXT/PLAIN")]
- expected: FAIL
-
- [Valid contentType ("text/plain;charset = UTF-8")]
- expected: FAIL
-
- [Valid contentType ("text/plain;charset=UTF-8")]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/fileReader.html.ini b/tests/wpt/metadata/FileAPI/fileReader.html.ini
index 25d07b53ff4..30f5d00d2cf 100644
--- a/tests/wpt/metadata/FileAPI/fileReader.html.ini
+++ b/tests/wpt/metadata/FileAPI/fileReader.html.ini
@@ -1,11 +1,5 @@
[fileReader.html]
type: testharness
- [FileReader interface object]
- expected: FAIL
-
- [no-argument FileReader constructor]
- expected: FAIL
-
[FileReader States -- abort]
expected: FAIL
diff --git a/tests/wpt/metadata/FileAPI/historical.html.ini b/tests/wpt/metadata/FileAPI/historical.html.ini
deleted file mode 100644
index 412e4bb8085..00000000000
--- a/tests/wpt/metadata/FileAPI/historical.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[historical.html]
- type: testharness
- [FileReader should not support readAsBinaryString]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/idlharness.html.ini b/tests/wpt/metadata/FileAPI/idlharness.html.ini
index 9ded67b6acb..176ebf0bebd 100644
--- a/tests/wpt/metadata/FileAPI/idlharness.html.ini
+++ b/tests/wpt/metadata/FileAPI/idlharness.html.ini
@@ -96,76 +96,28 @@
[FileReader interface: existence and properties of interface object]
expected: FAIL
- [FileReader interface object length]
- expected: FAIL
-
- [FileReader interface: existence and properties of interface prototype object]
- expected: FAIL
-
- [FileReader interface: existence and properties of interface prototype object's "constructor" property]
- expected: FAIL
-
- [FileReader interface: operation readAsArrayBuffer(Blob)]
- expected: FAIL
-
- [FileReader interface: operation readAsText(Blob,DOMString)]
- expected: FAIL
-
- [FileReader interface: operation readAsDataURL(Blob)]
- expected: FAIL
-
- [FileReader interface: operation abort()]
- expected: FAIL
-
- [FileReader interface: constant EMPTY on interface object]
- expected: FAIL
-
- [FileReader interface: constant EMPTY on interface prototype object]
- expected: FAIL
-
- [FileReader interface: constant LOADING on interface object]
- expected: FAIL
-
- [FileReader interface: constant LOADING on interface prototype object]
- expected: FAIL
-
- [FileReader interface: constant DONE on interface object]
- expected: FAIL
-
- [FileReader interface: constant DONE on interface prototype object]
- expected: FAIL
-
- [FileReader interface: attribute readyState]
- expected: FAIL
-
- [FileReader interface: attribute result]
- expected: FAIL
-
- [FileReader interface: attribute error]
- expected: FAIL
-
- [FileReader interface: attribute onloadstart]
+ [FileReaderSync interface: existence and properties of interface object]
expected: FAIL
- [FileReader interface: attribute onprogress]
+ [FileReaderSync interface object length]
expected: FAIL
- [FileReader interface: attribute onload]
+ [FileReaderSync interface: existence and properties of interface prototype object]
expected: FAIL
- [FileReader interface: attribute onabort]
+ [FileReaderSync interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
- [FileReader interface: attribute onerror]
+ [FileReaderSync interface: operation readAsArrayBuffer(Blob)]
expected: FAIL
- [FileReader interface: attribute onloadend]
+ [FileReaderSync interface: operation readAsText(Blob,DOMString)]
expected: FAIL
- [FileReader must be primary interface of new FileReader()]
+ [FileReaderSync interface: operation readAsDataURL(Blob)]
expected: FAIL
- [Stringification of new FileReader()]
+ [FileReader interface: operation readAsArrayBuffer(Blob)]
expected: FAIL
[FileReader interface: new FileReader() must inherit property "readAsArrayBuffer" with the proper type (0)]
@@ -174,75 +126,3 @@
[FileReader interface: calling readAsArrayBuffer(Blob) on new FileReader() with too few arguments must throw TypeError]
expected: FAIL
- [FileReader interface: new FileReader() must inherit property "readAsText" with the proper type (1)]
- expected: FAIL
-
- [FileReader interface: calling readAsText(Blob,DOMString) on new FileReader() with too few arguments must throw TypeError]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "readAsDataURL" with the proper type (2)]
- expected: FAIL
-
- [FileReader interface: calling readAsDataURL(Blob) on new FileReader() with too few arguments must throw TypeError]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "abort" with the proper type (3)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "EMPTY" with the proper type (4)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "LOADING" with the proper type (5)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "DONE" with the proper type (6)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "readyState" with the proper type (7)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "result" with the proper type (8)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "error" with the proper type (9)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "onloadstart" with the proper type (10)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "onprogress" with the proper type (11)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "onload" with the proper type (12)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "onabort" with the proper type (13)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "onerror" with the proper type (14)]
- expected: FAIL
-
- [FileReader interface: new FileReader() must inherit property "onloadend" with the proper type (15)]
- expected: FAIL
-
- [FileReaderSync interface: existence and properties of interface object]
- expected: FAIL
-
- [FileReaderSync interface object length]
- expected: FAIL
-
- [FileReaderSync interface: existence and properties of interface prototype object]
- expected: FAIL
-
- [FileReaderSync interface: existence and properties of interface prototype object's "constructor" property]
- expected: FAIL
-
- [FileReaderSync interface: operation readAsArrayBuffer(Blob)]
- expected: FAIL
-
- [FileReaderSync interface: operation readAsText(Blob,DOMString)]
- expected: FAIL
-
- [FileReaderSync interface: operation readAsDataURL(Blob)]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/reading-data-section/FileReader-event-handler-attributes.html.ini b/tests/wpt/metadata/FileAPI/reading-data-section/FileReader-event-handler-attributes.html.ini
deleted file mode 100644
index 0581ac711ac..00000000000
--- a/tests/wpt/metadata/FileAPI/reading-data-section/FileReader-event-handler-attributes.html.ini
+++ /dev/null
@@ -1,20 +0,0 @@
-[FileReader-event-handler-attributes.html]
- type: testharness
- [FileReader.onloadstart: initial value]
- expected: FAIL
-
- [FileReader.onprogress: initial value]
- expected: FAIL
-
- [FileReader.onload: initial value]
- expected: FAIL
-
- [FileReader.onabort: initial value]
- expected: FAIL
-
- [FileReader.onerror: initial value]
- expected: FAIL
-
- [FileReader.onloadend: initial value]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/reading-data-section/FileReader-multiple-reads.html.ini b/tests/wpt/metadata/FileAPI/reading-data-section/FileReader-multiple-reads.html.ini
index 86d0638a769..6936324c1b0 100644
--- a/tests/wpt/metadata/FileAPI/reading-data-section/FileReader-multiple-reads.html.ini
+++ b/tests/wpt/metadata/FileAPI/reading-data-section/FileReader-multiple-reads.html.ini
@@ -1,9 +1,6 @@
[FileReader-multiple-reads.html]
type: testharness
- [test FileReader InvalidStateError exception for readAsText]
- expected: FAIL
-
- [test FileReader InvalidStateError exception for readAsDataURL]
+ [test FileReader no InvalidStateError exception in onloadstart event for readAsArrayBuffer]
expected: FAIL
[test FileReader InvalidStateError exception for readAsArrayBuffer]
@@ -12,6 +9,3 @@
[test FileReader InvalidStateError exception in onloadstart event for readAsArrayBuffer]
expected: FAIL
- [test FileReader no InvalidStateError exception in onloadstart event for readAsArrayBuffer]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_abort.html.ini b/tests/wpt/metadata/FileAPI/reading-data-section/filereader_abort.html.ini
deleted file mode 100644
index c990f495548..00000000000
--- a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_abort.html.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[filereader_abort.html]
- type: testharness
- [Aborting before read]
- expected: FAIL
-
- [Aborting after read]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_error.html.ini b/tests/wpt/metadata/FileAPI/reading-data-section/filereader_error.html.ini
deleted file mode 100644
index a843aa01083..00000000000
--- a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_error.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[filereader_error.html]
- type: testharness
- [FileAPI Test: filereader_error]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_readAsDataURL.html.ini b/tests/wpt/metadata/FileAPI/reading-data-section/filereader_readAsDataURL.html.ini
deleted file mode 100644
index 6be64beab23..00000000000
--- a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_readAsDataURL.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[filereader_readAsDataURL.html]
- type: testharness
- [FileAPI Test: filereader_readAsDataURL]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_readAsText.html.ini b/tests/wpt/metadata/FileAPI/reading-data-section/filereader_readAsText.html.ini
deleted file mode 100644
index 6039faa8814..00000000000
--- a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_readAsText.html.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[filereader_readAsText.html]
- type: testharness
- [readAsText should correctly read UTF-8.]
- expected: FAIL
-
- [readAsText should correctly read UTF-16.]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_readystate.html.ini b/tests/wpt/metadata/FileAPI/reading-data-section/filereader_readystate.html.ini
deleted file mode 100644
index 00ba8d810dc..00000000000
--- a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_readystate.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[filereader_readystate.html]
- type: testharness
- [FileAPI Test: filereader_readystate]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_result.html.ini b/tests/wpt/metadata/FileAPI/reading-data-section/filereader_result.html.ini
index e24133d48d3..415751e1ead 100644
--- a/tests/wpt/metadata/FileAPI/reading-data-section/filereader_result.html.ini
+++ b/tests/wpt/metadata/FileAPI/reading-data-section/filereader_result.html.ini
@@ -1,11 +1,5 @@
[filereader_result.html]
type: testharness
- [readAsText]
- expected: FAIL
-
- [readAsDataURL]
- expected: FAIL
-
[readAsArrayBuffer]
expected: FAIL
diff --git a/tests/wpt/mozilla/tests/mozilla/interfaces.html b/tests/wpt/mozilla/tests/mozilla/interfaces.html
index f011f51668c..0f3cc380888 100644
--- a/tests/wpt/mozilla/tests/mozilla/interfaces.html
+++ b/tests/wpt/mozilla/tests/mozilla/interfaces.html
@@ -99,6 +99,7 @@ var interfaceNamesInGlobalScope = [
"Event",
"EventTarget",
"File",
+ "FileReader",
"FormData",
"HTMLAnchorElement",
"HTMLAppletElement",