/* 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::refcounted::Trusted; use dom::bindings::reflector::Reflectable; use dom::bindings::str::DOMString; use dom::bindings::structuredclone::StructuredCloneData; use js::jsapi::{JSRuntime, JS_RequestInterruptCallback}; use js::rust::Runtime; use msg::constellation_msg::{PipelineId, ReferrerPolicy}; use net_traits::{LoadOrigin, RequestSource}; use script_runtime::CommonScriptMsg; use url::Url; /// Messages used to control the worker event loops pub enum WorkerScriptMsg { /// Common variants associated with the script messages Common(CommonScriptMsg), /// Message sent through Worker.postMessage DOMMessage(StructuredCloneData), } #[derive(Clone)] pub struct WorkerScriptLoadOrigin { pub referrer_url: Option, pub referrer_policy: Option, pub request_source: RequestSource, pub pipeline_id: Option } impl LoadOrigin for WorkerScriptLoadOrigin { fn referrer_url(&self) -> Option { self.referrer_url.clone() } fn referrer_policy(&self) -> Option { self.referrer_policy.clone() } fn request_source(&self) -> RequestSource { self.request_source.clone() } fn pipeline_id(&self) -> Option { self.pipeline_id.clone() } } pub struct SimpleWorkerErrorHandler { pub addr: Trusted, } impl SimpleWorkerErrorHandler { pub fn new(addr: Trusted) -> SimpleWorkerErrorHandler { SimpleWorkerErrorHandler { addr: addr } } } pub struct WorkerErrorHandler { pub addr: Trusted, pub msg: DOMString, pub file_name: DOMString, pub line_num: u32, pub col_num: u32, } impl WorkerErrorHandler { pub fn new(addr: Trusted, msg: DOMString, file_name: DOMString, line_num: u32, col_num: u32) -> WorkerErrorHandler { WorkerErrorHandler { addr: addr, msg: msg, file_name: file_name, line_num: line_num, col_num: col_num, } } } #[derive(Copy, Clone)] pub struct SharedRt { pub rt: *mut JSRuntime } impl SharedRt { pub fn new(rt: &Runtime) -> SharedRt { SharedRt { rt: rt.rt() } } #[allow(unsafe_code)] pub fn request_interrupt(&self) { unsafe { JS_RequestInterruptCallback(self.rt); } } pub fn rt(&self) -> *mut JSRuntime { self.rt } } #[allow(unsafe_code)] unsafe impl Send for SharedRt {}