<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[206462] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/206462">206462</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-09-27 13:55:20 -0700 (Tue, 27 Sep 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>It should be possible to dispatch events on documents that do not have a browsing context
https://bugs.webkit.org/show_bug.cgi?id=162620

Reviewed by Ryosuke Niwa.

LayoutTests/imported/w3c:

* web-platform-tests/dom/events/Event-dispatch-bubbles-false-expected.txt:
* web-platform-tests/dom/events/Event-dispatch-bubbles-true-expected.txt:
Rebaseline several W3C tests now that more checks are passing.

* web-platform-tests/dom/events/Event-dispatch-other-document-expected.txt: Added.
* web-platform-tests/dom/events/Event-dispatch-other-document.html: Added.
* web-platform-tests/dom/events/w3c-import.log:
Import more test coverage from W3C.

Source/WebCore:

It should be possible to dispatch events on documents that do not have a browsing
context (e.g. Documents created using DOMImplementation.createHTMLDocument()).
Gecko and Blink both allow this but WebKit did not.

The approach chosen to support this is similar to the one in Blink. When constructing
a new document (e.g. using DOMImplementation.createHTMLDocument()) we now keep track
of the context document. When requesting the scriptExecutionContext(), we now return
the context document if the document has one instead of the document itself.

Test: imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document.html

* bindings/js/JSDocumentCustom.cpp:
(WebCore::JSDocument::visitAdditionalChildren):
* dom/DOMImplementation.cpp:
(WebCore::DOMImplementation::createDocument):
(WebCore::DOMImplementation::createHTMLDocument):
* dom/Document.cpp:
(WebCore::Document::create):
(WebCore::Document::cloneDataFromDocument):
(WebCore::Document::contextDocument):
(WebCore::Document::takeDOMWindowFrom): Deleted.
* dom/Document.h:
(WebCore::Document::setContextDocument):
(WebCore::Node::scriptExecutionContext):
(WebCore::Node::isDocumentNode): Deleted.
* dom/Document.idl:
* xml/XMLHttpRequest.cpp:
(WebCore::XMLHttpRequest::responseXML):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsimportedw3cChangeLog">trunk/LayoutTests/imported/w3c/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsdomeventsEventdispatchbubblesfalseexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-bubbles-false-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsdomeventsEventdispatchbubblestrueexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-bubbles-true-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsdomeventsw3cimportlog">trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/w3c-import.log</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDocumentCustomcpp">trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDOMImplementationcpp">trunk/Source/WebCore/dom/DOMImplementation.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDocumentcpp">trunk/Source/WebCore/dom/Document.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDocumenth">trunk/Source/WebCore/dom/Document.h</a></li>
<li><a href="#trunkSourceWebCoredomDocumentidl">trunk/Source/WebCore/dom/Document.idl</a></li>
<li><a href="#trunkSourceWebCorexmlXMLHttpRequestcpp">trunk/Source/WebCore/xml/XMLHttpRequest.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsdomeventsEventdispatchotherdocumentexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsdomeventsEventdispatchotherdocumenthtml">trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsimportedw3cChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/ChangeLog (206461 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/ChangeLog        2016-09-27 20:47:27 UTC (rev 206461)
+++ trunk/LayoutTests/imported/w3c/ChangeLog        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -1,5 +1,21 @@
</span><span class="cx"> 2016-09-27  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        It should be possible to dispatch events on documents that do not have a browsing context
+        https://bugs.webkit.org/show_bug.cgi?id=162620
+
+        Reviewed by Ryosuke Niwa.
+
+        * web-platform-tests/dom/events/Event-dispatch-bubbles-false-expected.txt:
+        * web-platform-tests/dom/events/Event-dispatch-bubbles-true-expected.txt:
+        Rebaseline several W3C tests now that more checks are passing.
+
+        * web-platform-tests/dom/events/Event-dispatch-other-document-expected.txt: Added.
+        * web-platform-tests/dom/events/Event-dispatch-other-document.html: Added.
+        * web-platform-tests/dom/events/w3c-import.log:
+        Import more test coverage from W3C.
+
+2016-09-27  Chris Dumez  &lt;cdumez@apple.com&gt;
+
</ins><span class="cx">         Second parameter to MutationObserver.observe() should be optional
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=162627
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsdomeventsEventdispatchbubblesfalseexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-bubbles-false-expected.txt (206461 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-bubbles-false-expected.txt        2016-09-27 20:47:27 UTC (rev 206461)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-bubbles-false-expected.txt        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> 
</span><span class="cx"> PASS In window.document with click event 
</span><span class="cx"> PASS In window.document with load event 
</span><del>-FAIL In window.document.cloneNode(true) assert_array_equals: targets lengths differ, expected 8 got 0
-FAIL In new Document() assert_array_equals: targets lengths differ, expected 8 got 0
-FAIL In DOMImplementation.createHTMLDocument() assert_array_equals: targets lengths differ, expected 8 got 0
</del><ins>+PASS In window.document.cloneNode(true) 
+PASS In new Document() 
+PASS In DOMImplementation.createHTMLDocument() 
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsdomeventsEventdispatchbubblestrueexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-bubbles-true-expected.txt (206461 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-bubbles-true-expected.txt        2016-09-27 20:47:27 UTC (rev 206461)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-bubbles-true-expected.txt        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> 
</span><span class="cx"> PASS In window.document with click event 
</span><span class="cx"> PASS In window.document with load event 
</span><del>-FAIL In window.document.cloneNode(true) assert_array_equals: targets lengths differ, expected 14 got 0
-FAIL In new Document() assert_array_equals: targets lengths differ, expected 14 got 0
-FAIL In DOMImplementation.createHTMLDocument() assert_array_equals: targets lengths differ, expected 14 got 0
</del><ins>+PASS In window.document.cloneNode(true) 
+PASS In new Document() 
+PASS In DOMImplementation.createHTMLDocument() 
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsdomeventsEventdispatchotherdocumentexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document-expected.txt (0 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document-expected.txt                                (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document-expected.txt        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS Custom event on an element in another document 
+
</ins></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsdomeventsEventdispatchotherdocumenthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document.html (0 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document.html                                (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document.html        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;title&gt;Custom event on an element in another document&lt;/title&gt;
+&lt;script src=&quot;/resources/testharness.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;/resources/testharnessreport.js&quot;&gt;&lt;/script&gt;
+&lt;div id=log&gt;&lt;/div&gt;
+&lt;script&gt;
+test(function() {
+  var doc = document.implementation.createHTMLDocument(&quot;Demo&quot;);
+  var element = doc.createElement(&quot;div&quot;);
+  var called = false;
+  element.addEventListener(&quot;foo&quot;, this.step_func(function(ev) {
+    assert_false(called);
+    called = true;
+    assert_equals(ev.target, element);
+  }));
+  doc.body.appendChild(element);
+
+  var event = new Event(&quot;foo&quot;);
+  element.dispatchEvent(event);
+  assert_true(called);
+});
+&lt;/script&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsdomeventsw3cimportlog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/w3c-import.log (206461 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/w3c-import.log        2016-09-27 20:47:27 UTC (rev 206461)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/w3c-import.log        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> /LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-multiple-stopPropagation.html
</span><span class="cx"> /LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-omitted-capture.html
</span><span class="cx"> /LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-order.html
</span><ins>+/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document.html
</ins><span class="cx"> /LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-propagation-stopped.html
</span><span class="cx"> /LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-redispatch.html
</span><span class="cx"> /LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-reenter.html
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (206461 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-09-27 20:47:27 UTC (rev 206461)
+++ trunk/Source/WebCore/ChangeLog        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -1,3 +1,39 @@
</span><ins>+2016-09-27  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        It should be possible to dispatch events on documents that do not have a browsing context
+        https://bugs.webkit.org/show_bug.cgi?id=162620
+
+        Reviewed by Ryosuke Niwa.
+
+        It should be possible to dispatch events on documents that do not have a browsing
+        context (e.g. Documents created using DOMImplementation.createHTMLDocument()).
+        Gecko and Blink both allow this but WebKit did not.
+
+        The approach chosen to support this is similar to the one in Blink. When constructing
+        a new document (e.g. using DOMImplementation.createHTMLDocument()) we now keep track
+        of the context document. When requesting the scriptExecutionContext(), we now return
+        the context document if the document has one instead of the document itself.
+
+        Test: imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document.html
+
+        * bindings/js/JSDocumentCustom.cpp:
+        (WebCore::JSDocument::visitAdditionalChildren):
+        * dom/DOMImplementation.cpp:
+        (WebCore::DOMImplementation::createDocument):
+        (WebCore::DOMImplementation::createHTMLDocument):
+        * dom/Document.cpp:
+        (WebCore::Document::create):
+        (WebCore::Document::cloneDataFromDocument):
+        (WebCore::Document::contextDocument):
+        (WebCore::Document::takeDOMWindowFrom): Deleted.
+        * dom/Document.h:
+        (WebCore::Document::setContextDocument):
+        (WebCore::Node::scriptExecutionContext):
+        (WebCore::Node::isDocumentNode): Deleted.
+        * dom/Document.idl:
+        * xml/XMLHttpRequest.cpp:
+        (WebCore::XMLHttpRequest::responseXML):
+
</ins><span class="cx"> 2016-09-27  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Implement URLParser::syntaxViolation
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDocumentCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp (206461 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp        2016-09-27 20:47:27 UTC (rev 206461)
+++ trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -175,7 +175,7 @@
</span><span class="cx"> 
</span><span class="cx"> void JSDocument::visitAdditionalChildren(SlotVisitor&amp; visitor)
</span><span class="cx"> {
</span><del>-    visitor.addOpaqueRoot(wrapped().scriptExecutionContext());
</del><ins>+    visitor.addOpaqueRoot(static_cast&lt;ScriptExecutionContext*&gt;(&amp;wrapped()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoredomDOMImplementationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/DOMImplementation.cpp (206461 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/DOMImplementation.cpp        2016-09-27 20:47:27 UTC (rev 206461)
+++ trunk/Source/WebCore/dom/DOMImplementation.cpp        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -114,7 +114,7 @@
</span><span class="cx"> ExceptionOr&lt;Ref&lt;XMLDocument&gt;&gt; DOMImplementation::createDocument(const String&amp; namespaceURI, const String&amp; qualifiedName, DocumentType* documentType)
</span><span class="cx"> {
</span><span class="cx">     auto document = createXMLDocument(namespaceURI);
</span><del>-
</del><ins>+    document-&gt;setContextDocument(m_document.contextDocument());
</ins><span class="cx">     document-&gt;setSecurityOriginPolicy(m_document.securityOriginPolicy());
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;Element&gt; documentElement;
</span><span class="lines">@@ -153,6 +153,7 @@
</span><span class="cx">         ASSERT(document-&gt;head());
</span><span class="cx">         document-&gt;head()-&gt;appendChild(titleElement);
</span><span class="cx">     }
</span><ins>+    document-&gt;setContextDocument(m_document.contextDocument());
</ins><span class="cx">     document-&gt;setSecurityOriginPolicy(m_document.securityOriginPolicy());
</span><span class="cx">     return document;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.cpp (206461 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.cpp        2016-09-27 20:47:27 UTC (rev 206461)
+++ trunk/Source/WebCore/dom/Document.cpp        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -576,10 +576,11 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-Ref&lt;Document&gt; Document::create(ScriptExecutionContext&amp; context)
</del><ins>+Ref&lt;Document&gt; Document::create(Document&amp; contextDocument)
</ins><span class="cx"> {
</span><span class="cx">     Ref&lt;Document&gt; document = adoptRef(*new Document(nullptr, URL()));
</span><del>-    document-&gt;setSecurityOriginPolicy(context.securityOriginPolicy());
</del><ins>+    document-&gt;setContextDocument(contextDocument);
+    document-&gt;setSecurityOriginPolicy(contextDocument.securityOriginPolicy());
</ins><span class="cx"> 
</span><span class="cx">     return document;
</span><span class="cx"> }
</span><span class="lines">@@ -3505,6 +3506,7 @@
</span><span class="cx">     m_documentURI = other.documentURI();
</span><span class="cx"> 
</span><span class="cx">     setCompatibilityMode(other.m_compatibilityMode);
</span><ins>+    setContextDocument(other.contextDocument());
</ins><span class="cx">     setSecurityOriginPolicy(other.securityOriginPolicy());
</span><span class="cx">     overrideMIMEType(other.contentType());
</span><span class="cx">     setDecoder(other.decoder());
</span><span class="lines">@@ -4113,6 +4115,13 @@
</span><span class="cx">     ASSERT(m_domWindow-&gt;frame() == m_frame);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+Document&amp; Document::contextDocument() const
+{
+    if (m_contextDocument)
+        return *m_contextDocument.get();
+    return const_cast&lt;Document&amp;&gt;(*this);
+}
+
</ins><span class="cx"> void Document::setAttributeEventListener(const AtomicString&amp; eventType, const QualifiedName&amp; attributeName, const AtomicString&amp; attributeValue)
</span><span class="cx"> {
</span><span class="cx">     setAttributeEventListener(eventType, JSLazyEventListener::create(*this, attributeName, attributeValue));
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.h (206461 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.h        2016-09-27 20:47:27 UTC (rev 206461)
+++ trunk/Source/WebCore/dom/Document.h        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -297,7 +297,7 @@
</span><span class="cx">     {
</span><span class="cx">         return adoptRef(*new Document(frame, url, DefaultDocumentClass, NonRenderedPlaceholder));
</span><span class="cx">     }
</span><del>-    static Ref&lt;Document&gt; create(ScriptExecutionContext&amp;);
</del><ins>+    static Ref&lt;Document&gt; create(Document&amp;);
</ins><span class="cx"> 
</span><span class="cx">     virtual ~Document();
</span><span class="cx"> 
</span><span class="lines">@@ -771,6 +771,9 @@
</span><span class="cx">     // In DOM Level 2, the Document's DOMWindow is called the defaultView.
</span><span class="cx">     DOMWindow* defaultView() const { return domWindow(); } 
</span><span class="cx"> 
</span><ins>+    Document&amp; contextDocument() const;
+    void setContextDocument(Document&amp; document) { m_contextDocument = document.createWeakPtr(); }
+
</ins><span class="cx">     // Helper functions for forwarding DOMWindow event related tasks to the DOMWindow if it exists.
</span><span class="cx">     void setWindowAttributeEventListener(const AtomicString&amp; eventType, const QualifiedName&amp; attributeName, const AtomicString&amp; value);
</span><span class="cx">     void setWindowAttributeEventListener(const AtomicString&amp; eventType, PassRefPtr&lt;EventListener&gt;);
</span><span class="lines">@@ -1411,6 +1414,7 @@
</span><span class="cx"> 
</span><span class="cx">     Frame* m_frame;
</span><span class="cx">     RefPtr&lt;DOMWindow&gt; m_domWindow;
</span><ins>+    WeakPtr&lt;Document&gt; m_contextDocument;
</ins><span class="cx"> 
</span><span class="cx">     Ref&lt;CachedResourceLoader&gt; m_cachedResourceLoader;
</span><span class="cx">     RefPtr&lt;DocumentParser&gt; m_parser;
</span><span class="lines">@@ -1791,7 +1795,7 @@
</span><span class="cx"> 
</span><span class="cx"> inline ScriptExecutionContext* Node::scriptExecutionContext() const
</span><span class="cx"> {
</span><del>-    return &amp;document();
</del><ins>+    return &amp;document().contextDocument();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Element* eventTargetElementForDocument(Document*);
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.idl (206461 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.idl        2016-09-27 20:47:27 UTC (rev 206461)
+++ trunk/Source/WebCore/dom/Document.idl        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> 
</span><span class="cx"> [
</span><span class="cx">     Constructor,
</span><del>-    ConstructorCallWith=ScriptExecutionContext,
</del><ins>+    ConstructorCallWith=Document,
</ins><span class="cx">     CustomToJSObject,
</span><span class="cx">     ExportMacro=WEBCORE_EXPORT,
</span><span class="cx">     JSCustomHeader,
</span></span></pre></div>
<a id="trunkSourceWebCorexmlXMLHttpRequestcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/xml/XMLHttpRequest.cpp (206461 => 206462)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/xml/XMLHttpRequest.cpp        2016-09-27 20:47:27 UTC (rev 206461)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.cpp        2016-09-27 20:55:20 UTC (rev 206462)
</span><span class="lines">@@ -199,6 +199,7 @@
</span><span class="cx">                 m_responseDocument = XMLDocument::create(0, m_url);
</span><span class="cx">             // FIXME: Set Last-Modified.
</span><span class="cx">             m_responseDocument-&gt;setContent(m_responseBuilder.toStringPreserveCapacity());
</span><ins>+            m_responseDocument-&gt;setContextDocument(downcast&lt;Document&gt;(*scriptExecutionContext()));
</ins><span class="cx">             m_responseDocument-&gt;setSecurityOriginPolicy(scriptExecutionContext()-&gt;securityOriginPolicy());
</span><span class="cx">             m_responseDocument-&gt;overrideMIMEType(mimeType);
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>