OLD | NEW |
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 8706 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8717 | 8717 |
8718 THREADED_TEST(AccessControlGetOwnPropertyNames) { | 8718 THREADED_TEST(AccessControlGetOwnPropertyNames) { |
8719 v8::Isolate* isolate = CcTest::isolate(); | 8719 v8::Isolate* isolate = CcTest::isolate(); |
8720 v8::HandleScope handle_scope(isolate); | 8720 v8::HandleScope handle_scope(isolate); |
8721 v8::Handle<v8::ObjectTemplate> obj_template = | 8721 v8::Handle<v8::ObjectTemplate> obj_template = |
8722 v8::ObjectTemplate::New(isolate); | 8722 v8::ObjectTemplate::New(isolate); |
8723 | 8723 |
8724 obj_template->Set(v8_str("x"), v8::Integer::New(isolate, 42)); | 8724 obj_template->Set(v8_str("x"), v8::Integer::New(isolate, 42)); |
8725 obj_template->SetAccessCheckCallbacks(AccessAlwaysBlocked, NULL); | 8725 obj_template->SetAccessCheckCallbacks(AccessAlwaysBlocked, NULL); |
8726 | 8726 |
| 8727 // Add an accessor accessible by cross-domain JS code. |
| 8728 obj_template->SetAccessor( |
| 8729 v8_str("accessible_prop"), EchoGetter, EchoSetter, v8::Handle<Value>(), |
| 8730 v8::AccessControl(v8::ALL_CAN_READ | v8::ALL_CAN_WRITE)); |
| 8731 |
8727 // Create an environment | 8732 // Create an environment |
8728 v8::Local<Context> context0 = Context::New(isolate, NULL, obj_template); | 8733 v8::Local<Context> context0 = Context::New(isolate, NULL, obj_template); |
8729 context0->Enter(); | 8734 context0->Enter(); |
8730 | 8735 |
8731 v8::Handle<v8::Object> global0 = context0->Global(); | 8736 v8::Handle<v8::Object> global0 = context0->Global(); |
8732 | 8737 |
8733 v8::HandleScope scope1(CcTest::isolate()); | 8738 v8::HandleScope scope1(CcTest::isolate()); |
8734 | 8739 |
8735 v8::Local<Context> context1 = Context::New(isolate); | 8740 v8::Local<Context> context1 = Context::New(isolate); |
8736 context1->Enter(); | 8741 context1->Enter(); |
8737 | 8742 |
8738 v8::Handle<v8::Object> global1 = context1->Global(); | 8743 v8::Handle<v8::Object> global1 = context1->Global(); |
8739 global1->Set(v8_str("other"), global0); | 8744 global1->Set(v8_str("other"), global0); |
8740 global1->Set(v8_str("object"), obj_template->NewInstance()); | 8745 global1->Set(v8_str("object"), obj_template->NewInstance()); |
8741 | 8746 |
8742 v8::Handle<Value> value; | 8747 v8::Handle<Value> value; |
8743 | 8748 |
8744 // Attempt to get the property names of the other global object and | 8749 // Attempt to get the property names of the other global object and |
8745 // of an object that requires access checks. Accessing the other | 8750 // of an object that requires access checks. Accessing the other |
8746 // global object should be blocked by access checks on the global | 8751 // global object should be blocked by access checks on the global |
8747 // proxy object. Accessing the object that requires access checks | 8752 // proxy object. Accessing the object that requires access checks |
8748 // is blocked by the access checks on the object itself. | 8753 // is blocked by the access checks on the object itself. |
8749 value = CompileRun("Object.getOwnPropertyNames(other).length == 0"); | 8754 value = CompileRun( |
8750 CHECK(value.IsEmpty()); | 8755 "var names = Object.getOwnPropertyNames(other);" |
| 8756 "names.length == 1 && names[0] == 'accessible_prop';"); |
| 8757 CHECK(value->BooleanValue()); |
8751 | 8758 |
8752 value = CompileRun("Object.getOwnPropertyNames(object).length == 0"); | 8759 value = CompileRun( |
8753 CHECK(value.IsEmpty()); | 8760 "var names = Object.getOwnPropertyNames(object);" |
| 8761 "names.length == 1 && names[0] == 'accessible_prop';"); |
| 8762 CHECK(value->BooleanValue()); |
8754 | 8763 |
8755 context1->Exit(); | 8764 context1->Exit(); |
8756 context0->Exit(); | 8765 context0->Exit(); |
8757 } | 8766 } |
8758 | 8767 |
8759 | 8768 |
8760 TEST(SuperAccessControl) { | 8769 TEST(SuperAccessControl) { |
8761 i::FLAG_allow_natives_syntax = true; | 8770 i::FLAG_allow_natives_syntax = true; |
8762 v8::Isolate* isolate = CcTest::isolate(); | 8771 v8::Isolate* isolate = CcTest::isolate(); |
8763 v8::HandleScope handle_scope(isolate); | 8772 v8::HandleScope handle_scope(isolate); |
(...skipping 10593 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19357 CheckCorrectThrow("%SetProperty(other, 'x', 'foo', 0)"); | 19366 CheckCorrectThrow("%SetProperty(other, 'x', 'foo', 0)"); |
19358 CheckCorrectThrow("%AddNamedProperty(other, 'x', 'foo', 1)"); | 19367 CheckCorrectThrow("%AddNamedProperty(other, 'x', 'foo', 1)"); |
19359 CheckCorrectThrow("%DeleteProperty(other, 'x', 0)"); | 19368 CheckCorrectThrow("%DeleteProperty(other, 'x', 0)"); |
19360 CheckCorrectThrow("%DeleteProperty(other, '1', 0)"); | 19369 CheckCorrectThrow("%DeleteProperty(other, '1', 0)"); |
19361 CheckCorrectThrow("%HasOwnProperty(other, 'x')"); | 19370 CheckCorrectThrow("%HasOwnProperty(other, 'x')"); |
19362 CheckCorrectThrow("%HasProperty(other, 'x')"); | 19371 CheckCorrectThrow("%HasProperty(other, 'x')"); |
19363 CheckCorrectThrow("%HasElement(other, 1)"); | 19372 CheckCorrectThrow("%HasElement(other, 1)"); |
19364 CheckCorrectThrow("%IsPropertyEnumerable(other, 'x')"); | 19373 CheckCorrectThrow("%IsPropertyEnumerable(other, 'x')"); |
19365 CheckCorrectThrow("%GetPropertyNames(other)"); | 19374 CheckCorrectThrow("%GetPropertyNames(other)"); |
19366 // PROPERTY_ATTRIBUTES_NONE = 0 | 19375 // PROPERTY_ATTRIBUTES_NONE = 0 |
19367 CheckCorrectThrow("%GetOwnPropertyNames(other, 0)"); | |
19368 CheckCorrectThrow("%DefineAccessorPropertyUnchecked(" | 19376 CheckCorrectThrow("%DefineAccessorPropertyUnchecked(" |
19369 "other, 'x', null, null, 1)"); | 19377 "other, 'x', null, null, 1)"); |
19370 | 19378 |
19371 // Reset the failed access check callback so it does not influence | 19379 // Reset the failed access check callback so it does not influence |
19372 // the other tests. | 19380 // the other tests. |
19373 v8::V8::SetFailedAccessCheckCallbackFunction(NULL); | 19381 v8::V8::SetFailedAccessCheckCallbackFunction(NULL); |
19374 } | 19382 } |
19375 | 19383 |
19376 | 19384 |
19377 class RequestInterruptTestBase { | 19385 class RequestInterruptTestBase { |
(...skipping 2459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
21837 " fake.age;\n" | 21845 " fake.age;\n" |
21838 " result = 1;\n" | 21846 " result = 1;\n" |
21839 " } catch (e) {\n" | 21847 " } catch (e) {\n" |
21840 " }\n" | 21848 " }\n" |
21841 " test(d+1);\n" | 21849 " test(d+1);\n" |
21842 "}\n" | 21850 "}\n" |
21843 "test(0);\n" | 21851 "test(0);\n" |
21844 "result;\n", | 21852 "result;\n", |
21845 0); | 21853 0); |
21846 } | 21854 } |
OLD | NEW |