| Index: third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h b/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
|
| index 9af86f546ffee2bd29fc49fe5ec736a78dd0cecf..0be99a8613a468110d9cc0199b9c960911a7fa55 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
|
| @@ -46,10 +46,6 @@ class ScriptWrappable;
|
| #define V8_PRIVATE_PROPERTY_GETTER_NAME(InterfaceName, PrivateKeyName) \
|
| get##InterfaceName##PrivateKeyName
|
|
|
| -// The member variable's name for a private property.
|
| -#define V8_PRIVATE_PROPERTY_MEMBER_NAME(InterfaceName, PrivateKeyName) \
|
| - m_symbol##InterfaceName##PrivateKeyName
|
| -
|
| // The string used to create a private symbol. Must be unique per V8 instance.
|
| #define V8_PRIVATE_PROPERTY_SYMBOL_STRING(InterfaceName, PrivateKeyName) \
|
| #InterfaceName "#" #PrivateKeyName // NOLINT(whitespace/indent)
|
| @@ -133,28 +129,31 @@ class CORE_EXPORT V8PrivateProperty {
|
| return WTF::wrapUnique(new V8PrivateProperty());
|
| }
|
|
|
| -#define V8_PRIVATE_PROPERTY_DEFINE_GETTER(InterfaceName, KeyName) \
|
| - static Symbol V8_PRIVATE_PROPERTY_GETTER_NAME(InterfaceName, KeyName)( \
|
| - v8::Isolate * isolate) /* NOLINT(readability/naming/underscores) */ \
|
| - { \
|
| - V8PrivateProperty* privateProp = \
|
| - V8PerIsolateData::from(isolate)->privateProperty(); \
|
| - if (UNLIKELY(privateProp \
|
| - ->V8_PRIVATE_PROPERTY_MEMBER_NAME(InterfaceName, KeyName) \
|
| - .IsEmpty())) { \
|
| - privateProp->V8_PRIVATE_PROPERTY_MEMBER_NAME(InterfaceName, KeyName) \
|
| - .Set( \
|
| - isolate, \
|
| - createV8Private( \
|
| - isolate, \
|
| - V8_PRIVATE_PROPERTY_SYMBOL_STRING(InterfaceName, KeyName), \
|
| - sizeof V8_PRIVATE_PROPERTY_SYMBOL_STRING( \
|
| - InterfaceName, \
|
| - KeyName))); /* NOLINT(readability/naming/underscores) */ \
|
| - } \
|
| - return Symbol( \
|
| - privateProp->V8_PRIVATE_PROPERTY_MEMBER_NAME(InterfaceName, KeyName) \
|
| - .Get(isolate)); \
|
| + enum SymbolID {
|
| +#define V8_PRIVATE_PROPERTY_ENUMERATOR(InterfaceName, PrivateKeyName) \
|
| + k##InterfaceName##PrivateKeyName,
|
| + V8_PRIVATE_PROPERTY_FOR_EACH(V8_PRIVATE_PROPERTY_ENUMERATOR)
|
| +#undef V8_PRIVATE_PROPERTY_ENUMERATOR
|
| + kSymbolCount
|
| + };
|
| +
|
| + static Symbol get(v8::Isolate* isolate, SymbolID symbolID) {
|
| + V8PrivateProperty* privateProp =
|
| + V8PerIsolateData::from(isolate)->privateProperty();
|
| + DCHECK_GE(symbolID, 0);
|
| + DCHECK_LT(symbolID, kSymbolCount);
|
| + auto& symbol = privateProp->m_symbols[symbolID];
|
| + if (UNLIKELY(symbol.IsEmpty()))
|
| + privateProp->initialize(isolate, symbolID);
|
| + DCHECK(!symbol.IsEmpty());
|
| + return Symbol(symbol.Get(isolate));
|
| + }
|
| +
|
| +#define V8_PRIVATE_PROPERTY_DEFINE_GETTER(InterfaceName, KeyName) \
|
| + static Symbol V8_PRIVATE_PROPERTY_GETTER_NAME(InterfaceName, KeyName)( \
|
| + v8::Isolate * isolate) /* NOLINT(readability/naming/underscores) */ \
|
| + { \
|
| + return get(isolate, k##InterfaceName##KeyName); \
|
| }
|
| V8_PRIVATE_PROPERTY_FOR_EACH(V8_PRIVATE_PROPERTY_DEFINE_GETTER)
|
| #undef V8_PRIVATE_PROPERTY_DEFINE_GETTER
|
| @@ -168,15 +167,13 @@ class CORE_EXPORT V8PrivateProperty {
|
| private:
|
| V8PrivateProperty() {}
|
|
|
| + void initialize(v8::Isolate*, SymbolID);
|
| +
|
| static v8::Local<v8::Private> createV8Private(v8::Isolate*,
|
| const char* symbol,
|
| size_t length);
|
|
|
| -#define V8_PRIVATE_PROPERTY_DECLARE_MEMBER(InterfaceName, KeyName) \
|
| - v8::Eternal<v8::Private> V8_PRIVATE_PROPERTY_MEMBER_NAME( \
|
| - InterfaceName, KeyName); // NOLINT(readability/naming/underscores)
|
| - V8_PRIVATE_PROPERTY_FOR_EACH(V8_PRIVATE_PROPERTY_DECLARE_MEMBER)
|
| -#undef V8_PRIVATE_PROPERTY_DECLARE_MEMBER
|
| + v8::Eternal<v8::Private> m_symbols[kSymbolCount];
|
| };
|
|
|
| } // namespace blink
|
|
|