<!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>[192057] 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/192057">192057</a></dd>
<dt>Author</dt> <dd>calvaris@igalia.com</dd>
<dt>Date</dt> <dd>2015-11-05 06:01:13 -0800 (Thu, 05 Nov 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Streams API] Shield implementation from user mangling Promise.reject and resolve methods
https://bugs.webkit.org/show_bug.cgi?id=150895

Reviewed by Youenn Fablet.

Source/JavaScriptCore:

Keep Promise.resolve and reject also as internal slots for the Promise constructor given that there is no way to
retrieve the former implementation if the user decides to replace it. This allows to safely create vended
promises even if the user changes the constructor methods.

* runtime/JSPromiseConstructor.h:
* runtime/JSPromiseConstructor.cpp:
(JSC::JSPromiseConstructor::addOwnInternalSlots): Added to include @reject and @resolve.
(JSC::JSPromiseConstructor::create): Call addOwnInternalSlots.

Source/WebCore:

Replace all calls to @Promise.resolve and @Promise.reject with their internal slot counterparts. This way we
ensure that if the user replaces those constructor methods, our implementation still works.

Test: streams/streams-promises.html.

* Modules/streams/ReadableStream.js:
(initializeReadableStream):
(cancel):
* Modules/streams/ReadableStreamInternals.js:
(privateInitializeReadableStreamReader):
(cancelReadableStream):
(readFromReadableStreamReader):
* Modules/streams/ReadableStreamReader.js:
(cancel):
(read):
(closed):
* Modules/streams/StreamInternals.js:
(promiseInvokeOrNoop):
(promiseInvokeOrFallbackOrNoop):
* Modules/streams/WritableStream.js:
(initializeWritableStream):
(abort):
(close):
(write):
(closed):
(ready):

LayoutTests:

* streams/streams-promises.html: Improved some style issues. Added tests about changing Promise.resolve and
reject.
* streams/streams-promises-expected.txt: Added expectations.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsstreamsstreamspromisesexpectedtxt">trunk/LayoutTests/streams/streams-promises-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstreamsstreamspromiseshtml">trunk/LayoutTests/streams/streams-promises.html</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSPromiseConstructorcpp">trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSPromiseConstructorh">trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesstreamsReadableStreamjs">trunk/Source/WebCore/Modules/streams/ReadableStream.js</a></li>
<li><a href="#trunkSourceWebCoreModulesstreamsReadableStreamInternalsjs">trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js</a></li>
<li><a href="#trunkSourceWebCoreModulesstreamsReadableStreamReaderjs">trunk/Source/WebCore/Modules/streams/ReadableStreamReader.js</a></li>
<li><a href="#trunkSourceWebCoreModulesstreamsStreamInternalsjs">trunk/Source/WebCore/Modules/streams/StreamInternals.js</a></li>
<li><a href="#trunkSourceWebCoreModulesstreamsWritableStreamjs">trunk/Source/WebCore/Modules/streams/WritableStream.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/LayoutTests/ChangeLog        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2015-11-05  Xabier Rodriguez Calvar  &lt;calvaris@igalia.com&gt;
+
+        [Streams API] Shield implementation from user mangling Promise.reject and resolve methods
+        https://bugs.webkit.org/show_bug.cgi?id=150895
+
+        Reviewed by Youenn Fablet.
+
+        * streams/streams-promises.html: Improved some style issues. Added tests about changing Promise.resolve and
+        reject.
+        * streams/streams-promises-expected.txt: Added expectations.
+
</ins><span class="cx"> 2015-11-05  Manuel Rego Casasnovas  &lt;rego@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [css-grid] Support positioned grid children
</span></span></pre></div>
<a id="trunkLayoutTestsstreamsstreamspromisesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/streams/streams-promises-expected.txt (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/streams/streams-promises-expected.txt        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/LayoutTests/streams/streams-promises-expected.txt        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -1,3 +1,5 @@
</span><span class="cx"> 
</span><del>-PASS Streams can be built even if Promise constructor is replaced 
</del><ins>+PASS Streams implementation is not affected if Promise constructor is replaced 
+PASS Streams implementation is not affected if Promise.resolve is replaced 
+PASS Streams implementation is not affected if Promise.reject is replaced 
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsstreamsstreamspromiseshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/streams/streams-promises.html (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/streams/streams-promises.html        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/LayoutTests/streams/streams-promises.html        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -2,10 +2,43 @@
</span><span class="cx"> &lt;script src='../resources/testharness.js'&gt;&lt;/script&gt;
</span><span class="cx"> &lt;script src='../resources/testharnessreport.js'&gt;&lt;/script&gt;
</span><span class="cx"> &lt;script&gt;
</span><ins>+
</ins><span class="cx"> test(function() {
</span><del>-    Promise = function() { throw new Error(&quot;nasty things&quot;); };
</del><ins>+    const PromiseBackup = Promise;
</ins><span class="cx"> 
</span><del>-    const rs = new ReadableStream(); // Does not throw.
-    const ws = new WritableStream(); // Does not throw.
-}, 'Streams can be built even if Promise constructor is replaced');
</del><ins>+    try {
+        Promise = function() { assert_unreached(&quot;streams should not use this Promise object&quot;); };
+
+        new ReadableStream();
+        new WritableStream();
+    } finally {
+        Promise = PromiseBackup;
+    }
+}, 'Streams implementation is not affected if Promise constructor is replaced');
+
+test(function() {
+    const PromiseResolveBackup = Promise.resolve;
+
+    try {
+        Promise.resolve = function() { assert_unreached(&quot;streams should not use this Promise.resolve method&quot;); };
+
+        new ReadableStream();
+        new WritableStream();
+    } finally {
+        Promise.resolve = PromiseResolveBackup;
+    }
+}, 'Streams implementation is not affected if Promise.resolve is replaced');
+
+test(function() {
+    const PromiseRejectBackup = Promise.reject;
+
+    try {
+        Promise.reject = function() { assert_unreached(&quot;streams should not use this Promise.reject method&quot;); };
+
+        ReadableStream.prototype.cancel.call({}, &quot;reason&quot;);
+        WritableStream.prototype.abort.call({}, &quot;reason&quot;);
+    } finally {
+        Promise.reject = PromiseRejectBackup;
+    }
+}, 'Streams implementation is not affected if Promise.reject is replaced');
</ins><span class="cx"> &lt;/script&gt;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2015-11-05  Xabier Rodriguez Calvar  &lt;calvaris@igalia.com&gt;
+
+        [Streams API] Shield implementation from user mangling Promise.reject and resolve methods
+        https://bugs.webkit.org/show_bug.cgi?id=150895
+
+        Reviewed by Youenn Fablet.
+
+        Keep Promise.resolve and reject also as internal slots for the Promise constructor given that there is no way to
+        retrieve the former implementation if the user decides to replace it. This allows to safely create vended
+        promises even if the user changes the constructor methods.
+
+        * runtime/JSPromiseConstructor.h:
+        * runtime/JSPromiseConstructor.cpp:
+        (JSC::JSPromiseConstructor::addOwnInternalSlots): Added to include @reject and @resolve.
+        (JSC::JSPromiseConstructor::create): Call addOwnInternalSlots.
+
</ins><span class="cx"> 2015-11-04  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [JSC] Add B3-to-Air lowering for the shift opcodes
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSPromiseConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include &quot;JSCBuiltins.h&quot;
</span><span class="cx"> #include &quot;JSCJSValueInlines.h&quot;
</span><span class="cx"> #include &quot;JSCellInlines.h&quot;
</span><ins>+#include &quot;JSFunction.h&quot;
</ins><span class="cx"> #include &quot;JSPromise.h&quot;
</span><span class="cx"> #include &quot;JSPromisePrototype.h&quot;
</span><span class="cx"> #include &quot;Lookup.h&quot;
</span><span class="lines">@@ -64,6 +65,7 @@
</span><span class="cx"> {
</span><span class="cx">     JSPromiseConstructor* constructor = new (NotNull, allocateCell&lt;JSPromiseConstructor&gt;(vm.heap)) JSPromiseConstructor(vm, structure);
</span><span class="cx">     constructor-&gt;finishCreation(vm, promisePrototype);
</span><ins>+    constructor-&gt;addOwnInternalSlots(vm, structure-&gt;globalObject());
</ins><span class="cx">     return constructor;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -84,6 +86,12 @@
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void JSPromiseConstructor::addOwnInternalSlots(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    JSC_BUILTIN_FUNCTION(vm.propertyNames-&gt;builtinNames().resolvePrivateName(), promiseConstructorResolveCodeGenerator, DontEnum | DontDelete | ReadOnly);
+    JSC_BUILTIN_FUNCTION(vm.propertyNames-&gt;builtinNames().rejectPrivateName(), promiseConstructorRejectCodeGenerator, DontEnum | DontDelete | ReadOnly);
+}
+
</ins><span class="cx"> static EncodedJSValue JSC_HOST_CALL constructPromise(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     JSGlobalObject* globalObject = exec-&gt;callee()-&gt;globalObject();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSPromiseConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.h (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.h        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.h        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -52,6 +52,8 @@
</span><span class="cx"> private:
</span><span class="cx">     static ConstructType getConstructData(JSCell*, ConstructData&amp;);
</span><span class="cx">     static CallType getCallData(JSCell*, CallData&amp;);
</span><ins>+
+    void addOwnInternalSlots(VM&amp;, JSGlobalObject*);
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/Source/WebCore/ChangeLog        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -1,3 +1,37 @@
</span><ins>+2015-11-05  Xabier Rodriguez Calvar  &lt;calvaris@igalia.com&gt;
+
+        [Streams API] Shield implementation from user mangling Promise.reject and resolve methods
+        https://bugs.webkit.org/show_bug.cgi?id=150895
+
+        Reviewed by Youenn Fablet.
+
+        Replace all calls to @Promise.resolve and @Promise.reject with their internal slot counterparts. This way we
+        ensure that if the user replaces those constructor methods, our implementation still works.
+
+        Test: streams/streams-promises.html.
+
+        * Modules/streams/ReadableStream.js:
+        (initializeReadableStream):
+        (cancel):
+        * Modules/streams/ReadableStreamInternals.js:
+        (privateInitializeReadableStreamReader):
+        (cancelReadableStream):
+        (readFromReadableStreamReader):
+        * Modules/streams/ReadableStreamReader.js:
+        (cancel):
+        (read):
+        (closed):
+        * Modules/streams/StreamInternals.js:
+        (promiseInvokeOrNoop):
+        (promiseInvokeOrFallbackOrNoop):
+        * Modules/streams/WritableStream.js:
+        (initializeWritableStream):
+        (abort):
+        (close):
+        (write):
+        (closed):
+        (ready):
+
</ins><span class="cx"> 2015-11-05  Andreas Kling  &lt;akling@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Give ResourceUsageOverlay a stacked chart for dirty memory per category.
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesstreamsReadableStreamjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/streams/ReadableStream.js (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/streams/ReadableStream.js        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/Source/WebCore/Modules/streams/ReadableStream.js        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx"> 
</span><span class="cx">     var result = @invokeOrNoop(underlyingSource, &quot;start&quot;, [this.@controller]);
</span><span class="cx">     var _this = this;
</span><del>-    @Promise.resolve(result).then(function() {
</del><ins>+    @Promise.@resolve(result).then(function() {
</ins><span class="cx">         _this.@started = true;
</span><span class="cx">         @requestReadableStreamPull(_this);
</span><span class="cx">     }, function(error) {
</span><span class="lines">@@ -72,10 +72,10 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (!@isReadableStream(this))
</span><del>-        return @Promise.reject(new @TypeError(&quot;Function should be called on a ReadableStream&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;Function should be called on a ReadableStream&quot;));
</ins><span class="cx"> 
</span><span class="cx">     if (@isReadableStreamLocked(this))
</span><del>-        return @Promise.reject(new @TypeError(&quot;ReadableStream is locked&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;ReadableStream is locked&quot;));
</ins><span class="cx"> 
</span><span class="cx">     return @cancelReadableStream(this, reason);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesstreamsReadableStreamInternalsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -48,13 +48,13 @@
</span><span class="cx">     if (stream.@state === @streamClosed) {
</span><span class="cx">         this.@ownerReadableStream = null;
</span><span class="cx">         this.@storedError = undefined;
</span><del>-        this.@closedPromiseCapability = { @promise: @Promise.resolve(undefined) };
</del><ins>+        this.@closedPromiseCapability = { @promise: @Promise.@resolve() };
</ins><span class="cx">         return this;
</span><span class="cx">     }
</span><span class="cx">     // FIXME: ASSERT(stream.@state === @streamErrored);
</span><span class="cx">     this.@ownerReadableStream = null;
</span><span class="cx">     this.@storedError = stream.@storedError;
</span><del>-    this.@closedPromiseCapability = { @promise: @Promise.reject(stream.@storedError) };
</del><ins>+    this.@closedPromiseCapability = { @promise: @Promise.@reject(stream.@storedError) };
</ins><span class="cx"> 
</span><span class="cx">     return this;
</span><span class="cx"> }
</span><span class="lines">@@ -275,9 +275,9 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (stream.@state === @streamClosed)
</span><del>-        return @Promise.resolve();
</del><ins>+        return @Promise.@resolve();
</ins><span class="cx">     if (stream.@state === @streamErrored)
</span><del>-        return @Promise.reject(stream.@storedError);
</del><ins>+        return @Promise.@reject(stream.@storedError);
</ins><span class="cx">     stream.@queue = @newQueue();
</span><span class="cx">     @finishClosingReadableStream(stream);
</span><span class="cx">     return @promiseInvokeOrNoop(stream.@underlyingSource, &quot;cancel&quot;, [reason]).then(function() { });
</span><span class="lines">@@ -354,9 +354,9 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (reader.@state === @streamClosed)
</span><del>-        return @Promise.resolve({value: undefined, done: true});
</del><ins>+        return @Promise.@resolve({value: undefined, done: true});
</ins><span class="cx">     if (reader.@state === @streamErrored)
</span><del>-        return @Promise.reject(reader.@storedError);
</del><ins>+        return @Promise.@reject(reader.@storedError);
</ins><span class="cx">     // FIXME: ASSERT(!!reader.@ownerReadableStream);
</span><span class="cx">     // FIXME: ASSERT(reader.@ownerReadableStream.@state === @streamReadable);
</span><span class="cx">     var stream = reader.@ownerReadableStream;
</span><span class="lines">@@ -366,7 +366,7 @@
</span><span class="cx">             @requestReadableStreamPull(stream);
</span><span class="cx">         else if (!stream.@queue.content.length)
</span><span class="cx">             @finishClosingReadableStream(stream);
</span><del>-        return @Promise.resolve({value: chunk, done: false});
</del><ins>+        return @Promise.@resolve({value: chunk, done: false});
</ins><span class="cx">     }
</span><span class="cx">     var readPromiseCapability = @newPromiseCapability(@Promise);
</span><span class="cx">     reader.@readRequests.push(readPromiseCapability);
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesstreamsReadableStreamReaderjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamReader.js (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/streams/ReadableStreamReader.js        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamReader.js        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -30,13 +30,13 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (!@isReadableStreamReader(this))
</span><del>-        return @Promise.reject(new @TypeError(&quot;Function should be called on a ReadableStreamReader&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;Function should be called on a ReadableStreamReader&quot;));
</ins><span class="cx"> 
</span><span class="cx">     if (this.@state === @streamClosed)
</span><del>-        return @Promise.resolve();
</del><ins>+        return @Promise.@resolve();
</ins><span class="cx"> 
</span><span class="cx">     if (this.@state === @streamErrored)
</span><del>-        return @Promise.reject(this.@storedError);
</del><ins>+        return @Promise.@reject(this.@storedError);
</ins><span class="cx"> 
</span><span class="cx">     // FIXME: ASSERT(@isReadableStream(this.@ownerReadableStream));
</span><span class="cx">     // FIXME: ASSERT(this.@ownerReadableStream.@state === @streamReadable);
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (!@isReadableStreamReader(this))
</span><del>-        return @Promise.reject(new @TypeError(&quot;Function should be called on a ReadableStreamReader&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;Function should be called on a ReadableStreamReader&quot;));
</ins><span class="cx"> 
</span><span class="cx">     return @readFromReadableStreamReader(this);
</span><span class="cx"> }
</span><span class="lines">@@ -74,7 +74,7 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (!@isReadableStreamReader(this))
</span><del>-        return @Promise.reject(new @TypeError(&quot;Callee of closed is not a ReadableStreamReader&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;Callee of closed is not a ReadableStreamReader&quot;));
</ins><span class="cx"> 
</span><span class="cx">     return this.@closedPromiseCapability.@promise;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesstreamsStreamInternalsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/streams/StreamInternals.js (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/streams/StreamInternals.js        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/Source/WebCore/Modules/streams/StreamInternals.js        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -44,12 +44,12 @@
</span><span class="cx">     try {
</span><span class="cx">         var method = object[key];
</span><span class="cx">         if (typeof method === &quot;undefined&quot;)
</span><del>-            return @Promise.resolve();
</del><ins>+            return @Promise.@resolve();
</ins><span class="cx">         var result = method.@apply(object, args);
</span><del>-        return @Promise.resolve(result);
</del><ins>+        return @Promise.@resolve(result);
</ins><span class="cx">     }
</span><span class="cx">     catch(error) {
</span><del>-        return @Promise.reject(error);
</del><ins>+        return @Promise.@reject(error);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> }
</span><span class="lines">@@ -63,10 +63,10 @@
</span><span class="cx">         if (typeof method === &quot;undefined&quot;)
</span><span class="cx">             return @promiseInvokeOrNoop(object, key2, args2);
</span><span class="cx">         const result = method.@apply(object, args1);
</span><del>-        return @Promise.resolve(result);
</del><ins>+        return @Promise.@resolve(result);
</ins><span class="cx">     }
</span><span class="cx">     catch(error) {
</span><del>-        return @Promise.reject(error);
</del><ins>+        return @Promise.@reject(error);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesstreamsWritableStreamjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/streams/WritableStream.js (192056 => 192057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/streams/WritableStream.js        2015-11-05 11:36:15 UTC (rev 192056)
+++ trunk/Source/WebCore/Modules/streams/WritableStream.js        2015-11-05 14:01:13 UTC (rev 192057)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx"> 
</span><span class="cx">     this.@underlyingSink = underlyingSink;
</span><span class="cx">     this.@closedPromiseCapability = @newPromiseCapability(@Promise);
</span><del>-    this.@readyPromiseCapability = { @promise: @Promise.resolve(undefined) };
</del><ins>+    this.@readyPromiseCapability = { @promise: @Promise.@resolve() };
</ins><span class="cx">     this.@queue = @newQueue();
</span><span class="cx">     this.@state = @streamWritable;
</span><span class="cx">     this.@started = false;
</span><span class="lines">@@ -55,7 +55,7 @@
</span><span class="cx"> 
</span><span class="cx">     var error = @errorWritableStream.bind(this);
</span><span class="cx">     var startResult = @invokeOrNoop(underlyingSink, &quot;start&quot;, [error]);
</span><del>-    this.@startedPromise = @Promise.resolve(startResult);
</del><ins>+    this.@startedPromise = @Promise.@resolve(startResult);
</ins><span class="cx">     var _this = this;
</span><span class="cx">     this.@startedPromise.then(function() {
</span><span class="cx">         _this.@started = true;
</span><span class="lines">@@ -70,13 +70,13 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (!@isWritableStream(this))
</span><del>-        return @Promise.reject(new @TypeError(&quot;The WritableStream.abort method can only be used on instances of WritableStream&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;The WritableStream.abort method can only be used on instances of WritableStream&quot;));
</ins><span class="cx"> 
</span><span class="cx">     if (this.@state === @streamClosed)
</span><del>-        return @Promise.resolve(undefined);
</del><ins>+        return @Promise.@resolve();
</ins><span class="cx"> 
</span><span class="cx">     if (this.@state === @streamErrored)
</span><del>-        return @Promise.reject(this.@storedError);
</del><ins>+        return @Promise.@reject(this.@storedError);
</ins><span class="cx"> 
</span><span class="cx">     @errorWritableStream.@apply(this, [reason]);
</span><span class="cx"> 
</span><span class="lines">@@ -90,13 +90,13 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (!@isWritableStream(this))
</span><del>-        return @Promise.reject(new @TypeError(&quot;The WritableStream.close method can only be used on instances of WritableStream&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;The WritableStream.close method can only be used on instances of WritableStream&quot;));
</ins><span class="cx"> 
</span><span class="cx">     if (this.@state === @streamClosed || this.@state === @streamClosing)
</span><del>-        return @Promise.reject(new @TypeError(&quot;Cannot close a WritableString that is closed or closing&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;Cannot close a WritableString that is closed or closing&quot;));
</ins><span class="cx"> 
</span><span class="cx">     if (this.@state === @streamErrored)
</span><del>-        return @Promise.reject(this.@storedError);
</del><ins>+        return @Promise.@reject(this.@storedError);
</ins><span class="cx"> 
</span><span class="cx">     if (this.@state === @streamWaiting)
</span><span class="cx">         this.@readyPromiseCapability.@resolve.@call(undefined, undefined);
</span><span class="lines">@@ -113,13 +113,13 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (!@isWritableStream(this))
</span><del>-        return @Promise.reject(new @TypeError(&quot;The WritableStream.close method can only be used on instances of WritableStream&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;The WritableStream.close method can only be used on instances of WritableStream&quot;));
</ins><span class="cx"> 
</span><span class="cx">     if (this.@state === @streamClosed || this.@state === @streamClosing)
</span><del>-        return @Promise.reject(new @TypeError(&quot;Cannot write on a WritableString that is closed or closing&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;Cannot write on a WritableString that is closed or closing&quot;));
</ins><span class="cx"> 
</span><span class="cx">     if (this.@state === @streamErrored)
</span><del>-        return @Promise.reject(this.@storedError);
</del><ins>+        return @Promise.@reject(this.@storedError);
</ins><span class="cx"> 
</span><span class="cx">     // FIXME
</span><span class="cx">     // assert(this.@state === @streamWritable || this.@state === @streamWaiting);
</span><span class="lines">@@ -130,7 +130,7 @@
</span><span class="cx">             chunkSize = this.@strategy.size.@call(undefined, chunk);
</span><span class="cx">         } catch(e) {
</span><span class="cx">             @errorWritableStream.@call(this, e);
</span><del>-            return @Promise.reject(e);
</del><ins>+            return @Promise.@reject(e);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -139,7 +139,7 @@
</span><span class="cx">         @enqueueValueWithSize(this.@queue, { promiseCapability: promiseCapability, chunk: chunk }, chunkSize);
</span><span class="cx">     } catch (e) {
</span><span class="cx">         @errorWritableStream.@call(this, e);
</span><del>-        return @Promise.reject(e);
</del><ins>+        return @Promise.@reject(e);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     @syncWritableStreamStateWithQueue(this);
</span><span class="lines">@@ -153,7 +153,7 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (!@isWritableStream(this))
</span><del>-        return @Promise.reject(new @TypeError(&quot;The WritableStream.closed getter can only be used on instances of WritableStream&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;The WritableStream.closed getter can only be used on instances of WritableStream&quot;));
</ins><span class="cx"> 
</span><span class="cx">     return this.@closedPromiseCapability.@promise;
</span><span class="cx"> }
</span><span class="lines">@@ -163,7 +163,7 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (!@isWritableStream(this))
</span><del>-        return @Promise.reject(new @TypeError(&quot;The WritableStream.ready getter can only be used on instances of WritableStream&quot;));
</del><ins>+        return @Promise.@reject(new @TypeError(&quot;The WritableStream.ready getter can only be used on instances of WritableStream&quot;));
</ins><span class="cx"> 
</span><span class="cx">     return this.@readyPromiseCapability.@promise;
</span><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>