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.

Reply via email to