From 2a723a528c8c2f461e0d50235847840e6b816793 Mon Sep 17 00:00:00 2001 From: Mukilan Thiyagarajan Date: Mon, 21 Apr 2025 12:47:00 +0530 Subject: [PATCH] script: `LoadBlocker`'s drop impl shouldn't run after termination. (#36508) The logic in LoadBlocker::terminate was modified in #34122 to `clone` the LoadBlocker's inner `load` member instead of `take`ing it. However, this member serves as a flag so that `LoadBlocker`'s Drop impl can avoid calling `doc.finish_load` on already terminated loads. The change results in unnecessary 'unknown completed load' warnings when Servo is run with logging enabled. Signed-off-by: Mukilan Thiyagarajan Signed-off-by: Mukilan Thiyagarajan --- components/script/document_loader.rs | 14 +++++++++++--- .../meta/dom/ranges/Range-cloneContents.html.ini | 3 +++ .../meta/dom/ranges/Range-deleteContents.html.ini | 3 +++ .../meta/dom/ranges/Range-extractContents.html.ini | 3 +++ .../wpt/meta/dom/ranges/Range-insertNode.html.ini | 3 +++ .../dom/ranges/Range-surroundContents.html.ini | 3 +++ .../meta/mimesniff/media/media-sniff.window.js.ini | 3 +++ 7 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 tests/wpt/meta/dom/ranges/Range-cloneContents.html.ini create mode 100644 tests/wpt/meta/dom/ranges/Range-deleteContents.html.ini create mode 100644 tests/wpt/meta/dom/ranges/Range-extractContents.html.ini create mode 100644 tests/wpt/meta/dom/ranges/Range-insertNode.html.ini create mode 100644 tests/wpt/meta/dom/ranges/Range-surroundContents.html.ini create mode 100644 tests/wpt/meta/mimesniff/media/media-sniff.window.js.ini diff --git a/components/script/document_loader.rs b/components/script/document_loader.rs index 422652272b6..33f51cd8517 100644 --- a/components/script/document_loader.rs +++ b/components/script/document_loader.rs @@ -50,10 +50,18 @@ impl LoadBlocker { /// Remove this load from the associated document's list of blocking loads. pub(crate) fn terminate(blocker: &DomRefCell>, can_gc: CanGc) { - if let Some(this) = blocker.borrow().as_ref() { - let load_data = this.load.clone().unwrap(); - this.doc.finish_load(load_data, can_gc); + let Some(load) = blocker + .borrow_mut() + .as_mut() + .and_then(|blocker| blocker.load.take()) + else { + return; + }; + + if let Some(blocker) = blocker.borrow().as_ref() { + blocker.doc.finish_load(load, can_gc); } + *blocker.borrow_mut() = None; } } diff --git a/tests/wpt/meta/dom/ranges/Range-cloneContents.html.ini b/tests/wpt/meta/dom/ranges/Range-cloneContents.html.ini new file mode 100644 index 00000000000..528ddab2bbd --- /dev/null +++ b/tests/wpt/meta/dom/ranges/Range-cloneContents.html.ini @@ -0,0 +1,3 @@ +[Range-cloneContents.html] + bug: https://github.com/servo/servo/issues/36561 + expected: ERROR diff --git a/tests/wpt/meta/dom/ranges/Range-deleteContents.html.ini b/tests/wpt/meta/dom/ranges/Range-deleteContents.html.ini new file mode 100644 index 00000000000..9bf099f962d --- /dev/null +++ b/tests/wpt/meta/dom/ranges/Range-deleteContents.html.ini @@ -0,0 +1,3 @@ +[Range-deleteContents.html] + bug: https://github.com/servo/servo/issues/36561 + expected: ERROR diff --git a/tests/wpt/meta/dom/ranges/Range-extractContents.html.ini b/tests/wpt/meta/dom/ranges/Range-extractContents.html.ini new file mode 100644 index 00000000000..c6044bf87ef --- /dev/null +++ b/tests/wpt/meta/dom/ranges/Range-extractContents.html.ini @@ -0,0 +1,3 @@ +[Range-extractContents.html] + bug: https://github.com/servo/servo/issues/36561 + expected: ERROR diff --git a/tests/wpt/meta/dom/ranges/Range-insertNode.html.ini b/tests/wpt/meta/dom/ranges/Range-insertNode.html.ini new file mode 100644 index 00000000000..365eb5089f0 --- /dev/null +++ b/tests/wpt/meta/dom/ranges/Range-insertNode.html.ini @@ -0,0 +1,3 @@ +[Range-insertNode.html] + bug: https://github.com/servo/servo/issues/36561 + expected: ERROR diff --git a/tests/wpt/meta/dom/ranges/Range-surroundContents.html.ini b/tests/wpt/meta/dom/ranges/Range-surroundContents.html.ini new file mode 100644 index 00000000000..34eec4d1046 --- /dev/null +++ b/tests/wpt/meta/dom/ranges/Range-surroundContents.html.ini @@ -0,0 +1,3 @@ +[Range-surroundContents.html] + bug: https://github.com/servo/servo/issues/36561 + expected: ERROR diff --git a/tests/wpt/meta/mimesniff/media/media-sniff.window.js.ini b/tests/wpt/meta/mimesniff/media/media-sniff.window.js.ini new file mode 100644 index 00000000000..613306190b6 --- /dev/null +++ b/tests/wpt/meta/mimesniff/media/media-sniff.window.js.ini @@ -0,0 +1,3 @@ +[media-sniff.window.html] + bug: https://github.com/servo/servo/issues/36626 + expected: TIMEOUT