- Revision
- 248897
- Author
- [email protected]
- Date
- 2019-08-20 02:48:20 -0700 (Tue, 20 Aug 2019)
Log Message
Remove DeferredPromise::sessionID()
https://bugs.webkit.org/show_bug.cgi?id=200616
Reviewed by Alex Christensen.
Calling sessionID() on DeferredPromise is valid if the DeferredPromise is not suspended.
Since this might not always be true in call sites, add a resolve promise that is passed a function that returns
the value to resolve.
This function is taking a ScriptExecutionContext from which the session ID can be retrieved.
This is safe since the function will only be called if the DeferredPromise is not suspended.
Update call sites accordingly.
No change of behavior.
* Modules/fetch/FetchBodyConsumer.cpp:
(WebCore::resolveWithTypeAndData):
(WebCore::FetchBodyConsumer::resolve):
* Modules/fetch/FetchBodyOwner.cpp:
(WebCore::FetchBodyOwner::blob):
* bindings/js/JSDOMPromiseDeferred.h:
(WebCore::DeferredPromise::resolveCallbackValueWithNewlyCreated):
(WebCore::DeferredPromise::sessionID const): Deleted.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (248896 => 248897)
--- trunk/Source/WebCore/ChangeLog 2019-08-20 09:39:25 UTC (rev 248896)
+++ trunk/Source/WebCore/ChangeLog 2019-08-20 09:48:20 UTC (rev 248897)
@@ -1,5 +1,29 @@
2019-08-20 Youenn Fablet <[email protected]>
+ Remove DeferredPromise::sessionID()
+ https://bugs.webkit.org/show_bug.cgi?id=200616
+
+ Reviewed by Alex Christensen.
+
+ Calling sessionID() on DeferredPromise is valid if the DeferredPromise is not suspended.
+ Since this might not always be true in call sites, add a resolve promise that is passed a function that returns
+ the value to resolve.
+ This function is taking a ScriptExecutionContext from which the session ID can be retrieved.
+ This is safe since the function will only be called if the DeferredPromise is not suspended.
+ Update call sites accordingly.
+ No change of behavior.
+
+ * Modules/fetch/FetchBodyConsumer.cpp:
+ (WebCore::resolveWithTypeAndData):
+ (WebCore::FetchBodyConsumer::resolve):
+ * Modules/fetch/FetchBodyOwner.cpp:
+ (WebCore::FetchBodyOwner::blob):
+ * bindings/js/JSDOMPromiseDeferred.h:
+ (WebCore::DeferredPromise::resolveCallbackValueWithNewlyCreated):
+ (WebCore::DeferredPromise::sessionID const): Deleted.
+
+2019-08-20 Youenn Fablet <[email protected]>
+
PendingActivationMediaStream does not need to be refcounted
https://bugs.webkit.org/show_bug.cgi?id=200879
Modified: trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp (248896 => 248897)
--- trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp 2019-08-20 09:39:25 UTC (rev 248896)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp 2019-08-20 09:48:20 UTC (rev 248897)
@@ -64,7 +64,9 @@
fulfillPromiseWithArrayBuffer(WTFMove(promise), data, length);
return;
case FetchBodyConsumer::Type::Blob:
- promise->resolveWithNewlyCreated<IDLInterface<Blob>>(blobFromData(promise->sessionID(), data, length, contentType).get());
+ promise->resolveCallbackValueWithNewlyCreated<IDLInterface<Blob>>([&data, &length, &contentType](auto& context) {
+ return blobFromData(context.sessionID(), data, length, contentType);
+ });
return;
case FetchBodyConsumer::Type::JSON:
fulfillPromiseWithJSON(WTFMove(promise), textFromUTF8(data, length));
@@ -130,7 +132,9 @@
fulfillPromiseWithArrayBuffer(WTFMove(promise), takeAsArrayBuffer().get());
return;
case Type::Blob:
- promise->resolveWithNewlyCreated<IDLInterface<Blob>>(takeAsBlob(promise->sessionID()).get());
+ promise->resolveCallbackValueWithNewlyCreated<IDLInterface<Blob>>([this](auto& context) {
+ return takeAsBlob(context.sessionID());
+ });
return;
case Type::JSON:
fulfillPromiseWithJSON(WTFMove(promise), takeAsText());
Modified: trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.h (248896 => 248897)
--- trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.h 2019-08-20 09:39:25 UTC (rev 248896)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.h 2019-08-20 09:48:20 UTC (rev 248897)
@@ -32,6 +32,7 @@
#include "JSDOMPromiseDeferred.h"
#include "ReadableStreamSink.h"
#include "SharedBuffer.h"
+#include <pal/SessionID.h>
namespace WebCore {
Modified: trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp (248896 => 248897)
--- trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp 2019-08-20 09:39:25 UTC (rev 248896)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyOwner.cpp 2019-08-20 09:48:20 UTC (rev 248897)
@@ -124,7 +124,9 @@
}
if (isBodyNullOrOpaque()) {
- promise->resolve<IDLInterface<Blob>>(Blob::create(promise->sessionID(), Vector<uint8_t> { }, Blob::normalizedContentType(extractMIMETypeFromMediaType(m_contentType))));
+ promise->resolveCallbackValueWithNewlyCreated<IDLInterface<Blob>>([this](auto& context) {
+ return Blob::create(context.sessionID(), Vector<uint8_t> { }, Blob::normalizedContentType(extractMIMETypeFromMediaType(m_contentType)));
+ });
return;
}
if (isDisturbedOrLocked()) {
Modified: trunk/Source/WebCore/bindings/js/JSDOMPromiseDeferred.h (248896 => 248897)
--- trunk/Source/WebCore/bindings/js/JSDOMPromiseDeferred.h 2019-08-20 09:39:25 UTC (rev 248896)
+++ trunk/Source/WebCore/bindings/js/JSDOMPromiseDeferred.h 2019-08-20 09:48:20 UTC (rev 248897)
@@ -28,10 +28,8 @@
#include "ExceptionOr.h"
#include "JSDOMConvert.h"
#include "JSDOMGuardedObject.h"
-#include "ScriptExecutionContext.h"
#include <_javascript_Core/CatchScope.h>
#include <_javascript_Core/JSPromiseDeferred.h>
-#include <pal/SessionID.h>
namespace WebCore {
@@ -93,6 +91,18 @@
}
template<class IDLType>
+ void resolveCallbackValueWithNewlyCreated(const Function<typename IDLType::InnerParameterType(ScriptExecutionContext&)>& createValue)
+ {
+ if (isSuspended())
+ return;
+ ASSERT(deferred());
+ ASSERT(globalObject());
+ auto* exec = globalObject()->globalExec();
+ JSC::JSLockHolder locker(exec);
+ resolve(*exec, toJSNewlyCreated<IDLType>(*exec, *globalObject(), createValue(*globalObject()->scriptExecutionContext())));
+ }
+
+ template<class IDLType>
void reject(typename IDLType::ParameterType value)
{
if (isSuspended())
@@ -138,8 +148,6 @@
void whenSettled(std::function<void()>&&);
- PAL::SessionID sessionID() const { return globalObject()->scriptExecutionContext()->sessionID(); }
-
private:
DeferredPromise(JSDOMGlobalObject& globalObject, JSC::JSPromiseDeferred& deferred, Mode mode)
: DOMGuarded<JSC::JSPromiseDeferred>(globalObject, deferred)