diff options
Diffstat (limited to 'components/script/dom/abstractworker.rs')
-rw-r--r-- | components/script/dom/abstractworker.rs | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/components/script/dom/abstractworker.rs b/components/script/dom/abstractworker.rs new file mode 100644 index 00000000000..f9ff583a0dd --- /dev/null +++ b/components/script/dom/abstractworker.rs @@ -0,0 +1,104 @@ +/* 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<Url>, + pub referrer_policy: Option<ReferrerPolicy>, + pub request_source: RequestSource, + pub pipeline_id: Option<PipelineId> +} + +impl LoadOrigin for WorkerScriptLoadOrigin { + fn referrer_url(&self) -> Option<Url> { + self.referrer_url.clone() + } + fn referrer_policy(&self) -> Option<ReferrerPolicy> { + self.referrer_policy.clone() + } + fn request_source(&self) -> RequestSource { + self.request_source.clone() + } + fn pipeline_id(&self) -> Option<PipelineId> { + self.pipeline_id.clone() + } +} + +pub struct SimpleWorkerErrorHandler<T: Reflectable> { + pub addr: Trusted<T>, +} + +impl<T: Reflectable> SimpleWorkerErrorHandler<T> { + pub fn new(addr: Trusted<T>) -> SimpleWorkerErrorHandler<T> { + SimpleWorkerErrorHandler { + addr: addr + } + } +} + +pub struct WorkerErrorHandler<T: Reflectable> { + pub addr: Trusted<T>, + pub msg: DOMString, + pub file_name: DOMString, + pub line_num: u32, + pub col_num: u32, +} + +impl<T: Reflectable> WorkerErrorHandler<T> { + pub fn new(addr: Trusted<T>, msg: DOMString, file_name: DOMString, line_num: u32, col_num: u32) + -> WorkerErrorHandler<T> { + 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 {} |