diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2017-01-17 12:43:09 +0100 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2017-01-17 14:24:37 +0100 |
commit | 70ed3e700693b6faf25d14f564aa2cfa36c49ff8 (patch) | |
tree | 84d8e7dbe28418b7d7bc529b3a6288d63a218074 | |
parent | d29726971a1d44c28c2e93debfed6383757c6082 (diff) | |
download | servo-70ed3e700693b6faf25d14f564aa2cfa36c49ff8.tar.gz servo-70ed3e700693b6faf25d14f564aa2cfa36c49ff8.zip |
Remove ScriptThread::parsing_complete
-rw-r--r-- | components/script/dom/servoparser/mod.rs | 24 | ||||
-rw-r--r-- | components/script/script_thread.rs | 31 |
2 files changed, 18 insertions, 37 deletions
diff --git a/components/script/dom/servoparser/mod.rs b/components/script/dom/servoparser/mod.rs index a6c27804295..69dae25ab35 100644 --- a/components/script/dom/servoparser/mod.rs +++ b/components/script/dom/servoparser/mod.rs @@ -4,7 +4,7 @@ use document_loader::{DocumentLoader, LoadType}; use dom::bindings::cell::DOMRefCell; -use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods; +use dom::bindings::codegen::Bindings::DocumentBinding::{DocumentMethods, DocumentReadyState}; use dom::bindings::codegen::Bindings::HTMLImageElementBinding::HTMLImageElementMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::codegen::Bindings::ServoParserBinding; @@ -20,8 +20,9 @@ use dom::globalscope::GlobalScope; use dom::htmlformelement::HTMLFormElement; use dom::htmlimageelement::HTMLImageElement; use dom::htmlscriptelement::{HTMLScriptElement, ScriptResult}; -use dom::node::{Node, NodeSiblingIterator}; +use dom::node::{Node, NodeDamage, NodeSiblingIterator}; use dom::text::Text; +use dom::window::ReflowReason; use encoding::all::UTF_8; use encoding::types::{DecoderTrap, Encoding}; use html5ever::tokenizer::buffer_queue::BufferQueue; @@ -34,11 +35,13 @@ use net_traits::{FetchMetadata, FetchResponseListener, Metadata, NetworkError}; use network_listener::PreInvoke; use profile_traits::time::{TimerMetadata, TimerMetadataFrameType}; use profile_traits::time::{TimerMetadataReflowType, ProfilerCategory, profile}; +use script_layout_interface::message::ReflowQueryType; use script_thread::ScriptThread; use servo_config::resource_files::read_resource_file; use servo_url::ServoUrl; use std::cell::Cell; use std::mem; +use style::context::ReflowGoal; mod html; mod xml; @@ -333,19 +336,28 @@ impl ServoParser { } } + // https://html.spec.whatwg.org/multipage/#the-end fn finish(&self) { assert!(!self.suspended.get()); assert!(self.last_chunk_received.get()); assert!(self.script_input.borrow().is_empty()); assert!(self.network_input.borrow().is_empty()); + // Step 2. self.tokenizer.borrow_mut().end(); - debug!("finished parsing"); - self.document.set_current_parser(None); - if let Some(pipeline) = self.pipeline { - ScriptThread::parsing_complete(pipeline); + if self.pipeline.is_some() { + // Step 1. + self.document.set_ready_state(DocumentReadyState::Interactive); + + self.document.disarm_reflow_timeout(); + self.document.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage); + let window = self.document.window(); + window.reflow(ReflowGoal::ForDisplay, ReflowQueryType::NoQuery, ReflowReason::FirstLoad); + + // Step 3. + self.document.process_deferred_scripts(); } } } diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 65582571025..58a59e2fd91 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -583,13 +583,6 @@ impl ScriptThread { }); } - pub fn parsing_complete(id: PipelineId) { - SCRIPT_THREAD_ROOT.with(|root| { - let script_thread = unsafe { &*root.get().unwrap() }; - script_thread.handle_parsing_complete(id); - }); - } - pub fn process_event(msg: CommonScriptMsg) { SCRIPT_THREAD_ROOT.with(|root| { if let Some(script_thread) = root.get() { @@ -2163,30 +2156,6 @@ impl ScriptThread { context.process_response_eof(Ok(())); } - fn handle_parsing_complete(&self, id: PipelineId) { - let document = match { self.documents.borrow().find_document(id) } { - Some(document) => document, - None => return, - }; - - let final_url = document.url(); - - // https://html.spec.whatwg.org/multipage/#the-end step 1 - document.set_ready_state(DocumentReadyState::Interactive); - - // TODO: Execute step 2 here. - - // Kick off the initial reflow of the page. - debug!("kicking off initial reflow of {:?}", final_url); - document.disarm_reflow_timeout(); - document.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage); - let window = window_from_node(&*document); - window.reflow(ReflowGoal::ForDisplay, ReflowQueryType::NoQuery, ReflowReason::FirstLoad); - - // https://html.spec.whatwg.org/multipage/#the-end steps 3-4. - document.process_deferred_scripts(); - } - fn handle_css_error_reporting(&self, pipeline_id: PipelineId, filename: String, line: usize, column: usize, msg: String) { let sender = match self.devtools_chan { |