aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs47
-rw-r--r--components/script/dom/htmlmediaelement.rs2
-rw-r--r--components/script/dom/serviceworkerglobalscope.rs26
-rw-r--r--components/script/dom/workerglobalscope.rs37
-rw-r--r--components/script/dom/worklet.rs12
5 files changed, 72 insertions, 52 deletions
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index 69c4694af5c..374471b8798 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -22,6 +22,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::messageevent::MessageEvent;
use crate::dom::worker::{TrustedWorkerAddress, Worker};
use crate::dom::workerglobalscope::WorkerGlobalScope;
+use crate::fetch::load_whole_resource;
use crate::script_runtime::ScriptThreadEventCategory::WorkerEvent;
use crate::script_runtime::{new_child_runtime, CommonScriptMsg, Runtime, ScriptChan, ScriptPort};
use crate::task_queue::{QueuedTask, QueuedTaskConversion, TaskQueue};
@@ -37,7 +38,7 @@ use js::jsval::UndefinedValue;
use js::rust::HandleValue;
use msg::constellation_msg::{PipelineId, TopLevelBrowsingContextId};
use net_traits::request::{CredentialsMode, Destination, Referrer, RequestBuilder};
-use net_traits::{load_whole_resource, IpcSend};
+use net_traits::IpcSend;
use script_traits::{TimerEvent, TimerSource, WorkerGlobalScopeInit, WorkerScriptLoadOrigin};
use servo_rand::random;
use servo_url::ServoUrl;
@@ -316,25 +317,6 @@ impl DedicatedWorkerGlobalScope {
.referrer_policy(referrer_policy)
.origin(origin);
- let (metadata, bytes) =
- match load_whole_resource(request, &init.resource_threads.sender()) {
- Err(_) => {
- println!("error loading script {}", serialized_worker_url);
- parent_sender
- .send(CommonScriptMsg::Task(
- WorkerEvent,
- Box::new(SimpleWorkerErrorHandler::new(worker)),
- pipeline_id,
- TaskSourceName::DOMManipulation,
- ))
- .unwrap();
- return;
- },
- Ok((metadata, bytes)) => (metadata, bytes),
- };
- let url = metadata.final_url;
- let source = String::from_utf8_lossy(&bytes);
-
let runtime = unsafe { new_child_runtime(parent) };
let (devtools_mpsc_chan, devtools_mpsc_port) = unbounded();
@@ -356,7 +338,7 @@ impl DedicatedWorkerGlobalScope {
let global = DedicatedWorkerGlobalScope::new(
init,
- url,
+ worker_url,
devtools_mpsc_port,
runtime,
parent_sender.clone(),
@@ -369,6 +351,29 @@ impl DedicatedWorkerGlobalScope {
// FIXME(njn): workers currently don't have a unique ID suitable for using in reporter
// registration (#6631), so we instead use a random number and cross our fingers.
let scope = global.upcast::<WorkerGlobalScope>();
+ let global_scope = global.upcast::<GlobalScope>();
+
+ let (metadata, bytes) = match load_whole_resource(
+ request,
+ &global_scope.resource_threads().sender(),
+ &global_scope,
+ ) {
+ Err(_) => {
+ println!("error loading script {}", serialized_worker_url);
+ parent_sender
+ .send(CommonScriptMsg::Task(
+ WorkerEvent,
+ Box::new(SimpleWorkerErrorHandler::new(worker)),
+ pipeline_id,
+ TaskSourceName::DOMManipulation,
+ ))
+ .unwrap();
+ return;
+ },
+ Ok((metadata, bytes)) => (metadata, bytes),
+ };
+ scope.set_url(metadata.final_url);
+ let source = String::from_utf8_lossy(&bytes);
unsafe {
// Handle interrupt requests
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index 9bbfb30d46c..66fb85b6732 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -120,7 +120,7 @@ impl FrameRenderer for MediaFrameRenderer {
let mut txn = Transaction::new();
- let image_data = ImageData::Raw(frame.get_data().clone());
+ let image_data = ImageData::Raw(frame.get_data());
if let Some(old_image_key) = mem::replace(&mut self.very_old_frame, self.old_frame.take()) {
txn.delete_image(old_image_key);
diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs
index 6acae53ae05..1ecdbf00b9b 100644
--- a/components/script/dom/serviceworkerglobalscope.rs
+++ b/components/script/dom/serviceworkerglobalscope.rs
@@ -19,6 +19,7 @@ use crate::dom::extendablemessageevent::ExtendableMessageEvent;
use crate::dom::globalscope::GlobalScope;
use crate::dom::worker::TrustedWorkerAddress;
use crate::dom::workerglobalscope::WorkerGlobalScope;
+use crate::fetch::load_whole_resource;
use crate::script_runtime::{new_rt_and_cx, CommonScriptMsg, Runtime, ScriptChan};
use crate::task_queue::{QueuedTask, QueuedTaskConversion, TaskQueue};
use crate::task_source::TaskSourceName;
@@ -31,7 +32,7 @@ use js::jsapi::{JSAutoCompartment, JSContext, JS_AddInterruptCallback};
use js::jsval::UndefinedValue;
use msg::constellation_msg::PipelineId;
use net_traits::request::{CredentialsMode, Destination, Referrer, RequestBuilder};
-use net_traits::{load_whole_resource, CustomResponseMediator, IpcSend};
+use net_traits::{CustomResponseMediator, IpcSend};
use script_traits::{
ScopeThings, ServiceWorkerMsg, TimerEvent, WorkerGlobalScopeInit, WorkerScriptLoadOrigin,
};
@@ -292,16 +293,19 @@ impl ServiceWorkerGlobalScope {
.referrer_policy(referrer_policy)
.origin(origin);
- let (url, source) =
- match load_whole_resource(request, &init.resource_threads.sender()) {
- Err(_) => {
- println!("error loading script {}", serialized_worker_url);
- return;
- },
- Ok((metadata, bytes)) => {
- (metadata.final_url, String::from_utf8(bytes).unwrap())
- },
- };
+ let (url, source) = match load_whole_resource(
+ request,
+ &init.resource_threads.sender(),
+ &GlobalScope::current().expect("No current global object"),
+ ) {
+ Err(_) => {
+ println!("error loading script {}", serialized_worker_url);
+ return;
+ },
+ Ok((metadata, bytes)) => {
+ (metadata.final_url, String::from_utf8(bytes).unwrap())
+ },
+ };
let runtime = new_rt_and_cx();
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(),
) {
diff --git a/components/script/dom/worklet.rs b/components/script/dom/worklet.rs
index 90421efac61..a7611517d13 100644
--- a/components/script/dom/worklet.rs
+++ b/components/script/dom/worklet.rs
@@ -33,6 +33,7 @@ use crate::dom::workletglobalscope::WorkletGlobalScope;
use crate::dom::workletglobalscope::WorkletGlobalScopeInit;
use crate::dom::workletglobalscope::WorkletGlobalScopeType;
use crate::dom::workletglobalscope::WorkletTask;
+use crate::fetch::load_whole_resource;
use crate::script_runtime::new_rt_and_cx;
use crate::script_runtime::CommonScriptMsg;
use crate::script_runtime::Runtime;
@@ -47,7 +48,6 @@ use js::jsapi::JSTracer;
use js::jsapi::JS_GetGCParameter;
use js::jsapi::JS_GC;
use msg::constellation_msg::PipelineId;
-use net_traits::load_whole_resource;
use net_traits::request::Destination;
use net_traits::request::RequestBuilder;
use net_traits::request::RequestMode;
@@ -631,9 +631,13 @@ impl WorkletThread {
.credentials_mode(credentials.into())
.origin(origin);
- let script = load_whole_resource(request, &resource_fetcher)
- .ok()
- .and_then(|(_, bytes)| String::from_utf8(bytes).ok());
+ let script = load_whole_resource(
+ request,
+ &resource_fetcher,
+ &global_scope.upcast::<GlobalScope>(),
+ )
+ .ok()
+ .and_then(|(_, bytes)| String::from_utf8(bytes).ok());
// Step 4.
// NOTE: the spec parses and executes the script in separate steps,