Title: [286496] trunk/Source/WebCore
Revision
286496
Author
[email protected]
Date
2021-12-03 09:35:24 -0800 (Fri, 03 Dec 2021)

Log Message

Improve dictionary-based DOMPromiseDeferred::settle
https://bugs.webkit.org/show_bug.cgi?id=233751

Patch by Youenn Fablet <[email protected]> on 2021-12-03
Reviewed by Chris Dumez.

Make settle a templated function so that it can adapt to any ExceptionOr based type.
Update call sites that use settle for non ExceptionOr types as they should either use reject or resolve directly.
Covered by existing tests.

* Modules/applepay/ApplePaySetup.cpp:
(WebCore::ApplePaySetup::getSetupFeatures):
(WebCore::ApplePaySetup::begin):
(WebCore::ApplePaySetup::stop):
* Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
(WebCore::FileSystemDirectoryHandle::getFileHandle):
(WebCore::FileSystemDirectoryHandle::getDirectoryHandle):
(WebCore::FileSystemDirectoryHandle::resolve):
* Modules/filesystemaccess/FileSystemFileHandle.cpp:
(WebCore::FileSystemFileHandle::createSyncAccessHandle):
* bindings/js/JSDOMPromiseDeferred.h:
(WebCore::DOMPromiseDeferred::settle):
(WebCore::DOMPromiseDeferred<IDLDictionary<T>>::resolve): Deleted.
(WebCore::DOMPromiseDeferred<IDLDictionary<T>>::settle): Deleted.
(WebCore::DOMPromiseDeferred<IDLInterface<T>>::resolve): Deleted.
(WebCore::DOMPromiseDeferred<IDLInterface<T>>::settle): Deleted.
* workers/service/ServiceWorkerContainer.cpp:
(WebCore::ServiceWorkerContainer::getNavigationPreloadState):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (286495 => 286496)


--- trunk/Source/WebCore/ChangeLog	2021-12-03 17:19:47 UTC (rev 286495)
+++ trunk/Source/WebCore/ChangeLog	2021-12-03 17:35:24 UTC (rev 286496)
@@ -1,3 +1,33 @@
+2021-12-03  Youenn Fablet  <[email protected]>
+
+        Improve dictionary-based DOMPromiseDeferred::settle
+        https://bugs.webkit.org/show_bug.cgi?id=233751
+
+        Reviewed by Chris Dumez.
+
+        Make settle a templated function so that it can adapt to any ExceptionOr based type.
+        Update call sites that use settle for non ExceptionOr types as they should either use reject or resolve directly.
+        Covered by existing tests.
+
+        * Modules/applepay/ApplePaySetup.cpp:
+        (WebCore::ApplePaySetup::getSetupFeatures):
+        (WebCore::ApplePaySetup::begin):
+        (WebCore::ApplePaySetup::stop):
+        * Modules/filesystemaccess/FileSystemDirectoryHandle.cpp:
+        (WebCore::FileSystemDirectoryHandle::getFileHandle):
+        (WebCore::FileSystemDirectoryHandle::getDirectoryHandle):
+        (WebCore::FileSystemDirectoryHandle::resolve):
+        * Modules/filesystemaccess/FileSystemFileHandle.cpp:
+        (WebCore::FileSystemFileHandle::createSyncAccessHandle):
+        * bindings/js/JSDOMPromiseDeferred.h:
+        (WebCore::DOMPromiseDeferred::settle):
+        (WebCore::DOMPromiseDeferred<IDLDictionary<T>>::resolve): Deleted.
+        (WebCore::DOMPromiseDeferred<IDLDictionary<T>>::settle): Deleted.
+        (WebCore::DOMPromiseDeferred<IDLInterface<T>>::resolve): Deleted.
+        (WebCore::DOMPromiseDeferred<IDLInterface<T>>::settle): Deleted.
+        * workers/service/ServiceWorkerContainer.cpp:
+        (WebCore::ServiceWorkerContainer::getNavigationPreloadState):
+
 2021-12-03  Antti Koivisto  <[email protected]>
 
         [:has() pseudo-class] Improve result caching

Modified: trunk/Source/WebCore/Modules/applepay/ApplePaySetup.cpp (286495 => 286496)


--- trunk/Source/WebCore/Modules/applepay/ApplePaySetup.cpp	2021-12-03 17:19:47 UTC (rev 286495)
+++ trunk/Source/WebCore/Modules/applepay/ApplePaySetup.cpp	2021-12-03 17:35:24 UTC (rev 286496)
@@ -53,7 +53,7 @@
 {
     auto canCall = PaymentSession::canCreateSession(document);
     if (canCall.hasException()) {
-        promise.settle(canCall.releaseException());
+        promise.reject(canCall.releaseException());
         return;
     }
 
@@ -78,7 +78,7 @@
 
     page->paymentCoordinator().getSetupFeatures(m_configuration, document.url(), [this, pendingActivity = makePendingActivity(*this)](Vector<Ref<ApplePaySetupFeature>>&& setupFeatures) {
         if (m_setupFeaturesPromise)
-            std::exchange(m_setupFeaturesPromise, std::nullopt)->settle(WTFMove(setupFeatures));
+            std::exchange(m_setupFeaturesPromise, std::nullopt)->resolve(WTFMove(setupFeatures));
     });
 }
 
@@ -86,7 +86,7 @@
 {
     auto canCall = PaymentSession::canCreateSession(document);
     if (canCall.hasException()) {
-        promise.settle(canCall.releaseException());
+        promise.reject(canCall.releaseException());
         return;
     }
 
@@ -111,7 +111,7 @@
 
     page->paymentCoordinator().beginApplePaySetup(m_configuration, document.url(), WTFMove(features), [this](bool result) {
         if (m_beginPromise)
-            std::exchange(m_beginPromise, std::nullopt)->settle(result);
+            std::exchange(m_beginPromise, std::nullopt)->resolve(result);
     });
 }
 
@@ -125,10 +125,10 @@
 void ApplePaySetup::stop()
 {
     if (m_setupFeaturesPromise)
-        std::exchange(m_setupFeaturesPromise, std::nullopt)->settle(Exception { AbortError });
+        std::exchange(m_setupFeaturesPromise, std::nullopt)->reject(Exception { AbortError });
 
     if (m_beginPromise)
-        std::exchange(m_beginPromise, std::nullopt)->settle(Exception { AbortError });
+        std::exchange(m_beginPromise, std::nullopt)->reject(Exception { AbortError });
 
     if (auto page = downcast<Document>(*scriptExecutionContext()).page())
         page->paymentCoordinator().endApplePaySetup();

Modified: trunk/Source/WebCore/Modules/filesystemaccess/FileSystemDirectoryHandle.cpp (286495 => 286496)


--- trunk/Source/WebCore/Modules/filesystemaccess/FileSystemDirectoryHandle.cpp	2021-12-03 17:19:47 UTC (rev 286495)
+++ trunk/Source/WebCore/Modules/filesystemaccess/FileSystemDirectoryHandle.cpp	2021-12-03 17:35:24 UTC (rev 286496)
@@ -63,7 +63,7 @@
             return promise.reject(Exception { InvalidStateError, "Context has stopped"_s });
         }
 
-        promise.settle(FileSystemFileHandle::create(*context, String { name }, result.returnValue(), WTFMove(connection)));
+        promise.resolve(FileSystemFileHandle::create(*context, String { name }, result.returnValue(), WTFMove(connection)));
     });
 }
 
@@ -84,7 +84,7 @@
             return promise.reject(Exception { InvalidStateError, "Context has stopped"_s });
         }
 
-        promise.settle(FileSystemDirectoryHandle::create(*context, String { name }, identifier, WTFMove(connection)));
+        promise.resolve(FileSystemDirectoryHandle::create(*context, String { name }, identifier, WTFMove(connection)));
     });
 }
 
@@ -105,10 +105,7 @@
         return promise.reject(Exception { InvalidStateError, "Handle is closed"_s });
 
     connection().resolve(identifier(), handle.identifier(), [promise = WTFMove(promise)](auto result) mutable {
-        if (result.hasException())
-            return promise.reject(result.releaseException());
-
-        promise.resolve(result.releaseReturnValue());
+        promise.settle(WTFMove(result));
     });
 }
 

Modified: trunk/Source/WebCore/Modules/filesystemaccess/FileSystemFileHandle.cpp (286495 => 286496)


--- trunk/Source/WebCore/Modules/filesystemaccess/FileSystemFileHandle.cpp	2021-12-03 17:19:47 UTC (rev 286495)
+++ trunk/Source/WebCore/Modules/filesystemaccess/FileSystemFileHandle.cpp	2021-12-03 17:35:24 UTC (rev 286496)
@@ -86,7 +86,7 @@
             return promise.reject(Exception { InvalidStateError, "Context has stopped"_s });
         }
 
-        promise.settle(FileSystemSyncAccessHandle::create(*context, protectedThis.get(), identifier, file));
+        promise.resolve(FileSystemSyncAccessHandle::create(*context, protectedThis.get(), identifier, file));
     });
 }
 

Modified: trunk/Source/WebCore/bindings/js/JSDOMPromiseDeferred.h (286495 => 286496)


--- trunk/Source/WebCore/bindings/js/JSDOMPromiseDeferred.h	2021-12-03 17:19:47 UTC (rev 286495)
+++ trunk/Source/WebCore/bindings/js/JSDOMPromiseDeferred.h	2021-12-03 17:35:24 UTC (rev 286496)
@@ -274,7 +274,8 @@
         m_promise->resolve<IDLType>(std::forward<typename IDLType::ParameterType>(value));
     }
 
-    void settle(ExceptionOr<typename IDLType::ParameterType>&& result)
+    template<typename U>
+    void settle(ExceptionOr<U>&& result)
     {
         if (result.hasException()) {
             reject(result.releaseException());
@@ -284,39 +285,6 @@
     }
 };
 
-template<typename T>
-class DOMPromiseDeferred<IDLInterface<T>> : public DOMPromiseDeferredBase {
-public:
-    using DOMPromiseDeferredBase::DOMPromiseDeferredBase;
-    using DOMPromiseDeferredBase::operator=;
-    using DOMPromiseDeferredBase::promise;
-    using DOMPromiseDeferredBase::reject;
-    using IDLType = IDLInterface<T>;
-
-    void resolve(typename IDLType::InnerParameterType value)
-    {
-        m_promise->resolve<IDLType>(std::forward<typename IDLType::ParameterType>(value));
-    }
-
-    void settle(ExceptionOr<typename IDLType::InnerParameterType>&& result)
-    {
-        if (result.hasException()) {
-            reject(result.releaseException());
-            return;
-        }
-        resolve(result.releaseReturnValue());
-    }
-
-    void settle(ExceptionOr<typename IDLType::ParameterType>&& result)
-    {
-        if (result.hasException()) {
-            reject(result.releaseException());
-            return;
-        }
-        resolve(result.releaseReturnValue());
-    }
-};
-
 template<> class DOMPromiseDeferred<void> : public DOMPromiseDeferredBase {
 public:
     using DOMPromiseDeferredBase::DOMPromiseDeferredBase;

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp (286495 => 286496)


--- trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp	2021-12-03 17:19:47 UTC (rev 286495)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp	2021-12-03 17:35:24 UTC (rev 286496)
@@ -671,11 +671,7 @@
 void ServiceWorkerContainer::getNavigationPreloadState(ServiceWorkerRegistrationIdentifier identifier, NavigationPreloadStatePromise&& promise)
 {
     ensureSWClientConnection().getNavigationPreloadState(identifier, [promise = WTFMove(promise)](auto&& result) mutable {
-        if (result.hasException()) {
-            promise.reject(result.releaseException());
-            return;
-        }
-        promise.resolve(result.releaseReturnValue());
+        promise.settle(WTFMove(result));
     });
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to