Title: [293001] branches/safari-613-branch/Source/WebCore
- Revision
- 293001
- Author
- alanc...@apple.com
- Date
- 2022-04-18 17:50:22 -0700 (Mon, 18 Apr 2022)
Log Message
Cherry-pick r292779. rdar://problem/89750945
RejectedPromiseTracker can be recreated if we are in a worker / worklet whose execution is terminating
https://bugs.webkit.org/show_bug.cgi?id=239130
Reviewed by Chris Dumez.
We update ScriptExecutionContext::ensureRejectedPromiseTrackerSlow so that we wont
recreate the promise tracker if we are in a worker / worklet whose execution is terminating.
* bindings/js/JSDOMGlobalObject.cpp:
(WebCore::JSDOMGlobalObject::promiseRejectionTracker):
* bindings/js/JSExecState.cpp:
(WebCore::JSExecState::didLeaveScriptContext):
* dom/ScriptExecutionContext.cpp:
(WebCore::ScriptExecutionContext::ensureRejectedPromiseTrackerSlow):
* dom/ScriptExecutionContext.h:
(WebCore::ScriptExecutionContext::ensureRejectedPromiseTracker):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@292779 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Modified Paths
Diff
Modified: branches/safari-613-branch/Source/WebCore/ChangeLog (293000 => 293001)
--- branches/safari-613-branch/Source/WebCore/ChangeLog 2022-04-19 00:50:18 UTC (rev 293000)
+++ branches/safari-613-branch/Source/WebCore/ChangeLog 2022-04-19 00:50:22 UTC (rev 293001)
@@ -1,5 +1,48 @@
2022-04-18 Kocsen Chung <kocsen_ch...@apple.com>
+ Cherry-pick r292779. rdar://problem/89750945
+
+ RejectedPromiseTracker can be recreated if we are in a worker / worklet whose execution is terminating
+ https://bugs.webkit.org/show_bug.cgi?id=239130
+
+ Reviewed by Chris Dumez.
+
+ We update ScriptExecutionContext::ensureRejectedPromiseTrackerSlow so that we wont
+ recreate the promise tracker if we are in a worker / worklet whose execution is terminating.
+
+ * bindings/js/JSDOMGlobalObject.cpp:
+ (WebCore::JSDOMGlobalObject::promiseRejectionTracker):
+ * bindings/js/JSExecState.cpp:
+ (WebCore::JSExecState::didLeaveScriptContext):
+ * dom/ScriptExecutionContext.cpp:
+ (WebCore::ScriptExecutionContext::ensureRejectedPromiseTrackerSlow):
+ * dom/ScriptExecutionContext.h:
+ (WebCore::ScriptExecutionContext::ensureRejectedPromiseTracker):
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@292779 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2022-04-12 Gabriel Nava Marino <gnavamar...@apple.com>
+
+ RejectedPromiseTracker can be recreated if we are in a worker / worklet whose execution is terminating
+ https://bugs.webkit.org/show_bug.cgi?id=239130
+
+ Reviewed by Chris Dumez.
+
+ We update ScriptExecutionContext::ensureRejectedPromiseTrackerSlow so that we wont
+ recreate the promise tracker if we are in a worker / worklet whose execution is terminating.
+
+ * bindings/js/JSDOMGlobalObject.cpp:
+ (WebCore::JSDOMGlobalObject::promiseRejectionTracker):
+ * bindings/js/JSExecState.cpp:
+ (WebCore::JSExecState::didLeaveScriptContext):
+ * dom/ScriptExecutionContext.cpp:
+ (WebCore::ScriptExecutionContext::ensureRejectedPromiseTrackerSlow):
+ * dom/ScriptExecutionContext.h:
+ (WebCore::ScriptExecutionContext::ensureRejectedPromiseTracker):
+
+2022-04-18 Kocsen Chung <kocsen_ch...@apple.com>
+
Cherry-pick r292638. rdar://problem/91255370
Simplify / Optimize the whitespace cache implementation
Modified: branches/safari-613-branch/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp (293000 => 293001)
--- branches/safari-613-branch/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp 2022-04-19 00:50:18 UTC (rev 293000)
+++ branches/safari-613-branch/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp 2022-04-19 00:50:22 UTC (rev 293001)
@@ -313,15 +313,19 @@
if (!context)
return;
+ auto rejectedPromiseTracker = context->ensureRejectedPromiseTracker();
+ if (!rejectedPromiseTracker)
+ return;
+
// FIXME: If script has muted errors (cross origin), terminate these steps.
// <https://webkit.org/b/171415> Implement the `muted-errors` property of Scripts to avoid onerror/onunhandledrejection for cross-origin scripts
switch (operation) {
case JSPromiseRejectionOperation::Reject:
- context->ensureRejectedPromiseTracker().promiseRejected(globalObject, *promise);
+ rejectedPromiseTracker->promiseRejected(globalObject, *promise);
break;
case JSPromiseRejectionOperation::Handle:
- context->ensureRejectedPromiseTracker().promiseHandled(globalObject, *promise);
+ rejectedPromiseTracker->promiseHandled(globalObject, *promise);
break;
}
}
Modified: branches/safari-613-branch/Source/WebCore/bindings/js/JSExecState.cpp (293000 => 293001)
--- branches/safari-613-branch/Source/WebCore/bindings/js/JSExecState.cpp 2022-04-19 00:50:18 UTC (rev 293000)
+++ branches/safari-613-branch/Source/WebCore/bindings/js/JSExecState.cpp 2022-04-19 00:50:22 UTC (rev 293001)
@@ -39,7 +39,8 @@
if (!context)
return;
context->eventLoop().performMicrotaskCheckpoint();
- context->ensureRejectedPromiseTracker().processQueueSoon();
+ if (auto rejectedPromiseTracker = context->ensureRejectedPromiseTracker())
+ rejectedPromiseTracker->processQueueSoon();
}
JSC::JSValue functionCallHandlerFromAnyThread(JSC::JSGlobalObject* lexicalGlobalObject, JSC::JSValue functionObject, const JSC::CallData& callData, JSC::JSValue thisValue, const JSC::ArgList& args, NakedPtr<JSC::Exception>& returnedException)
Modified: branches/safari-613-branch/Source/WebCore/dom/ScriptExecutionContext.cpp (293000 => 293001)
--- branches/safari-613-branch/Source/WebCore/dom/ScriptExecutionContext.cpp 2022-04-19 00:50:18 UTC (rev 293000)
+++ branches/safari-613-branch/Source/WebCore/dom/ScriptExecutionContext.cpp 2022-04-19 00:50:22 UTC (rev 293001)
@@ -508,14 +508,20 @@
return DOMTimer::defaultAlignmentInterval();
}
-RejectedPromiseTracker& ScriptExecutionContext::ensureRejectedPromiseTrackerSlow()
+RejectedPromiseTracker* ScriptExecutionContext::ensureRejectedPromiseTrackerSlow()
{
// ScriptExecutionContext::vm() in Worker is only available after WorkerGlobalScope initialization is done.
// When initializing ScriptExecutionContext, vm() is not ready.
ASSERT(!m_rejectedPromiseTracker);
+ if (is<WorkerOrWorkletGlobalScope>(*this)) {
+ auto* scriptController = downcast<WorkerOrWorkletGlobalScope>(*this).script();
+ // Do not re-create the promise tracker if we are in a worker / worklet whose execution is terminating.
+ if (!scriptController || scriptController->isTerminatingExecution())
+ return nullptr;
+ }
m_rejectedPromiseTracker = makeUnique<RejectedPromiseTracker>(*this, vm());
- return *m_rejectedPromiseTracker.get();
+ return m_rejectedPromiseTracker.get();
}
void ScriptExecutionContext::removeRejectedPromiseTracker()
Modified: branches/safari-613-branch/Source/WebCore/dom/ScriptExecutionContext.h (293000 => 293001)
--- branches/safari-613-branch/Source/WebCore/dom/ScriptExecutionContext.h 2022-04-19 00:50:18 UTC (rev 293000)
+++ branches/safari-613-branch/Source/WebCore/dom/ScriptExecutionContext.h 2022-04-19 00:50:22 UTC (rev 293001)
@@ -254,10 +254,10 @@
int timerNestingLevel() const { return m_timerNestingLevel; }
void setTimerNestingLevel(int timerNestingLevel) { m_timerNestingLevel = timerNestingLevel; }
- RejectedPromiseTracker& ensureRejectedPromiseTracker()
+ RejectedPromiseTracker* ensureRejectedPromiseTracker()
{
if (m_rejectedPromiseTracker)
- return *m_rejectedPromiseTracker.get();
+ return m_rejectedPromiseTracker.get();
return ensureRejectedPromiseTrackerSlow();
}
@@ -320,7 +320,7 @@
enum class ShouldContinue { No, Yes };
void forEachActiveDOMObject(const Function<ShouldContinue(ActiveDOMObject&)>&) const;
- RejectedPromiseTracker& ensureRejectedPromiseTrackerSlow();
+ RejectedPromiseTracker* ensureRejectedPromiseTrackerSlow();
void checkConsistency() const;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes