Skip to content

Commit

Permalink
added autoclose worker
Browse files Browse the repository at this point in the history
  • Loading branch information
nupurbaghel committed Feb 22, 2018
1 parent d423e54 commit 36991b9
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 0 deletions.
22 changes: 22 additions & 0 deletions components/script/dom/globalscope.rs
Expand Up @@ -47,6 +47,8 @@ use std::collections::HashMap;
use std::collections::hash_map::Entry;
use std::ffi::CString;
use std::rc::Rc;
use std::sync::Arc;
use std::sync::atomic::{AtomicBool, Ordering};
use task::TaskCanceller;
use task_source::file_reading::FileReadingTaskSource;
use task_source::networking::NetworkingTaskSource;
Expand All @@ -55,6 +57,17 @@ use time::{Timespec, get_time};
use timers::{IsInterval, OneshotTimerCallback, OneshotTimerHandle};
use timers::{OneshotTimers, TimerCallback};

#[derive(JSTraceable)]
pub struct AutoCloseWorker(
Arc<AtomicBool>,
);

impl Drop for AutoCloseWorker {
fn drop(&mut self) {
self.0.store(true, Ordering::SeqCst);
}
}

#[dom_struct]
pub struct GlobalScope {
eventtarget: EventTarget,
Expand Down Expand Up @@ -110,6 +123,10 @@ pub struct GlobalScope {
/// <https://html.spec.whatwg.org/multipage/#microtask-queue>
#[ignore_malloc_size_of = "Rc<T> is hard"]
microtask_queue: Rc<MicrotaskQueue>,

/// Vector storing closing references of all workers
#[ignore_malloc_size_of = "Arc"]
list_auto_close_worker: DomRefCell<Vec<AutoCloseWorker>>,
}

impl GlobalScope {
Expand Down Expand Up @@ -142,9 +159,14 @@ impl GlobalScope {
timers: OneshotTimers::new(timer_event_chan, scheduler_chan),
origin,
microtask_queue,
list_auto_close_worker: Default::default(),
}
}

pub fn track_worker(&self, closing_worker: Arc<AtomicBool>) {
self.list_auto_close_worker.borrow_mut().push(AutoCloseWorker(closing_worker));
}

/// Returns the global scope of the realm that the given DOM object's reflector
/// was created in.
#[allow(unsafe_code)]
Expand Down
1 change: 1 addition & 0 deletions components/script/dom/worker.rs
Expand Up @@ -79,6 +79,7 @@ impl Worker {
let (sender, receiver) = channel();
let closing = Arc::new(AtomicBool::new(false));
let worker = Worker::new(global, sender.clone(), closing.clone());
global.track_worker(closing.clone());
let worker_ref = Trusted::new(&*worker);

let worker_load_origin = WorkerScriptLoadOrigin {
Expand Down
3 changes: 3 additions & 0 deletions tests/html/child.html
@@ -0,0 +1,3 @@
<script>
var w = new Worker('work.js');
</script>
8 changes: 8 additions & 0 deletions tests/html/parent.html
@@ -0,0 +1,8 @@
<body>
<script>
var iframe = document.createElement('iframe');
iframe.src = "child.html";
iframe.onload = function() { iframe.remove(); }
document.body.appendChild(iframe);
</script>
</body>
4 changes: 4 additions & 0 deletions tests/html/work.js
@@ -0,0 +1,4 @@
console.log("reached inside work.js file");
setInterval(function() {
console.log('hi');
}, 500);

0 comments on commit 36991b9

Please sign in to comment.