Update step annotations in script's prepare method

This commit is contained in:
Nikhil Shagrithaya 2017-07-24 00:20:07 +05:30
parent 5b3bb04d4a
commit 15ac245ae7

View file

@ -342,9 +342,11 @@ impl HTMLScriptElement {
return; return;
} }
// TODO(#4577): Step 11: CSP. // TODO: Step 11: nomodule content attribute
// Step 12. // TODO(#4577): Step 12: CSP.
// Step 13.
let for_attribute = element.get_attribute(&ns!(), &local_name!("for")); let for_attribute = element.get_attribute(&ns!(), &local_name!("for"));
let event_attribute = element.get_attribute(&ns!(), &local_name!("event")); let event_attribute = element.get_attribute(&ns!(), &local_name!("event"));
match (for_attribute.r(), event_attribute.r()) { match (for_attribute.r(), event_attribute.r()) {
@ -364,19 +366,19 @@ impl HTMLScriptElement {
(_, _) => (), (_, _) => (),
} }
// Step 13. // Step 14.
let encoding = element.get_attribute(&ns!(), &local_name!("charset")) let encoding = element.get_attribute(&ns!(), &local_name!("charset"))
.and_then(|charset| encoding_from_whatwg_label(&charset.value())) .and_then(|charset| encoding_from_whatwg_label(&charset.value()))
.unwrap_or_else(|| doc.encoding()); .unwrap_or_else(|| doc.encoding());
// Step 14. // Step 15.
let cors_setting = cors_setting_for_element(element); let cors_setting = cors_setting_for_element(element);
// TODO: Step 15: Module script credentials mode. // TODO: Step 16: Module script credentials mode.
// TODO: Step 16: Nonce. // TODO: Step 17: Nonce.
// Step 17: Integrity metadata. // Step 18: Integrity metadata.
let im_attribute = element.get_attribute(&ns!(), &local_name!("integrity")); let im_attribute = element.get_attribute(&ns!(), &local_name!("integrity"));
let integrity_val = im_attribute.r().map(|a| a.value()); let integrity_val = im_attribute.r().map(|a| a.value());
let integrity_metadata = match integrity_val { let integrity_metadata = match integrity_val {
@ -384,26 +386,26 @@ impl HTMLScriptElement {
None => "", None => "",
}; };
// TODO: Step 18: parser state. // TODO: Step 19: parser state.
// TODO: Step 19: environment settings object. // TODO: Step 20: environment settings object.
let base_url = doc.base_url(); let base_url = doc.base_url();
if let Some(src) = element.get_attribute(&ns!(), &local_name!("src")) { if let Some(src) = element.get_attribute(&ns!(), &local_name!("src")) {
// Step 20. // Step 21.
// Step 20.1. // Step 21.1.
let src = src.value(); let src = src.value();
// Step 20.2. // Step 21.2.
if src.is_empty() { if src.is_empty() {
self.queue_error_event(); self.queue_error_event();
return; return;
} }
// Step 20.3: The "from an external file"" flag is stored in ClassicScript. // Step 21.3: The "from an external file"" flag is stored in ClassicScript.
// Step 20.4-20.5. // Step 21.4-21.5.
let url = match base_url.join(&src) { let url = match base_url.join(&src) {
Ok(url) => url, Ok(url) => url,
Err(_) => { Err(_) => {
@ -413,25 +415,25 @@ impl HTMLScriptElement {
}, },
}; };
// Preparation for step 22. // Preparation for step 23.
let kind = if element.has_attribute(&local_name!("defer")) && was_parser_inserted && !async { let kind = if element.has_attribute(&local_name!("defer")) && was_parser_inserted && !async {
// Step 22.a: classic, has src, has defer, was parser-inserted, is not async. // Step 23.a: classic, has src, has defer, was parser-inserted, is not async.
ExternalScriptKind::Deferred ExternalScriptKind::Deferred
} else if was_parser_inserted && !async { } else if was_parser_inserted && !async {
// Step 22.b: classic, has src, was parser-inserted, is not async. // Step 23.c: classic, has src, was parser-inserted, is not async.
ExternalScriptKind::ParsingBlocking ExternalScriptKind::ParsingBlocking
} else if !async && !self.non_blocking.get() { } else if !async && !self.non_blocking.get() {
// Step 22.c: classic, has src, is not async, is not non-blocking. // Step 23.d: classic, has src, is not async, is not non-blocking.
ExternalScriptKind::AsapInOrder ExternalScriptKind::AsapInOrder
} else { } else {
// Step 22.d: classic, has src. // Step 23.f: classic, has src.
ExternalScriptKind::Asap ExternalScriptKind::Asap
}; };
// Step 20.6. // Step 21.6.
fetch_a_classic_script(self, kind, url, cors_setting, integrity_metadata.to_owned(), encoding); fetch_a_classic_script(self, kind, url, cors_setting, integrity_metadata.to_owned(), encoding);
// Step 22. // Step 23.
match kind { match kind {
ExternalScriptKind::Deferred => doc.add_deferred_script(self), ExternalScriptKind::Deferred => doc.add_deferred_script(self),
ExternalScriptKind::ParsingBlocking => doc.set_pending_parsing_blocking_script(self, None), ExternalScriptKind::ParsingBlocking => doc.set_pending_parsing_blocking_script(self, None),
@ -439,18 +441,18 @@ impl HTMLScriptElement {
ExternalScriptKind::Asap => doc.add_asap_script(self), ExternalScriptKind::Asap => doc.add_asap_script(self),
} }
} else { } else {
// Step 21. // Step 22.
assert!(!text.is_empty()); assert!(!text.is_empty());
let result = Ok(ClassicScript::internal(text, base_url)); let result = Ok(ClassicScript::internal(text, base_url));
// Step 22. // Step 23.
if was_parser_inserted && if was_parser_inserted &&
doc.get_current_parser().map_or(false, |parser| parser.script_nesting_level() <= 1) && doc.get_current_parser().map_or(false, |parser| parser.script_nesting_level() <= 1) &&
doc.get_script_blocking_stylesheets_count() > 0 { doc.get_script_blocking_stylesheets_count() > 0 {
// Step 22.e: classic, has no src, was parser-inserted, is blocked on stylesheet. // Step 23.h: classic, has no src, was parser-inserted, is blocked on stylesheet.
doc.set_pending_parsing_blocking_script(self, Some(result)); doc.set_pending_parsing_blocking_script(self, Some(result));
} else { } else {
// Step 22.f: otherwise. // Step 23.i: otherwise.
self.execute(result); self.execute(result);
} }
} }