@@ -17,9 +17,9 @@ namespace node {
1717
1818using v8::Context;
1919using v8::FunctionCallbackInfo;
20+ using v8::IntegrityLevel;
2021using v8::Local;
2122using v8::MaybeLocal;
22- using v8::NewStringType;
2323using v8::Object;
2424using v8::String;
2525using v8::Value;
@@ -32,10 +32,9 @@ namespace {
3232// permission.has('fs.in')
3333static void Has (const FunctionCallbackInfo<Value>& args) {
3434 Environment* env = Environment::GetCurrent (args);
35- v8::Isolate* isolate = env->isolate ();
3635 CHECK (args[0 ]->IsString ());
3736
38- String::Utf8Value utf8_deny_scope (isolate, args[0 ]);
37+ String::Utf8Value utf8_deny_scope (env-> isolate () , args[0 ]);
3938 if (*utf8_deny_scope == nullptr ) {
4039 return ;
4140 }
@@ -47,7 +46,7 @@ static void Has(const FunctionCallbackInfo<Value>& args) {
4746 }
4847
4948 if (args.Length () > 1 && !args[1 ]->IsUndefined ()) {
50- String::Utf8Value utf8_arg (isolate, args[1 ]);
49+ String::Utf8Value utf8_arg (env-> isolate () , args[1 ]);
5150 if (*utf8_arg == nullptr ) {
5251 return ;
5352 }
@@ -111,14 +110,12 @@ MaybeLocal<Value> CreateAccessDeniedError(Environment* env,
111110 PermissionScope perm,
112111 const std::string_view& res) {
113112 Local<Object> err = ERR_ACCESS_DENIED (env->isolate ());
114- Local<String> perm_string;
115- Local<String> resource_string;
116- if (!String::NewFromUtf8 (env->isolate (),
117- Permission::PermissionToString (perm),
118- NewStringType::kNormal )
113+ Local<Value> perm_string;
114+ Local<Value> resource_string;
115+ std::string_view perm_str = Permission::PermissionToString (perm);
116+ if (!ToV8Value (env->context (), perm_str, env->isolate ())
119117 .ToLocal (&perm_string) ||
120- !String::NewFromUtf8 (
121- env->isolate (), std::string (res).c_str (), NewStringType::kNormal )
118+ !ToV8Value (env->context (), res, env->isolate ())
122119 .ToLocal (&resource_string) ||
123120 err->Set (env->context (), env->permission_string (), perm_string)
124121 .IsNothing () ||
@@ -132,18 +129,24 @@ MaybeLocal<Value> CreateAccessDeniedError(Environment* env,
132129void Permission::ThrowAccessDenied (Environment* env,
133130 PermissionScope perm,
134131 const std::string_view& res) {
135- MaybeLocal<Value> err = CreateAccessDeniedError (env, perm, res);
136- if (err.IsEmpty ()) return ;
137- env->isolate ()->ThrowException (err.ToLocalChecked ());
132+ Local<Value> err;
133+ if (CreateAccessDeniedError (env, perm, res).ToLocal (&err)) {
134+ env->isolate ()->ThrowException (err);
135+ }
136+ // If ToLocal returned false, then v8 will have scheduled a
137+ // superseding error to be thrown.
138138}
139139
140140void Permission::AsyncThrowAccessDenied (Environment* env,
141141 fs::FSReqBase* req_wrap,
142142 PermissionScope perm,
143143 const std::string_view& res) {
144- MaybeLocal<Value> err = CreateAccessDeniedError (env, perm, res);
145- if (err.IsEmpty ()) return ;
146- return req_wrap->Reject (err.ToLocalChecked ());
144+ Local<Value> err;
145+ if (CreateAccessDeniedError (env, perm, res).ToLocal (&err)) {
146+ return req_wrap->Reject (err);
147+ }
148+ // If ToLocal returned false, then v8 will have scheduled a
149+ // superseding error to be thrown.
147150}
148151
149152void Permission::EnablePermissions () {
@@ -167,7 +170,7 @@ void Initialize(Local<Object> target,
167170 void * priv) {
168171 SetMethodNoSideEffect (context, target, " has" , Has);
169172
170- target->SetIntegrityLevel (context, v8:: IntegrityLevel::kFrozen ).FromJust ();
173+ target->SetIntegrityLevel (context, IntegrityLevel::kFrozen ).FromJust ();
171174}
172175
173176void RegisterExternalReferences (ExternalReferenceRegistry* registry) {
0 commit comments