Access checks only have meaning in a setting with multiple contexts from multiple origins. Unlike the other callback mechanisms, it's unlikely you'll want to use this mechanism in a non-browser setting.
Regards, Toon On Tue, Feb 2, 2016, 11:28 <zaq178mi...@gmail.com> wrote: > Maybe I cloned wrong blink repo ( > https://chromium.googlesource.com/chromium/blink)? Just noted that latest > changes there is 4 month old. > > I writ php binding to v8 API (don't be confused with v8js), so my typical > use case for data in callbacks (or {Function,Property}CallbackInfo obj) is > to pass actual php function (specified in PHP runtime in userland) that > will be executed. > > meta-code is (use AccessCheckCallback to demonstrate the idea): > > v8::Local<v8::External> data; > v8::AccessCheckCallback callback = nullptr; > > if (php_callback) { > data = v8::External::New(isolate, to_callbacks_bucket(0, php_callback > )); > callback = php_v8_callback_access_check; > } > > v8::Local<v8::ObjectTemplate> template = php_v8_object_template_get_local( > isolate, php_v8_object_template); > > local_template->SetAccessCheckCallback(callback, data); > > // > bool php_v8_callback_access_check(v8::Local<v8::Context> accessing_context > , v8::Local<v8::Object> accessed_object/*, v8::Local<v8::Value> data*/) { > bool security_retval = false; > zval retval; > zval args; // = [to_php_internal_repr(accessing_context), > to_php_internal_repr(accessed_object)]; > > php_v8_callback_call_from_bucket_with_zargs(0/*, data*/, &args, & > retval); > > if (Z_TYPE(retval) == IS_TRUE) { > security_retval = true; > } > > return security_retval; > } > > void php_v8_callback_call_from_bucket_with_zargs(size_t index, v8::Local< > v8::Value> data, zval *args, zval *retval) { > php_v8_callbacks_bucket_t *bucket; > > if (data.IsEmpty() || !data->IsExternal()) { > PHP_V8_THROW_EXCEPTION("Callback has no stored callback function" > ); > return; > } > > bucket = static_cast<php_v8_callbacks_bucket_t *>(v8::Local<v8:: > External>::Cast(data)->Value()); > assert(bucket->size > index); > //... > } > > I use similar approach for all callbacks in v8 like (incl. now deprecated > NamedSecurityCallback and IndexedSecurityCallback) or Data() accessor on > PropertyCallbackInfo, > FunctionCallback and others like these. > > > On Tuesday, February 2, 2016 at 11:56:51 AM UTC+2, Jochen Eisinger wrote: > >> I'll do something similar. >> >> Note that blink already uses the new API, but it doesn't need data in the >> callbacks - just in the failed access check callbacks. >> >> May I ask what you're using the callbacks for? they're pretty much custom >> made for the use case in blink, so chances are they don't do what you think >> they do :-/ >> >> On Tue, Feb 2, 2016 at 9:58 AM <zaq17...@gmail.com> wrote: >> >>> Thanks for quick reply. >>> >>> Can you then apply patch above, please? >>> >>> Missed data looks definitely like a minor mistake during moving to new >>> SetAccessCheckCallback >>> (here you fix some of data >>> https://github.com/v8/v8/commit/e2675937d5b6d2e555edeaabcda7ce70551ea236 >>> ). >>> I checked blink code and if one decides to move to >>> SetAccessCheckCallback there, passing data to callback is a must. >>> >>> >>> On Tuesday, February 2, 2016 at 10:36:58 AM UTC+2, Jochen Eisinger wrote: >>>> >>>> afaik there was no reason to drop data from the callback other that we >>>> didn't know of anybody using it. >>>> >>> >>> >>> >>>> I guess it's fine to add it back. >>>> >>>> On Mon, Feb 1, 2016 at 10:44 PM <zaq17...@gmail.com> wrote: >>>> >>> I guess something like this may allow data passing to callback: >>>>> >>>>> diff --git a/include/v8.h b/include/v8.h >>>>> index 171623a..afeb043 100644 >>>>> --- a/include/v8.h >>>>> +++ b/include/v8.h >>>>> @@ -4322,7 +4322,8 @@ enum AccessType { >>>>> * object. >>>>> */ >>>>> >>>>> typedef bool (*AccessCheckCallback)(Local<Context> accessing_context, >>>>> - Local<Object> accessed_object); >>>>> + Local<Object> accessed_object, >>>>> + Local<Value> data = >>>>> Local<Value>()); >>>>> >>>>> >>>>> /** >>>>> diff --git a/src/isolate.cc b/src/isolate.cc >>>>> index 40d4c9f..2d15420 100644 >>>>> --- a/src/isolate.cc >>>>> +++ b/src/isolate.cc >>>>> @@ -843,7 +843,8 @@ bool Isolate::MayAccess(Handle<Context> >>>>> accessing_context, >>>>> VMState<EXTERNAL> state(this); >>>>> if (callback) { >>>>> return callback(v8::Utils::ToLocal(accessing_context), >>>>> - v8::Utils::ToLocal(receiver)); >>>>> + v8::Utils::ToLocal(receiver), >>>>> + v8::Utils::ToLocal(data)); >>>>> } >>>>> Handle<Object> key = factory()->undefined_value(); >>>>> return named_callback(v8::Utils::ToLocal(receiver), v8::Utils:: >>>>> ToLocal(key), >>>>> >>>>> >>>>> didn't tried it yet, but is idea correct or there was some other >>>>> reason to drop data? >>>>> >>>>> -- >>>>> -- >>>>> v8-dev mailing list >>>>> >>>> v8-...@googlegroups.com >>>> >>>> >>>>> http://groups.google.com/group/v8-dev >>>>> --- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "v8-dev" group. >>>>> >>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to v8-dev+un...@googlegroups.com. >>>> >>>> >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- >>> -- >>> v8-dev mailing list >>> v8-...@googlegroups.com >>> http://groups.google.com/group/v8-dev >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "v8-dev" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to v8-dev+un...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- > -- > v8-dev mailing list > v8-dev@googlegroups.com > http://groups.google.com/group/v8-dev > --- > You received this message because you are subscribed to the Google Groups > "v8-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to v8-dev+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- -- v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.