浏览代码

LibWeb: Allow executing scripts for iframes with src=about:blank

Fixes https://github.com/SerenityOS/serenity/issues/23836
Aliaksandr Kalenik 1 年之前
父节点
当前提交
94d72c174a

+ 1 - 0
Tests/LibWeb/Text/expected/navigation/run-script-from-about-blank-iframe.txt

@@ -0,0 +1 @@
+   message from test iframe

+ 16 - 0
Tests/LibWeb/Text/input/navigation/run-script-from-about-blank-iframe.html

@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<script src="../include.js"></script>
+<body>
+    <iframe id="target" src="about:blank"></iframe>
+    <script>
+        asyncTest(done => {
+            window.addEventListener("message", event => {
+                println(event.data);
+                done();
+            });
+            var script = target.contentDocument.createElement("script");
+            script.innerHTML = `parent.postMessage("message from test iframe", "*");`;
+            target.contentDocument.body.appendChild(script);
+        });
+    </script>
+</body>

+ 1 - 0
Userland/Libraries/LibWeb/DOM/Document.h

@@ -583,6 +583,7 @@ public:
     void ensure_animation_timer();
 
     bool ready_to_run_scripts() const { return m_ready_to_run_scripts; }
+    void set_ready_to_run_scripts() { m_ready_to_run_scripts = true; }
 
     JS::GCPtr<HTML::SessionHistoryEntry> latest_entry() const { return m_latest_entry; }
     void set_latest_entry(JS::GCPtr<HTML::SessionHistoryEntry> e) { m_latest_entry = e; }

+ 6 - 1
Userland/Libraries/LibWeb/HTML/NavigableContainer.cpp

@@ -219,7 +219,12 @@ Optional<URL::URL> NavigableContainer::shared_attribute_processing_steps_for_ifr
 
     // 4. If url matches about:blank and initialInsertion is true, then perform the URL and history update steps given element's content navigable's active document and url.
     if (url_matches_about_blank(url) && initial_insertion) {
-        perform_url_and_history_update_steps(*m_content_navigable->active_document(), url);
+        auto& document = *m_content_navigable->active_document();
+
+        perform_url_and_history_update_steps(document, url);
+
+        // Spec issue: https://github.com/whatwg/html/issues/10261
+        document.set_ready_to_run_scripts();
     }
 
     // 5. Return url.