Index: Source/bindings/v8/V8DOMConfiguration.cpp |
diff --git a/Source/bindings/v8/V8DOMConfiguration.cpp b/Source/bindings/v8/V8DOMConfiguration.cpp |
index 986c4554be2a39a15867a971ead1e8a7e91a4be5..8bfd235c478a22d0a6542f9c8130635771803092 100644 |
--- a/Source/bindings/v8/V8DOMConfiguration.cpp |
+++ b/Source/bindings/v8/V8DOMConfiguration.cpp |
@@ -39,6 +39,33 @@ void V8DOMConfiguration::installAttributes(v8::Handle<v8::ObjectTemplate> instan |
installAttribute(instance, prototype, attributes[i], isolate, currentWorldType); |
} |
+void V8DOMConfiguration::installAccessors(v8::Handle<v8::ObjectTemplate> prototype, v8::Handle<v8::Signature> signature, const AccessorConfiguration* accessors, size_t accessorCount, v8::Isolate* isolate, WrapperWorldType currentWorldType) |
+{ |
+ for (size_t i = 0; i < accessorCount; ++i) { |
+ v8::FunctionCallback getterCallback = accessors[i].getter; |
+ v8::FunctionCallback setterCallback = accessors[i].setter; |
+ if (currentWorldType == MainWorld) { |
+ if (accessors[i].getterForMainWorld) |
+ getterCallback = accessors[i].getterForMainWorld; |
+ if (accessors[i].setterForMainWorld) |
+ setterCallback = accessors[i].setterForMainWorld; |
+ } |
+ |
+ v8::Local<v8::FunctionTemplate> getter; |
+ if (getterCallback) { |
+ getter = v8::FunctionTemplate::New(getterCallback, v8::External::New(accessors[i].data), signature, 0); |
+ getter->RemovePrototype(); |
+ } |
+ v8::Local<v8::FunctionTemplate> setter; |
+ if (setterCallback) { |
+ setter = v8::FunctionTemplate::New(setterCallback, v8::External::New(accessors[i].data), signature, 1); |
+ setter->RemovePrototype(); |
+ } |
+ |
+ prototype->SetAccessorProperty(v8::String::NewSymbol(accessors[i].name), getter, setter, accessors[i].attribute, accessors[i].settings); |
+ } |
+} |
+ |
void V8DOMConfiguration::installConstants(v8::Handle<v8::FunctionTemplate> functionDescriptor, v8::Handle<v8::ObjectTemplate> prototype, const ConstantConfiguration* constants, size_t constantCount, v8::Isolate* isolate) |
{ |
for (size_t i = 0; i < constantCount; ++i) { |
@@ -60,8 +87,11 @@ void V8DOMConfiguration::installCallbacks(v8::Handle<v8::ObjectTemplate> prototy |
} |
} |
-v8::Local<v8::Signature> V8DOMConfiguration::installDOMClassTemplate(v8::Handle<v8::FunctionTemplate> functionDescriptor, const char* interfaceName, v8::Handle<v8::FunctionTemplate> parentClass, |
- size_t fieldCount, const AttributeConfiguration* attributes, size_t attributeCount, const MethodConfiguration* callbacks, size_t callbackCount, v8::Isolate* isolate, WrapperWorldType currentWorldType) |
+v8::Local<v8::Signature> V8DOMConfiguration::installDOMClassTemplate(v8::Handle<v8::FunctionTemplate> functionDescriptor, const char* interfaceName, v8::Handle<v8::FunctionTemplate> parentClass, size_t fieldCount, |
+ const AttributeConfiguration* attributes, size_t attributeCount, |
+ const AccessorConfiguration* accessors, size_t accessorCount, |
+ const MethodConfiguration* callbacks, size_t callbackCount, |
+ v8::Isolate* isolate, WrapperWorldType currentWorldType) |
{ |
functionDescriptor->SetClassName(v8::String::NewSymbol(interfaceName)); |
v8::Local<v8::ObjectTemplate> instance = functionDescriptor->InstanceTemplate(); |
@@ -75,9 +105,11 @@ v8::Local<v8::Signature> V8DOMConfiguration::installDOMClassTemplate(v8::Handle< |
prototype->SetInternalFieldCount(v8PrototypeInternalFieldcount); |
} |
+ v8::Local<v8::Signature> defaultSignature = v8::Signature::New(functionDescriptor); |
if (attributeCount) |
installAttributes(instance, functionDescriptor->PrototypeTemplate(), attributes, attributeCount, isolate, currentWorldType); |
- v8::Local<v8::Signature> defaultSignature = v8::Signature::New(functionDescriptor); |
+ if (accessorCount) |
+ installAccessors(functionDescriptor->PrototypeTemplate(), defaultSignature, accessors, accessorCount, isolate, currentWorldType); |
if (callbackCount) |
installCallbacks(functionDescriptor->PrototypeTemplate(), defaultSignature, static_cast<v8::PropertyAttribute>(v8::DontDelete), callbacks, callbackCount, isolate, currentWorldType); |
return defaultSignature; |