diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/bindings/global.rs | 9 | ||||
-rw-r--r-- | components/script/dom/browsingcontext.rs | 4 | ||||
-rw-r--r-- | components/script/dom/console.rs | 5 | ||||
-rw-r--r-- | components/script/dom/document.rs | 33 | ||||
-rw-r--r-- | components/script/dom/globalscope.rs | 11 | ||||
-rw-r--r-- | components/script/dom/history.rs | 10 | ||||
-rw-r--r-- | components/script/dom/htmlformelement.rs | 3 | ||||
-rw-r--r-- | components/script/dom/htmliframeelement.rs | 5 | ||||
-rw-r--r-- | components/script/dom/htmllinkelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmlscriptelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/request.rs | 2 | ||||
-rw-r--r-- | components/script/dom/serviceworkercontainer.rs | 7 | ||||
-rw-r--r-- | components/script/dom/serviceworkerregistration.rs | 4 | ||||
-rw-r--r-- | components/script/dom/storage.rs | 2 | ||||
-rw-r--r-- | components/script/dom/window.rs | 51 | ||||
-rw-r--r-- | components/script/dom/worker.rs | 6 | ||||
-rw-r--r-- | components/script/dom/workerglobalscope.rs | 14 | ||||
-rw-r--r-- | components/script/dom/xmlhttprequest.rs | 9 |
18 files changed, 98 insertions, 81 deletions
diff --git a/components/script/dom/bindings/global.rs b/components/script/dom/bindings/global.rs index 11fb22a1684..0dbbba2c376 100644 --- a/components/script/dom/bindings/global.rs +++ b/components/script/dom/bindings/global.rs @@ -23,7 +23,6 @@ use js::jsapi::{HandleValue, JS_GetClass, JSAutoCompartment, JSContext}; use js::jsapi::{JSObject, MutableHandleValue}; use js::rust::CompileOptionsWrapper; use libc; -use msg::constellation_msg::PipelineId; use net_traits::{CoreResourceThread, IpcSend, ResourceThreads}; use profile_traits::time; use script_runtime::{CommonScriptMsg, EnqueuedPromiseCallback, ScriptChan}; @@ -80,14 +79,6 @@ impl<'a> GlobalRef<'a> { } } - /// Get the `PipelineId` for this global scope. - pub fn pipeline_id(&self) -> PipelineId { - match *self { - GlobalRef::Window(window) => window.pipeline_id(), - GlobalRef::Worker(worker) => worker.pipeline_id(), - } - } - /// Get the `ResourceThreads` for this global scope. pub fn resource_threads(&self) -> ResourceThreads { match *self { diff --git a/components/script/dom/browsingcontext.rs b/components/script/dom/browsingcontext.rs index 9f867157fab..2ea6a1b78bd 100644 --- a/components/script/dom/browsingcontext.rs +++ b/components/script/dom/browsingcontext.rs @@ -4,6 +4,7 @@ use dom::bindings::cell::DOMRefCell; use dom::bindings::conversions::{ToJSValConvertible, root_from_handleobject}; +use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, MutNullableHeap, Root, RootedReference}; use dom::bindings::proxyhandler::{fill_property_descriptor, get_property_descriptor}; use dom::bindings::reflector::{Reflectable, MutReflectable, Reflector}; @@ -12,6 +13,7 @@ use dom::bindings::utils::WindowProxyHandler; use dom::bindings::utils::get_array_index_from_id; use dom::document::Document; use dom::element::Element; +use dom::globalscope::GlobalScope; use dom::window::Window; use js::JSCLASS_IS_GLOBAL; use js::glue::{CreateWrapperProxyHandler, ProxyTraps, NewWindowProxy}; @@ -150,7 +152,7 @@ impl BrowsingContext { pub fn find_child_by_id(&self, pipeline_id: PipelineId) -> Option<Root<Window>> { self.children.borrow().iter().find(|context| { let window = context.active_window(); - window.pipeline_id() == pipeline_id + window.upcast::<GlobalScope>().pipeline_id() == pipeline_id }).map(|context| context.active_window()) } diff --git a/components/script/dom/console.rs b/components/script/dom/console.rs index d9660296e05..a33a40d7dfc 100644 --- a/components/script/dom/console.rs +++ b/components/script/dom/console.rs @@ -11,7 +11,8 @@ pub struct Console(()); impl Console { fn send_to_devtools(global: GlobalRef, level: LogLevel, message: DOMString) { - if let Some(chan) = global.as_global_scope().devtools_chan() { + let global_scope = global.as_global_scope(); + if let Some(chan) = global_scope.devtools_chan() { let console_message = prepare_message(level, message); let worker_id = if let GlobalRef::Worker(worker) = global { Some(worker.get_worker_id()) @@ -19,7 +20,7 @@ impl Console { None }; let devtools_message = ScriptToDevtoolsControlMsg::ConsoleAPI( - global.pipeline_id(), + global_scope.pipeline_id(), console_message, worker_id); chan.send(devtools_message).unwrap(); diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index ec109e82240..da7b895a4f3 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -651,8 +651,9 @@ impl Document { // Update the focus state for all elements in the focus chain. // https://html.spec.whatwg.org/multipage/#focus-chain if focus_type == FocusType::Element { - let event = ConstellationMsg::Focus(self.window.pipeline_id()); - self.window.upcast::<GlobalScope>().constellation_chan().send(event).unwrap(); + let global_scope = self.window.upcast::<GlobalScope>(); + let event = ConstellationMsg::Focus(global_scope.pipeline_id()); + global_scope.constellation_chan().send(event).unwrap(); } } } @@ -670,9 +671,10 @@ impl Document { /// Sends this document's title to the compositor. pub fn send_title_to_compositor(&self) { let window = self.window(); - window.upcast::<GlobalScope>() + let global_scope = window.upcast::<GlobalScope>(); + global_scope .constellation_chan() - .send(ConstellationMsg::SetTitle(window.pipeline_id(), + .send(ConstellationMsg::SetTitle(global_scope.pipeline_id(), Some(String::from(self.Title())))) .unwrap(); } @@ -1358,10 +1360,11 @@ impl Document { pub fn trigger_mozbrowser_event(&self, event: MozBrowserEvent) { if PREFS.is_mozbrowser_enabled() { if let Some((parent_pipeline_id, _)) = self.window.parent_info() { + let global_scope = self.window.upcast::<GlobalScope>(); let event = ConstellationMsg::MozBrowserEvent(parent_pipeline_id, - Some(self.window.pipeline_id()), + Some(global_scope.pipeline_id()), event); - self.window.upcast::<GlobalScope>().constellation_chan().send(event).unwrap(); + global_scope.constellation_chan().send(event).unwrap(); } } } @@ -1381,10 +1384,11 @@ impl Document { // // TODO: Should tick animation only when document is visible if !self.running_animation_callbacks.get() { + let global_scope = self.window.upcast::<GlobalScope>(); let event = ConstellationMsg::ChangeRunningAnimationsState( - self.window.pipeline_id(), + global_scope.pipeline_id(), AnimationState::AnimationCallbacksPresent); - self.window.upcast::<GlobalScope>().constellation_chan().send(event).unwrap(); + global_scope.constellation_chan().send(event).unwrap(); } ident @@ -1420,9 +1424,10 @@ impl Document { if self.animation_frame_list.borrow().is_empty() { mem::swap(&mut *self.animation_frame_list.borrow_mut(), &mut animation_frame_list); - let event = ConstellationMsg::ChangeRunningAnimationsState(self.window.pipeline_id(), + let global_scope = self.window.upcast::<GlobalScope>(); + let event = ConstellationMsg::ChangeRunningAnimationsState(global_scope.pipeline_id(), AnimationState::NoAnimationCallbacksPresent); - self.window.upcast::<GlobalScope>().constellation_chan().send(event).unwrap(); + global_scope.constellation_chan().send(event).unwrap(); } self.running_animation_callbacks.set(false); @@ -1480,7 +1485,8 @@ impl Document { let loader = self.loader.borrow(); if !loader.is_blocked() && !loader.events_inhibited() { let win = self.window(); - let msg = MainThreadScriptMsg::DocumentLoadsComplete(win.pipeline_id()); + let msg = MainThreadScriptMsg::DocumentLoadsComplete( + win.upcast::<GlobalScope>().pipeline_id()); win.main_thread_script_chan().send(msg).unwrap(); } } @@ -1578,9 +1584,10 @@ impl Document { } pub fn notify_constellation_load(&self) { - let pipeline_id = self.window.pipeline_id(); + let global_scope = self.window.upcast::<GlobalScope>(); + let pipeline_id = global_scope.pipeline_id(); let load_event = ConstellationMsg::LoadComplete(pipeline_id); - self.window.upcast::<GlobalScope>().constellation_chan().send(load_event).unwrap(); + global_scope.constellation_chan().send(load_event).unwrap(); } pub fn set_current_parser(&self, script: Option<ParserRef>) { diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs index 94522928b3f..b455536ed1c 100644 --- a/components/script/dom/globalscope.rs +++ b/components/script/dom/globalscope.rs @@ -11,6 +11,7 @@ use dom::crypto::Crypto; use dom::eventtarget::EventTarget; use ipc_channel::ipc::IpcSender; use js::jsapi::{JS_GetContext, JS_GetObjectRuntime, JSContext}; +use msg::constellation_msg::PipelineId; use profile_traits::{mem, time}; use script_traits::{ScriptMsg as ConstellationMsg, TimerEventRequest}; use std::cell::Cell; @@ -24,6 +25,9 @@ pub struct GlobalScope { crypto: MutNullableHeap<JS<Crypto>>, next_worker_id: Cell<WorkerId>, + /// Pipeline id associated with this global. + pipeline_id: PipelineId, + /// A flag to indicate whether the developer tools has requested /// live updates from the worker. devtools_wants_updates: Cell<bool>, @@ -53,6 +57,7 @@ pub struct GlobalScope { impl GlobalScope { pub fn new_inherited( + pipeline_id: PipelineId, devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>, mem_profiler_chan: mem::ProfilerChan, time_profiler_chan: time::ProfilerChan, @@ -63,6 +68,7 @@ impl GlobalScope { eventtarget: EventTarget::new_inherited(), crypto: Default::default(), next_worker_id: Cell::new(WorkerId(0)), + pipeline_id: pipeline_id, devtools_wants_updates: Default::default(), console_timers: DOMRefCell::new(Default::default()), devtools_chan: devtools_chan, @@ -149,6 +155,11 @@ impl GlobalScope { pub fn scheduler_chan(&self) -> &IpcSender<TimerEventRequest> { &self.scheduler_chan } + + /// Get the `PipelineId` for this global scope. + pub fn pipeline_id(&self) -> PipelineId { + self.pipeline_id + } } fn timestamp_in_ms(time: Timespec) -> u64 { diff --git a/components/script/dom/history.rs b/components/script/dom/history.rs index 23dc3951e42..1a971eae009 100644 --- a/components/script/dom/history.rs +++ b/components/script/dom/history.rs @@ -39,19 +39,21 @@ impl History { impl History { fn traverse_history(&self, direction: TraversalDirection) { - let pipeline = self.window.pipeline_id(); + let global_scope = self.window.upcast::<GlobalScope>(); + let pipeline = global_scope.pipeline_id(); let msg = ConstellationMsg::TraverseHistory(Some(pipeline), direction); - let _ = self.window.upcast::<GlobalScope>().constellation_chan().send(msg); + let _ = global_scope.constellation_chan().send(msg); } } impl HistoryMethods for History { // https://html.spec.whatwg.org/multipage/#dom-history-length fn Length(&self) -> u32 { - let pipeline = self.window.pipeline_id(); + let global_scope = self.window.upcast::<GlobalScope>(); + let pipeline = global_scope.pipeline_id(); let (sender, recv) = ipc::channel().expect("Failed to create channel to send jsh length."); let msg = ConstellationMsg::JointSessionHistoryLength(pipeline, sender); - let _ = self.window.upcast::<GlobalScope>().constellation_chan().send(msg); + let _ = global_scope.constellation_chan().send(msg); recv.recv().unwrap() } diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index 8759fbafe5e..58454eed0dc 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -24,6 +24,7 @@ use dom::element::Element; use dom::event::{EventBubbles, EventCancelable}; use dom::eventtarget::EventTarget; use dom::file::File; +use dom::globalscope::GlobalScope; use dom::htmlbuttonelement::HTMLButtonElement; use dom::htmlcollection::CollectionFilter; use dom::htmldatalistelement::HTMLDataListElement; @@ -436,7 +437,7 @@ impl HTMLFormElement { // Step 2 let nav = box PlannedNavigation { load_data: load_data, - pipeline_id: window.pipeline_id(), + pipeline_id: window.upcast::<GlobalScope>().pipeline_id(), script_chan: window.main_thread_script_chan().clone(), generation_id: self.generation_id.get(), form: Trusted::new(self) diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index 355c825429d..75d828e73c9 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -126,9 +126,10 @@ impl HTMLIFrameElement { let private_iframe = self.privatebrowsing(); let frame_type = if self.Mozbrowser() { FrameType::MozBrowserIFrame } else { FrameType::IFrame }; + let global_scope = window.upcast::<GlobalScope>(); let load_info = IFrameLoadInfo { load_data: load_data, - parent_pipeline_id: window.pipeline_id(), + parent_pipeline_id: global_scope.pipeline_id(), old_pipeline_id: old_pipeline_id, new_pipeline_id: new_pipeline_id, sandbox: sandboxed, @@ -136,7 +137,7 @@ impl HTMLIFrameElement { frame_type: frame_type, replace: replace, }; - window.upcast::<GlobalScope>() + global_scope .constellation_chan() .send(ConstellationMsg::ScriptLoadedURLInIFrame(load_info)) .unwrap(); diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index f3797469ea4..f74946ba841 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -267,7 +267,7 @@ impl HTMLLinkElement { credentials_mode: CredentialsMode::Include, use_url_credentials: true, origin: document.url().clone(), - pipeline_id: Some(self.global().r().pipeline_id()), + pipeline_id: Some(self.global().r().as_global_scope().pipeline_id()), referrer_url: Some(document.url().clone()), referrer_policy: referrer_policy, .. RequestInit::default() diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index 7f5266b9e84..4cf7e2df59c 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -242,7 +242,7 @@ fn fetch_a_classic_script(script: &HTMLScriptElement, _ => CredentialsMode::Include, }, origin: doc.url().clone(), - pipeline_id: Some(script.global().r().pipeline_id()), + pipeline_id: Some(script.global().r().as_global_scope().pipeline_id()), referrer_url: Some(doc.url().clone()), referrer_policy: doc.get_referrer_policy(), .. RequestInit::default() diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 1496f16d353..4a9343b76b4 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -451,7 +451,7 @@ fn net_request_from_global(global: GlobalRef, url: Url, is_service_worker_global_scope: bool) -> NetTraitsRequest { let origin = Origin::Origin(global.get_url().origin()); - let pipeline_id = global.pipeline_id(); + let pipeline_id = global.as_global_scope().pipeline_id(); NetTraitsRequest::new(url, Some(origin), is_service_worker_global_scope, diff --git a/components/script/dom/serviceworkercontainer.rs b/components/script/dom/serviceworkercontainer.rs index 3d9202accf4..993241445d5 100644 --- a/components/script/dom/serviceworkercontainer.rs +++ b/components/script/dom/serviceworkercontainer.rs @@ -95,11 +95,14 @@ impl ServiceWorkerContainerMethods for ServiceWorkerContainer { return Err(Error::Type("Scope URL contains forbidden characters".to_owned())); } - let worker_registration = ServiceWorkerRegistration::new(self.global().r().as_global_scope(), + let global = self.global(); + let global = global.r(); + let global_scope = global.as_global_scope(); + let worker_registration = ServiceWorkerRegistration::new(global_scope, script_url, scope.clone(), self); - ScriptThread::set_registration(scope, &*worker_registration, self.global().r().pipeline_id()); + ScriptThread::set_registration(scope, &*worker_registration, global_scope.pipeline_id()); Ok(worker_registration) } } diff --git a/components/script/dom/serviceworkerregistration.rs b/components/script/dom/serviceworkerregistration.rs index 09c23570243..87226207266 100644 --- a/components/script/dom/serviceworkerregistration.rs +++ b/components/script/dom/serviceworkerregistration.rs @@ -51,13 +51,13 @@ impl ServiceWorkerRegistration { } pub fn create_scope_things(global: GlobalRef, script_url: Url) -> ScopeThings { + let global_scope = global.as_global_scope(); let worker_load_origin = WorkerScriptLoadOrigin { referrer_url: None, referrer_policy: None, - pipeline_id: Some(global.pipeline_id()) + pipeline_id: Some(global_scope.pipeline_id()) }; - let global_scope = global.as_global_scope(); let worker_id = global_scope.get_next_worker_id(); let devtools_chan = global_scope.devtools_chan().cloned(); let init = prepare_workerscope_init(global, None); diff --git a/components/script/dom/storage.rs b/components/script/dom/storage.rs index 986cd8edcbe..30afd8719c4 100644 --- a/components/script/dom/storage.rs +++ b/components/script/dom/storage.rs @@ -206,7 +206,7 @@ impl Runnable for StorageEventRunnable { assert!(UrlHelper::SameOrigin(&ev_url, &it_window.get_url())); // TODO: Such a Document object is not necessarily fully active, but events fired on such // objects are ignored by the event loop until the Document becomes fully active again. - if ev_window.pipeline_id() != it_window.pipeline_id() { + if ev_window.upcast::<GlobalScope>().pipeline_id() != it_window.upcast::<GlobalScope>().pipeline_id() { storage_event.upcast::<Event>().fire(it_window.upcast()); } } diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 34c93fda495..d560efa0746 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -181,9 +181,6 @@ pub struct Window { /// Pending resize event, if any. resize_event: Cell<Option<(WindowSizeData, WindowSizeType)>>, - /// Pipeline id associated with this page. - id: PipelineId, - /// Parent id associated with this page, if any. parent_info: Option<(PipelineId, FrameType)>, @@ -293,10 +290,6 @@ impl Window { self.image_cache_chan.clone() } - pub fn pipeline_id(&self) -> PipelineId { - self.id - } - pub fn parent_info(&self) -> Option<(PipelineId, FrameType)> { self.parent_info } @@ -430,9 +423,10 @@ impl WindowMethods for Window { } let (sender, receiver) = ipc::channel().unwrap(); - self.upcast::<GlobalScope>() + let global_scope = self.upcast::<GlobalScope>(); + global_scope .constellation_chan() - .send(ConstellationMsg::Alert(self.pipeline_id(), s.to_string(), sender)) + .send(ConstellationMsg::Alert(global_scope.pipeline_id(), s.to_string(), sender)) .unwrap(); let should_display_alert_dialog = receiver.recv().unwrap(); @@ -443,7 +437,9 @@ impl WindowMethods for Window { // https://html.spec.whatwg.org/multipage/#dom-window-close fn Close(&self) { - self.main_thread_script_chan().send(MainThreadScriptMsg::ExitWindow(self.id.clone())).unwrap(); + self.main_thread_script_chan() + .send(MainThreadScriptMsg::ExitWindow(self.upcast::<GlobalScope>().pipeline_id())) + .unwrap(); } // https://html.spec.whatwg.org/multipage/#dom-document-2 @@ -493,7 +489,7 @@ impl WindowMethods for Window { args, timeout, IsInterval::NonInterval, - TimerSource::FromWindow(self.id.clone())) + TimerSource::FromWindow(self.upcast::<GlobalScope>().pipeline_id())) } // https://html.spec.whatwg.org/multipage/#dom-windowtimers-settimeout @@ -503,7 +499,7 @@ impl WindowMethods for Window { args, timeout, IsInterval::NonInterval, - TimerSource::FromWindow(self.id.clone())) + TimerSource::FromWindow(self.upcast::<GlobalScope>().pipeline_id())) } // https://html.spec.whatwg.org/multipage/#dom-windowtimers-cleartimeout @@ -518,7 +514,7 @@ impl WindowMethods for Window { args, timeout, IsInterval::Interval, - TimerSource::FromWindow(self.id.clone())) + TimerSource::FromWindow(self.upcast::<GlobalScope>().pipeline_id())) } // https://html.spec.whatwg.org/multipage/#dom-windowtimers-setinterval @@ -528,7 +524,7 @@ impl WindowMethods for Window { args, timeout, IsInterval::Interval, - TimerSource::FromWindow(self.id.clone())) + TimerSource::FromWindow(self.upcast::<GlobalScope>().pipeline_id())) } // https://html.spec.whatwg.org/multipage/#dom-windowtimers-clearinterval @@ -976,8 +972,10 @@ impl Window { // TODO (farodin91): Raise an event to stop the current_viewport self.update_viewport_for_scroll(x, y); - let message = ConstellationMsg::ScrollFragmentPoint(self.pipeline_id(), layer_id, point, smooth); - self.upcast::<GlobalScope>().constellation_chan().send(message).unwrap(); + let global_scope = self.upcast::<GlobalScope>(); + let message = ConstellationMsg::ScrollFragmentPoint( + global_scope.pipeline_id(), layer_id, point, smooth); + global_scope.constellation_chan().send(message).unwrap(); } pub fn update_viewport_for_scroll(&self, x: f32, y: f32) { @@ -1032,7 +1030,7 @@ impl Window { let for_display = query_type == ReflowQueryType::NoQuery; if for_display && self.suppress_reflow.get() { debug!("Suppressing reflow pipeline {} for goal {:?} reason {:?} before FirstLoad or RefreshTick", - self.id, goal, reason); + self.upcast::<GlobalScope>().pipeline_id(), goal, reason); return false; } @@ -1049,7 +1047,7 @@ impl Window { // On debug mode, print the reflow event information. if opts::get().relayout_event { - debug_reflow_events(self.id, &goal, &query_type, &reason); + debug_reflow_events(self.upcast::<GlobalScope>().pipeline_id(), &goal, &query_type, &reason); } let document = self.Document(); @@ -1154,8 +1152,9 @@ impl Window { let ready_state = document.ReadyState(); if ready_state == DocumentReadyState::Complete && !reftest_wait { - let event = ConstellationMsg::SetDocumentState(self.id, DocumentState::Idle); - self.upcast::<GlobalScope>().constellation_chan().send(event).unwrap(); + let global_scope = self.upcast::<GlobalScope>(); + let event = ConstellationMsg::SetDocumentState(global_scope.pipeline_id(), DocumentState::Idle); + global_scope.constellation_chan().send(event).unwrap(); } } @@ -1264,12 +1263,12 @@ impl Window { } let layer_id = self.layout_rpc.node_layer_id().layer_id; - let pipeline_id = self.id; let (send, recv) = ipc::channel::<Point2D<f32>>().unwrap(); - self.upcast::<GlobalScope>() + let global_scope = self.upcast::<GlobalScope>(); + global_scope .constellation_chan() - .send(ConstellationMsg::GetScrollOffset(pipeline_id, layer_id, send)) + .send(ConstellationMsg::GetScrollOffset(global_scope.pipeline_id(), layer_id, send)) .unwrap(); recv.recv().unwrap_or(Point2D::zero()) } @@ -1345,7 +1344,7 @@ impl Window { let referrer_policy = referrer_policy.or(doc.get_referrer_policy()); self.main_thread_script_chan().send( - MainThreadScriptMsg::Navigate(self.id, + MainThreadScriptMsg::Navigate(self.upcast::<GlobalScope>().pipeline_id(), LoadData::new(url, referrer_policy, Some(doc.url().clone())), replace)).unwrap(); } @@ -1388,7 +1387,7 @@ impl Window { pub fn schedule_callback(&self, callback: OneshotTimerCallback, duration: MsDuration) -> OneshotTimerHandle { self.timers.schedule_callback(callback, duration, - TimerSource::FromWindow(self.id.clone())) + TimerSource::FromWindow(self.upcast::<GlobalScope>().pipeline_id())) } pub fn unschedule_callback(&self, handle: OneshotTimerHandle) { @@ -1588,6 +1587,7 @@ impl Window { let win = box Window { globalscope: GlobalScope::new_inherited( + id, devtools_chan, mem_profiler_chan, time_profiler_chan, @@ -1612,7 +1612,6 @@ impl Window { local_storage: Default::default(), status: DOMRefCell::new(DOMString::new()), timers: OneshotTimers::new(timer_event_chan, scheduler_chan), - id: id, parent_info: parent_info, dom_static: GlobalStaticData::new(), js_runtime: DOMRefCell::new(Some(runtime.clone())), diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs index 067b564d595..772cb5edc10 100644 --- a/components/script/dom/worker.rs +++ b/components/script/dom/worker.rs @@ -84,17 +84,17 @@ impl Worker { let worker = Worker::new(global.as_global_scope(), sender.clone(), closing.clone()); let worker_ref = Trusted::new(worker.r()); + let global_scope = global.as_global_scope(); let worker_load_origin = WorkerScriptLoadOrigin { referrer_url: None, referrer_policy: None, - pipeline_id: Some(global.pipeline_id()), + pipeline_id: Some(global_scope.pipeline_id()), }; let (devtools_sender, devtools_receiver) = ipc::channel().unwrap(); - let global_scope = global.as_global_scope(); let worker_id = global_scope.get_next_worker_id(); if let Some(ref chan) = global_scope.devtools_chan() { - let pipeline_id = global.pipeline_id(); + let pipeline_id = global_scope.pipeline_id(); let title = format!("Worker for {}", worker_url); let page_info = DevtoolsPageInfo { title: title, diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 9590e11409d..55326f20277 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -60,6 +60,7 @@ pub fn prepare_workerscope_init(global: GlobalRef, let time_profiler_chan = global_scope.time_profiler_chan().clone(); let constellation_chan = global_scope.constellation_chan().clone(); let scheduler_chan = global_scope.scheduler_chan().clone(); + let pipeline_id = global_scope.pipeline_id(); let init = WorkerGlobalScopeInit { resource_threads: global.resource_threads(), mem_profiler_chan: mem_profiler_chan, @@ -69,7 +70,7 @@ pub fn prepare_workerscope_init(global: GlobalRef, constellation_chan: constellation_chan, scheduler_chan: scheduler_chan, worker_id: worker_id, - pipeline_id: global.pipeline_id(), + pipeline_id: pipeline_id, }; init @@ -81,7 +82,6 @@ pub struct WorkerGlobalScope { globalscope: GlobalScope, worker_id: WorkerId, - pipeline_id: PipelineId, worker_url: Url, #[ignore_heap_size_of = "Arc"] closing: Option<Arc<AtomicBool>>, @@ -120,13 +120,13 @@ impl WorkerGlobalScope { WorkerGlobalScope { globalscope: GlobalScope::new_inherited( + init.pipeline_id, init.to_devtools_sender, init.mem_profiler_chan, init.time_profiler_chan, init.constellation_chan, init.scheduler_chan.clone()), worker_id: init.worker_id, - pipeline_id: init.pipeline_id, worker_url: worker_url, closing: closing, runtime: runtime, @@ -207,7 +207,7 @@ impl WorkerGlobalScope { fn do_flush_promise_jobs(&self) { self.promise_job_queue.flush_promise_jobs(|id| { - assert_eq!(self.pipeline_id(), id); + assert_eq!(self.upcast::<GlobalScope>().pipeline_id(), id); Some(GlobalRoot::Worker(Root::from_ref(self))) }); } @@ -221,7 +221,7 @@ impl LoadOrigin for WorkerGlobalScope { None } fn pipeline_id(&self) -> Option<PipelineId> { - Some(self.pipeline_id()) + Some(self.upcast::<GlobalScope>().pipeline_id()) } } @@ -401,10 +401,6 @@ impl WorkerGlobalScope { FileReadingTaskSource(self.script_chan()) } - pub fn pipeline_id(&self) -> PipelineId { - self.pipeline_id - } - pub fn new_script_pair(&self) -> (Box<ScriptChan + Send>, Box<ScriptPort + Send>) { let dedicated = self.downcast::<DedicatedWorkerGlobalScope>(); if let Some(dedicated) = dedicated { diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 4c9397db566..0cf5381767d 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -284,7 +284,7 @@ impl LoadOrigin for XMLHttpRequest { fn pipeline_id(&self) -> Option<PipelineId> { let global = self.global(); - Some(global.r().pipeline_id()) + Some(global.r().as_global_scope().pipeline_id()) } } @@ -1208,7 +1208,10 @@ impl XMLHttpRequest { let decoded = charset.decode(&self.response.borrow(), DecoderTrap::Replace).unwrap(); let document = self.new_doc(IsHTMLDocument::HTMLDocument); // TODO: Disable scripting while parsing - parse_html(document.r(), DOMString::from(decoded), wr.get_url(), ParseContext::Owner(Some(wr.pipeline_id()))); + parse_html(document.r(), + DOMString::from(decoded), + wr.get_url(), + ParseContext::Owner(Some(wr.as_global_scope().pipeline_id()))); document } @@ -1222,7 +1225,7 @@ impl XMLHttpRequest { parse_xml(document.r(), DOMString::from(decoded), wr.get_url(), - xml::ParseContext::Owner(Some(wr.pipeline_id()))); + xml::ParseContext::Owner(Some(wr.as_global_scope().pipeline_id()))); document } |