1818#include < memory>
1919#include < vector>
2020
21- #include " ../quic/streams.h"
22-
2321namespace node {
2422
25- using quic::BindingData;
2623using v8::ArrayBuffer;
2724using v8::ArrayBufferView;
2825using v8::BackingStore;
26+ using v8::FunctionCallbackInfo;
27+ using v8::FunctionTemplate;
28+ using v8::Isolate;
2929using v8::Local;
3030using v8::Object;
3131using v8::ObjectTemplate;
@@ -1303,13 +1303,13 @@ void DataQueueFeeder::DrainAndClose() {
13031303 }
13041304}
13051305
1306- JS_METHOD_IMPL ( DataQueueFeeder::New) {
1306+ void DataQueueFeeder::New ( const FunctionCallbackInfo<Value>& args ) {
13071307 DCHECK (args.IsConstructCall ());
13081308 auto env = Environment::GetCurrent (args);
13091309 new DataQueueFeeder (env, args.This ());
13101310}
13111311
1312- JS_METHOD_IMPL ( DataQueueFeeder::Ready) {
1312+ void DataQueueFeeder::Ready ( const FunctionCallbackInfo<Value>& args ) {
13131313 Environment* env = Environment::GetCurrent (args);
13141314 DataQueueFeeder* feeder;
13151315 ASSIGN_OR_RETURN_UNWRAP (&feeder, args.This ());
@@ -1325,7 +1325,7 @@ JS_METHOD_IMPL(DataQueueFeeder::Ready) {
13251325 }
13261326}
13271327
1328- JS_METHOD_IMPL ( DataQueueFeeder::Submit) {
1328+ void DataQueueFeeder::Submit ( const FunctionCallbackInfo<Value>& args ) {
13291329 Environment* env = Environment::GetCurrent (args);
13301330 DataQueueFeeder* feeder;
13311331 ASSIGN_OR_RETURN_UNWRAP (&feeder, args.This ());
@@ -1356,7 +1356,15 @@ JS_METHOD_IMPL(DataQueueFeeder::Submit) {
13561356 // there may be also troubles, if multiple Uint8Array
13571357 // are derived in a parser from a single ArrayBuffer
13581358 size_t nread = typedArray->ByteLength ();
1359- JS_TRY_ALLOCATE_BACKING (env, backingUniq, nread);
1359+ auto backingUniq = v8::ArrayBuffer::NewBackingStore (
1360+ env->isolate (),
1361+ nread,
1362+ v8::BackingStoreInitializationMode::kUninitialized ,
1363+ v8::BackingStoreOnFailureMode::kReturnNull );
1364+ if (!backingUniq) {
1365+ THROW_ERR_MEMORY_ALLOCATION_FAILED (env);
1366+ return ;
1367+ }
13601368 std::shared_ptr<BackingStore> backing = std::move (backingUniq);
13611369
13621370 auto originalStore = typedArray->Buffer ()->GetBackingStore ();
@@ -1392,15 +1400,15 @@ JS_METHOD_IMPL(DataQueueFeeder::Submit) {
13921400 }
13931401}
13941402
1395- JS_METHOD_IMPL ( DataQueueFeeder::Error) {
1403+ void DataQueueFeeder::Error ( const FunctionCallbackInfo<Value>& args ) {
13961404 DataQueueFeeder* feeder;
13971405 ASSIGN_OR_RETURN_UNWRAP (&feeder, args.This ());
13981406 // FIXME, how should I pass on the error
13991407 // ResetStream must be send also
14001408 feeder->DrainAndClose ();
14011409}
14021410
1403- JS_METHOD_IMPL ( DataQueueFeeder::AddFakePull) {
1411+ void DataQueueFeeder::AddFakePull ( const FunctionCallbackInfo<Value>& args ) {
14041412 DataQueueFeeder* feeder;
14051413 ASSIGN_OR_RETURN_UNWRAP (&feeder, args.This ());
14061414 // this adds a fake pull for testing code, not to be used anywhere else
@@ -1411,36 +1419,56 @@ JS_METHOD_IMPL(DataQueueFeeder::AddFakePull) {
14111419 feeder->tryWakePulls ();
14121420}
14131421
1414- JS_CONSTRUCTOR_IMPL (DataQueueFeeder, dataqueuefeeder_constructor_template, {
1415- auto isolate = env->isolate ();
1416- JS_NEW_CONSTRUCTOR ();
1417- JS_INHERIT (AsyncWrap);
1418- JS_CLASS (dataqueuefeeder);
1419- SetProtoMethod (isolate, tmpl, " error" , Error);
1420- SetProtoMethod (isolate, tmpl, " submit" , Submit);
1421- SetProtoMethod (isolate, tmpl, " ready" , Ready);
1422- SetProtoMethod (isolate, tmpl, " addFakePull" , AddFakePull);
1423- })
1424-
1425- void DataQueueFeeder::InitPerIsolate(IsolateData* data,
1426- Local<ObjectTemplate> target) {
1427- // TODO(@jasnell): Implement the per-isolate state
1422+ bool DataQueueFeeder::HasInstance (Environment* env, Local<Value> object) {
1423+ return GetConstructorTemplate (env)->HasInstance (object);
14281424}
14291425
1430- void DataQueueFeeder::InitPerContext (Realm* realm, Local<Object> target) {
1431- SetConstructorFunction (realm->context (),
1426+ Local<FunctionTemplate> DataQueueFeeder::GetConstructorTemplate (Environment* env) {
1427+ Local<FunctionTemplate> tmpl = env->data_queue_feeder_constructor_template ();
1428+ if (tmpl.IsEmpty ()) {
1429+ Isolate* isolate = env->isolate ();
1430+ tmpl = NewFunctionTemplate (isolate, DataQueueFeeder::New); // second argument was nullptr
1431+ tmpl->InstanceTemplate ()->SetInternalFieldCount (
1432+ BaseObject::kInternalFieldCount );
1433+ tmpl->SetClassName (FIXED_ONE_BYTE_STRING (env->isolate (), " DataQueueFeeder" ));
1434+ tmpl->Inherit (AsyncWrap::GetConstructorTemplate (env));
1435+ env->set_data_queue_feeder_constructor_template (tmpl);
1436+ SetProtoMethod (isolate, tmpl, " error" , Error);
1437+ SetProtoMethod (isolate, tmpl, " submit" , Submit);
1438+ SetProtoMethod (isolate, tmpl, " ready" , Ready);
1439+ SetProtoMethod (isolate, tmpl, " addFakePull" , AddFakePull);
1440+ }
1441+ return tmpl;
1442+ }
1443+
1444+ void DataQueueFeeder::CreatePerIsolateProperties (IsolateData* isolate_data,
1445+ v8::Local<v8::ObjectTemplate> target) {
1446+ }
1447+
1448+ void DataQueueFeeder::CreatePerContextProperties (v8::Local<v8::Object> target,
1449+ v8::Local<v8::Value> unused,
1450+ v8::Local<v8::Context> context,
1451+ void * priv) {
1452+ Environment* env = Environment::GetCurrent (context);
1453+ SetConstructorFunction (context,
14321454 target,
14331455 " DataQueueFeeder" ,
1434- GetConstructorTemplate (realm->env ()));
1456+ GetConstructorTemplate (env),
1457+ SetConstructorFunctionFlag::NONE);
14351458}
14361459
14371460void DataQueueFeeder::RegisterExternalReferences (
14381461 ExternalReferenceRegistry* registry) {
1439- registry->Register (New);
1440- registry->Register (Submit);
1441- registry->Register (Error);
1442- registry->Register (Ready);
1443- registry->Register (AddFakePull);
1462+ registry->Register (DataQueueFeeder:: New);
1463+ registry->Register (DataQueueFeeder:: Submit);
1464+ registry->Register (DataQueueFeeder:: Error);
1465+ registry->Register (DataQueueFeeder:: Ready);
1466+ registry->Register (DataQueueFeeder:: AddFakePull);
14441467}
14451468
14461469} // namespace node
1470+
1471+ NODE_BINDING_CONTEXT_AWARE_INTERNAL (dataqueuefeeder,
1472+ node::DataQueueFeeder::CreatePerContextProperties)
1473+ NODE_BINDING_PER_ISOLATE_INIT(dataqueuefeeder, node::DataQueueFeeder::CreatePerIsolateProperties)
1474+ NODE_BINDING_EXTERNAL_REFERENCE(dataqueuefeeder, node::DataQueueFeeder::RegisterExternalReferences)
0 commit comments