Revision: 10764
Author: [email protected]
Date: Mon Feb 20 07:34:08 2012
Log: Enable test-api/TurnOnAccessCheckAndRecompile and change it so it
can't cause a GC.
A GC in the access check callbacks NamedSecurityCallback and
IndexedSecurityCallback
violates the contract about these callbacks.
Added a EXTERNAL VMState scope around the call to FailedAccessCheckCallback
to be
consistent with the other callback invocations.
BUG=v8:1952
TEST=cctest/test-api/TurnOnAccessCheckAndRecompile
Review URL: https://chromiumcodereview.appspot.com/9425048
http://code.google.com/p/v8/source/detail?r=10764
Modified:
/branches/bleeding_edge/src/isolate.cc
/branches/bleeding_edge/test/cctest/cctest.status
/branches/bleeding_edge/test/cctest/test-api.cc
=======================================
--- /branches/bleeding_edge/src/isolate.cc Thu Feb 9 01:43:37 2012
+++ /branches/bleeding_edge/src/isolate.cc Mon Feb 20 07:34:08 2012
@@ -775,10 +775,12 @@
HandleScope scope;
Handle<JSObject> receiver_handle(receiver);
Handle<Object> data(AccessCheckInfo::cast(data_obj)->data());
- thread_local_top()->failed_access_check_callback_(
- v8::Utils::ToLocal(receiver_handle),
- type,
- v8::Utils::ToLocal(data));
+ { VMState state(this, EXTERNAL);
+ thread_local_top()->failed_access_check_callback_(
+ v8::Utils::ToLocal(receiver_handle),
+ type,
+ v8::Utils::ToLocal(data));
+ }
}
=======================================
--- /branches/bleeding_edge/test/cctest/cctest.status Thu Feb 16 07:20:13
2012
+++ /branches/bleeding_edge/test/cctest/cctest.status Mon Feb 20 07:34:08
2012
@@ -52,9 +52,6 @@
# We do not yet shrink weak maps after they have been emptied by the GC
test-weakmaps/Shrinking: FAIL
-# BUG(1952): Temporarily disabled until issue is fixed.
-test-api/TurnOnAccessCheckAndRecompile: PASS || FAIL
-
##############################################################################
[ $arch == arm ]
=======================================
--- /branches/bleeding_edge/test/cctest/test-api.cc Thu Feb 16 07:20:13 2012
+++ /branches/bleeding_edge/test/cctest/test-api.cc Mon Feb 20 07:34:08 2012
@@ -11050,27 +11050,27 @@
}
-v8::Handle<v8::String> a;
-v8::Handle<v8::String> h;
+static const char* kPropertyA = "a";
+static const char* kPropertyH = "h";
static bool NamedGetAccessBlockAandH(Local<v8::Object> obj,
Local<Value> name,
v8::AccessType type,
Local<Value> data) {
- return !(name->Equals(a) || name->Equals(h));
+ if (!name->IsString()) return false;
+ i::Handle<i::String> name_handle =
+ v8::Utils::OpenHandle(String::Cast(*name));
+ return !name_handle->IsEqualTo(i::CStrVector(kPropertyA))
+ && !name_handle->IsEqualTo(i::CStrVector(kPropertyH));
}
-// TODO(1952): Enable this test for threading test once the underlying bug
is
-// fixed.
-TEST(TurnOnAccessCheckAndRecompile) {
+THREADED_TEST(TurnOnAccessCheckAndRecompile) {
v8::HandleScope handle_scope;
// Create an environment with access check to the global object disabled
by
// default. When the registered access checker will block access to
properties
- // a and h
- a = v8_str("a");
- h = v8_str("h");
+ // a and h.
v8::Handle<v8::ObjectTemplate> global_template =
v8::ObjectTemplate::New();
global_template->SetAccessCheckCallbacks(NamedGetAccessBlockAandH,
IndexedGetAccessBlocker,
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev