Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(143)

Side by Side Diff: src/api.cc

Issue 2303533004: Revert of [api] Add interceptor for defineProperty(). (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@DefineProperty
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/v8.h ('k') | src/api-arguments.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1488 matching lines...) Expand 10 before | Expand all | Expand 10 after
1499 AccessorNameGetterCallback getter, 1499 AccessorNameGetterCallback getter,
1500 AccessorNameSetterCallback setter, 1500 AccessorNameSetterCallback setter,
1501 v8::Local<Value> data, AccessControl settings, 1501 v8::Local<Value> data, AccessControl settings,
1502 PropertyAttribute attribute, 1502 PropertyAttribute attribute,
1503 v8::Local<AccessorSignature> signature) { 1503 v8::Local<AccessorSignature> signature) {
1504 TemplateSetAccessor(this, name, getter, setter, data, settings, attribute, 1504 TemplateSetAccessor(this, name, getter, setter, data, settings, attribute,
1505 signature, i::FLAG_disable_old_api_accessors); 1505 signature, i::FLAG_disable_old_api_accessors);
1506 } 1506 }
1507 1507
1508 template <typename Getter, typename Setter, typename Query, typename Deleter, 1508 template <typename Getter, typename Setter, typename Query, typename Deleter,
1509 typename Enumerator, typename Definer> 1509 typename Enumerator>
1510 static i::Handle<i::InterceptorInfo> CreateInterceptorInfo( 1510 static i::Handle<i::InterceptorInfo> CreateInterceptorInfo(
1511 i::Isolate* isolate, Getter getter, Setter setter, Query query, 1511 i::Isolate* isolate, Getter getter, Setter setter, Query query,
1512 Deleter remover, Enumerator enumerator, Definer definer, Local<Value> data, 1512 Deleter remover, Enumerator enumerator, Local<Value> data,
1513 PropertyHandlerFlags flags) { 1513 PropertyHandlerFlags flags) {
1514 auto obj = i::Handle<i::InterceptorInfo>::cast( 1514 auto obj = i::Handle<i::InterceptorInfo>::cast(
1515 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE)); 1515 isolate->factory()->NewStruct(i::INTERCEPTOR_INFO_TYPE));
1516 obj->set_flags(0); 1516 obj->set_flags(0);
1517 1517
1518 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter); 1518 if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter);
1519 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter); 1519 if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter);
1520 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query); 1520 if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query);
1521 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover); 1521 if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover);
1522 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator); 1522 if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
1523 if (definer != 0) SET_FIELD_WRAPPED(obj, set_definer, definer);
1524 obj->set_can_intercept_symbols( 1523 obj->set_can_intercept_symbols(
1525 !(static_cast<int>(flags) & 1524 !(static_cast<int>(flags) &
1526 static_cast<int>(PropertyHandlerFlags::kOnlyInterceptStrings))); 1525 static_cast<int>(PropertyHandlerFlags::kOnlyInterceptStrings)));
1527 obj->set_all_can_read(static_cast<int>(flags) & 1526 obj->set_all_can_read(static_cast<int>(flags) &
1528 static_cast<int>(PropertyHandlerFlags::kAllCanRead)); 1527 static_cast<int>(PropertyHandlerFlags::kAllCanRead));
1529 obj->set_non_masking(static_cast<int>(flags) & 1528 obj->set_non_masking(static_cast<int>(flags) &
1530 static_cast<int>(PropertyHandlerFlags::kNonMasking)); 1529 static_cast<int>(PropertyHandlerFlags::kNonMasking));
1531 1530
1532 if (data.IsEmpty()) { 1531 if (data.IsEmpty()) {
1533 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); 1532 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1534 } 1533 }
1535 obj->set_data(*Utils::OpenHandle(*data)); 1534 obj->set_data(*Utils::OpenHandle(*data));
1536 return obj; 1535 return obj;
1537 } 1536 }
1538 1537
1539 template <typename Getter, typename Setter, typename Query, typename Deleter, 1538 template <typename Getter, typename Setter, typename Query, typename Deleter,
1540 typename Enumerator, typename Definer> 1539 typename Enumerator>
1541 static void ObjectTemplateSetNamedPropertyHandler( 1540 static void ObjectTemplateSetNamedPropertyHandler(ObjectTemplate* templ,
1542 ObjectTemplate* templ, Getter getter, Setter setter, Query query, 1541 Getter getter, Setter setter,
1543 Deleter remover, Enumerator enumerator, Definer definer, Local<Value> data, 1542 Query query, Deleter remover,
1544 PropertyHandlerFlags flags) { 1543 Enumerator enumerator,
1544 Local<Value> data,
1545 PropertyHandlerFlags flags) {
1545 i::Isolate* isolate = Utils::OpenHandle(templ)->GetIsolate(); 1546 i::Isolate* isolate = Utils::OpenHandle(templ)->GetIsolate();
1546 ENTER_V8(isolate); 1547 ENTER_V8(isolate);
1547 i::HandleScope scope(isolate); 1548 i::HandleScope scope(isolate);
1548 auto cons = EnsureConstructor(isolate, templ); 1549 auto cons = EnsureConstructor(isolate, templ);
1549 EnsureNotInstantiated(cons, "ObjectTemplateSetNamedPropertyHandler"); 1550 EnsureNotInstantiated(cons, "ObjectTemplateSetNamedPropertyHandler");
1550 auto obj = CreateInterceptorInfo(isolate, getter, setter, query, remover, 1551 auto obj = CreateInterceptorInfo(isolate, getter, setter, query, remover,
1551 enumerator, definer, data, flags); 1552 enumerator, data, flags);
1552 cons->set_named_property_handler(*obj); 1553 cons->set_named_property_handler(*obj);
1553 } 1554 }
1554 1555
1556
1555 void ObjectTemplate::SetNamedPropertyHandler( 1557 void ObjectTemplate::SetNamedPropertyHandler(
1556 NamedPropertyGetterCallback getter, NamedPropertySetterCallback setter, 1558 NamedPropertyGetterCallback getter, NamedPropertySetterCallback setter,
1557 NamedPropertyQueryCallback query, NamedPropertyDeleterCallback remover, 1559 NamedPropertyQueryCallback query, NamedPropertyDeleterCallback remover,
1558 NamedPropertyEnumeratorCallback enumerator, Local<Value> data) { 1560 NamedPropertyEnumeratorCallback enumerator, Local<Value> data) {
1559 ObjectTemplateSetNamedPropertyHandler( 1561 ObjectTemplateSetNamedPropertyHandler(
1560 this, getter, setter, query, remover, enumerator, nullptr, data, 1562 this, getter, setter, query, remover, enumerator, data,
1561 PropertyHandlerFlags::kOnlyInterceptStrings); 1563 PropertyHandlerFlags::kOnlyInterceptStrings);
1562 } 1564 }
1563 1565
1566
1564 void ObjectTemplate::SetHandler( 1567 void ObjectTemplate::SetHandler(
1565 const NamedPropertyHandlerConfiguration& config) { 1568 const NamedPropertyHandlerConfiguration& config) {
1566 ObjectTemplateSetNamedPropertyHandler( 1569 ObjectTemplateSetNamedPropertyHandler(
1567 this, config.getter, config.setter, config.query, config.deleter, 1570 this, config.getter, config.setter, config.query, config.deleter,
1568 config.enumerator, config.definer, config.data, config.flags); 1571 config.enumerator, config.data, config.flags);
1569 } 1572 }
1570 1573
1571 1574
1572 void ObjectTemplate::MarkAsUndetectable() { 1575 void ObjectTemplate::MarkAsUndetectable() {
1573 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1576 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1574 ENTER_V8(isolate); 1577 ENTER_V8(isolate);
1575 i::HandleScope scope(isolate); 1578 i::HandleScope scope(isolate);
1576 auto cons = EnsureConstructor(isolate, this); 1579 auto cons = EnsureConstructor(isolate, this);
1577 EnsureNotInstantiated(cons, "v8::ObjectTemplate::MarkAsUndetectable"); 1580 EnsureNotInstantiated(cons, "v8::ObjectTemplate::MarkAsUndetectable");
1578 cons->set_undetectable(true); 1581 cons->set_undetectable(true);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1618 cons, "v8::ObjectTemplate::SetAccessCheckCallbackWithHandler"); 1621 cons, "v8::ObjectTemplate::SetAccessCheckCallbackWithHandler");
1619 1622
1620 i::Handle<i::Struct> struct_info = 1623 i::Handle<i::Struct> struct_info =
1621 isolate->factory()->NewStruct(i::ACCESS_CHECK_INFO_TYPE); 1624 isolate->factory()->NewStruct(i::ACCESS_CHECK_INFO_TYPE);
1622 i::Handle<i::AccessCheckInfo> info = 1625 i::Handle<i::AccessCheckInfo> info =
1623 i::Handle<i::AccessCheckInfo>::cast(struct_info); 1626 i::Handle<i::AccessCheckInfo>::cast(struct_info);
1624 1627
1625 SET_FIELD_WRAPPED(info, set_callback, callback); 1628 SET_FIELD_WRAPPED(info, set_callback, callback);
1626 auto named_interceptor = CreateInterceptorInfo( 1629 auto named_interceptor = CreateInterceptorInfo(
1627 isolate, named_handler.getter, named_handler.setter, named_handler.query, 1630 isolate, named_handler.getter, named_handler.setter, named_handler.query,
1628 named_handler.deleter, named_handler.enumerator, named_handler.definer, 1631 named_handler.deleter, named_handler.enumerator, named_handler.data,
1629 named_handler.data, named_handler.flags); 1632 named_handler.flags);
1630 info->set_named_interceptor(*named_interceptor); 1633 info->set_named_interceptor(*named_interceptor);
1631 auto indexed_interceptor = CreateInterceptorInfo( 1634 auto indexed_interceptor = CreateInterceptorInfo(
1632 isolate, indexed_handler.getter, indexed_handler.setter, 1635 isolate, indexed_handler.getter, indexed_handler.setter,
1633 indexed_handler.query, indexed_handler.deleter, 1636 indexed_handler.query, indexed_handler.deleter,
1634 indexed_handler.enumerator, indexed_handler.definer, indexed_handler.data, 1637 indexed_handler.enumerator, indexed_handler.data, indexed_handler.flags);
1635 indexed_handler.flags);
1636 info->set_indexed_interceptor(*indexed_interceptor); 1638 info->set_indexed_interceptor(*indexed_interceptor);
1637 1639
1638 if (data.IsEmpty()) { 1640 if (data.IsEmpty()) {
1639 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); 1641 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1640 } 1642 }
1641 info->set_data(*Utils::OpenHandle(*data)); 1643 info->set_data(*Utils::OpenHandle(*data));
1642 1644
1643 cons->set_access_check_info(*info); 1645 cons->set_access_check_info(*info);
1644 cons->set_needs_access_check(true); 1646 cons->set_needs_access_check(true);
1645 } 1647 }
1646 1648
1647 void ObjectTemplate::SetHandler( 1649 void ObjectTemplate::SetHandler(
1648 const IndexedPropertyHandlerConfiguration& config) { 1650 const IndexedPropertyHandlerConfiguration& config) {
1649 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1651 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1650 ENTER_V8(isolate); 1652 ENTER_V8(isolate);
1651 i::HandleScope scope(isolate); 1653 i::HandleScope scope(isolate);
1652 auto cons = EnsureConstructor(isolate, this); 1654 auto cons = EnsureConstructor(isolate, this);
1653 EnsureNotInstantiated(cons, "v8::ObjectTemplate::SetHandler"); 1655 EnsureNotInstantiated(cons, "v8::ObjectTemplate::SetHandler");
1654 auto obj = CreateInterceptorInfo( 1656 auto obj = CreateInterceptorInfo(
1655 isolate, config.getter, config.setter, config.query, config.deleter, 1657 isolate, config.getter, config.setter, config.query, config.deleter,
1656 config.enumerator, config.definer, config.data, config.flags); 1658 config.enumerator, config.data, config.flags);
1657 cons->set_indexed_property_handler(*obj); 1659 cons->set_indexed_property_handler(*obj);
1658 } 1660 }
1659 1661
1660 1662
1661 void ObjectTemplate::SetCallAsFunctionHandler(FunctionCallback callback, 1663 void ObjectTemplate::SetCallAsFunctionHandler(FunctionCallback callback,
1662 Local<Value> data) { 1664 Local<Value> data) {
1663 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1665 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1664 ENTER_V8(isolate); 1666 ENTER_V8(isolate);
1665 i::HandleScope scope(isolate); 1667 i::HandleScope scope(isolate);
1666 auto cons = EnsureConstructor(isolate, this); 1668 auto cons = EnsureConstructor(isolate, this);
(...skipping 7536 matching lines...) Expand 10 before | Expand all | Expand 10 after
9203 Address callback_address = 9205 Address callback_address =
9204 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 9206 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
9205 VMState<EXTERNAL> state(isolate); 9207 VMState<EXTERNAL> state(isolate);
9206 ExternalCallbackScope call_scope(isolate, callback_address); 9208 ExternalCallbackScope call_scope(isolate, callback_address);
9207 callback(info); 9209 callback(info);
9208 } 9210 }
9209 9211
9210 9212
9211 } // namespace internal 9213 } // namespace internal
9212 } // namespace v8 9214 } // namespace v8
OLDNEW
« no previous file with comments | « include/v8.h ('k') | src/api-arguments.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698