| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/api.h" | 5 #include "src/api.h" |
| 6 | 6 |
| 7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
| 8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
| 9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
| 10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
| (...skipping 1408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1419 ENTER_V8(isolate); | 1419 ENTER_V8(isolate); |
| 1420 i::HandleScope scope(isolate); | 1420 i::HandleScope scope(isolate); |
| 1421 auto cons = EnsureConstructor(isolate, this); | 1421 auto cons = EnsureConstructor(isolate, this); |
| 1422 EnsureNotInstantiated(cons, "v8::ObjectTemplate::MarkAsUndetectable"); | 1422 EnsureNotInstantiated(cons, "v8::ObjectTemplate::MarkAsUndetectable"); |
| 1423 cons->set_undetectable(true); | 1423 cons->set_undetectable(true); |
| 1424 } | 1424 } |
| 1425 | 1425 |
| 1426 | 1426 |
| 1427 void ObjectTemplate::SetAccessCheckCallbacks( | 1427 void ObjectTemplate::SetAccessCheckCallbacks( |
| 1428 NamedSecurityCallback named_callback, | 1428 NamedSecurityCallback named_callback, |
| 1429 IndexedSecurityCallback indexed_callback, | 1429 IndexedSecurityCallback indexed_callback, Handle<Value> data) { |
| 1430 Handle<Value> data, | |
| 1431 bool turned_on_by_default) { | |
| 1432 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 1430 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 1433 ENTER_V8(isolate); | 1431 ENTER_V8(isolate); |
| 1434 i::HandleScope scope(isolate); | 1432 i::HandleScope scope(isolate); |
| 1435 auto cons = EnsureConstructor(isolate, this); | 1433 auto cons = EnsureConstructor(isolate, this); |
| 1436 EnsureNotInstantiated(cons, "v8::ObjectTemplate::SetAccessCheckCallbacks"); | 1434 EnsureNotInstantiated(cons, "v8::ObjectTemplate::SetAccessCheckCallbacks"); |
| 1437 | 1435 |
| 1438 i::Handle<i::Struct> struct_info = | 1436 i::Handle<i::Struct> struct_info = |
| 1439 isolate->factory()->NewStruct(i::ACCESS_CHECK_INFO_TYPE); | 1437 isolate->factory()->NewStruct(i::ACCESS_CHECK_INFO_TYPE); |
| 1440 i::Handle<i::AccessCheckInfo> info = | 1438 i::Handle<i::AccessCheckInfo> info = |
| 1441 i::Handle<i::AccessCheckInfo>::cast(struct_info); | 1439 i::Handle<i::AccessCheckInfo>::cast(struct_info); |
| 1442 | 1440 |
| 1443 SET_FIELD_WRAPPED(info, set_named_callback, named_callback); | 1441 SET_FIELD_WRAPPED(info, set_named_callback, named_callback); |
| 1444 SET_FIELD_WRAPPED(info, set_indexed_callback, indexed_callback); | 1442 SET_FIELD_WRAPPED(info, set_indexed_callback, indexed_callback); |
| 1445 | 1443 |
| 1446 if (data.IsEmpty()) { | 1444 if (data.IsEmpty()) { |
| 1447 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 1445 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 1448 } | 1446 } |
| 1449 info->set_data(*Utils::OpenHandle(*data)); | 1447 info->set_data(*Utils::OpenHandle(*data)); |
| 1450 | 1448 |
| 1451 cons->set_access_check_info(*info); | 1449 cons->set_access_check_info(*info); |
| 1452 cons->set_needs_access_check(turned_on_by_default); | 1450 cons->set_needs_access_check(true); |
| 1453 } | 1451 } |
| 1454 | 1452 |
| 1455 | 1453 |
| 1456 void ObjectTemplate::SetHandler( | 1454 void ObjectTemplate::SetHandler( |
| 1457 const IndexedPropertyHandlerConfiguration& config) { | 1455 const IndexedPropertyHandlerConfiguration& config) { |
| 1458 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 1456 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 1459 ENTER_V8(isolate); | 1457 ENTER_V8(isolate); |
| 1460 i::HandleScope scope(isolate); | 1458 i::HandleScope scope(isolate); |
| 1461 auto cons = EnsureConstructor(isolate, this); | 1459 auto cons = EnsureConstructor(isolate, this); |
| 1462 EnsureNotInstantiated(cons, "v8::ObjectTemplate::SetHandler"); | 1460 EnsureNotInstantiated(cons, "v8::ObjectTemplate::SetHandler"); |
| (...skipping 2792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4255 } | 4253 } |
| 4256 | 4254 |
| 4257 | 4255 |
| 4258 Maybe<PropertyAttribute> v8::Object::GetRealNamedPropertyAttributes( | 4256 Maybe<PropertyAttribute> v8::Object::GetRealNamedPropertyAttributes( |
| 4259 Handle<String> key) { | 4257 Handle<String> key) { |
| 4260 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 4258 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
| 4261 return GetRealNamedPropertyAttributes(context, key); | 4259 return GetRealNamedPropertyAttributes(context, key); |
| 4262 } | 4260 } |
| 4263 | 4261 |
| 4264 | 4262 |
| 4265 // Turns on access checks by copying the map and setting the check flag. | |
| 4266 // Because the object gets a new map, existing inline cache caching | |
| 4267 // the old map of this object will fail. | |
| 4268 void v8::Object::TurnOnAccessCheck() { | |
| 4269 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | |
| 4270 ENTER_V8(isolate); | |
| 4271 i::HandleScope scope(isolate); | |
| 4272 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); | |
| 4273 | |
| 4274 // When turning on access checks for a global object deoptimize all functions | |
| 4275 // as optimized code does not always handle access checks. | |
| 4276 i::Deoptimizer::DeoptimizeGlobalObject(*obj); | |
| 4277 | |
| 4278 i::Handle<i::Map> new_map = | |
| 4279 i::Map::Copy(i::Handle<i::Map>(obj->map()), "APITurnOnAccessCheck"); | |
| 4280 new_map->set_is_access_check_needed(true); | |
| 4281 i::JSObject::MigrateToMap(obj, new_map); | |
| 4282 } | |
| 4283 | |
| 4284 | |
| 4285 Local<v8::Object> v8::Object::Clone() { | 4263 Local<v8::Object> v8::Object::Clone() { |
| 4286 auto self = Utils::OpenHandle(this); | 4264 auto self = Utils::OpenHandle(this); |
| 4287 auto isolate = self->GetIsolate(); | 4265 auto isolate = self->GetIsolate(); |
| 4288 ENTER_V8(isolate); | 4266 ENTER_V8(isolate); |
| 4289 auto result = isolate->factory()->CopyJSObject(self); | 4267 auto result = isolate->factory()->CopyJSObject(self); |
| 4290 CHECK(!result.is_null()); | 4268 CHECK(!result.is_null()); |
| 4291 return Utils::ToLocal(result); | 4269 return Utils::ToLocal(result); |
| 4292 } | 4270 } |
| 4293 | 4271 |
| 4294 | 4272 |
| (...skipping 4209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8504 Address callback_address = | 8482 Address callback_address = |
| 8505 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 8483 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 8506 VMState<EXTERNAL> state(isolate); | 8484 VMState<EXTERNAL> state(isolate); |
| 8507 ExternalCallbackScope call_scope(isolate, callback_address); | 8485 ExternalCallbackScope call_scope(isolate, callback_address); |
| 8508 callback(info); | 8486 callback(info); |
| 8509 } | 8487 } |
| 8510 | 8488 |
| 8511 | 8489 |
| 8512 } // namespace internal | 8490 } // namespace internal |
| 8513 } // namespace v8 | 8491 } // namespace v8 |
| OLD | NEW |