diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index d1b3cfd3467..8e4d7c10f26 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -275,6 +275,7 @@ pub(crate) static SCRIPT_JS_MIMES: StaticStringVec = &[
pub(crate) enum ScriptType {
Classic,
Module,
+ ImportMap,
}
#[derive(JSTraceable, MallocSizeOf)]
@@ -770,14 +771,15 @@ impl HTMLScriptElement {
// Step 23. Module script credentials mode.
let module_credentials_mode = match script_type {
ScriptType::Classic => CredentialsMode::CredentialsSameOrigin,
- ScriptType::Module => reflect_cross_origin_attribute(element).map_or(
- CredentialsMode::CredentialsSameOrigin,
- |attr| match &*attr {
- "use-credentials" => CredentialsMode::Include,
- "anonymous" => CredentialsMode::CredentialsSameOrigin,
- _ => CredentialsMode::CredentialsSameOrigin,
- },
- ),
+ ScriptType::Module | ScriptType::ImportMap => reflect_cross_origin_attribute(element)
+ .map_or(
+ CredentialsMode::CredentialsSameOrigin,
+ |attr| match &*attr {
+ "use-credentials" => CredentialsMode::Include,
+ "anonymous" => CredentialsMode::CredentialsSameOrigin,
+ _ => CredentialsMode::CredentialsSameOrigin,
+ },
+ ),
};
// Step 24. Let cryptographic nonce be el's [[CryptographicNonce]] internal slot's value.
@@ -904,7 +906,7 @@ impl HTMLScriptElement {
doc.add_asap_script(self);
};
},
- // TODO: Case "importmap"
+ ScriptType::ImportMap => (),
}
} else {
// Step 32. If el does not have a src content attribute:
@@ -913,18 +915,17 @@ impl HTMLScriptElement {
let text_rc = Rc::new(text);
- // TODO: Fix step number or match spec text. Is this step 32.1?
- let result = Ok(ScriptOrigin::internal(
- Rc::clone(&text_rc),
- base_url.clone(),
- options.clone(),
- script_type,
- self.global().unminified_js_dir(),
- ));
-
- // TODO: Fix step number or match spec text. Is this step 32.2?
+ // Step 32.2: Switch on el's type:
match script_type {
ScriptType::Classic => {
+ let result = Ok(ScriptOrigin::internal(
+ Rc::clone(&text_rc),
+ base_url.clone(),
+ options.clone(),
+ script_type,
+ self.global().unminified_js_dir(),
+ ));
+
if was_parser_inserted &&
doc.get_current_parser()
.is_some_and(|parser| parser.script_nesting_level() <= 1) &&
@@ -958,6 +959,9 @@ impl HTMLScriptElement {
can_gc,
);
},
+ ScriptType::ImportMap => {
+ // TODO: Let result be the result of creating an import map parse result given source text and base URL.
+ },
}
}
}
@@ -1054,19 +1058,17 @@ impl HTMLScriptElement {
} else {
document.set_current_script(Some(self))
}
- },
- ScriptType::Module => document.set_current_script(None),
- }
-
- match script.type_ {
- ScriptType::Classic => {
self.run_a_classic_script(&script, can_gc);
document.set_current_script(old_script.as_deref());
},
ScriptType::Module => {
+ document.set_current_script(None);
assert!(document.GetCurrentScript().is_none());
self.run_a_module_script(&script, false, can_gc);
},
+ ScriptType::ImportMap => {
+ // TODO: Register an import map given el's relevant global object and el's result.
+ },
}
// Step 7.