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

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

Issue 1034513002: fix attribute lookup for all can read indexed interceptors (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 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
« no previous file with comments | « 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 3006 matching lines...) Expand 10 before | Expand all | Expand 10 after
3017 context->Global()->Set(v8_str("checked"), checked_instance); 3017 context->Global()->Set(v8_str("checked"), checked_instance);
3018 CompileRun( 3018 CompileRun(
3019 "checked.__proto__ = intercepted_1;" 3019 "checked.__proto__ = intercepted_1;"
3020 "intercepted_1.__proto__ = intercepted_0;"); 3020 "intercepted_1.__proto__ = intercepted_0;");
3021 3021
3022 checked_instance->TurnOnAccessCheck(); 3022 checked_instance->TurnOnAccessCheck();
3023 CHECK_EQ(0, access_check_data.count); 3023 CHECK_EQ(0, access_check_data.count);
3024 3024
3025 access_check_data.result = true; 3025 access_check_data.result = true;
3026 ExpectInt32("checked.whatever", 17); 3026 ExpectInt32("checked.whatever", 17);
3027 CHECK_EQ(1, access_check_data.count); 3027 CHECK(!CompileRun("Object.getOwnPropertyDescriptor(checked, 'whatever')")
3028 ->IsUndefined());
3029 CHECK_EQ(2, access_check_data.count);
3028 3030
3029 access_check_data.result = false; 3031 access_check_data.result = false;
3030 ExpectInt32("checked.whatever", intercept_data_0.value); 3032 ExpectInt32("checked.whatever", intercept_data_0.value);
3031 CHECK_EQ(2, access_check_data.count); 3033 {
3034 v8::TryCatch try_catch(isolate);
3035 CompileRun("Object.getOwnPropertyDescriptor(checked, 'whatever')");
3036 CHECK(try_catch.HasCaught());
3037 }
3038 CHECK_EQ(4, access_check_data.count);
3032 3039
3033 intercept_data_1.should_intercept = true; 3040 intercept_data_1.should_intercept = true;
3034 ExpectInt32("checked.whatever", intercept_data_1.value); 3041 ExpectInt32("checked.whatever", intercept_data_1.value);
3035 CHECK_EQ(3, access_check_data.count); 3042 {
3043 v8::TryCatch try_catch(isolate);
3044 CompileRun("Object.getOwnPropertyDescriptor(checked, 'whatever')");
3045 CHECK(try_catch.HasCaught());
3046 }
3047 CHECK_EQ(6, access_check_data.count);
3036 } 3048 }
3037 3049
3038 3050
3039 THREADED_TEST(IndexedAllCanReadInterceptor) { 3051 THREADED_TEST(IndexedAllCanReadInterceptor) {
3040 auto isolate = CcTest::isolate(); 3052 auto isolate = CcTest::isolate();
3041 v8::HandleScope handle_scope(isolate); 3053 v8::HandleScope handle_scope(isolate);
3042 LocalContext context; 3054 LocalContext context;
3043 3055
3044 AccessCheckData access_check_data; 3056 AccessCheckData access_check_data;
3045 access_check_data.result = false; 3057 access_check_data.result = false;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3083 checked_instance->Set(15, v8_num(17)); 3095 checked_instance->Set(15, v8_num(17));
3084 CompileRun( 3096 CompileRun(
3085 "checked.__proto__ = intercepted_1;" 3097 "checked.__proto__ = intercepted_1;"
3086 "intercepted_1.__proto__ = intercepted_0;"); 3098 "intercepted_1.__proto__ = intercepted_0;");
3087 3099
3088 checked_instance->TurnOnAccessCheck(); 3100 checked_instance->TurnOnAccessCheck();
3089 CHECK_EQ(0, access_check_data.count); 3101 CHECK_EQ(0, access_check_data.count);
3090 3102
3091 access_check_data.result = true; 3103 access_check_data.result = true;
3092 ExpectInt32("checked[15]", 17); 3104 ExpectInt32("checked[15]", 17);
3093 CHECK_EQ(1, access_check_data.count); 3105 CHECK(!CompileRun("Object.getOwnPropertyDescriptor(checked, '15')")
3106 ->IsUndefined());
3107 CHECK_EQ(3, access_check_data.count);
3094 3108
3095 access_check_data.result = false; 3109 access_check_data.result = false;
3096 ExpectInt32("checked[15]", intercept_data_0.value); 3110 ExpectInt32("checked[15]", intercept_data_0.value);
3097 CHECK_EQ(2, access_check_data.count); 3111 // Note: this should throw but without a LookupIterator it's complicated.
3112 CHECK(!CompileRun("Object.getOwnPropertyDescriptor(checked, '15')")
3113 ->IsUndefined());
3114 CHECK_EQ(6, access_check_data.count);
3098 3115
3099 intercept_data_1.should_intercept = true; 3116 intercept_data_1.should_intercept = true;
3100 ExpectInt32("checked[15]", intercept_data_1.value); 3117 ExpectInt32("checked[15]", intercept_data_1.value);
3101 CHECK_EQ(3, access_check_data.count); 3118 // Note: this should throw but without a LookupIterator it's complicated.
3119 CHECK(!CompileRun("Object.getOwnPropertyDescriptor(checked, '15')")
3120 ->IsUndefined());
3121 CHECK_EQ(9, access_check_data.count);
3102 } 3122 }
3103 3123
3104 3124
3105 THREADED_TEST(NonMaskingInterceptorOwnProperty) { 3125 THREADED_TEST(NonMaskingInterceptorOwnProperty) {
3106 auto isolate = CcTest::isolate(); 3126 auto isolate = CcTest::isolate();
3107 v8::HandleScope handle_scope(isolate); 3127 v8::HandleScope handle_scope(isolate);
3108 LocalContext context; 3128 LocalContext context;
3109 3129
3110 ShouldInterceptData intercept_data; 3130 ShouldInterceptData intercept_data;
3111 intercept_data.value = 239; 3131 intercept_data.value = 239;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
3220 3240
3221 // Reset. 3241 // Reset.
3222 CompileRun("delete obj.whatever;"); 3242 CompileRun("delete obj.whatever;");
3223 ExpectInt32("f(obj)", 239); 3243 ExpectInt32("f(obj)", 239);
3224 ExpectInt32("f(outer)", 239); 3244 ExpectInt32("f(outer)", 239);
3225 3245
3226 CompileRun("outer.whatever = 4;"); 3246 CompileRun("outer.whatever = 4;");
3227 ExpectInt32("f(obj)", 239); 3247 ExpectInt32("f(obj)", 239);
3228 ExpectInt32("f(outer)", 4); 3248 ExpectInt32("f(outer)", 4);
3229 } 3249 }
OLDNEW
« no previous file with comments | « src/objects.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698