Index: test/cctest/test-api.cc |
=================================================================== |
--- test/cctest/test-api.cc (revision 6782) |
+++ test/cctest/test-api.cc (working copy) |
@@ -5617,6 +5617,35 @@ |
} |
+// This is a regression test for issue 1154. |
+TEST(AccessControlObjectKeys) { |
+ v8::HandleScope handle_scope; |
+ v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New(); |
+ |
+ global_template->SetAccessCheckCallbacks(NamedAccessBlocker, |
+ IndexedAccessBlocker); |
+ |
+ // Add an accessor that is not accessible by cross-domain JS code. |
+ global_template->SetAccessor(v8_str("blocked_prop"), |
+ UnreachableGetter, UnreachableSetter, |
+ v8::Handle<Value>(), |
+ v8::DEFAULT); |
+ |
+ // Create an environment |
+ v8::Persistent<Context> context0 = Context::New(NULL, global_template); |
+ context0->Enter(); |
+ |
+ v8::Handle<v8::Object> global0 = context0->Global(); |
+ |
+ v8::Persistent<Context> context1 = Context::New(); |
+ context1->Enter(); |
+ v8::Handle<v8::Object> global1 = context1->Global(); |
+ global1->Set(v8_str("other"), global0); |
+ |
+ ExpectTrue("Object.keys(other).indexOf('blocked_prop') == -1"); |
+} |
+ |
+ |
static bool GetOwnPropertyNamesNamedBlocker(Local<v8::Object> global, |
Local<Value> name, |
v8::AccessType type, |