diff --git a/testing/web-platform/tests/html/dom/render-blocking/remove-attr-script-keeps-blocking.tentative.html b/testing/web-platform/tests/html/dom/render-blocking/remove-attr-script-keeps-blocking.tentative.html
new file mode 100644
index 0000000000000..451d2f3695ee8
--- /dev/null
+++ b/testing/web-platform/tests/html/dom/render-blocking/remove-attr-script-keeps-blocking.tentative.html
@@ -0,0 +1,25 @@
+
+
Synchronous script element still blocks rendering after removing `blocking=render`
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/html/dom/render-blocking/remove-attr-style-keeps-blocking.tentative.html b/testing/web-platform/tests/html/dom/render-blocking/remove-attr-style-keeps-blocking.tentative.html
new file mode 100644
index 0000000000000..31d4b56838d23
--- /dev/null
+++ b/testing/web-platform/tests/html/dom/render-blocking/remove-attr-style-keeps-blocking.tentative.html
@@ -0,0 +1,28 @@
+
+Parser-inserted style element still blocks rendering after removing `blocking=render`
+
+
+
+
+
+
+
+
+
Some text
diff --git a/testing/web-platform/tests/html/dom/render-blocking/remove-attr-stylesheet-link-keeps-blocking.tentative.html b/testing/web-platform/tests/html/dom/render-blocking/remove-attr-stylesheet-link-keeps-blocking.tentative.html
new file mode 100644
index 0000000000000..1248b90b236ee
--- /dev/null
+++ b/testing/web-platform/tests/html/dom/render-blocking/remove-attr-stylesheet-link-keeps-blocking.tentative.html
@@ -0,0 +1,27 @@
+
+Parser-inserted stylesheet link still blocks rendering after removing `blocking=render`
+
+
+
+
+
+
+
+
+
Some text
diff --git a/testing/web-platform/tests/html/dom/render-blocking/support/test-render-blocking.js b/testing/web-platform/tests/html/dom/render-blocking/support/test-render-blocking.js
index 7fa2462046b02..71d0d68096612 100644
--- a/testing/web-platform/tests/html/dom/render-blocking/support/test-render-blocking.js
+++ b/testing/web-platform/tests/html/dom/render-blocking/support/test-render-blocking.js
@@ -30,6 +30,22 @@ class LoadObserver {
}
}
+// Observes the insertion of a script/parser-blocking element into DOM via
+// MutationObserver, so that we can access the element before it's loaded.
+function nodeInserted(parentNode, predicate) {
+ return new Promise(resolve => {
+ function callback(mutationList) {
+ for (let mutation of mutationList) {
+ for (let node of mutation.addedNodes) {
+ if (predicate(node))
+ resolve(node);
+ }
+ }
+ }
+ new MutationObserver(callback).observe(parentNode, {childList: true});
+ });
+}
+
function createAutofocusTarget() {
const autofocusTarget = document.createElement('textarea');
autofocusTarget.setAttribute('autofocus', '');