Source/WebCore/ChangeLog

 12012-04-13 Greg Billock <gbillock@google.com>
 2
 3 Add V8 code generation support for MessagePorts attributes.
 4 https://bugs.webkit.org/show_bug.cgi?id=83943
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * bindings/scripts/CodeGeneratorV8.pm:
 9 (GenerateNormalAttrGetter):
 10 * bindings/scripts/IDLAttributes.txt:
 11 * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp:
 12 (WebDOMTestSerializedScriptValueInterface::ports):
 13 * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h:
 14 (WebDOMTestSerializedScriptValueInterface):
 15 * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
 16 (webkit_dom_test_serialized_script_value_interface_get_property):
 17 (webkit_dom_test_serialized_script_value_interface_class_init):
 18 (webkit_dom_test_serialized_script_value_interface_get_ports):
 19 * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
 20 * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
 21 (WebCore):
 22 (WebCore::jsTestSerializedScriptValueInterfacePorts):
 23 * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
 24 (WebCore):
 25 * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
 26 * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm:
 27 (-[DOMTestSerializedScriptValueInterface ports]):
 28 * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
 29 * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
 30 (WebCore::TestSerializedScriptValueInterfaceInternal::portsAttrGetter):
 31 (TestSerializedScriptValueInterfaceInternal):
 32 (WebCore):
 33
1342012-04-09 Sheriff Bot <webkit.review.bot@gmail.com>
235
336 Unreviewed, rolling out r113561.

Source/WebCore/bindings/scripts/CodeGeneratorV8.pm

@@END
912912 # the newly created wrapper into an internal field of the holder object.
913913 if (!IsNodeSubType($dataNode) && $attrName ne "self" && (IsWrapperType($returnType) && ($attribute->type =~ /^readonly/ || $attribute->signature->extendedAttributes->{"Replaceable"})
914914 && $returnType ne "EventTarget" && $returnType ne "SerializedScriptValue" && $returnType ne "DOMWindow"
 915 && !$attribute->signature->extendedAttributes->{"MessagePortArray"}
915916 && $returnType !~ /SVG/ && $returnType !~ /HTML/ && !IsDOMNodeType($returnType))) {
916917
917918 my $arrayType = $codeGenerator->GetArrayType($returnType);

@@END
986987 } else {
987988 push(@implContentDecls, " return toV8(WTF::getPtr(${tearOffType}::create($result)));\n");
988989 }
 990 } elsif ($attribute->signature->extendedAttributes->{"MessagePortArray"}) {
 991 AddToImplIncludes("V8Array.h");
 992 AddToImplIncludes("MessagePort.h");
 993 my $getterFunc = $codeGenerator->WK_lcfirst($attribute->signature->name);
 994 push(@implContentDecls, <<END);
 995 MessagePortArray* ports = imp->${getterFunc}();
 996 if (!ports)
 997 return v8::Array::New(0);
 998 MessagePortArray portsCopy(*ports);
 999 v8::Local<v8::Array> portArray = v8::Array::New(portsCopy.size());
 1000 for (size_t i = 0; i < portsCopy.size(); ++i)
 1001 portArray->Set(v8::Integer::New(i), toV8(portsCopy[i].get()));
 1002 return portArray;
 1003END
9891004 } else {
9901005 if ($attribute->signature->type eq "SerializedScriptValue" && $attrExt->{"CachedAttribute"}) {
9911006 my $getterFunc = $codeGenerator->WK_lcfirst($attribute->signature->name);

Source/WebCore/bindings/scripts/IDLAttributes.txt

@@JSLegacyParent=*
8181JSNoStaticTables
8282JSWindowEventListener
8383MasqueradesAsUndefined
 84MessagePortArray
8485NamedConstructor=*
8586NamedGetter
8687NotEnumerable

Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp

@@void WebDOMTestSerializedScriptValueInterface::setCachedValue(const WebDOMString
117117 impl()->setCachedValue(WebCore::SerializedScriptValue::create(WTF::String(newCachedValue)));
118118}
119119
 120WebDOMArray WebDOMTestSerializedScriptValueInterface::ports() const
 121{
 122 if (!impl())
 123 return WebDOMArray();
 124
 125 return toWebKit(WTF::getPtr(impl()->ports()));
 126}
 127
120128WebDOMString WebDOMTestSerializedScriptValueInterface::cachedReadonlyValue() const
121129{
122130 if (!impl())

Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h

@@public:
4848 WebDOMString readonlyValue() const;
4949 WebDOMString cachedValue() const;
5050 void setCachedValue(const WebDOMString&);
 51 WebDOMArray ports() const;
5152 WebDOMString cachedReadonlyValue() const;
5253
5354 void acceptTransferList(const WebDOMString& data, const WebDOMArray& transferList);

Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp

2323
2424#if ENABLE(Condition1) || ENABLE(Condition2)
2525
 26#include "Array.h"
2627#include "DOMObjectCache.h"
2728#include "ExceptionCode.h"
2829#include "JSMainThreadExecState.h"

@@enum {
8687 PROP_VALUE,
8788 PROP_READONLY_VALUE,
8889 PROP_CACHED_VALUE,
 90 PROP_PORTS,
8991 PROP_CACHED_READONLY_VALUE,
9092};
9193

@@static void webkit_dom_test_serialized_script_value_interface_get_property(GObje
139141 g_value_set_object(value, WebKit::kit(ptr.get()));
140142 break;
141143 }
 144 case PROP_PORTS: {
 145 RefPtr<WebCore::Array> ptr = coreSelf->ports();
 146 g_value_set_object(value, WebKit::kit(ptr.get()));
 147 break;
 148 }
142149 case PROP_CACHED_READONLY_VALUE: {
143150 RefPtr<WebCore::SerializedScriptValue> ptr = coreSelf->cachedReadonlyValue();
144151 g_value_set_object(value, WebKit::kit(ptr.get()));

@@static void webkit_dom_test_serialized_script_value_interface_class_init(WebKitD
188195 WEBKIT_TYPE_DOM_SERIALIZED_SCRIPT_VALUE, /* gobject type */
189196 WEBKIT_PARAM_READWRITE));
190197 g_object_class_install_property(gobjectClass,
 198 PROP_PORTS,
 199 g_param_spec_object("ports", /* name */
 200 "test_serialized_script_value_interface_ports", /* short description */
 201 "read-only WebKitDOMArray* TestSerializedScriptValueInterface.ports", /* longer - could do with some extra doc stuff here */
 202 WEBKIT_TYPE_DOM_ARRAY, /* gobject type */
 203 WEBKIT_PARAM_READABLE));
 204 g_object_class_install_property(gobjectClass,
191205 PROP_CACHED_READONLY_VALUE,
192206 g_param_spec_object("cached-readonly-value", /* name */
193207 "test_serialized_script_value_interface_cached-readonly-value", /* short description */

@@webkit_dom_test_serialized_script_value_interface_set_cached_value(WebKitDOMTest
357371#endif /* ENABLE(Condition1) || ENABLE(Condition2) */
358372}
359373
 374WebKitDOMArray*
 375webkit_dom_test_serialized_script_value_interface_get_ports(WebKitDOMTestSerializedScriptValueInterface* self)
 376{
 377#if ENABLE(Condition1) || ENABLE(Condition2)
 378 g_return_val_if_fail(self, 0);
 379 WebCore::JSMainThreadNullState state;
 380 WebCore::TestSerializedScriptValueInterface* item = WebKit::core(self);
 381 RefPtr<WebCore::Array> gobjectResult = WTF::getPtr(item->ports());
 382 WebKitDOMArray* result = WebKit::kit(gobjectResult.get());
 383 return result;
 384#else
 385 WEBKIT_WARN_FEATURE_NOT_PRESENT("Condition1")
 386 WEBKIT_WARN_FEATURE_NOT_PRESENT("Condition2")
 387 return 0;
 388#endif /* ENABLE(Condition1) || ENABLE(Condition2) */
 389}
 390
360391WebKitDOMSerializedScriptValue*
361392webkit_dom_test_serialized_script_value_interface_get_cached_readonly_value(WebKitDOMTestSerializedScriptValueInterface* self)
362393{

Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h

@@WEBKIT_API void
124124webkit_dom_test_serialized_script_value_interface_set_cached_value(WebKitDOMTestSerializedScriptValueInterface* self, WebKitDOMSerializedScriptValue* value);
125125
126126/**
 127 * webkit_dom_test_serialized_script_value_interface_get_ports:
 128 * @self: A #WebKitDOMTestSerializedScriptValueInterface
 129 *
 130 * Returns: (transfer none):
 131 *
 132**/
 133WEBKIT_API WebKitDOMArray*
 134webkit_dom_test_serialized_script_value_interface_get_ports(WebKitDOMTestSerializedScriptValueInterface* self);
 135
 136/**
127137 * webkit_dom_test_serialized_script_value_interface_get_cached_readonly_value:
128138 * @self: A #WebKitDOMTestSerializedScriptValueInterface
129139 *

Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp

2424
2525#include "JSTestSerializedScriptValueInterface.h"
2626
 27#include "Array.h"
2728#include "ExceptionCode.h"
2829#include "JSArray.h"
2930#include "JSDOMBinding.h"

@@static const HashTableValue JSTestSerializedScriptValueInterfaceTableValues[] =
4445 { "value", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceValue), (intptr_t)setJSTestSerializedScriptValueInterfaceValue, NoIntrinsic },
4546 { "readonlyValue", DontDelete | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceReadonlyValue), (intptr_t)0, NoIntrinsic },
4647 { "cachedValue", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedValue), (intptr_t)setJSTestSerializedScriptValueInterfaceCachedValue, NoIntrinsic },
 48 { "ports", DontDelete | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfacePorts), (intptr_t)0, NoIntrinsic },
4749 { "cachedReadonlyValue", DontDelete | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedReadonlyValue), (intptr_t)0, NoIntrinsic },
4850 { "constructor", DontEnum | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceConstructor), (intptr_t)0, NoIntrinsic },
4951 { 0, 0, 0, 0, NoIntrinsic }

@@JSValue jsTestSerializedScriptValueInterfaceCachedValue(ExecState* exec, JSValue
213215}
214216
215217
 218JSValue jsTestSerializedScriptValueInterfacePorts(ExecState* exec, JSValue slotBase, const Identifier&)
 219{
 220 JSTestSerializedScriptValueInterface* castedThis = jsCast<JSTestSerializedScriptValueInterface*>(asObject(slotBase));
 221 UNUSED_PARAM(exec);
 222 TestSerializedScriptValueInterface* impl = static_cast<TestSerializedScriptValueInterface*>(castedThis->impl());
 223 JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl->ports()));
 224 return result;
 225}
 226
 227
216228JSValue jsTestSerializedScriptValueInterfaceCachedReadonlyValue(ExecState* exec, JSValue slotBase, const Identifier&)
217229{
218230 JSTestSerializedScriptValueInterface* castedThis = jsCast<JSTestSerializedScriptValueInterface*>(asObject(slotBase));

Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h

@@void setJSTestSerializedScriptValueInterfaceValue(JSC::ExecState*, JSC::JSObject
154154JSC::JSValue jsTestSerializedScriptValueInterfaceReadonlyValue(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
155155JSC::JSValue jsTestSerializedScriptValueInterfaceCachedValue(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
156156void setJSTestSerializedScriptValueInterfaceCachedValue(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
 157JSC::JSValue jsTestSerializedScriptValueInterfacePorts(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
157158JSC::JSValue jsTestSerializedScriptValueInterfaceCachedReadonlyValue(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
158159JSC::JSValue jsTestSerializedScriptValueInterfaceConstructor(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
159160

Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h

3737- (NSString *)readonlyValue;
3838- (NSString *)cachedValue;
3939- (void)setCachedValue:(NSString *)newCachedValue;
 40- (DOMArray *)ports;
4041- (NSString *)cachedReadonlyValue;
4142- (void)acceptTransferList:(NSString *)data transferList:(DOMArray *)transferList;
4243- (void)multiTransferList:(NSString *)first tx:(DOMArray *)tx second:(NSString *)second txx:(DOMArray *)txx;

Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm

105105 IMPL->setCachedValue(WebCore::SerializedScriptValue::create(WTF::String(newCachedValue)));
106106}
107107
 108- (DOMArray *)ports
 109{
 110 WebCore::JSMainThreadNullState state;
 111 return kit(WTF::getPtr(IMPL->ports()));
 112}
 113
108114- (NSString *)cachedReadonlyValue
109115{
110116 WebCore::JSMainThreadNullState state;

Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl

@@module test {
3434 attribute SerializedScriptValue value;
3535 readonly attribute SerializedScriptValue readonlyValue;
3636 attribute [CachedAttribute] SerializedScriptValue cachedValue;
 37 readonly attribute [MessagePortArray] Array ports;
3738 readonly attribute [CachedAttribute] SerializedScriptValue cachedReadonlyValue;
3839 void acceptTransferList(in [TransferList=transferList] SerializedScriptValue data, in [Optional] Array transferList);
3940 void multiTransferList(in [Optional, TransferList=tx] SerializedScriptValue first, in [Optional] Array tx, in [Optional, TransferList=txx] SerializedScriptValue second, in [Optional] Array txx);

Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp

2828#include "MessagePort.h"
2929#include "RuntimeEnabledFeatures.h"
3030#include "SerializedScriptValue.h"
 31#include "V8Array.h"
3132#include "V8Binding.h"
3233#include "V8BindingMacros.h"
3334#include "V8BindingState.h"

@@static void cachedValueAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Valu
9192 return;
9293}
9394
 95static v8::Handle<v8::Value> portsAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
 96{
 97 INC_STATS("DOM.TestSerializedScriptValueInterface.ports._get");
 98 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterface::toNative(info.Holder());
 99 MessagePortArray* ports = imp->ports();
 100 if (!ports)
 101 return v8::Array::New(0);
 102 MessagePortArray portsCopy(*ports);
 103 v8::Local<v8::Array> portArray = v8::Array::New(portsCopy.size());
 104 for (size_t i = 0; i < portsCopy.size(); ++i)
 105 portArray->Set(v8::Integer::New(i), toV8(portsCopy[i].get()));
 106 return portArray;
 107}
 108
94109static v8::Handle<v8::Value> cachedReadonlyValueAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
95110{
96111 INC_STATS("DOM.TestSerializedScriptValueInterface.cachedReadonlyValue._get");

@@static const BatchedAttribute TestSerializedScriptValueInterfaceAttrs[] = {
182197 {"readonlyValue", TestSerializedScriptValueInterfaceInternal::readonlyValueAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
183198 // Attribute 'cachedValue' (Type: 'attribute' ExtAttr: 'CachedAttribute')
184199 {"cachedValue", TestSerializedScriptValueInterfaceInternal::cachedValueAttrGetter, TestSerializedScriptValueInterfaceInternal::cachedValueAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
 200 // Attribute 'ports' (Type: 'readonly attribute' ExtAttr: 'MessagePortArray')
 201 {"ports", TestSerializedScriptValueInterfaceInternal::portsAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
185202 // Attribute 'cachedReadonlyValue' (Type: 'readonly attribute' ExtAttr: 'CachedAttribute')
186203 {"cachedReadonlyValue", TestSerializedScriptValueInterfaceInternal::cachedReadonlyValueAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
187204};