<!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>[191335] trunk/Source</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/191335">191335</a></dd>
<dt>Author</dt> <dd>calvaris@igalia.com</dd>
<dt>Date</dt> <dd>2015-10-20 02:51:09 -0700 (Tue, 20 Oct 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Streams API] Rework some readable stream internals that can be common to writable streams
https://bugs.webkit.org/show_bug.cgi?id=150133

Reviewed by Darin Adler.

Source/JavaScriptCore:

* runtime/CommonIdentifiers.h:
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init): Added RangeError also as native functions.

Source/WebCore:

There are some things in ReadableStream internals that be be used also for Writable Streams so it was necessary
to move some functions and refactor some code that can be shared by both implementations.

Queue was written with the functions declared at the implementation and keeping the improvement of having the
total size calculated instead of having to transverse the whole array.

The strategy is kept as an object and a common method is used to validate it as per spec.

Promises are reworked to keep in an internal slot inside the promise object the resolve and reject
functions. For convinience three functions were written, one to create the promise (and keep internally the
resolve and reject functions), one to resolve and another to reject. Promises can still be created with
Promise.resolve or reject as the resolve and rejectStreamsPromise functions operate under the assumption that
the internal slots might not exist.

invokeOrNoop and promiseInvokeOrNoop were moved to the common code as they will be also used by WritableStream.

Current test set suffices.

* CMakeLists.txt:
* DerivedSources.make:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/JSDOMWindowBase.cpp:
* bindings/js/WebCoreJSBuiltinInternals.h:
* bindings/js/WebCoreJSBuiltins.cpp:
* bindings/js/WebCoreJSBuiltins.h: Build infrastructure.
* Modules/streams/ReadableStream.js:
(initializeReadableStream): Reworked queue and strategy.
* Modules/streams/ReadableStreamInternals.js:
(privateInitializeReadableStreamReader):
(errorReadableStream):
(getReadableStreamDesiredSize):
(cancelReadableStream):
(closeReadableStream):
(closeReadableStreamReader):
(enqueueInReadableStream):
(readFromReadableStreamReader): Reworked queue, strategy and promises.
(invokeOrNoop): Deleted.
(promiseInvokeOrNoop): Deleted.
* Modules/streams/StreamInternals.js: Added.
(invokeOrNoop):
(promiseInvokeOrNoop): Moved from ReadableStreamInternals.js.
(validateAndNormalizeQueuingStrategy):
(createNewStreamsPromise):
(resolveStreamsPromise):
(rejectStreamsPromise):
(newQueue):
(dequeueValue):
(enqueueValueWithSize): Added according to the spec.
* bindings/js/WebCoreBuiltinNames.h: Updated private names according to the new slots.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCommonIdentifiersh">trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp</a></li>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreDerivedSourcesmake">trunk/Source/WebCore/DerivedSources.make</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="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMWindowBasecpp">trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsWebCoreBuiltinNamesh">trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsWebCoreJSBuiltinInternalsh">trunk/Source/WebCore/bindings/js/WebCoreJSBuiltinInternals.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsWebCoreJSBuiltinscpp">trunk/Source/WebCore/bindings/js/WebCoreJSBuiltins.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsWebCoreJSBuiltinsh">trunk/Source/WebCore/bindings/js/WebCoreJSBuiltins.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreModulesstreamsStreamInternalsjs">trunk/Source/WebCore/Modules/streams/StreamInternals.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2015-10-20  Xabier Rodriguez Calvar  &lt;calvaris@igalia.com&gt;
+
+        [Streams API] Rework some readable stream internals that can be common to writable streams
+        https://bugs.webkit.org/show_bug.cgi?id=150133
+
+        Reviewed by Darin Adler.
+
+        * runtime/CommonIdentifiers.h:
+        * runtime/JSGlobalObject.cpp:
+        (JSC::JSGlobalObject::init): Added RangeError also as native functions.
+
</ins><span class="cx"> 2015-10-20  Yoav Weiss  &lt;yoav@yoav.ws&gt;
</span><span class="cx"> 
</span><span class="cx">         Rename the PICTURE_SIZES flag to CURRENTSRC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCommonIdentifiersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -291,6 +291,7 @@
</span><span class="cx">     macro(isFinite) \
</span><span class="cx">     macro(getPrototypeOf) \
</span><span class="cx">     macro(getOwnPropertyNames) \
</span><ins>+    macro(RangeError) \
</ins><span class="cx">     macro(TypeError) \
</span><span class="cx">     macro(typedArrayLength) \
</span><span class="cx">     macro(typedArraySort) \
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -516,6 +516,7 @@
</span><span class="cx">         GlobalPropertyInfo(vm.propertyNames-&gt;ownEnumerablePropertyKeysPrivateName, JSFunction::create(vm, this, 0, String(), ownEnumerablePropertyKeys), DontEnum | DontDelete | ReadOnly),
</span><span class="cx">         GlobalPropertyInfo(vm.propertyNames-&gt;getTemplateObjectPrivateName, privateFuncGetTemplateObject, DontEnum | DontDelete | ReadOnly),
</span><span class="cx">         GlobalPropertyInfo(vm.propertyNames-&gt;enqueueJobPrivateName, JSFunction::create(vm, this, 0, String(), enqueueJob), DontEnum | DontDelete | ReadOnly),
</span><ins>+        GlobalPropertyInfo(vm.propertyNames-&gt;RangeErrorPrivateName, m_rangeErrorConstructor.get(), DontEnum | DontDelete | ReadOnly),
</ins><span class="cx">         GlobalPropertyInfo(vm.propertyNames-&gt;TypeErrorPrivateName, m_typeErrorConstructor.get(), DontEnum | DontDelete | ReadOnly),
</span><span class="cx">         GlobalPropertyInfo(vm.propertyNames-&gt;typedArrayLengthPrivateName, privateFuncTypedArrayLength, DontEnum | DontDelete | ReadOnly),
</span><span class="cx">         GlobalPropertyInfo(vm.propertyNames-&gt;typedArraySortPrivateName, privateFuncTypedArraySort, DontEnum | DontDelete | ReadOnly),
</span></span></pre></div>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/WebCore/CMakeLists.txt        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -3369,6 +3369,7 @@
</span><span class="cx">     ${WEBCORE_DIR}/Modules/streams/ReadableStreamController.js
</span><span class="cx">     ${WEBCORE_DIR}/Modules/streams/ReadableStreamInternals.js
</span><span class="cx">     ${WEBCORE_DIR}/Modules/streams/ReadableStreamReader.js
</span><ins>+    ${WEBCORE_DIR}/Modules/streams/StreamInternals.js
</ins><span class="cx">     ${WEBCORE_DIR}/Modules/streams/WritableStream.js
</span><span class="cx"> )
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/WebCore/ChangeLog        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -1,3 +1,60 @@
</span><ins>+2015-10-20  Xabier Rodriguez Calvar  &lt;calvaris@igalia.com&gt;
+
+        [Streams API] Rework some readable stream internals that can be common to writable streams
+        https://bugs.webkit.org/show_bug.cgi?id=150133
+
+        Reviewed by Darin Adler.
+
+        There are some things in ReadableStream internals that be be used also for Writable Streams so it was necessary
+        to move some functions and refactor some code that can be shared by both implementations.
+
+        Queue was written with the functions declared at the implementation and keeping the improvement of having the
+        total size calculated instead of having to transverse the whole array.
+
+        The strategy is kept as an object and a common method is used to validate it as per spec.
+
+        Promises are reworked to keep in an internal slot inside the promise object the resolve and reject
+        functions. For convinience three functions were written, one to create the promise (and keep internally the
+        resolve and reject functions), one to resolve and another to reject. Promises can still be created with
+        Promise.resolve or reject as the resolve and rejectStreamsPromise functions operate under the assumption that
+        the internal slots might not exist.
+
+        invokeOrNoop and promiseInvokeOrNoop were moved to the common code as they will be also used by WritableStream.
+
+        Current test set suffices.
+
+        * CMakeLists.txt:
+        * DerivedSources.make:
+        * WebCore.xcodeproj/project.pbxproj:
+        * bindings/js/JSDOMWindowBase.cpp:
+        * bindings/js/WebCoreJSBuiltinInternals.h:
+        * bindings/js/WebCoreJSBuiltins.cpp:
+        * bindings/js/WebCoreJSBuiltins.h: Build infrastructure.
+        * Modules/streams/ReadableStream.js:
+        (initializeReadableStream): Reworked queue and strategy.
+        * Modules/streams/ReadableStreamInternals.js:
+        (privateInitializeReadableStreamReader):
+        (errorReadableStream):
+        (getReadableStreamDesiredSize):
+        (cancelReadableStream):
+        (closeReadableStream):
+        (closeReadableStreamReader):
+        (enqueueInReadableStream):
+        (readFromReadableStreamReader): Reworked queue, strategy and promises.
+        (invokeOrNoop): Deleted.
+        (promiseInvokeOrNoop): Deleted.
+        * Modules/streams/StreamInternals.js: Added.
+        (invokeOrNoop):
+        (promiseInvokeOrNoop): Moved from ReadableStreamInternals.js.
+        (validateAndNormalizeQueuingStrategy):
+        (createNewStreamsPromise):
+        (resolveStreamsPromise):
+        (rejectStreamsPromise):
+        (newQueue):
+        (dequeueValue):
+        (enqueueValueWithSize): Added according to the spec.
+        * bindings/js/WebCoreBuiltinNames.h: Updated private names according to the new slots.
+
</ins><span class="cx"> 2015-10-20  Yoav Weiss  &lt;yoav@yoav.ws&gt;
</span><span class="cx"> 
</span><span class="cx">         Rename the PICTURE_SIZES flag to CURRENTSRC
</span></span></pre></div>
<a id="trunkSourceWebCoreDerivedSourcesmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/DerivedSources.make (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/DerivedSources.make        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/WebCore/DerivedSources.make        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -1264,6 +1264,7 @@
</span><span class="cx">     $(WebCore)/Modules/streams/ReadableStreamController.js \
</span><span class="cx">     $(WebCore)/Modules/streams/ReadableStreamInternals.js \
</span><span class="cx">     $(WebCore)/Modules/streams/ReadableStreamReader.js \
</span><ins>+    $(WebCore)/Modules/streams/StreamInternals.js \
</ins><span class="cx">     $(WebCore)/Modules/streams/WritableStream.js \
</span><span class="cx"> #
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesstreamsReadableStreamjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/streams/ReadableStream.js (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/streams/ReadableStream.js        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/WebCore/Modules/streams/ReadableStream.js        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) 2015 Canon Inc.
</span><ins>+ * Copyright (C) 2015 Igalia.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -42,8 +43,7 @@
</span><span class="cx"> 
</span><span class="cx">     this.@underlyingSource = underlyingSource;
</span><span class="cx"> 
</span><del>-    this.@queue = [];
-    this.@queueSize = 0;
</del><ins>+    this.@queue = @newQueue();
</ins><span class="cx">     this.@state = @readableStreamReadable;
</span><span class="cx">     this.@started = false;
</span><span class="cx">     this.@closeRequested = false;
</span><span class="lines">@@ -52,14 +52,8 @@
</span><span class="cx">     this.@reader = undefined;
</span><span class="cx">     this.@storedError = undefined;
</span><span class="cx">     this.@controller = new @ReadableStreamController(this);
</span><del>-    this.@strategySize = strategy.size;
-    this.@highWaterMark = Number(strategy.highWaterMark);
</del><ins>+    this.@strategy = @validateAndNormalizeQueuingStrategy(strategy.size, strategy.highWaterMark);
</ins><span class="cx"> 
</span><del>-    if (Number.isNaN(this.@highWaterMark))
-        throw new TypeError(&quot;highWaterMark parameter is not correct&quot;);
-    if (this.@highWaterMark &lt; 0)
-        throw new RangeError(&quot;highWaterMark is negative&quot;);
-
</del><span class="cx">     var result = @invokeOrNoop(underlyingSource, &quot;start&quot;, [this.@controller]);
</span><span class="cx">     var _this = this;
</span><span class="cx">     Promise.resolve(result).then(function() {
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesstreamsReadableStreamInternalsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) 2015 Canon Inc. All rights reserved.
</span><ins>+ * Copyright (C) 2015 Igalia.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -41,10 +42,7 @@
</span><span class="cx">         this.@ownerReadableStream = stream;
</span><span class="cx">         this.@storedError = undefined;
</span><span class="cx">         stream.@reader = this;
</span><del>-        this.@closedPromise = new Promise(function(resolve, reject) {
-            stream.@reader.@closedPromiseResolve = resolve;
-            stream.@reader.@closedPromiseReject = reject;
-        });
</del><ins>+        this.@closedPromise = @createNewStreamsPromise();
</ins><span class="cx">         return this;
</span><span class="cx">     }
</span><span class="cx">     if (stream.@state === @readableStreamClosed) {
</span><span class="lines">@@ -199,7 +197,7 @@
</span><span class="cx">     &quot;use strict&quot;;
</span><span class="cx"> 
</span><span class="cx">     // TODO: ASSERT(stream.@state === @readableStreamReadable);
</span><del>-    stream.@queue = [];
</del><ins>+    stream.@queue = @newQueue();
</ins><span class="cx">     stream.@storedError = error;
</span><span class="cx">     stream.@state = @readableStreamErrored;
</span><span class="cx"> 
</span><span class="lines">@@ -209,14 +207,14 @@
</span><span class="cx"> 
</span><span class="cx">     var requests = reader.@readRequests;
</span><span class="cx">     for (var index = 0, length = requests.length; index &lt; length; ++index)
</span><del>-        requests[index].reject(error);
</del><ins>+        @rejectStreamsPromise(requests[index], error);
</ins><span class="cx">     reader.@readRequests = [];
</span><span class="cx"> 
</span><span class="cx">     @releaseReadableStreamReader(reader);
</span><span class="cx">     reader.@storedError = error;
</span><span class="cx">     reader.@state = @readableStreamErrored;
</span><span class="cx"> 
</span><del>-    reader.@closedPromiseReject(error);
</del><ins>+    @rejectStreamsPromise(reader.@closedPromise, error);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> function requestReadableStreamPull(stream)
</span><span class="lines">@@ -262,7 +260,7 @@
</span><span class="cx"> {
</span><span class="cx">    &quot;use strict&quot;;
</span><span class="cx"> 
</span><del>-   return stream.@highWaterMark - stream.@queueSize;
</del><ins>+   return stream.@strategy.highWaterMark - stream.@queue.size;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> function releaseReadableStreamReader(reader)
</span><span class="lines">@@ -281,7 +279,7 @@
</span><span class="cx">         return Promise.resolve();
</span><span class="cx">     if (stream.@state === @readableStreamErrored)
</span><span class="cx">         return Promise.reject(stream.@storedError);
</span><del>-    stream.@queue = [];
</del><ins>+    stream.@queue = @newQueue();
</ins><span class="cx">     @finishClosingReadableStream(stream);
</span><span class="cx">     return @promiseInvokeOrNoop(stream.@underlyingSource, &quot;cancel&quot;, [reason]).then(function() { });
</span><span class="cx"> }
</span><span class="lines">@@ -306,7 +304,7 @@
</span><span class="cx">     if (stream.@state === @readableStreamClosed)
</span><span class="cx">         return; 
</span><span class="cx">     stream.@closeRequested = true;
</span><del>-    if (!stream.@queue.length)
</del><ins>+    if (!stream.@queue.content.length)
</ins><span class="cx">         @finishClosingReadableStream(stream);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -316,11 +314,11 @@
</span><span class="cx"> 
</span><span class="cx">     var requests = reader.@readRequests;
</span><span class="cx">     for (var index = 0, length = requests.length; index &lt; length; ++index)
</span><del>-        requests[index].resolve({value:undefined, done: true});
</del><ins>+        @resolveStreamsPromise(requests[index], {value:undefined, done: true});
</ins><span class="cx">     reader.@readRequests = [];
</span><span class="cx">     @releaseReadableStreamReader(reader);
</span><span class="cx">     reader.@state = @readableStreamClosed;
</span><del>-    reader.@closedPromiseResolve();
</del><ins>+    @resolveStreamsPromise(reader.@closedPromise);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> function enqueueInReadableStream(stream, chunk)
</span><span class="lines">@@ -332,19 +330,18 @@
</span><span class="cx">     if (stream.@state === @readableStreamClosed)
</span><span class="cx">         return undefined;
</span><span class="cx">     if (@isReadableStreamLocked(stream) &amp;&amp; stream.@reader.@readRequests.length) {
</span><del>-        stream.@reader.@readRequests.shift().resolve({value: chunk, done: false});
</del><ins>+        @resolveStreamsPromise(stream.@reader.@readRequests.shift(), {value: chunk, done: false});
</ins><span class="cx">         @requestReadableStreamPull(stream);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     try {
</span><span class="cx">         var size = 1;
</span><del>-        if (stream.@strategySize) {
-            size = Number(stream.@strategySize(chunk));
</del><ins>+        if (stream.@strategy.size) {
+            size = Number(stream.@strategy.size(chunk));
</ins><span class="cx">             if (Number.isNaN(size) || size === +Infinity || size &lt; 0)
</span><span class="cx">                 throw new RangeError(&quot;Chunk size is not valid&quot;);
</span><span class="cx">         }
</span><del>-        stream.@queue.push({ value: chunk, size: size });
-        stream.@queueSize += size;
</del><ins>+        @enqueueValueWithSize(stream.@queue, chunk, size);
</ins><span class="cx">     }
</span><span class="cx">     catch(error) {
</span><span class="cx">         @errorReadableStream(stream, error);
</span><span class="lines">@@ -364,47 +361,16 @@
</span><span class="cx">     // TODO: ASSERT(!!reader.@ownerReadableStream);
</span><span class="cx">     // TODO: ASSERT(reader.@ownerReadableStream.@state === @readableStreamReadable);
</span><span class="cx">     var stream = reader.@ownerReadableStream;
</span><del>-    if (stream.@queue.length) {
-        var chunk = stream.@queue.shift();
-        stream.@queueSize -= chunk.size;
</del><ins>+    if (stream.@queue.content.length) {
+        var chunk = @dequeueValue(stream.@queue);
</ins><span class="cx">         if (!stream.@closeRequested)
</span><span class="cx">             @requestReadableStreamPull(stream);
</span><del>-        else if (!stream.@queue.length)
</del><ins>+        else if (!stream.@queue.content.length)
</ins><span class="cx">             @finishClosingReadableStream(stream);
</span><del>-        return Promise.resolve({value: chunk.value, done: false});
</del><ins>+        return Promise.resolve({value: chunk, done: false});
</ins><span class="cx">     }
</span><del>-    var readRequest = {};
-    var readPromise = new Promise(function(resolve, reject) {
-        readRequest.resolve = resolve;
-        readRequest.reject = reject;
-    });
-    reader.@readRequests.push(readRequest);
</del><ins>+    var readPromise = @createNewStreamsPromise();
+    reader.@readRequests.push(readPromise);
</ins><span class="cx">     @requestReadableStreamPull(stream);
</span><span class="cx">     return readPromise;
</span><span class="cx"> }
</span><del>-
-function invokeOrNoop(object, key, args)
-{
-    &quot;use strict&quot;;
-
-    var method = object[key];
-    if (typeof method === &quot;undefined&quot;)
-        return;
-    return method.@apply(object, args);
-}
-
-function promiseInvokeOrNoop(object, key, args)
-{
-    &quot;use strict&quot;;
-
-    try {
-        var method = object[key];
-        if (typeof method === &quot;undefined&quot;)
-            return Promise.resolve();
-        var result = method.@apply(object, args);
-        return Promise.resolve(result);
-    }
-    catch(error) {
-        return Promise.reject(error);
-    }
-}
</del></span></pre></div>
<a id="trunkSourceWebCoreModulesstreamsStreamInternalsjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Modules/streams/StreamInternals.js (0 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/streams/StreamInternals.js                                (rev 0)
+++ trunk/Source/WebCore/Modules/streams/StreamInternals.js        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -0,0 +1,137 @@
</span><ins>+/*
+ * Copyright (C) 2015 Canon Inc.
+ * Copyright (C) 2015 Igalia.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// @optional=STREAMS_API
+// @internals
+
+function invokeOrNoop(object, key, args)
+{
+    &quot;use strict&quot;;
+
+    var method = object[key];
+    if (typeof method === &quot;undefined&quot;)
+        return;
+    return method.@apply(object, args);
+}
+
+function promiseInvokeOrNoop(object, key, args)
+{
+    &quot;use strict&quot;;
+
+    try {
+        var method = object[key];
+        if (typeof method === &quot;undefined&quot;)
+            return Promise.resolve();
+        var result = method.@apply(object, args);
+        return Promise.resolve(result);
+    }
+    catch(error) {
+        return Promise.reject(error);
+    }
+
+}
+
+function validateAndNormalizeQueuingStrategy(size, highWaterMark)
+{
+    &quot;use strict&quot;;
+
+    if (size !== undefined &amp;&amp; typeof size !== &quot;function&quot;)
+        throw new @TypeError(&quot;size parameter must be a function&quot;);
+
+    var normalizedStrategy = { };
+
+    normalizedStrategy.size = size;
+    normalizedStrategy.highWaterMark = Number(highWaterMark);
+
+    if (Number.isNaN(normalizedStrategy.highWaterMark))
+        throw new @TypeError(&quot;highWaterMark parameter is not a number&quot;);
+    if (normalizedStrategy.highWaterMark &lt; 0)
+        throw new @RangeError(&quot;highWaterMark is negative&quot;);
+
+    return normalizedStrategy;
+}
+
+function createNewStreamsPromise()
+{
+    &quot;use strict&quot;;
+
+    var resolveFunction;
+    var rejectFunction;
+    var promise = new Promise(function(resolve, reject) {
+        resolveFunction = resolve;
+        rejectFunction = reject;
+    });
+    promise.@resolve = resolveFunction;
+    promise.@reject = rejectFunction;
+    return promise;
+}
+
+function resolveStreamsPromise(promise, value)
+{
+    &quot;use strict&quot;;
+
+    if (promise &amp;&amp; promise.@resolve) {
+        promise.@resolve(value);
+        promise.@resolve = undefined;
+        promise.@reject = undefined;
+    }
+}
+
+function rejectStreamsPromise(promise, value)
+{
+    &quot;use strict&quot;;
+
+    if (promise &amp;&amp; promise.@reject) {
+        promise.@reject(value);
+        promise.@resolve = undefined;
+        promise.@reject = undefined;
+    }
+}
+
+function newQueue()
+{
+    return { content: [], size: 0 };
+}
+
+function dequeueValue(queue)
+{
+    &quot;use strict&quot;;
+
+    var record = queue.content.shift();
+    queue.size -= record.size;
+    return record.value;
+}
+
+function enqueueValueWithSize(queue, value, size)
+{
+    size = Number(size);
+    if (Number.isNaN(size) || !Number.isFinite(size) || size &lt; 0)
+        throw new @RangeError(&quot;size has an incorrect value&quot;);
+    queue.content.push({ value: value, size: size });
+    queue.size += size;
+
+    return undefined;
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -1515,6 +1515,8 @@
</span><span class="cx">                 4162A4571011464700DFF3ED /* JSDedicatedWorkerGlobalScope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4162A4551011464700DFF3ED /* JSDedicatedWorkerGlobalScope.cpp */; };
</span><span class="cx">                 4162A4581011464700DFF3ED /* JSDedicatedWorkerGlobalScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 4162A4561011464700DFF3ED /* JSDedicatedWorkerGlobalScope.h */; };
</span><span class="cx">                 416E29A6102FA962007FC14E /* WorkerReportingProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 416E29A5102FA962007FC14E /* WorkerReportingProxy.h */; };
</span><ins>+                416E6FE81BBD12DF000A6033 /* StreamInternalsBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764C9 /* StreamInternalsBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                416E6FEA1BBD1684000A6034 /* StreamInternalsBuiltinsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8071BB3110D00B764CA /* StreamInternalsBuiltinsWrapper.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 416E6FE81BBD12DF000A6043 /* ReadableStreamInternalsBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764D9 /* ReadableStreamInternalsBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 416E6FE91BBD12E5000A6043 /* ReadableStreamBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764D8 /* ReadableStreamBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 416E6FEA1BBD1684000A6044 /* ReadableStreamInternalsBuiltinsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8071BB3110D00B764DA /* ReadableStreamInternalsBuiltinsWrapper.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -11360,6 +11362,8 @@
</span><span class="cx">                 9908B0EC1BCACF1F00ED0F65 /* generate-js-builtins */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = &quot;generate-js-builtins&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9908B0ED1BCACF9100ED0F65 /* ByteLengthQueuingStrategy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ByteLengthQueuingStrategy.js; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9908B0EE1BCACF9100ED0F65 /* CountQueuingStrategy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CountQueuingStrategy.js; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                9908B0F11BCACF9100ED0F55 /* StreamInternals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = StreamInternals.js; sourceTree = &quot;&lt;group&gt;&quot;; };
+                9908B0FD1BCAD07D00ED0F55 /* StreamInternalsBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StreamInternalsBuiltins.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 9908B0EF1BCACF9100ED0F65 /* ReadableStream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ReadableStream.js; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9908B0F01BCACF9100ED0F65 /* ReadableStreamController.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ReadableStreamController.js; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9908B0F11BCACF9100ED0F65 /* ReadableStreamInternals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ReadableStreamInternals.js; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -11416,6 +11420,8 @@
</span><span class="cx">                 9A528E8217D7F52F00AA9518 /* FloatingObjects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FloatingObjects.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9AB1F37E18E2489A00534743 /* CSSToLengthConversionData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSToLengthConversionData.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9AB1F37F18E2489A00534743 /* CSSToLengthConversionData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSToLengthConversionData.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                9B03D8061BB3110D00B764C9 /* StreamInternalsBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StreamInternalsBuiltins.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                9B03D8071BB3110D00B764CA /* StreamInternalsBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StreamInternalsBuiltinsWrapper.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 9B03D8061BB3110D00B764D8 /* ReadableStreamBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamBuiltins.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9B03D8061BB3110D00B764D9 /* ReadableStreamInternalsBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamInternalsBuiltins.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9B03D8071BB3110D00B764D8 /* ReadableStreamBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamBuiltinsWrapper.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -16392,6 +16398,7 @@
</span><span class="cx">                                 4129DF821BB5B7A600322A16 /* ReadableStreamReader.h */,
</span><span class="cx">                                 419FAFAD1ABABCD5005B828B /* ReadableStreamReader.idl */,
</span><span class="cx">                                 9908B0F21BCACF9100ED0F65 /* ReadableStreamReader.js */,
</span><ins>+                                9908B0F11BCACF9100ED0F55 /* StreamInternals.js */,
</ins><span class="cx">                                 41A023ED1A39DB7900F722DF /* WritableStream.idl */,
</span><span class="cx">                                 9908B0EF1BCACF9100ED0F75 /* WritableStream.js */,
</span><span class="cx"> 
</span><span class="lines">@@ -17231,6 +17238,9 @@
</span><span class="cx">                                 26AA0F9D18D2A18B00419381 /* SelectorPseudoElementTypeMap.cpp */,
</span><span class="cx">                                 26AA0F9F18D2A1C100419381 /* SelectorPseudoElementTypeMap.gperf */,
</span><span class="cx">                                 53EF766A16530A61004CBE49 /* SettingsMacros.h */,
</span><ins>+                                9908B0FD1BCAD07D00ED0F55 /* StreamInternalsBuiltins.cpp */,
+                                9B03D8061BB3110D00B764C9 /* StreamInternalsBuiltins.h */,
+                                9B03D8071BB3110D00B764CA /* StreamInternalsBuiltinsWrapper.h */,
</ins><span class="cx">                                 8386A96E19F61E4F00E1EC4A /* StyleBuilder.cpp */,
</span><span class="cx">                                 83C05A581A686212007E5DEA /* StylePropertyShorthandFunctions.cpp */,
</span><span class="cx">                                 83C05A591A686212007E5DEA /* StylePropertyShorthandFunctions.h */,
</span><span class="lines">@@ -27300,6 +27310,8 @@
</span><span class="cx">                                 51E0BB380DA5ACB600A9E417 /* StorageMap.h in Headers */,
</span><span class="cx">                                 C50D0E830FF4272900AC2644 /* StorageNamespace.h in Headers */,
</span><span class="cx">                                 1A37636C1A2E68BB009A7EE2 /* StorageNamespaceProvider.h in Headers */,
</span><ins>+                                416E6FE81BBD12DF000A6033 /* StreamInternalsBuiltins.h in Headers */,
+                                416E6FEA1BBD1684000A6034 /* StreamInternalsBuiltinsWrapper.h in Headers */,
</ins><span class="cx">                                 81AC6C36131C57D30009A7E0 /* StringCallback.h in Headers */,
</span><span class="cx">                                 B23540F30D00782E002382FA /* StringTruncator.h in Headers */,
</span><span class="cx">                                 9B6C41531344949000085B62 /* StringWithDirection.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMWindowBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -50,6 +50,7 @@
</span><span class="cx"> #if ENABLE(STREAMS_API)
</span><span class="cx"> #include &quot;JSReadableStreamPrivateConstructors.h&quot;
</span><span class="cx"> #include &quot;ReadableStreamInternalsBuiltins.h&quot;
</span><ins>+#include &quot;StreamInternalsBuiltins.h&quot;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> using namespace JSC;
</span><span class="lines">@@ -96,6 +97,12 @@
</span><span class="cx">             m_privateFunctions.readableStreamInternals().m_##name##Function.get() , DontDelete | ReadOnly),
</span><span class="cx">         WEBCOREREADABLESTREAMINTERNALS_FOREACH_BUILTIN_FUNCTION_NAME(DECLARE_GLOBAL_STATIC)
</span><span class="cx"> #undef DECLARE_GLOBAL_STATIC
</span><ins>+#define DECLARE_GLOBAL_STATIC(name)\
+        GlobalPropertyInfo(\
+            static_cast&lt;JSVMClientData*&gt;(vm.clientData)-&gt;builtinFunctions().streamInternalsBuiltins().name##PrivateName(), \
+            m_privateFunctions.streamInternals().m_##name##Function.get() , DontDelete | ReadOnly),
+        WEBCORESTREAMINTERNALS_FOREACH_BUILTIN_FUNCTION_NAME(DECLARE_GLOBAL_STATIC)
+#undef DECLARE_GLOBAL_STATIC
</ins><span class="cx"> #endif
</span><span class="cx">     };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsWebCoreBuiltinNamesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -34,17 +34,13 @@
</span><span class="cx"> #define WEBCORE_COMMON_PRIVATE_IDENTIFIERS_EACH_PROPERTY_NAME(macro)\
</span><span class="cx">     macro(closeRequested) \
</span><span class="cx">     macro(closedPromise) \
</span><del>-    macro(closedPromiseResolve) \
-    macro(closedPromiseReject) \
</del><span class="cx">     macro(controlledReadableStream) \
</span><span class="cx">     macro(controller) \
</span><span class="cx">     macro(getUserMediaFromJS) \
</span><del>-    macro(highWaterMark) \
</del><span class="cx">     macro(ownerReadableStream) \
</span><span class="cx">     macro(pulling) \
</span><span class="cx">     macro(pullAgain) \
</span><span class="cx">     macro(queue) \
</span><del>-    macro(queueSize) \
</del><span class="cx">     macro(readableStreamClosed) \
</span><span class="cx">     macro(readableStreamErrored) \
</span><span class="cx">     macro(readableStreamReadable) \
</span><span class="lines">@@ -53,7 +49,7 @@
</span><span class="cx">     macro(state) \
</span><span class="cx">     macro(started) \
</span><span class="cx">     macro(storedError) \
</span><del>-    macro(strategySize) \
</del><ins>+    macro(strategy) \
</ins><span class="cx">     macro(underlyingSource) \
</span><span class="cx">     macro(ReadableStreamReader) \
</span><span class="cx">     macro(ReadableStreamController) \
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsWebCoreJSBuiltinInternalsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/WebCoreJSBuiltinInternals.h (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/WebCoreJSBuiltinInternals.h        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/WebCore/bindings/js/WebCoreJSBuiltinInternals.h        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(STREAMS_API)
</span><span class="cx"> #include &quot;ReadableStreamInternalsBuiltinsWrapper.h&quot;
</span><ins>+#include &quot;StreamInternalsBuiltinsWrapper.h&quot;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -39,15 +40,18 @@
</span><span class="cx">         : vm(v)
</span><span class="cx"> #if ENABLE(STREAMS_API)
</span><span class="cx">         , m_readableStreamInternalsFunctions(vm)
</span><ins>+        , m_streamInternalsFunctions(vm)
</ins><span class="cx"> #endif
</span><span class="cx">     { }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(STREAMS_API)
</span><span class="cx">     ReadableStreamInternalsBuiltinFunctions readableStreamInternals() { return m_readableStreamInternalsFunctions; }
</span><ins>+    StreamInternalsBuiltinFunctions streamInternals() { return m_streamInternalsFunctions; }
</ins><span class="cx"> #endif
</span><span class="cx">     void visit(JSC::SlotVisitor&amp; visitor) {
</span><span class="cx"> #if ENABLE(STREAMS_API)
</span><span class="cx">         m_readableStreamInternalsFunctions.visit(visitor);
</span><ins>+        m_streamInternalsFunctions.visit(visitor);
</ins><span class="cx"> #else
</span><span class="cx">         UNUSED_PARAM(visitor);
</span><span class="cx"> #endif
</span><span class="lines">@@ -55,6 +59,7 @@
</span><span class="cx">     void init(JSC::JSGlobalObject&amp; globalObject) {
</span><span class="cx"> #if ENABLE(STREAMS_API)
</span><span class="cx">         m_readableStreamInternalsFunctions.init(globalObject);
</span><ins>+        m_streamInternalsFunctions.init(globalObject);
</ins><span class="cx"> #else
</span><span class="cx">         UNUSED_PARAM(globalObject);
</span><span class="cx"> #endif
</span><span class="lines">@@ -63,7 +68,8 @@
</span><span class="cx"> private:
</span><span class="cx">     JSC::VM&amp; vm;
</span><span class="cx"> #if ENABLE(STREAMS_API)
</span><del>-     ReadableStreamInternalsBuiltinFunctions m_readableStreamInternalsFunctions;
</del><ins>+    ReadableStreamInternalsBuiltinFunctions m_readableStreamInternalsFunctions;
+    StreamInternalsBuiltinFunctions m_streamInternalsFunctions;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsWebCoreJSBuiltinscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/WebCoreJSBuiltins.cpp (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/WebCoreJSBuiltins.cpp        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/WebCore/bindings/js/WebCoreJSBuiltins.cpp        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -37,5 +37,6 @@
</span><span class="cx"> #include &quot;ReadableStreamControllerBuiltins.cpp&quot;
</span><span class="cx"> #include &quot;ReadableStreamInternalsBuiltins.cpp&quot;
</span><span class="cx"> #include &quot;ReadableStreamReaderBuiltins.cpp&quot;
</span><ins>+#include &quot;StreamInternalsBuiltins.cpp&quot;
</ins><span class="cx"> #include &quot;WritableStreamBuiltins.cpp&quot;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsWebCoreJSBuiltinsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/WebCoreJSBuiltins.h (191334 => 191335)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/WebCoreJSBuiltins.h        2015-10-20 09:49:46 UTC (rev 191334)
+++ trunk/Source/WebCore/bindings/js/WebCoreJSBuiltins.h        2015-10-20 09:51:09 UTC (rev 191335)
</span><span class="lines">@@ -38,6 +38,7 @@
</span><span class="cx"> #include &quot;ReadableStreamControllerBuiltinsWrapper.h&quot;
</span><span class="cx"> #include &quot;ReadableStreamInternalsBuiltinsWrapper.h&quot;
</span><span class="cx"> #include &quot;ReadableStreamReaderBuiltinsWrapper.h&quot;
</span><ins>+#include &quot;StreamInternalsBuiltinsWrapper.h&quot;
</ins><span class="cx"> #include &quot;WritableStreamBuiltinsWrapper.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -56,6 +57,7 @@
</span><span class="cx">         , m_readableStreamControllerBuiltins(&amp;vm)
</span><span class="cx">         , m_readableStreamInternalsBuiltins(&amp;vm)
</span><span class="cx">         , m_readableStreamReaderBuiltins(&amp;vm)
</span><ins>+        , m_streamInternalsBuiltins(&amp;vm)
</ins><span class="cx">         , m_writableStreamBuiltins(&amp;vm)
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(MEDIA_STREAM)
</span><span class="lines">@@ -64,6 +66,7 @@
</span><span class="cx">     {
</span><span class="cx"> #if ENABLE(STREAMS_API)
</span><span class="cx">         m_readableStreamInternalsBuiltins.exportNames();
</span><ins>+        m_streamInternalsBuiltins.exportNames();
</ins><span class="cx"> #endif
</span><span class="cx">     }
</span><span class="cx"> #if ENABLE(STREAMS_API)
</span><span class="lines">@@ -73,6 +76,7 @@
</span><span class="cx">     ReadableStreamControllerBuiltinsWrapper&amp; readableStreamControllerBuiltins() { return m_readableStreamControllerBuiltins; }
</span><span class="cx">     ReadableStreamInternalsBuiltinsWrapper&amp; readableStreamInternalsBuiltins() { return m_readableStreamInternalsBuiltins; }
</span><span class="cx">     ReadableStreamReaderBuiltinsWrapper&amp; readableStreamReaderBuiltins() { return m_readableStreamReaderBuiltins; }
</span><ins>+    StreamInternalsBuiltinsWrapper&amp; streamInternalsBuiltins() { return m_streamInternalsBuiltins; }
</ins><span class="cx">     WritableStreamBuiltinsWrapper&amp; writableStreamBuiltins() { return m_writableStreamBuiltins; }
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(MEDIA_STREAM)
</span><span class="lines">@@ -88,6 +92,7 @@
</span><span class="cx">     ReadableStreamControllerBuiltinsWrapper m_readableStreamControllerBuiltins;
</span><span class="cx">     ReadableStreamInternalsBuiltinsWrapper m_readableStreamInternalsBuiltins;
</span><span class="cx">     ReadableStreamReaderBuiltinsWrapper m_readableStreamReaderBuiltins;
</span><ins>+    StreamInternalsBuiltinsWrapper m_streamInternalsBuiltins;
</ins><span class="cx">     WritableStreamBuiltinsWrapper m_writableStreamBuiltins;
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(MEDIA_STREAM)
</span></span></pre>
</div>
</div>

</body>
</html>