<!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>[200875] 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/200875">200875</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-05-13 12:19:01 -0700 (Fri, 13 May 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Unreviewed, rolling out <a href="http://trac.webkit.org/projects/webkit/changeset/200837">r200837</a>.

Seems to have regressed Speedometer and JetStream on iOS

Reverted changeset:

&quot;DOMPromise should only restrict the resolution type&quot;
https://bugs.webkit.org/show_bug.cgi?id=157307
http://trac.webkit.org/changeset/200837</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfRefh">trunk/Source/WTF/wtf/Ref.h</a></li>
<li><a href="#trunkSourceWTFwtfRefPtrh">trunk/Source/WTF/wtf/RefPtr.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesfetchFetchBodycpp">trunk/Source/WebCore/Modules/fetch/FetchBody.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesfetchFetchBodyh">trunk/Source/WebCore/Modules/fetch/FetchBody.h</a></li>
<li><a href="#trunkSourceWebCoreModulesfetchFetchBodyOwnercpp">trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesfetchFetchResponsecpp">trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesfetchFetchResponseh">trunk/Source/WebCore/Modules/fetch/FetchResponse.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamMediaDevicesh">trunk/Source/WebCore/Modules/mediastream/MediaDevices.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamPeerConnectionBackendh">trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamUserMediaRequestcpp">trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesstreamsReadableStreamSourceh">trunk/Source/WebCore/Modules/streams/ReadableStreamSource.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioAudioContexth">trunk/Source/WebCore/Modules/webaudio/AudioContext.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMBindingh">trunk/Source/WebCore/bindings/js/JSDOMBinding.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMPromisecpp">trunk/Source/WebCore/bindings/js/JSDOMPromise.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMPromiseh">trunk/Source/WebCore/bindings/js/JSDOMPromise.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSSubtleCryptoCustomcpp">trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorecssFontFaceh">trunk/Source/WebCore/css/FontFace.h</a></li>
<li><a href="#trunkSourceWebCorecssFontFaceSetcpp">trunk/Source/WebCore/css/FontFaceSet.cpp</a></li>
<li><a href="#trunkSourceWebCorecssFontFaceSeth">trunk/Source/WebCore/css/FontFaceSet.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementh">trunk/Source/WebCore/html/HTMLMediaElement.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WTF/ChangeLog        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2016-05-13  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Unreviewed, rolling out r200837.
+
+        Seems to have regressed Speedometer and JetStream on iOS
+
+        Reverted changeset:
+
+        &quot;DOMPromise should only restrict the resolution type&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=157307
+        http://trac.webkit.org/changeset/200837
+
</ins><span class="cx"> 2016-05-13  Beth Dakin  &lt;bdakin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Add dyldSPI.h
</span></span></pre></div>
<a id="trunkSourceWTFwtfRefh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Ref.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Ref.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WTF/wtf/Ref.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -46,8 +46,6 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename T&gt; class Ref {
</span><span class="cx"> public:
</span><del>-    static constexpr bool isRef = true;
-
</del><span class="cx">     ~Ref()
</span><span class="cx">     {
</span><span class="cx"> #if ASAN_ENABLED
</span></span></pre></div>
<a id="trunkSourceWTFwtfRefPtrh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/RefPtr.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/RefPtr.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WTF/wtf/RefPtr.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -39,8 +39,6 @@
</span><span class="cx">     typedef T ValueType;
</span><span class="cx">     typedef ValueType* PtrType;
</span><span class="cx"> 
</span><del>-    static constexpr bool isRefPtr = true;
-
</del><span class="cx">     ALWAYS_INLINE RefPtr() : m_ptr(nullptr) { }
</span><span class="cx">     ALWAYS_INLINE RefPtr(T* ptr) : m_ptr(ptr) { refIfNotNull(ptr); }
</span><span class="cx">     ALWAYS_INLINE RefPtr(const RefPtr&amp; o) : m_ptr(o.m_ptr) { refIfNotNull(m_ptr); }
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/ChangeLog        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2016-05-13  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Unreviewed, rolling out r200837.
+
+        Seems to have regressed Speedometer and JetStream on iOS
+
+        Reverted changeset:
+
+        &quot;DOMPromise should only restrict the resolution type&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=157307
+        http://trac.webkit.org/changeset/200837
+
</ins><span class="cx"> 2016-05-13  Sam Weinig  &lt;sam@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Rename WKDataDetectorTypeSpotlightSuggestion to WKDataDetectorTypeLookupSuggestion
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesfetchFetchBodycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/fetch/FetchBody.cpp (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/fetch/FetchBody.cpp        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/Modules/fetch/FetchBody.cpp        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-static Ref&lt;Blob&gt; blobFromArrayBuffer(ArrayBuffer*, const String&amp;);
</del><ins>+static RefPtr&lt;Blob&gt; blobFromArrayBuffer(ArrayBuffer*, const String&amp;);
</ins><span class="cx"> 
</span><span class="cx"> FetchBody::FetchBody(Ref&lt;Blob&gt;&amp;&amp; blob)
</span><span class="cx">     : m_type(Type::Blob)
</span><span class="lines">@@ -141,7 +141,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // FIXME: Support other types.
</span><del>-    promise.reject(0);
</del><ins>+    promise.reject&lt;ExceptionCode&gt;(0);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(STREAMS_API)
</span><span class="lines">@@ -200,7 +200,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     String contentType = Blob::normalizedContentType(extractMIMETypeFromMediaType(m_mimeType));
</span><del>-    promise.resolve(Blob::create(extractFromText(), contentType));
</del><ins>+    promise.resolve&lt;RefPtr&lt;Blob&gt;&gt;(Blob::create(extractFromText(), contentType));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> FetchLoader::Type FetchBody::loadingType(Consumer::Type type)
</span><span class="lines">@@ -236,7 +236,7 @@
</span><span class="cx">     return value;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline Ref&lt;Blob&gt; blobFromArrayBuffer(ArrayBuffer* buffer, const String&amp; contentType)
</del><ins>+static inline RefPtr&lt;Blob&gt; blobFromArrayBuffer(ArrayBuffer* buffer, const String&amp; contentType)
</ins><span class="cx"> {
</span><span class="cx">     if (!buffer)
</span><span class="cx">         return Blob::create(Vector&lt;uint8_t&gt;(), contentType);
</span><span class="lines">@@ -259,7 +259,7 @@
</span><span class="cx"> void FetchBody::loadingFailed()
</span><span class="cx"> {
</span><span class="cx">     ASSERT(m_consumer);
</span><del>-    m_consumer-&gt;promise.reject(0);
</del><ins>+    m_consumer-&gt;promise.reject&lt;ExceptionCode&gt;(0);
</ins><span class="cx">     m_consumer = Nullopt;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesfetchFetchBodyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/fetch/FetchBody.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/fetch/FetchBody.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/Modules/fetch/FetchBody.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -53,7 +53,7 @@
</span><span class="cx">     void blob(FetchBodyOwner&amp;, DeferredWrapper&amp;&amp;);
</span><span class="cx">     void json(FetchBodyOwner&amp;, DeferredWrapper&amp;&amp;);
</span><span class="cx">     void text(FetchBodyOwner&amp;, DeferredWrapper&amp;&amp;);
</span><del>-    void formData(FetchBodyOwner&amp;, DeferredWrapper&amp;&amp; promise) { promise.reject(0); }
</del><ins>+    void formData(FetchBodyOwner&amp;, DeferredWrapper&amp;&amp; promise) { promise.reject&lt;ExceptionCode&gt;(0); }
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(STREAMS_API)
</span><span class="cx">     void consumeAsStream(FetchBodyOwner&amp;, FetchResponseSource&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesfetchFetchBodyOwnercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (isDisturbed()) {
</span><del>-        promise.reject(TypeError);
</del><ins>+        promise.reject&lt;ExceptionCode&gt;(TypeError);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     m_isDisturbed = true;
</span><span class="lines">@@ -85,11 +85,11 @@
</span><span class="cx"> void FetchBodyOwner::blob(DeferredWrapper&amp;&amp; promise)
</span><span class="cx"> {
</span><span class="cx">     if (m_body.isEmpty()) {
</span><del>-        promise.resolve(Blob::create());
</del><ins>+        promise.resolve&lt;RefPtr&lt;Blob&gt;&gt;(Blob::create());
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (isDisturbed()) {
</span><del>-        promise.reject(TypeError);
</del><ins>+        promise.reject&lt;ExceptionCode&gt;(TypeError);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     m_isDisturbed = true;
</span><span class="lines">@@ -99,11 +99,11 @@
</span><span class="cx"> void FetchBodyOwner::formData(DeferredWrapper&amp;&amp; promise)
</span><span class="cx"> {
</span><span class="cx">     if (m_body.isEmpty()) {
</span><del>-        promise.reject(0);
</del><ins>+        promise.reject&lt;ExceptionCode&gt;(0);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (isDisturbed()) {
</span><del>-        promise.reject(TypeError);
</del><ins>+        promise.reject&lt;ExceptionCode&gt;(TypeError);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     m_isDisturbed = true;
</span><span class="lines">@@ -113,11 +113,11 @@
</span><span class="cx"> void FetchBodyOwner::json(DeferredWrapper&amp;&amp; promise)
</span><span class="cx"> {
</span><span class="cx">     if (m_body.isEmpty()) {
</span><del>-        promise.reject(SYNTAX_ERR);
</del><ins>+        promise.reject&lt;ExceptionCode&gt;(SYNTAX_ERR);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (isDisturbed()) {
</span><del>-        promise.reject(TypeError);
</del><ins>+        promise.reject&lt;ExceptionCode&gt;(TypeError);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     m_isDisturbed = true;
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (isDisturbed()) {
</span><del>-        promise.reject(TypeError);
</del><ins>+        promise.reject&lt;ExceptionCode&gt;(TypeError);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     m_isDisturbed = true;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesfetchFetchResponsecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -213,7 +213,7 @@
</span><span class="cx">     m_response.m_response = resourceResponse;
</span><span class="cx">     m_response.m_headers-&gt;filterAndFill(resourceResponse.httpHeaderFields(), FetchHeaders::Guard::Response);
</span><span class="cx"> 
</span><del>-    std::exchange(m_promise, Nullopt)-&gt;resolve(m_response);
</del><ins>+    std::exchange(m_promise, Nullopt)-&gt;resolve(&amp;m_response);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void FetchResponse::BodyLoader::didReceiveData(const char* data, size_t size)
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesfetchFetchResponseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/fetch/FetchResponse.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -54,7 +54,7 @@
</span><span class="cx">     static Ref&lt;FetchResponse&gt; error(ScriptExecutionContext&amp;);
</span><span class="cx">     static RefPtr&lt;FetchResponse&gt; redirect(ScriptExecutionContext&amp;, const String&amp;, int, ExceptionCode&amp;);
</span><span class="cx"> 
</span><del>-    using FetchPromise = DOMPromise&lt;FetchResponse&gt;;
</del><ins>+    using FetchPromise = DOMPromise&lt;RefPtr&lt;FetchResponse&gt;, ExceptionCode&gt;;
</ins><span class="cx">     static void fetch(ScriptExecutionContext&amp;, FetchRequest&amp;, const Dictionary&amp;, FetchPromise&amp;&amp;);
</span><span class="cx">     static void fetch(ScriptExecutionContext&amp;, const String&amp;, const Dictionary&amp;, FetchPromise&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamMediaDevicesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/MediaDevices.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/MediaDevices.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/Modules/mediastream/MediaDevices.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -58,8 +58,8 @@
</span><span class="cx"> 
</span><span class="cx">     Document* document() const;
</span><span class="cx"> 
</span><del>-    typedef DOMPromise&lt;MediaStream&gt; Promise;
-    typedef DOMPromise&lt;MediaDeviceInfoVector&gt; EnumerateDevicesPromise;
</del><ins>+    typedef DOMPromise&lt;RefPtr&lt;MediaStream&gt;, RefPtr&lt;NavigatorUserMediaError&gt;&gt; Promise;
+    typedef DOMPromise&lt;MediaDeviceInfoVector, ExceptionCode&gt; EnumerateDevicesPromise;
</ins><span class="cx"> 
</span><span class="cx">     void getUserMedia(const Dictionary&amp;, Promise&amp;&amp;, ExceptionCode&amp;) const;
</span><span class="cx">     void enumerateDevices(EnumerateDevicesPromise&amp;&amp;, ExceptionCode&amp;) const;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamPeerConnectionBackendh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -53,9 +53,9 @@
</span><span class="cx"> class ScriptExecutionContext;
</span><span class="cx"> 
</span><span class="cx"> namespace PeerConnection {
</span><del>-typedef DOMPromise&lt;RTCSessionDescription&gt; SessionDescriptionPromise;
-typedef DOMPromise&lt;std::nullptr_t&gt; VoidPromise;
-typedef DOMPromise&lt;RTCStatsResponse&gt; StatsPromise;
</del><ins>+typedef DOMPromise&lt;RefPtr&lt;RTCSessionDescription&gt;, RefPtr&lt;DOMError&gt;&gt; SessionDescriptionPromise;
+typedef DOMPromise&lt;std::nullptr_t, RefPtr&lt;DOMError&gt;&gt; VoidPromise;
+typedef DOMPromise&lt;RefPtr&lt;RTCStatsResponse&gt;, RefPtr&lt;DOMError&gt;&gt; StatsPromise;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> class PeerConnectionBackendClient {
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamUserMediaRequestcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -172,7 +172,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     // 4 - Create the MediaStream and pass it to the success callback.
</span><del>-    Ref&lt;MediaStream&gt; stream = MediaStream::create(*m_scriptExecutionContext, privateStream);
</del><ins>+    RefPtr&lt;MediaStream&gt; stream = MediaStream::create(*m_scriptExecutionContext, privateStream);
</ins><span class="cx">     if (m_audioConstraints) {
</span><span class="cx">         for (auto&amp; track : stream-&gt;getAudioTracks()) {
</span><span class="cx">             track-&gt;applyConstraints(*m_audioConstraints);
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesstreamsReadableStreamSourceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamSource.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/streams/ReadableStreamSource.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamSource.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx"> public:
</span><span class="cx">     virtual ~ReadableStreamSource() { }
</span><span class="cx"> 
</span><del>-    typedef DOMPromise&lt;std::nullptr_t&gt; Promise;
</del><ins>+    typedef DOMPromise&lt;std::nullptr_t, ExceptionCode&gt; Promise;
</ins><span class="cx"> 
</span><span class="cx">     void start(ReadableStreamController&amp;&amp;, Promise&amp;&amp;);
</span><span class="cx">     void cancel(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioAudioContexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/AudioContext.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -109,7 +109,7 @@
</span><span class="cx">     using ActiveDOMObject::suspend;
</span><span class="cx">     using ActiveDOMObject::resume;
</span><span class="cx"> 
</span><del>-    typedef DOMPromise&lt;std::nullptr_t&gt; Promise;
</del><ins>+    typedef DOMPromise&lt;std::nullptr_t, ExceptionCode&gt; Promise;
</ins><span class="cx"> 
</span><span class="cx">     void suspend(Promise&amp;&amp;);
</span><span class="cx">     void resume(Promise&amp;&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -251,10 +251,10 @@
</span><span class="cx"> JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, JSC::ArrayBuffer*);
</span><span class="cx"> JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, JSC::ArrayBufferView*);
</span><span class="cx"> JSC::JSValue toJS(JSC::ExecState*, JSC::JSGlobalObject*, JSC::ArrayBufferView*);
</span><del>-template&lt;typename T&gt; JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, RefPtr&lt;T&gt;&amp;);
-template&lt;typename T&gt; JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, RefPtr&lt;T&gt;&amp;&amp;);
-template&lt;typename T&gt; JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject*, RefPtr&lt;T&gt;&amp;);
-template&lt;typename T&gt; JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject*, RefPtr&lt;T&gt;&amp;&amp;);
</del><ins>+template&lt;typename T&gt; JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, const RefPtr&lt;T&gt;&amp;);
+template&lt;typename T&gt; JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, const Ref&lt;T&gt;&amp;);
+template&lt;typename T&gt; JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject*, const RefPtr&lt;T&gt;&amp;);
+template&lt;typename T&gt; JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject*, const Ref&lt;T&gt;&amp;);
</ins><span class="cx"> template&lt;typename T&gt; JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, const Vector&lt;T&gt;&amp;);
</span><span class="cx"> template&lt;typename T&gt; JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, const Vector&lt;RefPtr&lt;T&gt;&gt;&amp;);
</span><span class="cx"> JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, const String&amp;);
</span><span class="lines">@@ -269,7 +269,7 @@
</span><span class="cx"> WEBCORE_EXPORT JSC::JSValue jsArray(JSC::ExecState*, JSDOMGlobalObject*, PassRefPtr&lt;DOMStringList&gt;);
</span><span class="cx"> 
</span><span class="cx"> JSC::JSValue jsPair(JSC::ExecState&amp;, JSDOMGlobalObject*, JSC::JSValue, JSC::JSValue);
</span><del>-template&lt;typename FirstType, typename SecondType&gt; JSC::JSValue jsPair(JSC::ExecState&amp;, JSDOMGlobalObject*, FirstType&amp;, SecondType&amp;);
</del><ins>+template&lt;typename FirstType, typename SecondType&gt; JSC::JSValue jsPair(JSC::ExecState&amp;, JSDOMGlobalObject*, const FirstType&amp;, const SecondType&amp;);
</ins><span class="cx"> 
</span><span class="cx"> RefPtr&lt;JSC::ArrayBufferView&gt; toArrayBufferView(JSC::JSValue);
</span><span class="cx"> RefPtr&lt;JSC::Int8Array&gt; toInt8Array(JSC::JSValue);
</span><span class="lines">@@ -542,29 +542,24 @@
</span><span class="cx">     return view-&gt;wrap(exec, globalObject);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt; inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, RefPtr&lt;T&gt;&amp; ptr)
</del><ins>+template&lt;typename T&gt; inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const RefPtr&lt;T&gt;&amp; ptr)
</ins><span class="cx"> {
</span><span class="cx">     return toJS(exec, globalObject, ptr.get());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt; inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, RefPtr&lt;T&gt;&amp;&amp; ptr)
-{
-    return toJS(exec, globalObject, ptr.get());
-}
-
</del><span class="cx"> template&lt;typename T&gt; inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Ref&lt;T&gt;&amp; ptr)
</span><span class="cx"> {
</span><span class="cx">     return toJS(exec, globalObject, const_cast&lt;T&amp;&gt;(ptr.get()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt; inline JSC::JSValue toJSNewlyCreated(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, RefPtr&lt;T&gt;&amp;&amp; ptr)
</del><ins>+template&lt;typename T&gt; inline JSC::JSValue toJSNewlyCreated(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const RefPtr&lt;T&gt;&amp; ptr)
</ins><span class="cx"> {
</span><span class="cx">     return toJSNewlyCreated(exec, globalObject, ptr.get());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt; inline JSC::JSValue toJSNewlyCreated(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, RefPtr&lt;T&gt;&amp; ptr)
</del><ins>+template&lt;typename T&gt; inline JSC::JSValue toJSNewlyCreated(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Ref&lt;T&gt;&amp; ptr)
</ins><span class="cx"> {
</span><del>-    return toJSNewlyCreated(exec, globalObject, ptr.get());
</del><ins>+    return toJSNewlyCreated(exec, globalObject, const_cast&lt;T&amp;&gt;(ptr.get()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename T&gt; inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Vector&lt;T&gt;&amp; vector)
</span><span class="lines">@@ -661,7 +656,7 @@
</span><span class="cx">     return constructArray(&amp;state, 0, globalObject, args);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename FirstType, typename SecondType&gt; inline JSC::JSValue jsPair(JSC::ExecState&amp; state, JSDOMGlobalObject* globalObject, FirstType&amp; value1, SecondType&amp; value2)
</del><ins>+template&lt;typename FirstType, typename SecondType&gt; inline JSC::JSValue jsPair(JSC::ExecState&amp; state, JSDOMGlobalObject* globalObject, const FirstType&amp; value1, const SecondType&amp; value2)
</ins><span class="cx"> {
</span><span class="cx">     return jsPair(state, globalObject, toJS(&amp;state, globalObject, value1), toJS(&amp;state, globalObject, value2));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMPromisecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMPromise.cpp (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMPromise.cpp        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/bindings/js/JSDOMPromise.cpp        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -88,7 +88,7 @@
</span><span class="cx"> {
</span><span class="cx">     JSC::JSValue value = parseAsJSON(promise.globalObject().globalExec(), data);
</span><span class="cx">     if (!value)
</span><del>-        promise.reject(SYNTAX_ERR);
</del><ins>+        promise.reject&lt;ExceptionCode&gt;(SYNTAX_ERR);
</ins><span class="cx">     else
</span><span class="cx">         promise.resolve(value);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMPromiseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMPromise.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMPromise.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/bindings/js/JSDOMPromise.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -33,93 +33,16 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-template&lt;typename DOMClass&gt;
-struct TypeInspector {
-private:
-    template&lt;typename T&gt; static constexpr auto testIsVector(int) -&gt; decltype(std::declval&lt;T&gt;().shrinkToFit(), bool()) { return true; }
-    template&lt;typename T&gt; static constexpr bool testIsVector(...) { return false; }
-
-    template&lt;typename T&gt; static constexpr auto testIsRef(int) -&gt; decltype(T::isRef) { return true; }
-    template&lt;typename T&gt; static constexpr bool testIsRef(...) { return false; }
-
-    template&lt;typename T&gt; static constexpr auto testIsRefPtr(int) -&gt; decltype(T::isRefPtr) { return true; }
-    template&lt;typename T&gt; static constexpr bool testIsRefPtr(...) { return false; }
-
-public:
-    static constexpr bool isRefOrRefPtr = testIsRef&lt;DOMClass&gt;(0) || testIsRefPtr&lt;DOMClass&gt;(0);
-    static constexpr bool isPassByValueType = std::is_pointer&lt;DOMClass&gt;::value
-        || std::is_same&lt;DOMClass, std::nullptr_t&gt;::value
-        || std::is_same&lt;DOMClass, JSC::JSValue&gt;::value
-        || std::is_same&lt;DOMClass, bool&gt;::value;
-    static constexpr bool isPassByConstRefType = testIsVector&lt;DOMClass&gt;(0)
-        || std::is_same&lt;DOMClass, String&gt;::value;
-};
-
-template&lt;typename DOMClass, typename Enable = void&gt;
-struct PromiseResultInspector {
-public:
-    static constexpr bool passByValue = false;
-    static constexpr bool passByRef = true;
-    static constexpr bool passByURef = false;
-    static constexpr bool passByConstRef = false;
-
-    typedef DOMClass&amp; Type;
-};
-
-template&lt;typename DOMClass&gt;
-struct PromiseResultInspector&lt;DOMClass, typename std::enable_if&lt;TypeInspector&lt;DOMClass&gt;::isPassByValueType&gt;::type&gt; {
-public:
-    static constexpr bool passByValue = true;
-    static constexpr bool passByRef = false;
-    static constexpr bool passByURef = false;
-    static constexpr bool passByConstRef = false;
-
-    typedef DOMClass Type;
-};
-
-template&lt;typename DOMClass&gt;
-struct PromiseResultInspector&lt;DOMClass, typename std::enable_if&lt;TypeInspector&lt;DOMClass&gt;::isPassByConstRefType&gt;::type&gt; {
-public:
-    static constexpr bool passByValue = false;
-    static constexpr bool passByRef = false;
-    static constexpr bool passByURef = false;
-    static constexpr bool passByConstRef = true;
-
-    typedef const DOMClass&amp; Type;
-};
-
-template&lt;typename DOMClass&gt;
-struct PromiseResultInspector&lt;DOMClass, typename std::enable_if&lt;TypeInspector&lt;DOMClass&gt;::isRefOrRefPtr&gt;::type&gt; {
-    static constexpr bool passByValue = false;
-    static constexpr bool passByRef = false;
-    static constexpr bool passByURef = true;
-    static constexpr bool passByConstRef = false;
-};
-
</del><span class="cx"> class DeferredWrapper {
</span><span class="cx"> public:
</span><span class="cx">     DeferredWrapper(JSC::ExecState*, JSDOMGlobalObject*, JSC::JSPromiseDeferred*);
</span><span class="cx"> 
</span><del>-    template&lt;class ResolveResultType&gt; typename std::enable_if&lt;PromiseResultInspector&lt;ResolveResultType&gt;::passByValue, void&gt;::type
-    resolve(ResolveResultType result) { resolveWithValue(result); }
-    template&lt;class ResolveResultType&gt; typename std::enable_if&lt;PromiseResultInspector&lt;ResolveResultType&gt;::passByRef, void&gt;::type
-    resolve(ResolveResultType&amp; result) { resolveWithValue(result); }
-    template&lt;class ResolveResultType&gt; typename std::enable_if&lt;PromiseResultInspector&lt;ResolveResultType&gt;::passByURef, void&gt;::type
-    resolve(ResolveResultType&amp;&amp; result) { resolveWithValue(std::forward&lt;ResolveResultType&gt;(result)); }
-    template&lt;class ResolveResultType&gt; typename std::enable_if&lt;PromiseResultInspector&lt;ResolveResultType&gt;::passByConstRef, void&gt;::type
-    resolve(const ResolveResultType&amp; result) { resolveWithValue(result); }
</del><ins>+    template&lt;class ResolveResultType&gt;
+    void resolve(const ResolveResultType&amp;);
</ins><span class="cx"> 
</span><del>-    template&lt;class RejectResultType&gt; typename std::enable_if&lt;PromiseResultInspector&lt;RejectResultType&gt;::passByValue, void&gt;::type
-    reject(RejectResultType result) { rejectWithValue(result); }
-    template&lt;class RejectResultType&gt; typename std::enable_if&lt;PromiseResultInspector&lt;RejectResultType&gt;::passByRef, void&gt;::type
-    reject(RejectResultType&amp; result) { rejectWithValue(result); }
-    template&lt;class RejectResultType&gt; typename std::enable_if&lt;PromiseResultInspector&lt;RejectResultType&gt;::passByURef, void&gt;::type
-    reject(RejectResultType&amp;&amp; result) { rejectWithValue(std::forward&lt;RejectResultType&gt;(result)); }
-    template&lt;class RejectResultType&gt; typename std::enable_if&lt;PromiseResultInspector&lt;RejectResultType&gt;::passByConstRef, void&gt;::type
-    reject(const RejectResultType&amp; result) { rejectWithValue(result); }
</del><ins>+    template&lt;class RejectResultType&gt;
+    void reject(const RejectResultType&amp;);
</ins><span class="cx"> 
</span><del>-    void reject(ExceptionCode);
-
</del><span class="cx">     JSDOMGlobalObject&amp; globalObject() const;
</span><span class="cx">     JSC::JSValue promise() const;
</span><span class="cx"> 
</span><span class="lines">@@ -128,9 +51,6 @@
</span><span class="cx">     void resolve(JSC::ExecState&amp; state, JSC::JSValue resolution) { callFunction(state, m_deferred-&gt;resolve(), resolution); }
</span><span class="cx">     void reject(JSC::ExecState&amp; state, JSC::JSValue resolution) { callFunction(state, m_deferred-&gt;reject(), resolution); }
</span><span class="cx"> 
</span><del>-    template&lt;class RejectResultType&gt; void rejectWithValue(RejectResultType&amp;&amp;);
-    template&lt;class ResolveResultType&gt; void resolveWithValue(ResolveResultType&amp;&amp;);
-
</del><span class="cx">     JSC::Strong&lt;JSDOMGlobalObject&gt; m_globalObject;
</span><span class="cx">     JSC::Strong&lt;JSC::JSPromiseDeferred&gt; m_deferred;
</span><span class="cx"> };
</span><span class="lines">@@ -151,7 +71,7 @@
</span><span class="cx">     return promiseDeferred.promise();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template &lt;typename Value&gt;
</del><ins>+template &lt;typename Value, typename Error&gt;
</ins><span class="cx"> class DOMPromise {
</span><span class="cx"> public:
</span><span class="cx">     DOMPromise(DeferredWrapper&amp;&amp; wrapper) : m_wrapper(WTFMove(wrapper)) { }
</span><span class="lines">@@ -160,105 +80,105 @@
</span><span class="cx">     DOMPromise(const DOMPromise&amp;) = default;
</span><span class="cx">     DOMPromise&amp; operator=(DOMPromise const&amp;) = default;
</span><span class="cx"> 
</span><del>-    void resolve(typename PromiseResultInspector&lt;Value&gt;::Type value) { m_wrapper.resolve(value); }
</del><ins>+    void resolve(const Value&amp; value) { m_wrapper.resolve&lt;Value&gt;(value); }
+    void reject(const Error&amp; error) { m_wrapper.reject&lt;Error&gt;(error); }
</ins><span class="cx"> 
</span><del>-    template&lt;typename ErrorType&gt; void reject(ErrorType&amp;&amp; error) { m_wrapper.reject(std::forward&lt;ErrorType&gt;(error)); }
-
</del><span class="cx"> private:
</span><span class="cx">     DeferredWrapper m_wrapper;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-inline void DeferredWrapper::reject(ExceptionCode ec)
</del><ins>+template&lt;class ResolveResultType&gt;
+inline void DeferredWrapper::resolve(const ResolveResultType&amp; result)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_deferred);
</span><span class="cx">     ASSERT(m_globalObject);
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><span class="cx">     JSC::JSLockHolder locker(exec);
</span><del>-    reject(*exec, createDOMException(exec, ec));
</del><ins>+    resolve(*exec, toJS(exec, m_globalObject.get(), result));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;class ResolveResultType&gt;
-inline void DeferredWrapper::resolveWithValue(ResolveResultType&amp;&amp; result)
</del><ins>+template&lt;class RejectResultType&gt;
+inline void DeferredWrapper::reject(const RejectResultType&amp; result)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_deferred);
</span><span class="cx">     ASSERT(m_globalObject);
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><span class="cx">     JSC::JSLockHolder locker(exec);
</span><del>-    resolve(*exec, toJS(exec, m_globalObject.get(), std::forward&lt;ResolveResultType&gt;(result)));
</del><ins>+    reject(*exec, toJS(exec, m_globalObject.get(), result));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;class RejectResultType&gt;
-inline void DeferredWrapper::rejectWithValue(RejectResultType&amp;&amp; result)
</del><ins>+template&lt;&gt;
+inline void DeferredWrapper::reject(const std::nullptr_t&amp;)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_deferred);
</span><span class="cx">     ASSERT(m_globalObject);
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><span class="cx">     JSC::JSLockHolder locker(exec);
</span><del>-    reject(*exec, toJS(exec, m_globalObject.get(), std::forward&lt;RejectResultType&gt;(result)));
</del><ins>+    reject(*exec, JSC::jsNull());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt;
</span><del>-inline void DeferredWrapper::resolve(bool result)
</del><ins>+inline void DeferredWrapper::reject(const JSC::JSValue&amp; value)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_deferred);
</span><span class="cx">     ASSERT(m_globalObject);
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><span class="cx">     JSC::JSLockHolder locker(exec);
</span><del>-    resolve(*exec, JSC::jsBoolean(result));
</del><ins>+    reject(*exec, value);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt;
</span><del>-inline void DeferredWrapper::resolve(JSC::JSValue value)
</del><ins>+inline void DeferredWrapper::reject&lt;ExceptionCode&gt;(const ExceptionCode&amp; ec)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_deferred);
</span><span class="cx">     ASSERT(m_globalObject);
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><span class="cx">     JSC::JSLockHolder locker(exec);
</span><del>-    resolve(*exec, value);
</del><ins>+    reject(*exec, createDOMException(exec, ec));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt;
</span><del>-inline void DeferredWrapper::reject(JSC::JSValue value)
</del><ins>+inline void DeferredWrapper::resolve&lt;String&gt;(const String&amp; result)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_deferred);
</span><span class="cx">     ASSERT(m_globalObject);
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><span class="cx">     JSC::JSLockHolder locker(exec);
</span><del>-    reject(*exec, value);
</del><ins>+    resolve(*exec, jsString(exec, result));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt;
</span><del>-inline void DeferredWrapper::resolve(std::nullptr_t)
</del><ins>+inline void DeferredWrapper::resolve&lt;bool&gt;(const bool&amp; result)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_deferred);
</span><span class="cx">     ASSERT(m_globalObject);
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><span class="cx">     JSC::JSLockHolder locker(exec);
</span><del>-    resolve(*exec, JSC::jsUndefined());
</del><ins>+    resolve(*exec, JSC::jsBoolean(result));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt;
</span><del>-inline void DeferredWrapper::reject(std::nullptr_t)
</del><ins>+inline void DeferredWrapper::resolve&lt;JSC::JSValue&gt;(const JSC::JSValue&amp; value)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_deferred);
</span><span class="cx">     ASSERT(m_globalObject);
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><span class="cx">     JSC::JSLockHolder locker(exec);
</span><del>-    reject(*exec, JSC::jsNull());
</del><ins>+    resolve(*exec, value);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt;
</span><del>-inline void DeferredWrapper::resolve(const String&amp; result)
</del><ins>+inline void DeferredWrapper::resolve(const std::nullptr_t&amp;)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_deferred);
</span><span class="cx">     ASSERT(m_globalObject);
</span><span class="cx">     JSC::ExecState* exec = m_globalObject-&gt;globalExec();
</span><span class="cx">     JSC::JSLockHolder locker(exec);
</span><del>-    resolve(*exec, jsString(exec, result));
</del><ins>+    resolve(*exec, JSC::jsUndefined());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt;
</span><del>-inline void DeferredWrapper::reject(const String&amp; result)
</del><ins>+inline void DeferredWrapper::reject&lt;String&gt;(const String&amp; result)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_deferred);
</span><span class="cx">     ASSERT(m_globalObject);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSSubtleCryptoCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -550,7 +550,7 @@
</span><span class="cx">     JSPromiseDeferred* promiseDeferred = JSPromiseDeferred::create(&amp;state, globalObject());
</span><span class="cx">     DeferredWrapper wrapper(&amp;state, globalObject(), promiseDeferred);
</span><span class="cx">     auto successCallback = [wrapper](CryptoKey&amp; result) mutable {
</span><del>-        wrapper.resolve(result);
</del><ins>+        wrapper.resolve(&amp;result);
</ins><span class="cx">     };
</span><span class="cx">     auto failureCallback = [wrapper]() mutable {
</span><span class="cx">         wrapper.reject(nullptr);
</span><span class="lines">@@ -785,7 +785,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto decryptSuccessCallback = [domGlobalObject, keyFormat, unwrappedKeyAlgorithmPtr, unwrappedKeyAlgorithmParametersPtr, extractable, keyUsages, wrapper](const Vector&lt;uint8_t&gt;&amp; result) mutable {
</span><span class="cx">         auto importSuccessCallback = [wrapper](CryptoKey&amp; key) mutable {
</span><del>-            wrapper.resolve(key);
</del><ins>+            wrapper.resolve(&amp;key);
</ins><span class="cx">         };
</span><span class="cx">         auto importFailureCallback = [wrapper]() mutable {
</span><span class="cx">             wrapper.reject(nullptr);
</span></span></pre></div>
<a id="trunkSourceWebCorecssFontFaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/FontFace.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/FontFace.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/css/FontFace.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx">     enum class LoadStatus { Unloaded, Loading, Loaded, Error };
</span><span class="cx">     LoadStatus status() const;
</span><span class="cx"> 
</span><del>-    typedef DOMPromise&lt;FontFace&amp;&gt; Promise;
</del><ins>+    typedef DOMPromise&lt;FontFace&amp;, ExceptionCode&gt; Promise;
</ins><span class="cx">     void registerLoaded(Promise&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx">     void load();
</span></span></pre></div>
<a id="trunkSourceWebCorecssFontFaceSetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/FontFaceSet.cpp (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/FontFaceSet.cpp        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/css/FontFaceSet.cpp        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx">     return m_target-&gt;backing()[m_index++].wrapper();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FontFaceSet::PendingPromise::PendingPromise(LoadPromise&amp;&amp; promise)
</del><ins>+FontFaceSet::PendingPromise::PendingPromise(Promise&amp;&amp; promise)
</ins><span class="cx">     : promise(WTFMove(promise))
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="lines">@@ -123,7 +123,7 @@
</span><span class="cx">         m_backing-&gt;remove(m_backing.get()[0]);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void FontFaceSet::load(const String&amp; font, const String&amp; text, LoadPromise&amp;&amp; promise)
</del><ins>+void FontFaceSet::load(const String&amp; font, const String&amp; text, DeferredWrapper&amp;&amp; promise)
</ins><span class="cx"> {
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     auto matchingFaces = m_backing-&gt;matchingFaces(font, text, ec);
</span><span class="lines">@@ -142,7 +142,7 @@
</span><span class="cx"> 
</span><span class="cx">     for (auto&amp; face : matchingFaces) {
</span><span class="cx">         if (face.get().status() == CSSFontFace::Status::Failure) {
</span><del>-            promise.reject(DOMCoreException::create(ExceptionCodeDescription(NETWORK_ERR)));
</del><ins>+            promise.reject(DOMCoreException::create(ExceptionCodeDescription(NETWORK_ERR)).ptr());
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -167,7 +167,7 @@
</span><span class="cx">     return m_backing-&gt;check(family, text, ec);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void FontFaceSet::registerReady(ReadyPromise&amp;&amp; promise)
</del><ins>+void FontFaceSet::registerReady(Promise&amp;&amp; promise)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_promise);
</span><span class="cx">     if (m_isReady) {
</span></span></pre></div>
<a id="trunkSourceWebCorecssFontFaceSeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/FontFaceSet.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/FontFaceSet.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/css/FontFaceSet.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -47,15 +47,14 @@
</span><span class="cx">     bool remove(FontFace&amp;);
</span><span class="cx">     void clear();
</span><span class="cx"> 
</span><del>-    typedef DOMPromise&lt;Vector&lt;RefPtr&lt;FontFace&gt;&gt;&gt; LoadPromise;
-    void load(const String&amp; font, const String&amp; text, LoadPromise&amp;&amp;);
</del><ins>+    void load(const String&amp; font, const String&amp; text, DeferredWrapper&amp;&amp; promise);
</ins><span class="cx">     bool check(const String&amp; font, const String&amp; text, ExceptionCode&amp;);
</span><span class="cx"> 
</span><span class="cx">     enum class LoadStatus { Loading, Loaded };
</span><span class="cx">     LoadStatus status() const;
</span><span class="cx"> 
</span><del>-    typedef DOMPromise&lt;FontFaceSet&amp;&gt; ReadyPromise;
-    void registerReady(ReadyPromise&amp;&amp;);
</del><ins>+    typedef DOMPromise&lt;FontFaceSet&amp;, DOMCoreException&amp;&gt; Promise;
+    void registerReady(Promise&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     CSSFontFaceSet&amp; backing() { return m_backing; }
</span><span class="cx"> 
</span><span class="lines">@@ -75,18 +74,19 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     struct PendingPromise : RefCounted&lt;PendingPromise&gt; {
</span><del>-        static Ref&lt;PendingPromise&gt; create(LoadPromise&amp;&amp; promise)
</del><ins>+        typedef DOMPromise&lt;Vector&lt;RefPtr&lt;FontFace&gt;&gt;&amp;, DOMCoreException&amp;&gt; Promise;
+        static Ref&lt;PendingPromise&gt; create(Promise&amp;&amp; promise)
</ins><span class="cx">         {
</span><span class="cx">             return adoptRef(*new PendingPromise(WTFMove(promise)));
</span><span class="cx">         }
</span><span class="cx">         ~PendingPromise();
</span><span class="cx"> 
</span><span class="cx">     private:
</span><del>-        PendingPromise(LoadPromise&amp;&amp;);
</del><ins>+        PendingPromise(Promise&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     public:
</span><span class="cx">         Vector&lt;RefPtr&lt;FontFace&gt;&gt; faces;
</span><del>-        LoadPromise promise;
</del><ins>+        Promise promise;
</ins><span class="cx">         bool hasReachedTerminalState { false };
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="lines">@@ -110,7 +110,7 @@
</span><span class="cx"> 
</span><span class="cx">     Ref&lt;CSSFontFaceSet&gt; m_backing;
</span><span class="cx">     HashMap&lt;RefPtr&lt;CSSFontFace&gt;, Vector&lt;Ref&lt;PendingPromise&gt;&gt;&gt; m_pendingPromises;
</span><del>-    Optional&lt;ReadyPromise&gt; m_promise;
</del><ins>+    Optional&lt;Promise&gt; m_promise;
</ins><span class="cx">     bool m_isReady { false };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (200874 => 200875)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.h        2016-05-13 19:14:32 UTC (rev 200874)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h        2016-05-13 19:19:01 UTC (rev 200875)
</span><span class="lines">@@ -212,7 +212,7 @@
</span><span class="cx">     bool loop() const;
</span><span class="cx">     void setLoop(bool b);
</span><span class="cx"> 
</span><del>-    typedef DOMPromise&lt;std::nullptr_t&gt; PlayPromise;
</del><ins>+    typedef DOMPromise&lt;std::nullptr_t, DOMError&amp;&gt; PlayPromise;
</ins><span class="cx">     void play(PlayPromise&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT void play() override;
</span></span></pre>
</div>
</div>

</body>
</html>