Modified: tags/Safari-605.1.3/Source/WebCore/bindings/js/DOMPromiseProxy.h (220866 => 220867)
--- tags/Safari-605.1.3/Source/WebCore/bindings/js/DOMPromiseProxy.h 2017-08-17 18:43:29 UTC (rev 220866)
+++ tags/Safari-605.1.3/Source/WebCore/bindings/js/DOMPromiseProxy.h 2017-08-17 18:43:34 UTC (rev 220867)
@@ -25,11 +25,12 @@
#pragma once
-#include "ExceptionOr.h"
+#include "Exception.h"
#include "JSDOMGlobalObject.h"
#include "JSDOMPromiseDeferred.h"
#include <wtf/Function.h>
#include <wtf/Optional.h>
+#include <wtf/Variant.h>
#include <wtf/Vector.h>
namespace WebCore {
@@ -38,6 +39,7 @@
class DOMPromiseProxy {
public:
using Value = typename IDLType::StorageType;
+ using ValueOrException = Variant<Value, Exception>;
DOMPromiseProxy() = default;
~DOMPromiseProxy() = default;
@@ -53,7 +55,7 @@
void reject(Exception);
private:
- std::optional<ExceptionOr<Value>> m_valueOrException;
+ std::optional<ValueOrException> m_valueOrException;
Vector<Ref<DeferredPromise>, 1> m_deferredPromises;
};
@@ -60,6 +62,9 @@
template<>
class DOMPromiseProxy<IDLVoid> {
public:
+ using Value = bool;
+ using ValueOrException = Variant<Value, Exception>;
+
DOMPromiseProxy() = default;
~DOMPromiseProxy() = default;
@@ -73,7 +78,7 @@
void reject(Exception);
private:
- std::optional<ExceptionOr<void>> m_valueOrException;
+ std::optional<ValueOrException> m_valueOrException;
Vector<Ref<DeferredPromise>, 1> m_deferredPromises;
};
@@ -84,10 +89,15 @@
template<typename IDLType>
class DOMPromiseProxyWithResolveCallback {
public:
- using ResolveCallback = WTF::Function<typename IDLType::ParameterType ()>;
+ using Value = bool;
+ using ValueOrException = Variant<Value, Exception>;
+ // FIXME: This should return a IDLType::ParameterType, but WTF::Function does
+ // not support returning references / non-default initializable types.
+ // See https://webkit.org/b/175244.
+ using ResolveCallback = WTF::Function<typename IDLType::ImplementationType ()>;
template <typename Class, typename BaseClass>
- DOMPromiseProxyWithResolveCallback(Class&, typename IDLType::ParameterType (BaseClass::*)());
+ DOMPromiseProxyWithResolveCallback(Class&, typename IDLType::ImplementationType (BaseClass::*)());
DOMPromiseProxyWithResolveCallback(ResolveCallback&&);
~DOMPromiseProxyWithResolveCallback() = default;
@@ -103,7 +113,8 @@
private:
ResolveCallback m_resolveCallback;
- std::optional<ExceptionOr<void>> m_valueOrException;
+
+ std::optional<ValueOrException> m_valueOrException;
Vector<Ref<DeferredPromise>, 1> m_deferredPromises;
};
@@ -124,10 +135,10 @@
return JSC::jsUndefined();
if (m_valueOrException) {
- if (m_valueOrException->hasException())
- deferredPromise->reject(m_valueOrException->exception());
+ if (WTF::holds_alternative<Value>(*m_valueOrException))
+ deferredPromise->template resolve<IDLType>(WTF::get<Value>(*m_valueOrException));
else
- deferredPromise->template resolve<IDLType>(m_valueOrException->returnValue());
+ deferredPromise->reject(WTF::get<Exception>(*m_valueOrException));
}
auto result = deferredPromise->promise();
@@ -153,9 +164,9 @@
{
ASSERT(!m_valueOrException);
- m_valueOrException = ExceptionOr<Value> { std::forward<typename IDLType::ParameterType>(value) };
+ m_valueOrException = ValueOrException { std::forward<typename IDLType::ParameterType>(value) };
for (auto& deferredPromise : m_deferredPromises)
- deferredPromise->template resolve<IDLType>(m_valueOrException->returnValue());
+ deferredPromise->template resolve<IDLType>(WTF::get<Value>(*m_valueOrException));
}
template<typename IDLType>
@@ -163,9 +174,9 @@
{
ASSERT(!m_valueOrException);
- m_valueOrException = ExceptionOr<Value> { std::forward<typename IDLType::ParameterType>(value) };
+ m_valueOrException = ValueOrException { std::forward<typename IDLType::ParameterType>(value) };
for (auto& deferredPromise : m_deferredPromises)
- deferredPromise->template resolveWithNewlyCreated<IDLType>(m_valueOrException->returnValue());
+ deferredPromise->template resolveWithNewlyCreated<IDLType>(WTF::get<Value>(*m_valueOrException));
}
template<typename IDLType>
@@ -173,9 +184,9 @@
{
ASSERT(!m_valueOrException);
- m_valueOrException = ExceptionOr<Value> { WTFMove(exception) };
+ m_valueOrException = ValueOrException { WTFMove(exception) };
for (auto& deferredPromise : m_deferredPromises)
- deferredPromise->reject(m_valueOrException->exception());
+ deferredPromise->reject(WTF::get<Exception>(*m_valueOrException));
}
@@ -194,10 +205,10 @@
return JSC::jsUndefined();
if (m_valueOrException) {
- if (m_valueOrException->hasException())
- deferredPromise->reject(m_valueOrException->exception());
+ if (WTF::holds_alternative<Value>(*m_valueOrException))
+ deferredPromise->resolve();
else
- deferredPromise->resolve();
+ deferredPromise->reject(WTF::get<Exception>(*m_valueOrException));
}
auto result = deferredPromise->promise();
@@ -219,7 +230,7 @@
inline void DOMPromiseProxy<IDLVoid>::resolve()
{
ASSERT(!m_valueOrException);
- m_valueOrException = ExceptionOr<void> { };
+ m_valueOrException = ValueOrException { true };
for (auto& deferredPromise : m_deferredPromises)
deferredPromise->resolve();
}
@@ -227,9 +238,9 @@
inline void DOMPromiseProxy<IDLVoid>::reject(Exception exception)
{
ASSERT(!m_valueOrException);
- m_valueOrException = ExceptionOr<void> { WTFMove(exception) };
+ m_valueOrException = ValueOrException { WTFMove(exception) };
for (auto& deferredPromise : m_deferredPromises)
- deferredPromise->reject(m_valueOrException->exception());
+ deferredPromise->reject(WTF::get<Exception>(*m_valueOrException));
}
// MARK: - DOMPromiseProxyWithResolveCallback<IDLType> implementation
@@ -236,7 +247,7 @@
template<typename IDLType>
template <typename Class, typename BaseClass>
-inline DOMPromiseProxyWithResolveCallback<IDLType>::DOMPromiseProxyWithResolveCallback(Class& object, typename IDLType::ParameterType (BaseClass::*function)())
+inline DOMPromiseProxyWithResolveCallback<IDLType>::DOMPromiseProxyWithResolveCallback(Class& object, typename IDLType::ImplementationType (BaseClass::*function)())
: m_resolveCallback(std::bind(function, &object))
{
}
@@ -261,10 +272,10 @@
return JSC::jsUndefined();
if (m_valueOrException) {
- if (m_valueOrException->hasException())
- deferredPromise->reject(m_valueOrException->exception());
+ if (WTF::holds_alternative<Value>(*m_valueOrException))
+ deferredPromise->template resolve<IDLType>(IDLType::convertToParameterType(m_resolveCallback()));
else
- deferredPromise->template resolve<IDLType>(m_resolveCallback());
+ deferredPromise->reject(WTF::get<Exception>(*m_valueOrException));
}
auto result = deferredPromise->promise();
@@ -290,7 +301,7 @@
{
ASSERT(!m_valueOrException);
- m_valueOrException = ExceptionOr<void> { };
+ m_valueOrException = ValueOrException { true };
for (auto& deferredPromise : m_deferredPromises)
deferredPromise->template resolve<IDLType>(value);
}
@@ -300,7 +311,7 @@
{
ASSERT(!m_valueOrException);
- m_valueOrException = ExceptionOr<void> { };
+ m_valueOrException = ValueOrException { true };
for (auto& deferredPromise : m_deferredPromises)
deferredPromise->template resolveWithNewlyCreated<IDLType>(value);
}
@@ -310,9 +321,9 @@
{
ASSERT(!m_valueOrException);
- m_valueOrException = ExceptionOr<void> { WTFMove(exception) };
+ m_valueOrException = ValueOrException { WTFMove(exception) };
for (auto& deferredPromise : m_deferredPromises)
- deferredPromise->reject(m_valueOrException->exception());
+ deferredPromise->reject(WTF::get<Exception>(*m_valueOrException));
}
}
Modified: tags/Safari-605.1.3/Source/WebCore/css/FontFaceSet.h (220866 => 220867)
--- tags/Safari-605.1.3/Source/WebCore/css/FontFaceSet.h 2017-08-17 18:43:29 UTC (rev 220866)
+++ tags/Safari-605.1.3/Source/WebCore/css/FontFaceSet.h 2017-08-17 18:43:34 UTC (rev 220867)
@@ -108,8 +108,7 @@
void refEventTarget() final { ref(); }
void derefEventTarget() final { deref(); }
- // Callback for ReadyPromise.
- FontFaceSet& readyPromiseResolve();
+ RefPtr<FontFaceSet> readyPromiseResolve();
Ref<CSSFontFaceSet> m_backing;
HashMap<RefPtr<FontFace>, Vector<Ref<PendingPromise>>> m_pendingPromises;