⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 114319 in webkit


Ignore:
Timestamp:
Apr 16, 2012, 4:50:37 PM (14 years ago)
Author:
commit-queue@webkit.org
Message:

Add V8 code generation support for MessagePortArray attributes.
https://bugs.webkit.org/show_bug.cgi?id=83943

Patch by Greg Billock <gbillock@google.com> 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):

Location:
trunk/Source/WebCore
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r114316 r114319  
     12012-04-16  Greg Billock  <gbillock@google.com>
     2
     3        Add V8 code generation support for MessagePortArray attributes.
     4        https://bugs.webkit.org/show_bug.cgi?id=83943
     5
     6        Reviewed by Kentaro Hara.
     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-16  Xiaomei Ji  <xji@chromium.org>
    235
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm

    r114298 r114319  
    911911    if (!IsNodeSubType($dataNode) && $attrName ne "self" && (IsWrapperType($returnType) && ($attribute->type =~ /^readonly/ || $attribute->signature->extendedAttributes->{"Replaceable"})
    912912        && $returnType ne "EventTarget" && $returnType ne "SerializedScriptValue" && $returnType ne "DOMWindow"
     913        && $returnType ne "MessagePortArray"
    913914        && $returnType !~ /SVG/ && $returnType !~ /HTML/ && !IsDOMNodeType($returnType))) {
    914915
     
    985986            push(@implContentDecls, "    return toV8(WTF::getPtr(${tearOffType}::create($result)));\n");
    986987        }
     988    } elsif ($attribute->signature->type eq "MessagePortArray") {
     989        AddToImplIncludes("V8Array.h");
     990        AddToImplIncludes("MessagePort.h");
     991        my $getterFunc = $codeGenerator->WK_lcfirst($attribute->signature->name);
     992        push(@implContentDecls, <<END);
     993    MessagePortArray* ports = imp->${getterFunc}();
     994    if (!ports)
     995        return v8::Array::New(0);
     996    MessagePortArray portsCopy(*ports);
     997    v8::Local<v8::Array> portArray = v8::Array::New(portsCopy.size());
     998    for (size_t i = 0; i < portsCopy.size(); ++i)
     999        portArray->Set(v8::Integer::New(i), toV8(portsCopy[i].get()));
     1000    return portArray;
     1001END
    9871002    } else {
    9881003        if ($attribute->signature->type eq "SerializedScriptValue" && $attrExt->{"CachedAttribute"}) {
  • trunk/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp

    r110972 r114319  
    2626
    2727#include "Array.h"
     28#include "MessagePortArray.h"
    2829#include "SerializedScriptValue.h"
    2930#include "TestSerializedScriptValueInterface.h"
    3031#include "WebDOMArray.h"
     32#include "WebDOMMessagePortArray.h"
    3133#include "WebExceptionHandler.h"
    3234#include <wtf/GetPtr.h>
     
    118120}
    119121
     122WebDOMMessagePortArray WebDOMTestSerializedScriptValueInterface::ports() const
     123{
     124    if (!impl())
     125        return WebDOMMessagePortArray();
     126
     127    return toWebKit(WTF::getPtr(impl()->ports()));
     128}
     129
    120130WebDOMString WebDOMTestSerializedScriptValueInterface::cachedReadonlyValue() const
    121131{
  • trunk/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h

    r110972 r114319  
    3434
    3535class WebDOMArray;
     36class WebDOMMessagePortArray;
    3637class WebDOMString;
    3738
     
    4950    WebDOMString cachedValue() const;
    5051    void setCachedValue(const WebDOMString&);
     52    WebDOMMessagePortArray ports() const;
    5153    WebDOMString cachedReadonlyValue() const;
    5254
  • trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp

    r113450 r114319  
    2727#include "ExceptionCode.h"
    2828#include "JSMainThreadExecState.h"
     29#include "MessagePortArray.h"
    2930#include "SerializedScriptValue.h"
    3031#include "TestSerializedScriptValueInterface.h"
     
    3334#include "webkit/WebKitDOMArray.h"
    3435#include "webkit/WebKitDOMArrayPrivate.h"
     36#include "webkit/WebKitDOMMessagePortArray.h"
     37#include "webkit/WebKitDOMMessagePortArrayPrivate.h"
    3538#include "webkit/WebKitDOMSerializedScriptValue.h"
    3639#include "webkit/WebKitDOMSerializedScriptValuePrivate.h"
     
    8790    PROP_READONLY_VALUE,
    8891    PROP_CACHED_VALUE,
     92    PROP_PORTS,
    8993    PROP_CACHED_READONLY_VALUE,
    9094};
     
    137141    case PROP_CACHED_VALUE: {
    138142        RefPtr<WebCore::SerializedScriptValue> ptr = coreSelf->cachedValue();
     143        g_value_set_object(value, WebKit::kit(ptr.get()));
     144        break;
     145    }
     146    case PROP_PORTS: {
     147        RefPtr<WebCore::MessagePortArray> ptr = coreSelf->ports();
    139148        g_value_set_object(value, WebKit::kit(ptr.get()));
    140149        break;
     
    189198                                                           WEBKIT_PARAM_READWRITE));
    190199    g_object_class_install_property(gobjectClass,
     200                                    PROP_PORTS,
     201                                    g_param_spec_object("ports", /* name */
     202                                                           "test_serialized_script_value_interface_ports", /* short description */
     203                                                           "read-only  WebKitDOMMessagePortArray* TestSerializedScriptValueInterface.ports", /* longer - could do with some extra doc stuff here */
     204                                                           WEBKIT_TYPE_DOM_MESSAGE_PORT_ARRAY, /* gobject type */
     205                                                           WEBKIT_PARAM_READABLE));
     206    g_object_class_install_property(gobjectClass,
    191207                                    PROP_CACHED_READONLY_VALUE,
    192208                                    g_param_spec_object("cached-readonly-value", /* name */
     
    358374}
    359375
     376WebKitDOMMessagePortArray*
     377webkit_dom_test_serialized_script_value_interface_get_ports(WebKitDOMTestSerializedScriptValueInterface* self)
     378{
     379#if ENABLE(Condition1) || ENABLE(Condition2)
     380    g_return_val_if_fail(self, 0);
     381    WebCore::JSMainThreadNullState state;
     382    WebCore::TestSerializedScriptValueInterface* item = WebKit::core(self);
     383    RefPtr<WebCore::MessagePortArray> gobjectResult = WTF::getPtr(item->ports());
     384    WebKitDOMMessagePortArray* result = WebKit::kit(gobjectResult.get());
     385    return result;
     386#else
     387    WEBKIT_WARN_FEATURE_NOT_PRESENT("Condition1")
     388    WEBKIT_WARN_FEATURE_NOT_PRESENT("Condition2")
     389    return 0;
     390#endif /* ENABLE(Condition1) || ENABLE(Condition2) */
     391}
     392
    360393WebKitDOMSerializedScriptValue*
    361394webkit_dom_test_serialized_script_value_interface_get_cached_readonly_value(WebKitDOMTestSerializedScriptValueInterface* self)
  • trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h

    r113450 r114319  
    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 WebKitDOMMessagePortArray*
     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
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp

    r113576 r114319  
    2828#include "JSArray.h"
    2929#include "JSDOMBinding.h"
     30#include "JSMessagePortArray.h"
     31#include "MessagePortArray.h"
    3032#include "SerializedScriptValue.h"
    3133#include "TestSerializedScriptValueInterface.h"
     
    4547    { "readonlyValue", DontDelete | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceReadonlyValue), (intptr_t)0, NoIntrinsic },
    4648    { "cachedValue", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedValue), (intptr_t)setJSTestSerializedScriptValueInterfaceCachedValue, NoIntrinsic },
     49    { "ports", DontDelete | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfacePorts), (intptr_t)0, NoIntrinsic },
    4750    { "cachedReadonlyValue", DontDelete | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedReadonlyValue), (intptr_t)0, NoIntrinsic },
    4851    { "constructor", DontEnum | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceConstructor), (intptr_t)0, NoIntrinsic },
     
    210213    JSValue result = impl->cachedValue() ? impl->cachedValue()->deserialize(exec, castedThis->globalObject(), 0) : jsNull();
    211214    castedThis->m_cachedValue.set(exec->globalData(), castedThis, result);
     215    return result;
     216}
     217
     218
     219JSValue jsTestSerializedScriptValueInterfacePorts(ExecState* exec, JSValue slotBase, const Identifier&)
     220{
     221    JSTestSerializedScriptValueInterface* castedThis = jsCast<JSTestSerializedScriptValueInterface*>(asObject(slotBase));
     222    UNUSED_PARAM(exec);
     223    TestSerializedScriptValueInterface* impl = static_cast<TestSerializedScriptValueInterface*>(castedThis->impl());
     224    JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl->ports()));
    212225    return result;
    213226}
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h

    r110972 r114319  
    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&);
  • trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h

    r110972 r114319  
    3030
    3131@class DOMArray;
     32@class DOMMessagePortArray;
    3233@class NSString;
    3334
     
    3839- (NSString *)cachedValue;
    3940- (void)setCachedValue:(NSString *)newCachedValue;
     41- (DOMMessagePortArray *)ports;
    4042- (NSString *)cachedReadonlyValue;
    4143- (void)acceptTransferList:(NSString *)data transferList:(DOMArray *)transferList;
  • trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm

    r110972 r114319  
    3939#import "DOMCSSValueInternal.h"
    4040#import "DOMEventInternal.h"
     41#import "DOMMessagePortArrayInternal.h"
    4142#import "DOMNodeInternal.h"
    4243#import "DOMStyleSheetInternal.h"
     
    4445#import "ExceptionHandlers.h"
    4546#import "JSMainThreadExecState.h"
     47#import "MessagePortArray.h"
    4648#import "SerializedScriptValue.h"
    4749#import "TestSerializedScriptValueInterface.h"
     
    106108}
    107109
     110- (DOMMessagePortArray *)ports
     111{
     112    WebCore::JSMainThreadNullState state;
     113    return kit(WTF::getPtr(IMPL->ports()));
     114}
     115
    108116- (NSString *)cachedReadonlyValue
    109117{
  • trunk/Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl

    r111779 r114319  
    3535        readonly attribute SerializedScriptValue readonlyValue;
    3636        attribute [CachedAttribute] SerializedScriptValue cachedValue;
     37        readonly attribute MessagePortArray ports;
    3738        readonly attribute [CachedAttribute] SerializedScriptValue cachedReadonlyValue;
    3839        void acceptTransferList(in [TransferList=transferList] SerializedScriptValue data, in [Optional] Array transferList);
  • trunk/Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp

    r114200 r114319  
    2828#include "RuntimeEnabledFeatures.h"
    2929#include "SerializedScriptValue.h"
     30#include "V8Array.h"
    3031#include "V8Binding.h"
    3132#include "V8BindingMacros.h"
     
    9091    info.Holder()->DeleteHiddenValue(v8::String::NewSymbol("cachedValue")); // Invalidate the cached value.
    9192    return;
     93}
     94
     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;
    92107}
    93108
     
    183198    // Attribute 'cachedValue' (Type: 'attribute' ExtAttr: 'CachedAttribute')
    184199    {"cachedValue", TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrGetter, TestSerializedScriptValueInterfaceV8Internal::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: '')
     201    {"ports", TestSerializedScriptValueInterfaceV8Internal::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", TestSerializedScriptValueInterfaceV8Internal::cachedReadonlyValueAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
Note: See TracChangeset for help on using the changeset viewer.