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

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

Issue 1193633003: [strong] Add tests for loading from proxy, super, with access checks (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: add positive tests for access checks Created 5 years, 6 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 | « no previous file | test/mjsunit/strong/load-builtins.js » ('j') | test/mjsunit/strong/load-proxy.js » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 21411 matching lines...) Expand 10 before | Expand all | Expand 10 after
21422 v8::HandleScope handle_scope(isolate); 21422 v8::HandleScope handle_scope(isolate);
21423 21423
21424 // Should work 21424 // Should work
21425 v8::Local<v8::Object> obj = v8::Object::New(isolate); 21425 v8::Local<v8::Object> obj = v8::Object::New(isolate);
21426 21426
21427 USE(obj); 21427 USE(obj);
21428 } 21428 }
21429 } 21429 }
21430 21430
21431 21431
21432 static bool access_was_called = false;
21433
21434
21435 static bool AccessAlwaysAllowed(Local<v8::Object> global, Local<Value> name,
21436 v8::AccessType type, Local<Value> data) {
21437 access_was_called = true;
21438 return true;
21439 }
21440
21441
21442 TEST(StrongModeAccessChecks) {
rossberg 2015/06/30 12:38:03 Can we also have a test where the access check for
conradw 2015/06/30 15:12:56 Done.
21443 i::FLAG_strong_mode = true;
21444 v8::Isolate* isolate = CcTest::isolate();
21445 v8::HandleScope handle_scope(isolate);
21446 v8::Handle<Value> value;
21447 access_was_called = false;
21448
21449 v8::Handle<v8::ObjectTemplate> obj_template =
21450 v8::ObjectTemplate::New(isolate);
21451
21452 obj_template->Set(v8_str("x"), v8::Integer::New(isolate, 42));
21453 obj_template->SetAccessCheckCallbacks(AccessAlwaysAllowed, NULL);
21454
21455 // Create an environment
21456 v8::Local<Context> context0 = Context::New(isolate, NULL, obj_template);
21457 context0->Enter();
21458 v8::Handle<v8::Object> global0 = context0->Global();
21459 global0->Set(v8_str("object"), obj_template->NewInstance());
21460 {
21461 v8::TryCatch try_catch(isolate);
21462 value = CompileRun("'use strong'; object.x");
21463 CHECK(!try_catch.HasCaught());
21464 CHECK(!access_was_called);
21465 CHECK_EQ(42, value->Int32Value());
21466 }
21467 {
21468 v8::TryCatch try_catch(isolate);
21469 value = CompileRun("'use strong'; object.foo");
21470 CHECK(try_catch.HasCaught());
21471 CHECK(!access_was_called);
21472 }
21473 {
21474 v8::TryCatch try_catch(isolate);
21475 value = CompileRun("'use strong'; object[10]");
21476 CHECK(try_catch.HasCaught());
21477 CHECK(!access_was_called);
21478 }
21479
21480 // Create an environment
21481 v8::Local<Context> context1 = Context::New(isolate);
21482 context1->Enter();
21483 v8::Handle<v8::Object> global1 = context1->Global();
21484 global1->Set(v8_str("object"), obj_template->NewInstance());
21485 {
21486 v8::TryCatch try_catch(isolate);
21487 value = CompileRun("'use strong'; object.x");
21488 CHECK(!try_catch.HasCaught());
21489 CHECK(access_was_called);
21490 CHECK_EQ(42, value->Int32Value());
21491 }
21492 access_was_called = false;
21493 {
21494 v8::TryCatch try_catch(isolate);
21495 value = CompileRun("'use strong'; object.foo");
21496 CHECK(try_catch.HasCaught());
21497 CHECK(access_was_called);
21498 }
21499 access_was_called = false;
21500 {
21501 v8::TryCatch try_catch(isolate);
21502 value = CompileRun("'use strong'; object[10]");
21503 CHECK(try_catch.HasCaught());
21504 CHECK(access_was_called);
21505 }
21506
21507 context1->Exit();
21508 context0->Exit();
21509 }
21510
21511
21432 TEST(StrongModeArityCallFromApi) { 21512 TEST(StrongModeArityCallFromApi) {
21433 i::FLAG_strong_mode = true; 21513 i::FLAG_strong_mode = true;
21434 LocalContext env; 21514 LocalContext env;
21435 v8::Isolate* isolate = env->GetIsolate(); 21515 v8::Isolate* isolate = env->GetIsolate();
21436 v8::HandleScope scope(isolate); 21516 v8::HandleScope scope(isolate);
21437 Local<Function> fun; 21517 Local<Function> fun;
21438 { 21518 {
21439 v8::TryCatch try_catch(isolate); 21519 v8::TryCatch try_catch(isolate);
21440 fun = Local<Function>::Cast(CompileRun( 21520 fun = Local<Function>::Cast(CompileRun(
21441 "function f(x) { 'use strong'; }" 21521 "function f(x) { 'use strong'; }"
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
21607 CHECK_EQ(2U, set->Size()); 21687 CHECK_EQ(2U, set->Size());
21608 21688
21609 v8::Local<v8::Array> keys = set->AsArray(); 21689 v8::Local<v8::Array> keys = set->AsArray();
21610 CHECK_EQ(2U, keys->Length()); 21690 CHECK_EQ(2U, keys->Length());
21611 CHECK_EQ(1, keys->Get(0).As<v8::Int32>()->Value()); 21691 CHECK_EQ(1, keys->Get(0).As<v8::Int32>()->Value());
21612 CHECK_EQ(2, keys->Get(1).As<v8::Int32>()->Value()); 21692 CHECK_EQ(2, keys->Get(1).As<v8::Int32>()->Value());
21613 21693
21614 set = v8::Set::FromArray(env.local(), keys).ToLocalChecked(); 21694 set = v8::Set::FromArray(env.local(), keys).ToLocalChecked();
21615 CHECK_EQ(2U, set->Size()); 21695 CHECK_EQ(2U, set->Size());
21616 } 21696 }
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/strong/load-builtins.js » ('j') | test/mjsunit/strong/load-proxy.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698