| Index: test/cctest/test-object-observe.cc
|
| diff --git a/test/cctest/test-object-observe.cc b/test/cctest/test-object-observe.cc
|
| index bf1029586a56bd28749f77693ac6b7ecbec5d407..a9f840e7adc7f0d0b48ed3a600baed1698ce64b2 100644
|
| --- a/test/cctest/test-object-observe.cc
|
| +++ b/test/cctest/test-object-observe.cc
|
| @@ -465,34 +465,32 @@ static bool IndexedAccessAlwaysAllowed(Local<Object>, uint32_t, AccessType,
|
|
|
|
|
| static AccessType g_access_block_type = ACCESS_GET;
|
| +static const uint32_t kBlockedContextIndex = 1337;
|
|
|
|
|
| static bool NamedAccessAllowUnlessBlocked(Local<Object> host,
|
| - Local<Value> key,
|
| - AccessType type,
|
| - Local<Value>) {
|
| + Local<Value> key,
|
| + AccessType type,
|
| + Local<Value> data) {
|
| if (type != g_access_block_type) return true;
|
| v8::Isolate* isolate = reinterpret_cast<v8::Isolate*>(
|
| Utils::OpenHandle(*host)->GetIsolate());
|
| Handle<Object> global = isolate->GetCurrentContext()->Global();
|
| - Handle<Value> blacklist = global->Get(String::New("blacklist"));
|
| - if (!blacklist->IsObject()) return true;
|
| - if (key->IsString()) return !blacklist.As<Object>()->Has(key);
|
| - return true;
|
| + if (!global->Has(kBlockedContextIndex)) return true;
|
| + return !key->IsString() || !key->Equals(data);
|
| }
|
|
|
|
|
| static bool IndexedAccessAllowUnlessBlocked(Local<Object> host,
|
| - uint32_t index,
|
| - AccessType type,
|
| - Local<Value>) {
|
| - if (type != ACCESS_GET) return true;
|
| + uint32_t index,
|
| + AccessType type,
|
| + Local<Value> data) {
|
| + if (type != g_access_block_type) return true;
|
| v8::Isolate* isolate = reinterpret_cast<v8::Isolate*>(
|
| Utils::OpenHandle(*host)->GetIsolate());
|
| Handle<Object> global = isolate->GetCurrentContext()->Global();
|
| - Handle<Value> blacklist = global->Get(String::New("blacklist"));
|
| - if (!blacklist->IsObject()) return true;
|
| - return !blacklist.As<Object>()->Has(index);
|
| + if (!global->Has(kBlockedContextIndex)) return true;
|
| + return index != data->Uint32Value();
|
| }
|
|
|
|
|
| @@ -501,20 +499,20 @@ static bool BlockAccessKeys(Local<Object> host, Local<Value> key,
|
| v8::Isolate* isolate = reinterpret_cast<v8::Isolate*>(
|
| Utils::OpenHandle(*host)->GetIsolate());
|
| Handle<Object> global = isolate->GetCurrentContext()->Global();
|
| - Handle<Value> blacklist = global->Get(String::New("blacklist"));
|
| - if (!blacklist->IsObject()) return true;
|
| - return type != ACCESS_KEYS ||
|
| - !blacklist.As<Object>()->Has(String::New("__block_access_keys"));
|
| + return type != ACCESS_KEYS || !global->Has(kBlockedContextIndex);
|
| }
|
|
|
|
|
| static Handle<Object> CreateAccessCheckedObject(
|
| NamedSecurityCallback namedCallback,
|
| - IndexedSecurityCallback indexedCallback) {
|
| + IndexedSecurityCallback indexedCallback,
|
| + Handle<Value> data = Handle<Value>()) {
|
| Handle<ObjectTemplate> tmpl = ObjectTemplate::New();
|
| - tmpl->SetAccessCheckCallbacks(namedCallback, indexedCallback);
|
| + tmpl->SetAccessCheckCallbacks(namedCallback, indexedCallback, data);
|
| Handle<Object> instance = tmpl->NewInstance();
|
| - instance->CreationContext()->Global()->Set(String::New("obj"), instance);
|
| + Handle<Object> global = instance->CreationContext()->Global();
|
| + global->Set(String::New("obj"), instance);
|
| + global->Set(kBlockedContextIndex, v8::True());
|
| return instance;
|
| }
|
|
|
| @@ -527,10 +525,11 @@ TEST(NamedAccessCheck) {
|
| LocalContext context(isolate.GetIsolate());
|
| g_access_block_type = types[i];
|
| Handle<Object> instance = CreateAccessCheckedObject(
|
| - NamedAccessAllowUnlessBlocked, IndexedAccessAlwaysAllowed);
|
| + NamedAccessAllowUnlessBlocked,
|
| + IndexedAccessAlwaysAllowed,
|
| + String::New("foo"));
|
| CompileRun("var records = null;"
|
| "var objNoCheck = {};"
|
| - "var blacklist = {foo: true};"
|
| "var observer = function(r) { records = r };"
|
| "Object.observe(obj, observer);"
|
| "Object.observe(objNoCheck, observer);");
|
| @@ -574,10 +573,10 @@ TEST(IndexedAccessCheck) {
|
| LocalContext context(isolate.GetIsolate());
|
| g_access_block_type = types[i];
|
| Handle<Object> instance = CreateAccessCheckedObject(
|
| - NamedAccessAlwaysAllowed, IndexedAccessAllowUnlessBlocked);
|
| + NamedAccessAlwaysAllowed, IndexedAccessAllowUnlessBlocked,
|
| + Number::New(7));
|
| CompileRun("var records = null;"
|
| "var objNoCheck = {};"
|
| - "var blacklist = {7: true};"
|
| "var observer = function(r) { records = r };"
|
| "Object.observe(obj, observer);"
|
| "Object.observe(objNoCheck, observer);");
|
| @@ -619,12 +618,12 @@ TEST(SpliceAccessCheck) {
|
| LocalContext context(isolate.GetIsolate());
|
| g_access_block_type = ACCESS_GET;
|
| Handle<Object> instance = CreateAccessCheckedObject(
|
| - NamedAccessAlwaysAllowed, IndexedAccessAllowUnlessBlocked);
|
| + NamedAccessAlwaysAllowed, IndexedAccessAllowUnlessBlocked,
|
| + Number::New(1));
|
| CompileRun("var records = null;"
|
| "obj[1] = 'foo';"
|
| "obj.length = 2;"
|
| "var objNoCheck = {1: 'bar', length: 2};"
|
| - "var blacklist = {1: true};"
|
| "observer = function(r) { records = r };"
|
| "Array.observe(obj, observer);"
|
| "Array.observe(objNoCheck, observer);");
|
| @@ -667,7 +666,6 @@ TEST(DisallowAllForAccessKeys) {
|
| CompileRun("var records = null;"
|
| "var objNoCheck = {};"
|
| "var observer = function(r) { records = r };"
|
| - "var blacklist = {__block_access_keys: true};"
|
| "Object.observe(obj, observer);"
|
| "Object.observe(objNoCheck, observer);");
|
| Handle<Value> obj_no_check = CompileRun("objNoCheck");
|
| @@ -704,7 +702,6 @@ TEST(AccessCheckDisallowApiModifications) {
|
| BlockAccessKeys, IndexedAccessAlwaysAllowed);
|
| CompileRun("var records = null;"
|
| "var observer = function(r) { records = r };"
|
| - "var blacklist = {__block_access_keys: true};"
|
| "Object.observe(obj, observer);");
|
| {
|
| LocalContext context2(isolate.GetIsolate());
|
|
|