Index: third_party/WebKit/Source/core/dom/Microtask.cpp |
diff --git a/third_party/WebKit/Source/core/dom/Microtask.cpp b/third_party/WebKit/Source/core/dom/Microtask.cpp |
index 488c577f79f8dac4d4c285c74b6d0889169aa8b3..933dbe5091f2f44175fbf1c38f13dee7b04abd6f 100644 |
--- a/third_party/WebKit/Source/core/dom/Microtask.cpp |
+++ b/third_party/WebKit/Source/core/dom/Microtask.cpp |
@@ -31,6 +31,7 @@ |
#include "core/dom/Microtask.h" |
#include "bindings/core/v8/V8PerIsolateData.h" |
+#include "bindings/core/v8/V8RecursionScope.h" |
#include "platform/ScriptForbiddenScope.h" |
#include "platform/Task.h" |
#include "public/platform/WebTaskRunner.h" |
@@ -45,8 +46,17 @@ |
if (isolateData->recursionLevel() || isolateData->performingMicrotaskCheckpoint() || isolateData->destructionPending() || ScriptForbiddenScope::isScriptForbidden()) |
return; |
isolateData->setPerformingMicrotaskCheckpoint(true); |
- isolate->RunMicrotasks(); |
+ { |
+ // Ensure that end-of-task-or-microtask actions are performed. |
+ V8RecursionScope recursionScope(isolate); |
+ isolate->RunMicrotasks(); |
+ } |
isolateData->setPerformingMicrotaskCheckpoint(false); |
+} |
+ |
+bool Microtask::performingCheckpoint(v8::Isolate* isolate) |
+{ |
+ return V8PerIsolateData::from(isolate)->performingMicrotaskCheckpoint(); |
} |
static void microtaskFunctionCallback(void* data) |