Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(565)

Side by Side Diff: test/cctest/test-api-interceptors.cc

Issue 2707263002: [api] Fix DescriptorInterceptor with access check. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« src/objects.cc ('K') | « src/objects.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdlib.h> 5 #include <stdlib.h>
6 6
7 #include "test/cctest/test-api.h" 7 #include "test/cctest/test-api.h"
8 8
9 #include "include/v8-util.h" 9 #include "include/v8-util.h"
10 #include "src/api.h" 10 #include "src/api.h"
(...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 CHECK_EQ(44, v8::Script::Compile(ctx, code) 569 CHECK_EQ(44, v8::Script::Compile(ctx, code)
570 .ToLocalChecked() 570 .ToLocalChecked()
571 ->Run(ctx) 571 ->Run(ctx)
572 .ToLocalChecked() 572 .ToLocalChecked()
573 ->Int32Value(ctx) 573 ->Int32Value(ctx)
574 .FromJust()); 574 .FromJust());
575 CHECK_EQ(3, set_was_called_counter); 575 CHECK_EQ(3, set_was_called_counter);
576 } 576 }
577 577
578 namespace { 578 namespace {
579 int descriptor_was_called;
580
581 void PropertyDescriptorCallback(
582 Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
583 // Intercept the callback by setting a different descriptor.
584 descriptor_was_called++;
585 const char* code =
586 "var desc = {value: 5};"
587 "desc;";
588 Local<Value> descriptor = v8_compile(code)
589 ->Run(info.GetIsolate()->GetCurrentContext())
590 .ToLocalChecked();
591 info.GetReturnValue().Set(descriptor);
592 }
593 } // namespace
594
595 // Check that the descriptor callback is called on the global object.
596 THREADED_TEST(DescriptorCallbackOnGlobalObject) {
597 v8::HandleScope scope(CcTest::isolate());
598 LocalContext env;
599 v8::Local<v8::FunctionTemplate> templ =
600 v8::FunctionTemplate::New(CcTest::isolate());
601
602 v8::Local<ObjectTemplate> object_template = templ->InstanceTemplate();
603 object_template->SetHandler(v8::NamedPropertyHandlerConfiguration(
604 nullptr, nullptr, PropertyDescriptorCallback, nullptr, nullptr, nullptr));
605 v8::Local<v8::Context> ctx =
606 v8::Context::New(CcTest::isolate(), nullptr, object_template);
607
608 descriptor_was_called = 0;
609
610 // Declare function.
611 v8::Local<v8::String> code = v8_str(
612 "var x = 42; var desc = Object.getOwnPropertyDescriptor(this, 'x'); "
613 "desc.value;");
614 CHECK_EQ(5, v8::Script::Compile(ctx, code)
615 .ToLocalChecked()
616 ->Run(ctx)
617 .ToLocalChecked()
618 ->Int32Value(ctx)
619 .FromJust());
620 CHECK_EQ(1, descriptor_was_called);
621 }
622
623 namespace {
579 void QueryCallbackSetDontDelete( 624 void QueryCallbackSetDontDelete(
580 Local<Name> property, const v8::PropertyCallbackInfo<v8::Integer>& info) { 625 Local<Name> property, const v8::PropertyCallbackInfo<v8::Integer>& info) {
581 info.GetReturnValue().Set(v8::PropertyAttribute::DontDelete); 626 info.GetReturnValue().Set(v8::PropertyAttribute::DontDelete);
582 } 627 }
583 628
584 } // namespace 629 } // namespace
585 630
586 // Regression for a Node.js test that fails in debug mode. 631 // Regression for a Node.js test that fails in debug mode.
587 THREADED_TEST(InterceptorFunctionRedeclareWithQueryCallback) { 632 THREADED_TEST(InterceptorFunctionRedeclareWithQueryCallback) {
588 v8::HandleScope scope(CcTest::isolate()); 633 v8::HandleScope scope(CcTest::isolate());
(...skipping 4381 matching lines...) Expand 10 before | Expand all | Expand 10 after
4970 ->Set(env.local(), v8_str("Fun"), 5015 ->Set(env.local(), v8_str("Fun"),
4971 fun_templ->GetFunction(env.local()).ToLocalChecked()) 5016 fun_templ->GetFunction(env.local()).ToLocalChecked())
4972 .FromJust()); 5017 .FromJust());
4973 5018
4974 CompileRun( 5019 CompileRun(
4975 "var f = new Fun();" 5020 "var f = new Fun();"
4976 "Number.prototype.__proto__ = f;" 5021 "Number.prototype.__proto__ = f;"
4977 "var a = 42;" 5022 "var a = 42;"
4978 "for (var i = 0; i<3; i++) { a.foo; }"); 5023 "for (var i = 0; i<3; i++) { a.foo; }");
4979 } 5024 }
OLDNEW
« src/objects.cc ('K') | « src/objects.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698