mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Introduce GlobalScope::file_reading_task_source
This commit is contained in:
parent
0a11c48e89
commit
e7a1149984
3 changed files with 17 additions and 13 deletions
|
@ -18,7 +18,6 @@ use js::{JSCLASS_IS_DOMJSCLASS, JSCLASS_IS_GLOBAL};
|
||||||
use js::glue::{IsWrapper, UnwrapObject};
|
use js::glue::{IsWrapper, UnwrapObject};
|
||||||
use js::jsapi::{CurrentGlobalOrNull, GetGlobalForObjectCrossCompartment};
|
use js::jsapi::{CurrentGlobalOrNull, GetGlobalForObjectCrossCompartment};
|
||||||
use js::jsapi::{JSContext, JSObject, JS_GetClass};
|
use js::jsapi::{JSContext, JSObject, JS_GetClass};
|
||||||
use task_source::file_reading::FileReadingTaskSource;
|
|
||||||
|
|
||||||
/// A freely-copyable reference to a rooted global object.
|
/// A freely-copyable reference to a rooted global object.
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
|
@ -54,15 +53,6 @@ impl<'a> GlobalRef<'a> {
|
||||||
GlobalRef::Worker(ref worker) => worker.get_cx(),
|
GlobalRef::Worker(ref worker) => worker.get_cx(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// `ScriptChan` used to send messages to the event loop of this global's
|
|
||||||
/// thread.
|
|
||||||
pub fn file_reading_task_source(&self) -> FileReadingTaskSource {
|
|
||||||
match *self {
|
|
||||||
GlobalRef::Window(ref window) => window.file_reading_task_source(),
|
|
||||||
GlobalRef::Worker(ref worker) => worker.file_reading_task_source(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Reflectable for GlobalRef<'a> {
|
impl<'a> Reflectable for GlobalRef<'a> {
|
||||||
|
|
|
@ -333,8 +333,9 @@ impl FileReader {
|
||||||
return Err(Error::InvalidState);
|
return Err(Error::InvalidState);
|
||||||
}
|
}
|
||||||
// Step 2
|
// Step 2
|
||||||
|
let global = self.global_scope();
|
||||||
if blob.IsClosed() {
|
if blob.IsClosed() {
|
||||||
let exception = DOMException::new(&self.global_scope(), DOMErrorName::InvalidStateError);
|
let exception = DOMException::new(&global, DOMErrorName::InvalidStateError);
|
||||||
self.error.set(Some(&exception));
|
self.error.set(Some(&exception));
|
||||||
|
|
||||||
self.dispatch_progress_event(atom!("error"), 0, None);
|
self.dispatch_progress_event(atom!("error"), 0, None);
|
||||||
|
@ -354,8 +355,8 @@ impl FileReader {
|
||||||
let fr = Trusted::new(self);
|
let fr = Trusted::new(self);
|
||||||
let gen_id = self.generation_id.get();
|
let gen_id = self.generation_id.get();
|
||||||
|
|
||||||
let wrapper = self.global_scope().get_runnable_wrapper();
|
let wrapper = global.get_runnable_wrapper();
|
||||||
let task_source = self.global().r().file_reading_task_source();
|
let task_source = global.file_reading_task_source();
|
||||||
|
|
||||||
spawn_named("file reader async operation".to_owned(), move || {
|
spawn_named("file reader async operation".to_owned(), move || {
|
||||||
perform_annotated_read_operation(gen_id, load_data, blob_contents, fr, task_source, wrapper)
|
perform_annotated_read_operation(gen_id, load_data, blob_contents, fr, task_source, wrapper)
|
||||||
|
|
|
@ -36,6 +36,7 @@ use std::collections::HashMap;
|
||||||
use std::collections::hash_map::Entry;
|
use std::collections::hash_map::Entry;
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use std::panic;
|
use std::panic;
|
||||||
|
use task_source::file_reading::FileReadingTaskSource;
|
||||||
use time::{Timespec, get_time};
|
use time::{Timespec, get_time};
|
||||||
use timers::{IsInterval, OneshotTimerCallback, OneshotTimerHandle};
|
use timers::{IsInterval, OneshotTimerCallback, OneshotTimerHandle};
|
||||||
use timers::{OneshotTimers, TimerCallback};
|
use timers::{OneshotTimers, TimerCallback};
|
||||||
|
@ -457,6 +458,18 @@ impl GlobalScope {
|
||||||
}
|
}
|
||||||
unreachable!();
|
unreachable!();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Channel to send messages to the file reading task source of
|
||||||
|
/// this of this global scope.
|
||||||
|
pub fn file_reading_task_source(&self) -> FileReadingTaskSource {
|
||||||
|
if let Some(window) = self.downcast::<Window>() {
|
||||||
|
return window.file_reading_task_source();
|
||||||
|
}
|
||||||
|
if let Some(worker) = self.downcast::<WorkerGlobalScope>() {
|
||||||
|
return worker.file_reading_task_source();
|
||||||
|
}
|
||||||
|
unreachable!();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn timestamp_in_ms(time: Timespec) -> u64 {
|
fn timestamp_in_ms(time: Timespec) -> u64 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue