Auto merge of #6761 - Wafflespeanut:filereader, r=jdm

Combining FileReaderEvent and Process into an enum; r=jdm

This one's for #6752. The build was successful for this change. I'll commit the next one for `perform_annotated_read_operation` in a moment...

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6761)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-07-25 13:58:34 -06:00
commit 3af6992151

View file

@ -2,8 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * 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/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::FileReaderBinding; use dom::bindings::codegen::Bindings::FileReaderBinding::{self, FileReaderConstants, FileReaderMethods};
use dom::bindings::codegen::Bindings::FileReaderBinding::{FileReaderConstants, FileReaderMethods};
use dom::bindings::codegen::InheritTypes::{EventCast, EventTargetCast}; use dom::bindings::codegen::InheritTypes::{EventCast, EventTargetCast};
use dom::bindings::codegen::Bindings::EventHandlerBinding::EventHandlerNonNull; use dom::bindings::codegen::Bindings::EventHandlerBinding::EventHandlerNonNull;
use dom::bindings::error::{ErrorResult, Fallible}; use dom::bindings::error::{ErrorResult, Fallible};
@ -14,8 +13,7 @@ use dom::bindings::refcounted::Trusted;
use dom::bindings::utils::{reflect_dom_object, Reflectable}; use dom::bindings::utils::{reflect_dom_object, Reflectable};
use dom::event::{EventHelpers, EventCancelable, EventBubbles}; use dom::event::{EventHelpers, EventCancelable, EventBubbles};
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId}; use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
use dom::blob::Blob; use dom::blob::{Blob, BlobHelpers};
use dom::blob::BlobHelpers;
use dom::domexception::{DOMException, DOMErrorName}; use dom::domexception::{DOMException, DOMErrorName};
use dom::progressevent::ProgressEvent; use dom::progressevent::ProgressEvent;
use encoding::all::UTF_8; use encoding::all::UTF_8;
@ -409,73 +407,51 @@ impl<'a> PrivateFileReaderHelpers for &'a FileReader {
} }
#[derive(Clone)] #[derive(Clone)]
pub enum Process { pub enum FileReaderEvent {
ProcessRead(TrustedFileReader, GenerationId), ProcessRead(TrustedFileReader, GenerationId),
ProcessReadData(TrustedFileReader, GenerationId, DOMString), ProcessReadData(TrustedFileReader, GenerationId, DOMString),
ProcessReadError(TrustedFileReader, GenerationId, DOMErrorName), ProcessReadError(TrustedFileReader, GenerationId, DOMErrorName),
ProcessReadEOF(TrustedFileReader, GenerationId, Option<BlobBody>) ProcessReadEOF(TrustedFileReader, GenerationId, Option<BlobBody>)
} }
impl Process { impl Runnable for FileReaderEvent {
fn call(self, chan: &Box<ScriptChan + Send>) { fn handler(self: Box<FileReaderEvent>) {
let task = box FileReaderEvent::new(self); let file_reader_event = *self;
chan.send(ScriptMsg::RunnableMsg(task)).unwrap(); match file_reader_event {
} FileReaderEvent::ProcessRead(filereader, gen_id) => {
pub fn handle(process: Process) {
match process {
Process::ProcessRead(filereader, gen_id) => {
FileReader::process_read(filereader, gen_id); FileReader::process_read(filereader, gen_id);
}, },
Process::ProcessReadData(filereader, gen_id, _) => { FileReaderEvent::ProcessReadData(filereader, gen_id, _) => {
FileReader::process_read_data(filereader, gen_id); FileReader::process_read_data(filereader, gen_id);
}, },
Process::ProcessReadError(filereader, gen_id, error) => { FileReaderEvent::ProcessReadError(filereader, gen_id, error) => {
FileReader::process_read_error(filereader, gen_id, error); FileReader::process_read_error(filereader, gen_id, error);
}, },
Process::ProcessReadEOF(filereader, gen_id, blob_body) => { FileReaderEvent::ProcessReadEOF(filereader, gen_id, blob_body) => {
FileReader::process_read_eof(filereader, gen_id, blob_body); FileReader::process_read_eof(filereader, gen_id, blob_body);
} }
} }
} }
} }
pub struct FileReaderEvent { // https://w3c.github.io/FileAPI/#task-read-operation
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, fn perform_annotated_read_operation(gen_id: GenerationId, read_data: ReadData,
filereader: TrustedFileReader, script_chan: Box<ScriptChan + Send>) { filereader: TrustedFileReader, script_chan: Box<ScriptChan + Send>) {
let chan = &script_chan; let chan = &script_chan;
// Step 4 // Step 4
Process::ProcessRead(filereader.clone(), let task = box FileReaderEvent::ProcessRead(filereader.clone(), gen_id);
gen_id).call(chan); chan.send(ScriptMsg::RunnableMsg(task)).unwrap();
Process::ProcessReadData(filereader.clone(), let task = box FileReaderEvent::ProcessReadData(filereader.clone(),
gen_id, DOMString::new()).call(chan); gen_id, DOMString::new());
chan.send(ScriptMsg::RunnableMsg(task)).unwrap();
let output = match read_data.bytes.recv() { let output = match read_data.bytes.recv() {
Ok(bytes) => bytes, Ok(bytes) => bytes,
Err(_) => { Err(_) => {
Process::ProcessReadError(filereader, let task = box FileReaderEvent::ProcessReadError(filereader,
gen_id, DOMErrorName::NotFoundError).call(chan); gen_id, DOMErrorName::NotFoundError);
chan.send(ScriptMsg::RunnableMsg(task)).unwrap();
return; return;
} }
}; };
@ -487,5 +463,6 @@ fn perform_annotated_read_operation(gen_id: GenerationId, read_data: ReadData,
BlobBody::new(bytes, blobtype, label, read_data.function) BlobBody::new(bytes, blobtype, label, read_data.function)
}); });
Process::ProcessReadEOF(filereader, gen_id, blob_body).call(chan); let task = box FileReaderEvent::ProcessReadEOF(filereader, gen_id, blob_body);
chan.send(ScriptMsg::RunnableMsg(task)).unwrap();
} }