Title: [220867] tags/Safari-605.1.3/Source/WebCore

Diff

Modified: tags/Safari-605.1.3/Source/WebCore/ChangeLog (220866 => 220867)


--- tags/Safari-605.1.3/Source/WebCore/ChangeLog	2017-08-17 18:43:29 UTC (rev 220866)
+++ tags/Safari-605.1.3/Source/WebCore/ChangeLog	2017-08-17 18:43:34 UTC (rev 220867)
@@ -1,5 +1,9 @@
 2017-08-17  Jason Marcell  <[email protected]>
 
+        Revert r220620. rdar://problem/33928369
+
+2017-08-17  Jason Marcell  <[email protected]>
+
         Revert r220601. rdar://problem/33928369
 
 2017-08-16  Antti Koivisto  <[email protected]>

Modified: tags/Safari-605.1.3/Source/WebCore/bindings/IDLTypes.h (220866 => 220867)


--- tags/Safari-605.1.3/Source/WebCore/bindings/IDLTypes.h	2017-08-17 18:43:29 UTC (rev 220866)
+++ tags/Safari-605.1.3/Source/WebCore/bindings/IDLTypes.h	2017-08-17 18:43:34 UTC (rev 220867)
@@ -170,6 +170,8 @@
     static inline std::nullptr_t nullValue() { return nullptr; }
     template<typename U> static inline bool isNullValue(U&& value) { return !value; }
     template<typename U> static inline U&& extractValueFromNullable(U&& value) { return std::forward<U>(value); }
+
+    static ParameterType convertToParameterType(RefPtr<T> value) { ASSERT(value); return *value.get(); }
 };
 
 template<typename T> struct IDLInterface : IDLWrapper<T> { };

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/FontFace.cpp (220866 => 220867)


--- tags/Safari-605.1.3/Source/WebCore/css/FontFace.cpp	2017-08-17 18:43:29 UTC (rev 220866)
+++ tags/Safari-605.1.3/Source/WebCore/css/FontFace.cpp	2017-08-17 18:43:34 UTC (rev 220867)
@@ -448,9 +448,9 @@
     return m_loadedPromise;
 }
 
-FontFace& FontFace::loadedPromiseResolve()
+RefPtr<FontFace> FontFace::loadedPromiseResolve()
 {
-    return *this;
+    return this;
 }
 
 }

Modified: tags/Safari-605.1.3/Source/WebCore/css/FontFace.h (220866 => 220867)


--- tags/Safari-605.1.3/Source/WebCore/css/FontFace.h	2017-08-17 18:43:29 UTC (rev 220866)
+++ tags/Safari-605.1.3/Source/WebCore/css/FontFace.h	2017-08-17 18:43:34 UTC (rev 220867)
@@ -94,8 +94,7 @@
     explicit FontFace(CSSFontSelector&);
     explicit FontFace(CSSFontFace&);
 
-    // Callback for LoadedPromise.
-    FontFace& loadedPromiseResolve();
+    RefPtr<FontFace> loadedPromiseResolve();
 
     WeakPtrFactory<FontFace> m_weakPtrFactory;
     Ref<CSSFontFace> m_backing;

Modified: tags/Safari-605.1.3/Source/WebCore/css/FontFaceSet.cpp (220866 => 220867)


--- tags/Safari-605.1.3/Source/WebCore/css/FontFaceSet.cpp	2017-08-17 18:43:29 UTC (rev 220866)
+++ tags/Safari-605.1.3/Source/WebCore/css/FontFaceSet.cpp	2017-08-17 18:43:34 UTC (rev 220867)
@@ -224,9 +224,9 @@
     m_pendingPromises.remove(iterator);
 }
 
-FontFaceSet& FontFaceSet::readyPromiseResolve()
+RefPtr<FontFaceSet> FontFaceSet::readyPromiseResolve()
 {
-    return *this;
+    return this;
 }
 
 }

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;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to