diff options
Diffstat (limited to 'components/script/dom/htmlscriptelement.rs')
-rw-r--r-- | components/script/dom/htmlscriptelement.rs | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index 3b2057e4338..68b65f93142 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -27,13 +27,12 @@ use dom::node::{document_from_node, window_from_node}; use dom::virtualmethods::VirtualMethods; use encoding::label::encoding_from_whatwg_label; use encoding::types::{DecoderTrap, EncodingRef}; -use html5ever::tree_builder::NextParserState; use html5ever_atoms::LocalName; use ipc_channel::ipc; use ipc_channel::router::ROUTER; use js::jsval::UndefinedValue; use net_traits::{FetchMetadata, FetchResponseListener, Metadata, NetworkError}; -use net_traits::request::{CORSSettings, CredentialsMode, Destination, RequestInit, RequestMode, Type as RequestType}; +use net_traits::request::{CorsSettings, CredentialsMode, Destination, RequestInit, RequestMode, Type as RequestType}; use network_listener::{NetworkListener, PreInvoke}; use servo_atoms::Atom; use std::ascii::AsciiExt; @@ -221,7 +220,7 @@ impl PreInvoke for ScriptContext {} /// https://html.spec.whatwg.org/multipage/#fetch-a-classic-script fn fetch_a_classic_script(script: &HTMLScriptElement, url: Url, - cors_setting: Option<CORSSettings>, + cors_setting: Option<CorsSettings>, character_encoding: EncodingRef) { let doc = document_from_node(script); @@ -233,13 +232,13 @@ fn fetch_a_classic_script(script: &HTMLScriptElement, // https://html.spec.whatwg.org/multipage/#create-a-potential-cors-request // Step 1 mode: match cors_setting { - Some(_) => RequestMode::CORSMode, - None => RequestMode::NoCORS, + Some(_) => RequestMode::CorsMode, + None => RequestMode::NoCors, }, // https://html.spec.whatwg.org/multipage/#create-a-potential-cors-request // Step 3-4 credentials_mode: match cors_setting { - Some(CORSSettings::Anonymous) => CredentialsMode::CredentialsSameOrigin, + Some(CorsSettings::Anonymous) => CredentialsMode::CredentialsSameOrigin, _ => CredentialsMode::Include, }, origin: doc.url().clone(), @@ -263,8 +262,8 @@ fn fetch_a_classic_script(script: &HTMLScriptElement, let (action_sender, action_receiver) = ipc::channel().unwrap(); let listener = NetworkListener { context: context, - script_chan: doc.window().networking_task_source(), - wrapper: Some(doc.window().get_runnable_wrapper()), + task_source: doc.window().networking_task_source(), + wrapper: Some(doc.window().get_runnable_wrapper()) }; ROUTER.add_route(action_receiver.to_opaque(), box move |message| { @@ -275,10 +274,12 @@ fn fetch_a_classic_script(script: &HTMLScriptElement, impl HTMLScriptElement { /// https://html.spec.whatwg.org/multipage/#prepare-a-script - pub fn prepare(&self) -> NextParserState { + /// + /// Returns true if tokenization should continue, false otherwise. + pub fn prepare(&self) -> bool { // Step 1. if self.already_started.get() { - return NextParserState::Continue; + return true; } // Step 2. @@ -296,17 +297,17 @@ impl HTMLScriptElement { // Step 4. let text = self.Text(); if text.is_empty() && !element.has_attribute(&local_name!("src")) { - return NextParserState::Continue; + return true; } // Step 5. if !self.upcast::<Node>().is_in_doc() { - return NextParserState::Continue; + return true; } // Step 6. if !self.is_javascript() { - return NextParserState::Continue; + return true; } // Step 7. @@ -321,12 +322,12 @@ impl HTMLScriptElement { // Step 9. let doc = document_from_node(self); if self.parser_inserted.get() && &*self.parser_document != &*doc { - return NextParserState::Continue; + return true; } // Step 10. if !doc.is_scripting_enabled() { - return NextParserState::Continue; + return true; } // TODO(#4577): Step 11: CSP. @@ -339,13 +340,13 @@ impl HTMLScriptElement { let for_value = for_attribute.value().to_ascii_lowercase(); let for_value = for_value.trim_matches(HTML_SPACE_CHARACTERS); if for_value != "window" { - return NextParserState::Continue; + return true; } let event_value = event_attribute.value().to_ascii_lowercase(); let event_value = event_value.trim_matches(HTML_SPACE_CHARACTERS); if event_value != "onload" && event_value != "onload()" { - return NextParserState::Continue; + return true; } }, (_, _) => (), @@ -358,8 +359,8 @@ impl HTMLScriptElement { // Step 14. let cors_setting = match self.GetCrossOrigin() { - Some(ref s) if *s == "anonymous" => Some(CORSSettings::Anonymous), - Some(ref s) if *s == "use-credentials" => Some(CORSSettings::UseCredentials), + Some(ref s) if *s == "anonymous" => Some(CorsSettings::Anonymous), + Some(ref s) if *s == "use-credentials" => Some(CorsSettings::UseCredentials), None => None, _ => unreachable!() }; @@ -380,7 +381,7 @@ impl HTMLScriptElement { // Step 18.2. if src.is_empty() { self.queue_error_event(); - return NextParserState::Continue; + return true; } // Step 18.4-18.5. @@ -388,7 +389,7 @@ impl HTMLScriptElement { Err(_) => { warn!("error parsing URL for script {}", &**src); self.queue_error_event(); - return NextParserState::Continue; + return true; } Ok(url) => url, }; @@ -411,7 +412,7 @@ impl HTMLScriptElement { !async { doc.add_deferred_script(self); // Second part implemented in Document::process_deferred_scripts. - return NextParserState::Continue; + return true; // Step 20.b: classic, has src, was parser-inserted, is not async. } else if is_external && was_parser_inserted && @@ -442,7 +443,7 @@ impl HTMLScriptElement { self.ready_to_be_parser_executed.set(true); *self.load.borrow_mut() = Some(Ok(ScriptOrigin::internal(text, base_url))); self.execute(); - return NextParserState::Continue; + return true; } // TODO: make this suspension happen automatically. @@ -451,7 +452,7 @@ impl HTMLScriptElement { parser.suspend(); } } - NextParserState::Suspend + false } pub fn is_ready_to_be_executed(&self) -> bool { |