summaryrefslogtreecommitdiff
path: root/src/node_http2.cc
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2018-11-09 11:32:27 +0800
committerJoyee Cheung <joyeec9h3@gmail.com>2018-11-14 02:54:17 +0800
commit1a787b514cde6702bb7513f74392ae6a3b91e6f8 (patch)
treec2757c164c47ad78f4c2e03ab6e1805166a48726 /src/node_http2.cc
parent5b97e31f72d2af0bffd15463f365e9f526e173f0 (diff)
downloadandroid-node-v8-1a787b514cde6702bb7513f74392ae6a3b91e6f8.tar.gz
android-node-v8-1a787b514cde6702bb7513f74392ae6a3b91e6f8.tar.bz2
android-node-v8-1a787b514cde6702bb7513f74392ae6a3b91e6f8.zip
http2: remove pushValueToArray in Http2Session::HandleOriginFrame
Instead of calling into JS from C++ to push values into an array, use the new Array::New API that takes a pointer and a length directly. PR-URL: https://github.com/nodejs/node/pull/24264 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com>
Diffstat (limited to 'src/node_http2.cc')
-rw-r--r--src/node_http2.cc26
1 files changed, 9 insertions, 17 deletions
diff --git a/src/node_http2.cc b/src/node_http2.cc
index e50cbfd939..20b634f90f 100644
--- a/src/node_http2.cc
+++ b/src/node_http2.cc
@@ -1424,25 +1424,17 @@ void Http2Session::HandleOriginFrame(const nghttp2_frame* frame) {
nghttp2_extension ext = frame->ext;
nghttp2_ext_origin* origin = static_cast<nghttp2_ext_origin*>(ext.payload);
- Local<Value> holder = Array::New(isolate);
- Local<Function> fn = env()->push_values_to_array_function();
- Local<Value> argv[NODE_PUSH_VAL_TO_ARRAY_MAX];
+ size_t nov = origin->nov;
+ std::vector<Local<Value>> origin_v(nov);
- size_t n = 0;
- while (n < origin->nov) {
- size_t j = 0;
- while (n < origin->nov && j < arraysize(argv)) {
- auto entry = origin->ov[n++];
- argv[j++] =
- String::NewFromOneByte(isolate,
- entry.origin,
- v8::NewStringType::kNormal,
- entry.origin_len).ToLocalChecked();
- }
- if (j > 0)
- fn->Call(context, holder, j, argv).ToLocalChecked();
+ for (size_t i = 0; i < nov; ++i) {
+ const nghttp2_origin_entry& entry = origin->ov[i];
+ origin_v[i] =
+ String::NewFromOneByte(
+ isolate, entry.origin, v8::NewStringType::kNormal, entry.origin_len)
+ .ToLocalChecked();
}
-
+ Local<Value> holder = Array::New(isolate, origin_v.data(), origin_v.size());
MakeCallback(env()->onorigin_string(), 1, &holder);
}