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

Reply via email to