diff options
Diffstat (limited to 'components/script/script_thread.rs')
-rw-r--r-- | components/script/script_thread.rs | 117 |
1 files changed, 59 insertions, 58 deletions
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 5907490dd05..1f4a82ec02d 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -229,14 +229,15 @@ pub enum ScriptThreadEventCategory { DocumentEvent, DomEvent, FileRead, + FormPlannedNavigation, ImageCacheMsg, InputEvent, NetworkEvent, Resize, ScriptEvent, - TimerEvent, SetViewport, StylesheetLoad, + TimerEvent, UpdateReplacedElement, WebSocketEvent, WorkerEvent, @@ -357,87 +358,87 @@ impl MainThreadScriptChan { } } -// FIXME: Use a thread source specific message instead of MainThreadScriptMsg +// FIXME: Use a task source specific message instead of MainThreadScriptMsg #[derive(JSTraceable)] -pub struct DOMManipulationThreadSource(pub Sender<MainThreadScriptMsg>); +pub struct DOMManipulationTaskSource(pub Sender<MainThreadScriptMsg>); -impl ScriptChan for DOMManipulationThreadSource { +impl ScriptChan for DOMManipulationTaskSource { fn send(&self, msg: CommonScriptMsg) -> Result<(), ()> { - let DOMManipulationThreadSource(ref chan) = *self; + let DOMManipulationTaskSource(ref chan) = *self; chan.send(MainThreadScriptMsg::Common(msg)).map_err(|_| ()) } fn clone(&self) -> Box<ScriptChan + Send> { - let DOMManipulationThreadSource(ref chan) = *self; - box DOMManipulationThreadSource((*chan).clone()) + let DOMManipulationTaskSource(ref chan) = *self; + box DOMManipulationTaskSource((*chan).clone()) } } -// FIXME: Use a thread source specific message instead of MainThreadScriptMsg +// FIXME: Use a task source specific message instead of MainThreadScriptMsg #[derive(JSTraceable)] -pub struct UserInteractionThreadSource(pub Sender<MainThreadScriptMsg>); +pub struct UserInteractionTaskSource(pub Sender<MainThreadScriptMsg>); -impl ScriptChan for UserInteractionThreadSource { +impl ScriptChan for UserInteractionTaskSource { fn send(&self, msg: CommonScriptMsg) -> Result<(), ()> { - let UserInteractionThreadSource(ref chan) = *self; + let UserInteractionTaskSource(ref chan) = *self; chan.send(MainThreadScriptMsg::Common(msg)).map_err(|_| ()) } fn clone(&self) -> Box<ScriptChan + Send> { - let UserInteractionThreadSource(ref chan) = *self; - box UserInteractionThreadSource((*chan).clone()) + let UserInteractionTaskSource(ref chan) = *self; + box UserInteractionTaskSource((*chan).clone()) } } -// FIXME: Use a thread source specific message instead of MainThreadScriptMsg +// FIXME: Use a task source specific message instead of MainThreadScriptMsg #[derive(JSTraceable)] -pub struct NetworkingThreadSource(pub Sender<MainThreadScriptMsg>); +pub struct NetworkingTaskSource(pub Sender<MainThreadScriptMsg>); -impl ScriptChan for NetworkingThreadSource { +impl ScriptChan for NetworkingTaskSource { fn send(&self, msg: CommonScriptMsg) -> Result<(), ()> { - let NetworkingThreadSource(ref chan) = *self; + let NetworkingTaskSource(ref chan) = *self; chan.send(MainThreadScriptMsg::Common(msg)).map_err(|_| ()) } fn clone(&self) -> Box<ScriptChan + Send> { - let NetworkingThreadSource(ref chan) = *self; - box NetworkingThreadSource((*chan).clone()) + let NetworkingTaskSource(ref chan) = *self; + box NetworkingTaskSource((*chan).clone()) } } -// FIXME: Use a thread source specific message instead of MainThreadScriptMsg +// FIXME: Use a task source specific message instead of MainThreadScriptMsg #[derive(JSTraceable)] -pub struct HistoryTraversalThreadSource(pub Sender<MainThreadScriptMsg>); +pub struct HistoryTraversalTaskSource(pub Sender<MainThreadScriptMsg>); -impl ScriptChan for HistoryTraversalThreadSource { +impl ScriptChan for HistoryTraversalTaskSource { fn send(&self, msg: CommonScriptMsg) -> Result<(), ()> { - let HistoryTraversalThreadSource(ref chan) = *self; + let HistoryTraversalTaskSource(ref chan) = *self; chan.send(MainThreadScriptMsg::Common(msg)).map_err(|_| ()) } fn clone(&self) -> Box<ScriptChan + Send> { - let HistoryTraversalThreadSource(ref chan) = *self; - box HistoryTraversalThreadSource((*chan).clone()) + let HistoryTraversalTaskSource(ref chan) = *self; + box HistoryTraversalTaskSource((*chan).clone()) } } -// FIXME: Use a thread source specific message instead of MainThreadScriptMsg +// FIXME: Use a task source specific message instead of MainThreadScriptMsg #[derive(JSTraceable)] -pub struct FileReadingThreadSource(pub Sender<MainThreadScriptMsg>); +pub struct FileReadingTaskSource(pub Sender<MainThreadScriptMsg>); -impl ScriptChan for FileReadingThreadSource { +impl ScriptChan for FileReadingTaskSource { fn send(&self, msg: CommonScriptMsg) -> Result<(), ()> { - let FileReadingThreadSource(ref chan) = *self; + let FileReadingTaskSource(ref chan) = *self; chan.send(MainThreadScriptMsg::Common(msg)).map_err(|_| ()) } fn clone(&self) -> Box<ScriptChan + Send> { - let FileReadingThreadSource(ref chan) = *self; - box FileReadingThreadSource((*chan).clone()) + let FileReadingTaskSource(ref chan) = *self; + box FileReadingTaskSource((*chan).clone()) } } -// FIXME: Use a thread source specific message instead of MainThreadScriptMsg +// FIXME: Use a task source specific message instead of MainThreadScriptMsg #[derive(JSTraceable)] pub struct ProfilerThreadSource(pub Sender<MainThreadScriptMsg>); @@ -494,15 +495,15 @@ pub struct ScriptThread { /// A channel to hand out to script thread-based entities that need to be able to enqueue /// events in the event queue. chan: MainThreadScriptChan, - dom_manipulation_thread_source: DOMManipulationThreadSource, + dom_manipulation_task_source: DOMManipulationTaskSource, - user_interaction_thread_source: UserInteractionThreadSource, + user_interaction_task_source: UserInteractionTaskSource, - networking_thread_source: NetworkingThreadSource, + networking_task_source: NetworkingTaskSource, - history_traversal_thread_source: HistoryTraversalThreadSource, + history_traversal_task_source: HistoryTraversalTaskSource, - file_reading_thread_source: FileReadingThreadSource, + file_reading_task_source: FileReadingTaskSource, /// A channel to hand out to threads that need to respond to a message from the script thread. control_chan: IpcSender<ConstellationControlMsg>, @@ -769,11 +770,11 @@ impl ScriptThread { port: port, chan: MainThreadScriptChan(chan.clone()), - dom_manipulation_thread_source: DOMManipulationThreadSource(chan.clone()), - user_interaction_thread_source: UserInteractionThreadSource(chan.clone()), - networking_thread_source: NetworkingThreadSource(chan.clone()), - history_traversal_thread_source: HistoryTraversalThreadSource(chan.clone()), - file_reading_thread_source: FileReadingThreadSource(chan), + dom_manipulation_task_source: DOMManipulationTaskSource(chan.clone()), + user_interaction_task_source: UserInteractionTaskSource(chan.clone()), + networking_task_source: NetworkingTaskSource(chan.clone()), + history_traversal_task_source: HistoryTraversalTaskSource(chan.clone()), + file_reading_task_source: FileReadingTaskSource(chan), control_chan: state.control_chan, control_port: control_port, @@ -1077,6 +1078,7 @@ impl ScriptThread { ScriptThreadEventCategory::DocumentEvent => ProfilerCategory::ScriptDocumentEvent, ScriptThreadEventCategory::DomEvent => ProfilerCategory::ScriptDomEvent, ScriptThreadEventCategory::FileRead => ProfilerCategory::ScriptFileRead, + ScriptThreadEventCategory::FormPlannedNavigation => ProfilerCategory::ScriptPlannedNavigation, ScriptThreadEventCategory::ImageCacheMsg => ProfilerCategory::ScriptImageCacheMsg, ScriptThreadEventCategory::InputEvent => ProfilerCategory::ScriptInputEvent, ScriptThreadEventCategory::NetworkEvent => ProfilerCategory::ScriptNetworkEvent, @@ -1759,11 +1761,11 @@ impl ScriptThread { }; let mut page_remover = AutoPageRemover::new(self, page_to_remove); let MainThreadScriptChan(ref sender) = self.chan; - let DOMManipulationThreadSource(ref dom_sender) = self.dom_manipulation_thread_source; - let UserInteractionThreadSource(ref user_sender) = self.user_interaction_thread_source; - let NetworkingThreadSource(ref network_sender) = self.networking_thread_source; - let HistoryTraversalThreadSource(ref history_sender) = self.history_traversal_thread_source; - let FileReadingThreadSource(ref file_sender) = self.file_reading_thread_source; + let DOMManipulationTaskSource(ref dom_sender) = self.dom_manipulation_task_source; + let UserInteractionTaskSource(ref user_sender) = self.user_interaction_task_source; + let NetworkingTaskSource(ref network_sender) = self.networking_task_source; + let HistoryTraversalTaskSource(ref history_sender) = self.history_traversal_task_source; + let FileReadingTaskSource(ref file_sender) = self.file_reading_task_source; let (ipc_timer_event_chan, ipc_timer_event_port) = ipc::channel().unwrap(); ROUTER.route_ipc_receiver_to_mpsc_sender(ipc_timer_event_port, @@ -1773,11 +1775,11 @@ impl ScriptThread { let window = Window::new(self.js_runtime.clone(), page.clone(), MainThreadScriptChan(sender.clone()), - DOMManipulationThreadSource(dom_sender.clone()), - UserInteractionThreadSource(user_sender.clone()), - NetworkingThreadSource(network_sender.clone()), - HistoryTraversalThreadSource(history_sender.clone()), - FileReadingThreadSource(file_sender.clone()), + DOMManipulationTaskSource(dom_sender.clone()), + UserInteractionTaskSource(user_sender.clone()), + NetworkingTaskSource(network_sender.clone()), + HistoryTraversalTaskSource(history_sender.clone()), + FileReadingTaskSource(file_sender.clone()), self.image_cache_channel.clone(), self.compositor.borrow_mut().clone(), self.image_cache_thread.clone(), @@ -1786,6 +1788,7 @@ impl ScriptThread { self.mem_profiler_chan.clone(), self.devtools_chan.clone(), self.constellation_chan.clone(), + self.control_chan.clone(), self.scheduler_chan.clone(), ipc_timer_event_chan, incomplete.layout_chan, @@ -1843,6 +1846,9 @@ impl ScriptThread { let ConstellationChan(ref chan) = self.constellation_chan; chan.send(ConstellationMsg::ActivateDocument(incomplete.pipeline_id)).unwrap(); + // Notify devtools that a new script global exists. + self.notify_devtools(document.Title(), final_url.clone(), (page.pipeline(), None)); + let is_javascript = incomplete.url.scheme == "javascript"; let parse_input = if is_javascript { use url::percent_encoding::percent_decode_to; @@ -2202,15 +2208,10 @@ impl ScriptThread { document.process_deferred_scripts(); window.set_fragment_name(final_url.fragment.clone()); - - // Notify devtools that a new script global exists. - //TODO: should this happen as soon as the global is created, or at least once the first - // script runs? - self.notify_devtools(document.Title(), (*final_url).clone(), (id, None)); } fn handle_css_error_reporting(&self, pipeline_id: PipelineId, filename: String, - line: u32, column: u32, msg: String) { + line: usize, column: usize, msg: String) { let parent_page = self.root_page(); let page = match parent_page.find(pipeline_id) { Some(page) => page, |