Fix document.write check for activity.

This commit is contained in:
Alan Jeffrey 2017-01-11 12:57:08 -06:00
parent a43c842099
commit ca9cee084e
6 changed files with 48 additions and 2 deletions

View file

@ -3271,8 +3271,7 @@ impl DocumentMethods for Document {
// Step 2.
// TODO: handle throw-on-dynamic-markup-insertion counter.
// FIXME: this should check for being active rather than fully active
if !self.is_fully_active() {
if !self.is_active() {
// Step 3.
return Ok(());
}

View file

@ -1304,6 +1304,7 @@ impl ScriptThread {
/// Handles activity change message
fn handle_set_document_activity_msg(&self, id: PipelineId, activity: DocumentActivity) {
debug!("Setting activity of {} to be {:?}.", id, activity);
let document = self.documents.borrow().find_document(id);
if let Some(document) = document {
document.set_activity(activity);

View file

@ -45873,6 +45873,12 @@
"url": "/cssom/stylesheet-same-origin.sub.html"
}
],
"html/dom/dynamic-markup-insertion/document-write/write-active-document.html": [
{
"path": "html/dom/dynamic-markup-insertion/document-write/write-active-document.html",
"url": "/html/dom/dynamic-markup-insertion/document-write/write-active-document.html"
}
],
"html/semantics/embedded-content/the-iframe-element/iframe-synchronously-discard.html": [
{
"path": "html/semantics/embedded-content/the-iframe-element/iframe-synchronously-discard.html",

View file

@ -0,0 +1,4 @@
[write-active-document.html]
type: testharness
[document.write only writes to active documents]
expected: FAIL

View file

@ -0,0 +1 @@
<html><body></body></html>

View file

@ -0,0 +1,35 @@
<!doctype html>
<title>document.write only writes to active documents</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body><div id="log"></div></body>
<script>
async_test(function(t) {
var child = document.createElement("iframe");
child.src = "empty.html?1";
child.onload = t.step_func(function() {
var child1 = child.contentDocument;
var link = child1.createElement("a");
link.href = "data:text/html,Clicked.";
link.innerText = "Link.";
child1.body.appendChild(link);
var grandchild = child1.createElement("iframe");
grandchild.src = "empty.html?2";
grandchild.onload = t.step_func(function() {
var grandchild1 = grandchild.contentDocument;
child.onload = t.step_func(function() {
// This is a write to an inactive document
child1.write('WRITE HAPPENED');
assert_equals(child1.body.lastChild.tagName, "IFRAME");
// This is a write to an active but not fully active document
grandchild1.write('WRITE HAPPENED');
assert_equals(grandchild1.body.innerHTML, "WRITE HAPPENED");
t.done();
});
link.click();
});
child1.body.appendChild(grandchild);
});
document.body.appendChild(child);
});
</script>