From 892e3f66168a16b5dd93536d275f46255560abae Mon Sep 17 00:00:00 2001 From: "commit-queue@webkit.org" Date: Mon, 16 Apr 2012 23:50:37 +0000 Subject: [PATCH] Add V8 code generation support for MessagePortArray attributes. https://bugs.webkit.org/show_bug.cgi?id=83943 Patch by Greg Billock on 2012-04-16 Reviewed by Kentaro Hara. * bindings/scripts/CodeGeneratorV8.pm: (GenerateNormalAttrGetter): * bindings/scripts/IDLAttributes.txt: * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp: (WebDOMTestSerializedScriptValueInterface::ports): * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h: (WebDOMTestSerializedScriptValueInterface): * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp: (webkit_dom_test_serialized_script_value_interface_get_property): (webkit_dom_test_serialized_script_value_interface_class_init): (webkit_dom_test_serialized_script_value_interface_get_ports): * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h: * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: (WebCore): (WebCore::jsTestSerializedScriptValueInterfacePorts): * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h: (WebCore): * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h: * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm: (-[DOMTestSerializedScriptValueInterface ports]): * bindings/scripts/test/TestSerializedScriptValueInterface.idl: * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp: (WebCore::TestSerializedScriptValueInterfaceInternal::portsAttrGetter): (TestSerializedScriptValueInterfaceInternal): (WebCore): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@114319 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebCore/ChangeLog | 33 ++++++++++++++++++++++ Source/WebCore/bindings/scripts/CodeGeneratorV8.pm | 15 ++++++++++ .../WebDOMTestSerializedScriptValueInterface.cpp | 10 +++++++ .../CPP/WebDOMTestSerializedScriptValueInterface.h | 2 ++ ...WebKitDOMTestSerializedScriptValueInterface.cpp | 33 ++++++++++++++++++++++ .../WebKitDOMTestSerializedScriptValueInterface.h | 10 +++++++ .../JS/JSTestSerializedScriptValueInterface.cpp | 13 +++++++++ .../test/JS/JSTestSerializedScriptValueInterface.h | 1 + .../ObjC/DOMTestSerializedScriptValueInterface.h | 2 ++ .../ObjC/DOMTestSerializedScriptValueInterface.mm | 8 ++++++ .../test/TestSerializedScriptValueInterface.idl | 1 + .../V8/V8TestSerializedScriptValueInterface.cpp | 17 +++++++++++ 12 files changed, 145 insertions(+) diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 64817ec..05c5f08 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,36 @@ +2012-04-16 Greg Billock + + Add V8 code generation support for MessagePortArray attributes. + https://bugs.webkit.org/show_bug.cgi?id=83943 + + Reviewed by Kentaro Hara. + + * bindings/scripts/CodeGeneratorV8.pm: + (GenerateNormalAttrGetter): + * bindings/scripts/IDLAttributes.txt: + * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp: + (WebDOMTestSerializedScriptValueInterface::ports): + * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h: + (WebDOMTestSerializedScriptValueInterface): + * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp: + (webkit_dom_test_serialized_script_value_interface_get_property): + (webkit_dom_test_serialized_script_value_interface_class_init): + (webkit_dom_test_serialized_script_value_interface_get_ports): + * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h: + * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: + (WebCore): + (WebCore::jsTestSerializedScriptValueInterfacePorts): + * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h: + (WebCore): + * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h: + * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm: + (-[DOMTestSerializedScriptValueInterface ports]): + * bindings/scripts/test/TestSerializedScriptValueInterface.idl: + * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp: + (WebCore::TestSerializedScriptValueInterfaceInternal::portsAttrGetter): + (TestSerializedScriptValueInterfaceInternal): + (WebCore): + 2012-04-16 Xiaomei Ji platform/graphics/skia/GlyphPageTreeNodeSkia.cpp mis-use 'continue' for 'break' diff --git a/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm b/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm index 09db806..1005a0d 100644 --- a/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm +++ b/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm @@ -910,6 +910,7 @@ END # the newly created wrapper into an internal field of the holder object. if (!IsNodeSubType($dataNode) && $attrName ne "self" && (IsWrapperType($returnType) && ($attribute->type =~ /^readonly/ || $attribute->signature->extendedAttributes->{"Replaceable"}) && $returnType ne "EventTarget" && $returnType ne "SerializedScriptValue" && $returnType ne "DOMWindow" + && $returnType ne "MessagePortArray" && $returnType !~ /SVG/ && $returnType !~ /HTML/ && !IsDOMNodeType($returnType))) { my $arrayType = $codeGenerator->GetArrayType($returnType); @@ -984,6 +985,20 @@ END } else { push(@implContentDecls, " return toV8(WTF::getPtr(${tearOffType}::create($result)));\n"); } + } elsif ($attribute->signature->type eq "MessagePortArray") { + AddToImplIncludes("V8Array.h"); + AddToImplIncludes("MessagePort.h"); + my $getterFunc = $codeGenerator->WK_lcfirst($attribute->signature->name); + push(@implContentDecls, <${getterFunc}(); + if (!ports) + return v8::Array::New(0); + MessagePortArray portsCopy(*ports); + v8::Local portArray = v8::Array::New(portsCopy.size()); + for (size_t i = 0; i < portsCopy.size(); ++i) + portArray->Set(v8::Integer::New(i), toV8(portsCopy[i].get())); + return portArray; +END } else { if ($attribute->signature->type eq "SerializedScriptValue" && $attrExt->{"CachedAttribute"}) { my $getterFunc = $codeGenerator->WK_lcfirst($attribute->signature->name); diff --git a/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp b/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp index d94df39..ad68c9a7 100644 --- a/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp +++ b/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp @@ -25,9 +25,11 @@ #include "WebDOMTestSerializedScriptValueInterface.h" #include "Array.h" +#include "MessagePortArray.h" #include "SerializedScriptValue.h" #include "TestSerializedScriptValueInterface.h" #include "WebDOMArray.h" +#include "WebDOMMessagePortArray.h" #include "WebExceptionHandler.h" #include #include @@ -117,6 +119,14 @@ void WebDOMTestSerializedScriptValueInterface::setCachedValue(const WebDOMString impl()->setCachedValue(WebCore::SerializedScriptValue::create(WTF::String(newCachedValue))); } +WebDOMMessagePortArray WebDOMTestSerializedScriptValueInterface::ports() const +{ + if (!impl()) + return WebDOMMessagePortArray(); + + return toWebKit(WTF::getPtr(impl()->ports())); +} + WebDOMString WebDOMTestSerializedScriptValueInterface::cachedReadonlyValue() const { if (!impl()) diff --git a/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h b/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h index 6594b8a..13e5655 100644 --- a/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h +++ b/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h @@ -33,6 +33,7 @@ class TestSerializedScriptValueInterface; }; class WebDOMArray; +class WebDOMMessagePortArray; class WebDOMString; class WebDOMTestSerializedScriptValueInterface : public WebDOMObject { @@ -48,6 +49,7 @@ public: WebDOMString readonlyValue() const; WebDOMString cachedValue() const; void setCachedValue(const WebDOMString&); + WebDOMMessagePortArray ports() const; WebDOMString cachedReadonlyValue() const; void acceptTransferList(const WebDOMString& data, const WebDOMArray& transferList); diff --git a/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp b/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp index be6a381..c764254 100644 --- a/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp +++ b/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp @@ -26,12 +26,15 @@ #include "DOMObjectCache.h" #include "ExceptionCode.h" #include "JSMainThreadExecState.h" +#include "MessagePortArray.h" #include "SerializedScriptValue.h" #include "TestSerializedScriptValueInterface.h" #include "WebKitDOMBinding.h" #include "gobject/ConvertToUTF8String.h" #include "webkit/WebKitDOMArray.h" #include "webkit/WebKitDOMArrayPrivate.h" +#include "webkit/WebKitDOMMessagePortArray.h" +#include "webkit/WebKitDOMMessagePortArrayPrivate.h" #include "webkit/WebKitDOMSerializedScriptValue.h" #include "webkit/WebKitDOMSerializedScriptValuePrivate.h" #include "webkit/WebKitDOMTestSerializedScriptValueInterfacePrivate.h" @@ -86,6 +89,7 @@ enum { PROP_VALUE, PROP_READONLY_VALUE, PROP_CACHED_VALUE, + PROP_PORTS, PROP_CACHED_READONLY_VALUE, }; @@ -139,6 +143,11 @@ static void webkit_dom_test_serialized_script_value_interface_get_property(GObje g_value_set_object(value, WebKit::kit(ptr.get())); break; } + case PROP_PORTS: { + RefPtr ptr = coreSelf->ports(); + g_value_set_object(value, WebKit::kit(ptr.get())); + break; + } case PROP_CACHED_READONLY_VALUE: { RefPtr ptr = coreSelf->cachedReadonlyValue(); g_value_set_object(value, WebKit::kit(ptr.get())); @@ -188,6 +197,13 @@ static void webkit_dom_test_serialized_script_value_interface_class_init(WebKitD WEBKIT_TYPE_DOM_SERIALIZED_SCRIPT_VALUE, /* gobject type */ WEBKIT_PARAM_READWRITE)); g_object_class_install_property(gobjectClass, + PROP_PORTS, + g_param_spec_object("ports", /* name */ + "test_serialized_script_value_interface_ports", /* short description */ + "read-only WebKitDOMMessagePortArray* TestSerializedScriptValueInterface.ports", /* longer - could do with some extra doc stuff here */ + WEBKIT_TYPE_DOM_MESSAGE_PORT_ARRAY, /* gobject type */ + WEBKIT_PARAM_READABLE)); + g_object_class_install_property(gobjectClass, PROP_CACHED_READONLY_VALUE, g_param_spec_object("cached-readonly-value", /* name */ "test_serialized_script_value_interface_cached-readonly-value", /* short description */ @@ -357,6 +373,23 @@ webkit_dom_test_serialized_script_value_interface_set_cached_value(WebKitDOMTest #endif /* ENABLE(Condition1) || ENABLE(Condition2) */ } +WebKitDOMMessagePortArray* +webkit_dom_test_serialized_script_value_interface_get_ports(WebKitDOMTestSerializedScriptValueInterface* self) +{ +#if ENABLE(Condition1) || ENABLE(Condition2) + g_return_val_if_fail(self, 0); + WebCore::JSMainThreadNullState state; + WebCore::TestSerializedScriptValueInterface* item = WebKit::core(self); + RefPtr gobjectResult = WTF::getPtr(item->ports()); + WebKitDOMMessagePortArray* result = WebKit::kit(gobjectResult.get()); + return result; +#else + WEBKIT_WARN_FEATURE_NOT_PRESENT("Condition1") + WEBKIT_WARN_FEATURE_NOT_PRESENT("Condition2") + return 0; +#endif /* ENABLE(Condition1) || ENABLE(Condition2) */ +} + WebKitDOMSerializedScriptValue* webkit_dom_test_serialized_script_value_interface_get_cached_readonly_value(WebKitDOMTestSerializedScriptValueInterface* self) { diff --git a/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h b/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h index 34fc8eb..7232fe3 100644 --- a/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h +++ b/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h @@ -124,6 +124,16 @@ WEBKIT_API void webkit_dom_test_serialized_script_value_interface_set_cached_value(WebKitDOMTestSerializedScriptValueInterface* self, WebKitDOMSerializedScriptValue* value); /** + * webkit_dom_test_serialized_script_value_interface_get_ports: + * @self: A #WebKitDOMTestSerializedScriptValueInterface + * + * Returns: (transfer none): + * +**/ +WEBKIT_API WebKitDOMMessagePortArray* +webkit_dom_test_serialized_script_value_interface_get_ports(WebKitDOMTestSerializedScriptValueInterface* self); + +/** * webkit_dom_test_serialized_script_value_interface_get_cached_readonly_value: * @self: A #WebKitDOMTestSerializedScriptValueInterface * diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp index 1d8de94..a7ab0591 100644 --- a/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp +++ b/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp @@ -27,6 +27,8 @@ #include "ExceptionCode.h" #include "JSArray.h" #include "JSDOMBinding.h" +#include "JSMessagePortArray.h" +#include "MessagePortArray.h" #include "SerializedScriptValue.h" #include "TestSerializedScriptValueInterface.h" #include @@ -44,6 +46,7 @@ static const HashTableValue JSTestSerializedScriptValueInterfaceTableValues[] = { "value", DontDelete, (intptr_t)static_cast(jsTestSerializedScriptValueInterfaceValue), (intptr_t)setJSTestSerializedScriptValueInterfaceValue, NoIntrinsic }, { "readonlyValue", DontDelete | ReadOnly, (intptr_t)static_cast(jsTestSerializedScriptValueInterfaceReadonlyValue), (intptr_t)0, NoIntrinsic }, { "cachedValue", DontDelete, (intptr_t)static_cast(jsTestSerializedScriptValueInterfaceCachedValue), (intptr_t)setJSTestSerializedScriptValueInterfaceCachedValue, NoIntrinsic }, + { "ports", DontDelete | ReadOnly, (intptr_t)static_cast(jsTestSerializedScriptValueInterfacePorts), (intptr_t)0, NoIntrinsic }, { "cachedReadonlyValue", DontDelete | ReadOnly, (intptr_t)static_cast(jsTestSerializedScriptValueInterfaceCachedReadonlyValue), (intptr_t)0, NoIntrinsic }, { "constructor", DontEnum | ReadOnly, (intptr_t)static_cast(jsTestSerializedScriptValueInterfaceConstructor), (intptr_t)0, NoIntrinsic }, { 0, 0, 0, 0, NoIntrinsic } @@ -213,6 +216,16 @@ JSValue jsTestSerializedScriptValueInterfaceCachedValue(ExecState* exec, JSValue } +JSValue jsTestSerializedScriptValueInterfacePorts(ExecState* exec, JSValue slotBase, const Identifier&) +{ + JSTestSerializedScriptValueInterface* castedThis = jsCast(asObject(slotBase)); + UNUSED_PARAM(exec); + TestSerializedScriptValueInterface* impl = static_cast(castedThis->impl()); + JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl->ports())); + return result; +} + + JSValue jsTestSerializedScriptValueInterfaceCachedReadonlyValue(ExecState* exec, JSValue slotBase, const Identifier&) { JSTestSerializedScriptValueInterface* castedThis = jsCast(asObject(slotBase)); diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h b/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h index ad44b57..80df1e0 100644 --- a/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h +++ b/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h @@ -154,6 +154,7 @@ void setJSTestSerializedScriptValueInterfaceValue(JSC::ExecState*, JSC::JSObject JSC::JSValue jsTestSerializedScriptValueInterfaceReadonlyValue(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); JSC::JSValue jsTestSerializedScriptValueInterfaceCachedValue(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); void setJSTestSerializedScriptValueInterfaceCachedValue(JSC::ExecState*, JSC::JSObject*, JSC::JSValue); +JSC::JSValue jsTestSerializedScriptValueInterfacePorts(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); JSC::JSValue jsTestSerializedScriptValueInterfaceCachedReadonlyValue(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); JSC::JSValue jsTestSerializedScriptValueInterfaceConstructor(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); diff --git a/Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h b/Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h index ce521d1..01c68d9 100644 --- a/Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h +++ b/Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h @@ -29,6 +29,7 @@ #if WEBKIT_VERSION_MAX_ALLOWED >= WEBKIT_VERSION_LATEST @class DOMArray; +@class DOMMessagePortArray; @class NSString; @interface DOMTestSerializedScriptValueInterface : DOMObject @@ -37,6 +38,7 @@ - (NSString *)readonlyValue; - (NSString *)cachedValue; - (void)setCachedValue:(NSString *)newCachedValue; +- (DOMMessagePortArray *)ports; - (NSString *)cachedReadonlyValue; - (void)acceptTransferList:(NSString *)data transferList:(DOMArray *)transferList; - (void)multiTransferList:(NSString *)first tx:(DOMArray *)tx second:(NSString *)second txx:(DOMArray *)txx; diff --git a/Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm b/Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm index 168f096..3b9fb73 100644 --- a/Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm +++ b/Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm @@ -38,11 +38,13 @@ #import "DOMCSSRuleInternal.h" #import "DOMCSSValueInternal.h" #import "DOMEventInternal.h" +#import "DOMMessagePortArrayInternal.h" #import "DOMNodeInternal.h" #import "DOMStyleSheetInternal.h" #import "DOMTestSerializedScriptValueInterfaceInternal.h" #import "ExceptionHandlers.h" #import "JSMainThreadExecState.h" +#import "MessagePortArray.h" #import "SerializedScriptValue.h" #import "TestSerializedScriptValueInterface.h" #import "ThreadCheck.h" @@ -105,6 +107,12 @@ IMPL->setCachedValue(WebCore::SerializedScriptValue::create(WTF::String(newCachedValue))); } +- (DOMMessagePortArray *)ports +{ + WebCore::JSMainThreadNullState state; + return kit(WTF::getPtr(IMPL->ports())); +} + - (NSString *)cachedReadonlyValue { WebCore::JSMainThreadNullState state; diff --git a/Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl b/Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl index c4b886a..facf7cb 100644 --- a/Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl +++ b/Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl @@ -34,6 +34,7 @@ module test { attribute SerializedScriptValue value; readonly attribute SerializedScriptValue readonlyValue; attribute [CachedAttribute] SerializedScriptValue cachedValue; + readonly attribute MessagePortArray ports; readonly attribute [CachedAttribute] SerializedScriptValue cachedReadonlyValue; void acceptTransferList(in [TransferList=transferList] SerializedScriptValue data, in [Optional] Array transferList); void multiTransferList(in [Optional, TransferList=tx] SerializedScriptValue first, in [Optional] Array tx, in [Optional, TransferList=txx] SerializedScriptValue second, in [Optional] Array txx); diff --git a/Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp b/Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp index 1806822..bbd939d 100644 --- a/Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp +++ b/Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp @@ -27,6 +27,7 @@ #include "MessagePort.h" #include "RuntimeEnabledFeatures.h" #include "SerializedScriptValue.h" +#include "V8Array.h" #include "V8Binding.h" #include "V8BindingMacros.h" #include "V8BindingState.h" @@ -91,6 +92,20 @@ static void cachedValueAttrSetter(v8::Local name, v8::Local portsAttrGetter(v8::Local name, const v8::AccessorInfo& info) +{ + INC_STATS("DOM.TestSerializedScriptValueInterface.ports._get"); + TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterface::toNative(info.Holder()); + MessagePortArray* ports = imp->ports(); + if (!ports) + return v8::Array::New(0); + MessagePortArray portsCopy(*ports); + v8::Local portArray = v8::Array::New(portsCopy.size()); + for (size_t i = 0; i < portsCopy.size(); ++i) + portArray->Set(v8::Integer::New(i), toV8(portsCopy[i].get())); + return portArray; +} + static v8::Handle cachedReadonlyValueAttrGetter(v8::Local name, const v8::AccessorInfo& info) { INC_STATS("DOM.TestSerializedScriptValueInterface.cachedReadonlyValue._get"); @@ -182,6 +197,8 @@ static const BatchedAttribute TestSerializedScriptValueInterfaceAttrs[] = { {"readonlyValue", TestSerializedScriptValueInterfaceV8Internal::readonlyValueAttrGetter, 0, 0 /* no data */, static_cast(v8::DEFAULT), static_cast(v8::None), 0 /* on instance */}, // Attribute 'cachedValue' (Type: 'attribute' ExtAttr: 'CachedAttribute') {"cachedValue", TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrGetter, TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrSetter, 0 /* no data */, static_cast(v8::DEFAULT), static_cast(v8::None), 0 /* on instance */}, + // Attribute 'ports' (Type: 'readonly attribute' ExtAttr: '') + {"ports", TestSerializedScriptValueInterfaceV8Internal::portsAttrGetter, 0, 0 /* no data */, static_cast(v8::DEFAULT), static_cast(v8::None), 0 /* on instance */}, // Attribute 'cachedReadonlyValue' (Type: 'readonly attribute' ExtAttr: 'CachedAttribute') {"cachedReadonlyValue", TestSerializedScriptValueInterfaceV8Internal::cachedReadonlyValueAttrGetter, 0, 0 /* no data */, static_cast(v8::DEFAULT), static_cast(v8::None), 0 /* on instance */}, }; -- 2.7.4