| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 bool init(); | 73 bool init(); |
| 74 | 74 |
| 75 static V8PerContextData* from(v8::Handle<v8::Context> context) | 75 static V8PerContextData* from(v8::Handle<v8::Context> context) |
| 76 { | 76 { |
| 77 return static_cast<V8PerContextData*>(context->GetAlignedPointerFromEmbe
dderData(v8ContextPerContextDataIndex)); | 77 return static_cast<V8PerContextData*>(context->GetAlignedPointerFromEmbe
dderData(v8ContextPerContextDataIndex)); |
| 78 } | 78 } |
| 79 | 79 |
| 80 // To create JS Wrapper objects, we create a cache of a 'boiler plate' | 80 // To create JS Wrapper objects, we create a cache of a 'boiler plate' |
| 81 // object, and then simply Clone that object each time we need a new one. | 81 // object, and then simply Clone that object each time we need a new one. |
| 82 // This is faster than going through the full object creation process. | 82 // This is faster than going through the full object creation process. |
| 83 v8::Local<v8::Object> createWrapperFromCache(WrapperTypeInfo* type) | 83 v8::Local<v8::Object> createWrapperFromCache(const WrapperTypeInfo* type) |
| 84 { | 84 { |
| 85 UnsafePersistent<v8::Object> boilerplate = m_wrapperBoilerplates.get(typ
e); | 85 UnsafePersistent<v8::Object> boilerplate = m_wrapperBoilerplates.get(typ
e); |
| 86 return !boilerplate.isEmpty() ? boilerplate.newLocal(v8::Isolate::GetCur
rent())->Clone() : createWrapperFromCacheSlowCase(type); | 86 return !boilerplate.isEmpty() ? boilerplate.newLocal(v8::Isolate::GetCur
rent())->Clone() : createWrapperFromCacheSlowCase(type); |
| 87 } | 87 } |
| 88 | 88 |
| 89 v8::Local<v8::Function> constructorForType(WrapperTypeInfo* type) | 89 v8::Local<v8::Function> constructorForType(const WrapperTypeInfo* type) |
| 90 { | 90 { |
| 91 UnsafePersistent<v8::Function> function = m_constructorMap.get(type); | 91 UnsafePersistent<v8::Function> function = m_constructorMap.get(type); |
| 92 if (!function.isEmpty()) | 92 if (!function.isEmpty()) |
| 93 return function.newLocal(v8::Isolate::GetCurrent()); | 93 return function.newLocal(v8::Isolate::GetCurrent()); |
| 94 return constructorForTypeSlowCase(type); | 94 return constructorForTypeSlowCase(type); |
| 95 } | 95 } |
| 96 | 96 |
| 97 v8::Local<v8::Object> prototypeForType(WrapperTypeInfo*); | 97 v8::Local<v8::Object> prototypeForType(const WrapperTypeInfo*); |
| 98 | 98 |
| 99 V8NPObjectMap* v8NPObjectMap() | 99 V8NPObjectMap* v8NPObjectMap() |
| 100 { | 100 { |
| 101 return &m_v8NPObjectMap; | 101 return &m_v8NPObjectMap; |
| 102 } | 102 } |
| 103 | 103 |
| 104 V8DOMActivityLogger* activityLogger() | 104 V8DOMActivityLogger* activityLogger() |
| 105 { | 105 { |
| 106 return m_activityLogger; | 106 return m_activityLogger; |
| 107 } | 107 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 119 explicit V8PerContextData(v8::Handle<v8::Context> context) | 119 explicit V8PerContextData(v8::Handle<v8::Context> context) |
| 120 : m_activityLogger(0) | 120 : m_activityLogger(0) |
| 121 , m_isolate(v8::Isolate::GetCurrent()) | 121 , m_isolate(v8::Isolate::GetCurrent()) |
| 122 , m_context(m_isolate, context) | 122 , m_context(m_isolate, context) |
| 123 , m_customElementBindings(adoptPtr(new CustomElementBindingMap())) | 123 , m_customElementBindings(adoptPtr(new CustomElementBindingMap())) |
| 124 { | 124 { |
| 125 } | 125 } |
| 126 | 126 |
| 127 void dispose(); | 127 void dispose(); |
| 128 | 128 |
| 129 v8::Local<v8::Object> createWrapperFromCacheSlowCase(WrapperTypeInfo*); | 129 v8::Local<v8::Object> createWrapperFromCacheSlowCase(const WrapperTypeInfo*)
; |
| 130 v8::Local<v8::Function> constructorForTypeSlowCase(WrapperTypeInfo*); | 130 v8::Local<v8::Function> constructorForTypeSlowCase(const WrapperTypeInfo*); |
| 131 | 131 |
| 132 // For each possible type of wrapper, we keep a boilerplate object. | 132 // For each possible type of wrapper, we keep a boilerplate object. |
| 133 // The boilerplate is used to create additional wrappers of the same type. | 133 // The boilerplate is used to create additional wrappers of the same type. |
| 134 typedef WTF::HashMap<WrapperTypeInfo*, UnsafePersistent<v8::Object> > Wrappe
rBoilerplateMap; | 134 typedef WTF::HashMap<const WrapperTypeInfo*, UnsafePersistent<v8::Object> >
WrapperBoilerplateMap; |
| 135 WrapperBoilerplateMap m_wrapperBoilerplates; | 135 WrapperBoilerplateMap m_wrapperBoilerplates; |
| 136 | 136 |
| 137 typedef WTF::HashMap<WrapperTypeInfo*, UnsafePersistent<v8::Function> > Cons
tructorMap; | 137 typedef WTF::HashMap<const WrapperTypeInfo*, UnsafePersistent<v8::Function>
> ConstructorMap; |
| 138 ConstructorMap m_constructorMap; | 138 ConstructorMap m_constructorMap; |
| 139 | 139 |
| 140 V8NPObjectMap m_v8NPObjectMap; | 140 V8NPObjectMap m_v8NPObjectMap; |
| 141 // We cache a pointer to the V8DOMActivityLogger associated with the world | 141 // We cache a pointer to the V8DOMActivityLogger associated with the world |
| 142 // corresponding to this context. The ownership of the pointer is retained | 142 // corresponding to this context. The ownership of the pointer is retained |
| 143 // by the DOMActivityLoggerMap in DOMWrapperWorld. | 143 // by the DOMActivityLoggerMap in DOMWrapperWorld. |
| 144 V8DOMActivityLogger* m_activityLogger; | 144 V8DOMActivityLogger* m_activityLogger; |
| 145 v8::Isolate* m_isolate; | 145 v8::Isolate* m_isolate; |
| 146 v8::Persistent<v8::Context> m_context; | 146 v8::Persistent<v8::Context> m_context; |
| 147 ScopedPersistent<v8::Value> m_errorPrototype; | 147 ScopedPersistent<v8::Value> m_errorPrototype; |
| 148 | 148 |
| 149 typedef WTF::HashMap<CustomElementDefinition*, OwnPtr<CustomElementBinding>
> CustomElementBindingMap; | 149 typedef WTF::HashMap<CustomElementDefinition*, OwnPtr<CustomElementBinding>
> CustomElementBindingMap; |
| 150 OwnPtr<CustomElementBindingMap> m_customElementBindings; | 150 OwnPtr<CustomElementBindingMap> m_customElementBindings; |
| 151 }; | 151 }; |
| 152 | 152 |
| 153 class V8PerContextDebugData { | 153 class V8PerContextDebugData { |
| 154 public: | 154 public: |
| 155 static bool setContextDebugData(v8::Handle<v8::Context>, const char* worldNa
me, int debugId); | 155 static bool setContextDebugData(v8::Handle<v8::Context>, const char* worldNa
me, int debugId); |
| 156 static int contextDebugId(v8::Handle<v8::Context>); | 156 static int contextDebugId(v8::Handle<v8::Context>); |
| 157 }; | 157 }; |
| 158 | 158 |
| 159 } // namespace WebCore | 159 } // namespace WebCore |
| 160 | 160 |
| 161 #endif // V8PerContextData_h | 161 #endif // V8PerContextData_h |
| OLD | NEW |