| Index: test/cctest/test-api-interceptors.cc
|
| diff --git a/test/cctest/test-api-interceptors.cc b/test/cctest/test-api-interceptors.cc
|
| index 4416fd6b530b3dc2fe21d9206bcf8e03e76c545e..858666f2dc375ffdf8b055a711538e237e5e4256 100644
|
| --- a/test/cctest/test-api-interceptors.cc
|
| +++ b/test/cctest/test-api-interceptors.cc
|
| @@ -1573,9 +1573,12 @@ THREADED_TEST(NamedPropertyHandlerGetter) {
|
| }
|
|
|
| namespace {
|
| +int definer_was_called;
|
| +
|
| void NotInterceptingPropertyDefineCallback(
|
| Local<Name> name, const v8::PropertyDescriptor& desc,
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| + definer_was_called++;
|
| // Do not intercept by not calling info.GetReturnValue().Set().
|
| }
|
|
|
| @@ -1583,6 +1586,7 @@ void InterceptingPropertyDefineCallback(
|
| Local<Name> name, const v8::PropertyDescriptor& desc,
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| // Intercept the callback by setting a non-empty handle
|
| + definer_was_called++;
|
| info.GetReturnValue().Set(name);
|
| }
|
|
|
| @@ -1816,6 +1820,44 @@ THREADED_TEST(PropertyDefinerCallbackForFreeze) {
|
| .FromJust());
|
| }
|
|
|
| +// Check that the define interceptor is not triggered for DefineProperty
|
| +// with the kSkip flag.
|
| +THREADED_TEST(DefinePropertyWithoutInterceptors) {
|
| + v8::Isolate* isolate = CcTest::isolate();
|
| + v8::HandleScope scope(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| +
|
| + templ->SetHandler(v8::NamedPropertyHandlerConfiguration(
|
| + nullptr, nullptr, nullptr, nullptr, nullptr,
|
| + InterceptingPropertyDefineCallback));
|
| +
|
| + LocalContext context;
|
| + v8::Local<v8::Name> p;
|
| +
|
| + v8::Local<v8::Object> obj =
|
| + templ->NewInstance(context.local()).ToLocalChecked();
|
| +
|
| + definer_was_called = 0;
|
| +
|
| + // Use a generic descriptor.
|
| + v8::PropertyDescriptor desc_generic;
|
| +
|
| + p = v8_str("foo");
|
| +
|
| + // kDontSkip (default) triggers the interceptors when setting
|
| + // own property of an object.
|
| + CHECK(obj->DefineProperty(context.local(), p, desc_generic).FromJust());
|
| + CHECK_EQ(1, definer_was_called);
|
| +
|
| + definer_was_called = 0;
|
| +
|
| + // kSkip does not trigger the interceptors.
|
| + CHECK(obj->DefineProperty(context.local(), p, desc_generic,
|
| + v8::CallInterceptors::kSkip)
|
| + .FromJust());
|
| + CHECK_EQ(0, definer_was_called);
|
| +}
|
| +
|
| // Check that the descriptor passed to the callback is enumerable.
|
| namespace {
|
| void CheckEnumerablePropertyDefineCallback(
|
|
|