aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/workerglobalscope.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/workerglobalscope.rs')
-rw-r--r--components/script/dom/workerglobalscope.rs37
1 files changed, 22 insertions, 15 deletions
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs
index 3c876b9fc50..41b90fa2fa9 100644
--- a/components/script/dom/workerglobalscope.rs
+++ b/components/script/dom/workerglobalscope.rs
@@ -2,6 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::codegen::Bindings::FunctionBinding::Function;
use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestInit;
use crate::dom::bindings::codegen::Bindings::WorkerGlobalScopeBinding::WorkerGlobalScopeMethods;
@@ -42,10 +43,11 @@ use js::panic::maybe_resume_unwind;
use js::rust::{HandleValue, ParentRuntime};
use msg::constellation_msg::PipelineId;
use net_traits::request::{CredentialsMode, Destination, RequestBuilder as NetRequestInit};
-use net_traits::{load_whole_resource, IpcSend};
+use net_traits::IpcSend;
use script_traits::WorkerGlobalScopeInit;
use script_traits::{TimerEvent, TimerEventId};
use servo_url::{MutableOrigin, ServoUrl};
+use std::cell::Ref;
use std::default::Default;
use std::rc::Rc;
use std::sync::atomic::{AtomicBool, Ordering};
@@ -78,7 +80,7 @@ pub struct WorkerGlobalScope {
globalscope: GlobalScope,
worker_id: WorkerId,
- worker_url: ServoUrl,
+ worker_url: DomRefCell<ServoUrl>,
#[ignore_malloc_size_of = "Arc"]
closing: Option<Arc<AtomicBool>>,
#[ignore_malloc_size_of = "Defined in js"]
@@ -123,7 +125,7 @@ impl WorkerGlobalScope {
Default::default(),
),
worker_id: init.worker_id,
- worker_url,
+ worker_url: DomRefCell::new(worker_url),
closing,
runtime,
location: Default::default(),
@@ -159,8 +161,12 @@ impl WorkerGlobalScope {
}
}
- pub fn get_url(&self) -> &ServoUrl {
- &self.worker_url
+ pub fn get_url(&self) -> Ref<ServoUrl> {
+ self.worker_url.borrow()
+ }
+
+ pub fn set_url(&self, url: ServoUrl) {
+ *self.worker_url.borrow_mut() = url;
}
pub fn get_worker_id(&self) -> WorkerId {
@@ -187,7 +193,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope {
// https://html.spec.whatwg.org/multipage/#dom-workerglobalscope-location
fn Location(&self) -> DomRoot<WorkerLocation> {
self.location
- .or_init(|| WorkerLocation::new(self, self.worker_url.clone()))
+ .or_init(|| WorkerLocation::new(self, self.worker_url.borrow().clone()))
}
// https://html.spec.whatwg.org/multipage/#handler-workerglobalscope-onerror
@@ -197,7 +203,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope {
fn ImportScripts(&self, url_strings: Vec<DOMString>) -> ErrorResult {
let mut urls = Vec::with_capacity(url_strings.len());
for url in url_strings {
- let url = self.worker_url.join(&url);
+ let url = self.worker_url.borrow().join(&url);
match url {
Ok(url) => urls.push(url),
Err(_) => return Err(Error::Syntax),
@@ -215,13 +221,14 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope {
.pipeline_id(Some(self.upcast::<GlobalScope>().pipeline_id()))
.referrer_policy(None);
- let (url, source) =
- match load_whole_resource(request, &global_scope.resource_threads().sender()) {
- Err(_) => return Err(Error::Network),
- Ok((metadata, bytes)) => {
- (metadata.final_url, String::from_utf8(bytes).unwrap())
- },
- };
+ let (url, source) = match fetch::load_whole_resource(
+ request,
+ &global_scope.resource_threads().sender(),
+ &global_scope,
+ ) {
+ Err(_) => return Err(Error::Network),
+ Ok((metadata, bytes)) => (metadata.final_url, String::from_utf8(bytes).unwrap()),
+ };
let result = self.runtime.evaluate_script(
self.reflector().get_jsobject(),
@@ -381,7 +388,7 @@ impl WorkerGlobalScope {
match self.runtime.evaluate_script(
self.reflector().get_jsobject(),
&source,
- self.worker_url.as_str(),
+ self.worker_url.borrow().as_str(),
1,
rval.handle_mut(),
) {