summaryrefslogtreecommitdiff
path: root/src/env.cc
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2017-04-21 14:06:21 -0700
committerAnna Henningsen <anna@addaleax.net>2017-04-27 17:40:06 +0200
commite5a25cbc8524f0d57c66de85eeb4b1b4eacd6da8 (patch)
treeb402582069f7eb5cc409bc1a7d3e9acb8ae59215 /src/env.cc
parentdca08152cbb6024376fe6280d5fdc956682a4046 (diff)
downloadandroid-node-v8-e5a25cbc8524f0d57c66de85eeb4b1b4eacd6da8.tar.gz
android-node-v8-e5a25cbc8524f0d57c66de85eeb4b1b4eacd6da8.tar.bz2
android-node-v8-e5a25cbc8524f0d57c66de85eeb4b1b4eacd6da8.zip
src: expose `node::AddPromiseHook`
Expose `node::AddPromiseHook`, which wraps V8’s `SetPromiseHook` in a way that allows multiple hooks to be set up. PR-URL: https://github.com/nodejs/node/pull/12489 Reviewed-By: Matthew Loring <mattloring@google.com> Reviewed-By: Julien Gilli <jgilli@nodejs.org> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src/env.cc')
-rw-r--r--src/env.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/env.cc b/src/env.cc
index b44b435d4e..034625b375 100644
--- a/src/env.cc
+++ b/src/env.cc
@@ -188,4 +188,20 @@ void Environment::AtExit(void (*cb)(void* arg), void* arg) {
at_exit_functions_.push_back(AtExitCallback{cb, arg});
}
+void Environment::AddPromiseHook(promise_hook_func fn, void* arg) {
+ promise_hooks_.push_back(PromiseHookCallback{fn, arg});
+ if (promise_hooks_.size() == 1) {
+ isolate_->SetPromiseHook(EnvPromiseHook);
+ }
+}
+
+void Environment::EnvPromiseHook(v8::PromiseHookType type,
+ v8::Local<v8::Promise> promise,
+ v8::Local<v8::Value> parent) {
+ Environment* env = Environment::GetCurrent(promise->CreationContext());
+ for (const PromiseHookCallback& hook : env->promise_hooks_) {
+ hook.cb_(type, promise, parent, hook.arg_);
+ }
+}
+
} // namespace node