Skip to content

Commit

Permalink
Bug 1632975 - Run microtask checkpoint before processing script. r=smaug
Browse files Browse the repository at this point in the history
  • Loading branch information
avandolder committed Nov 17, 2022
1 parent 440a071 commit 7b89f48
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 7 deletions.
1 change: 1 addition & 0 deletions dom/base/test/mochitest.ini
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,7 @@ support-files = file_bug1100912.html
[test_bug1499169.html]
skip-if = toolkit == 'android' # Timeouts on android due to page closing issues with embedded pdf
[test_bug1576154.html]
[test_bug1632975.html]
[test_bug1640766.html]
support-files =
iframe1_bug1640766.html
Expand Down
54 changes: 54 additions & 0 deletions dom/base/test/test_bug1632975.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1632975
-->
<head>
<title>Test for Bug 1632975</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<script class="testbody" type="text/javascript">
SimpleTest.waitForExplicitFinish();

function observeTest(mutationsList) {
for (let mutation of mutationsList) {
for (let node of mutation.addedNodes) {
if (node.nodeName.toLowerCase() == "script") {
node.setAttribute("type", "text/zpconsent")
}
}
}
}

const observer = new MutationObserver(observeTest);
observer.observe(document.body, { childList: true, subtree: true });

let script2Ran = false;
let script3Ran = false;
script4Ran = false;

onload = () => {
ok(!script2Ran, "script2 should not have run");
ok(!script3Ran, "script3 should not have run");
ok(!script4Ran, "script4 should not have run");
SimpleTest.finish();
}
</script>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1632975">Mozilla Bug 1632975</a>
<p id="display"></p>
<div id="content" style="display: none">
<script id="script2">
script2Ran = true;
</script>

<script id="script3" type="disabled">
script3Ran = true;
</script>

<script id="script4" src="data:text/javascript,script4Ran = true;"></script>
</div>
</body>
</html>
3 changes: 3 additions & 0 deletions dom/script/ScriptElement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ bool ScriptElement::MaybeProcessScript() {

mAlreadyStarted = true;

nsContentUtils::AddScriptRunner(NS_NewRunnableFunction(
"ScriptElement::MaybeProcessScript", []() { nsAutoMicroTask mt; }));

nsCOMPtr<nsIParser> parser = ((nsIScriptElement*)this)->GetCreatorParser();
if (parser) {
nsCOMPtr<nsIContentSink> sink = parser->GetContentSink();
Expand Down
7 changes: 0 additions & 7 deletions dom/script/ScriptLoader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1186,13 +1186,6 @@ bool ScriptLoader::ProcessInlineScript(nsIScriptElement* aElement,
}
}

{
// We must perform a microtask checkpoint when inserting script elements
// as specified by: https://html.spec.whatwg.org/#parsing-main-incdata
// For the non-inline module cases this happens in ProcessRequest.
mozilla::nsAutoMicroTask mt;
}

// This calls OnFetchComplete directly since there's no need to start
// fetching an inline script.
nsresult rv = modReq->OnFetchComplete(NS_OK);
Expand Down

0 comments on commit 7b89f48

Please sign in to comment.