<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[190023] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/190023">190023</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2015-09-19 18:59:36 -0700 (Sat, 19 Sep 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Web IDL] Add support for [PutForwards=XXX] IDL extended attribute
https://bugs.webkit.org/show_bug.cgi?id=149376

Reviewed by Darin Adler.

[Web IDL] Add support for [PutForwards=XXX] IDL extended attribute:
https://heycam.github.io/webidl/#PutForwards

As an initial proof of concept, use it for Document.location as per the
HTML specification, instead of using custom bindings:
https://html.spec.whatwg.org/multipage/dom.html#the-document-object

More attributes can be ported later.

No new tests, no web-exposed behavior change intended. Bindings tests
coverage was added.

* bindings/js/JSDocumentCustom.cpp:
Drop custom bindings for the location attribute setter.

* bindings/scripts/CodeGenerator.pm:
(GetAttributeFromInterface):
Add convenience function that returned an attribute from another
interface. This is used by [PutForwards] to retrieve the forwarded
attribute.

* bindings/scripts/CodeGeneratorJS.pm:
(IsReadonly):
(GenerateImplementation):
* bindings/scripts/IDLAttributes.txt:
Add support for [PutForwards=XXX] IDL extended attribute.

* bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
* bindings/scripts/test/GObject/WebKitDOMTestNode.h:
* bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
* bindings/scripts/test/GObject/WebKitDOMTestObj.h:
* bindings/scripts/test/JS/JSTestNode.cpp:
* bindings/scripts/test/JS/JSTestObj.cpp:
* bindings/scripts/test/ObjC/DOMTestNode.h:
* bindings/scripts/test/ObjC/DOMTestNode.mm:
* bindings/scripts/test/ObjC/DOMTestObj.h:
* bindings/scripts/test/ObjC/DOMTestObj.mm:
Add binding tests coverage for [PutForwards=XXX] IDL extended
attribute.

* dom/Document.idl:
Use [PutForwards=href] for Document.location attribute, as per the HTML
specification and stop using custom bindings for the setter. Also mark
the attribute as readonly as all attributes using [PutForwards] must be
marked as readonly as per the Web IDL specification.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDocumentCustomcpp">trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorpm">trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsIDLAttributestxt">trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNodecpp">trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNode.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNodeh">trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNode.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestObjh">trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestNodeh">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNode.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestNodemm">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNode.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestObjh">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestObjmm">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestNodeidl">trunk/Source/WebCore/bindings/scripts/test/TestNode.idl</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestObjidl">trunk/Source/WebCore/bindings/scripts/test/TestObj.idl</a></li>
<li><a href="#trunkSourceWebCoredomDocumentidl">trunk/Source/WebCore/dom/Document.idl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/ChangeLog        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -1,5 +1,58 @@
</span><span class="cx"> 2015-09-19  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        [Web IDL] Add support for [PutForwards=XXX] IDL extended attribute
+        https://bugs.webkit.org/show_bug.cgi?id=149376
+
+        Reviewed by Darin Adler.
+
+        [Web IDL] Add support for [PutForwards=XXX] IDL extended attribute:
+        https://heycam.github.io/webidl/#PutForwards
+
+        As an initial proof of concept, use it for Document.location as per the
+        HTML specification, instead of using custom bindings:
+        https://html.spec.whatwg.org/multipage/dom.html#the-document-object
+
+        More attributes can be ported later.
+
+        No new tests, no web-exposed behavior change intended. Bindings tests
+        coverage was added.
+
+        * bindings/js/JSDocumentCustom.cpp:
+        Drop custom bindings for the location attribute setter.
+
+        * bindings/scripts/CodeGenerator.pm:
+        (GetAttributeFromInterface):
+        Add convenience function that returned an attribute from another
+        interface. This is used by [PutForwards] to retrieve the forwarded
+        attribute.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (IsReadonly):
+        (GenerateImplementation):
+        * bindings/scripts/IDLAttributes.txt:
+        Add support for [PutForwards=XXX] IDL extended attribute.
+
+        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
+        * bindings/scripts/test/GObject/WebKitDOMTestNode.h:
+        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
+        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
+        * bindings/scripts/test/JS/JSTestNode.cpp:
+        * bindings/scripts/test/JS/JSTestObj.cpp:
+        * bindings/scripts/test/ObjC/DOMTestNode.h:
+        * bindings/scripts/test/ObjC/DOMTestNode.mm:
+        * bindings/scripts/test/ObjC/DOMTestObj.h:
+        * bindings/scripts/test/ObjC/DOMTestObj.mm:
+        Add binding tests coverage for [PutForwards=XXX] IDL extended
+        attribute.
+
+        * dom/Document.idl:
+        Use [PutForwards=href] for Document.location attribute, as per the HTML
+        specification and stop using custom bindings for the setter. Also mark
+        the attribute as readonly as all attributes using [PutForwards] must be
+        marked as readonly as per the Web IDL specification.
+
+2015-09-19  Chris Dumez  &lt;cdumez@apple.com&gt;
+
</ins><span class="cx">         [WebIDL] Specify default parameter values where it is useful
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=149331
</span><span class="cx">         &lt;rdar://problem/22545600&gt;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDocumentCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/js/JSDocumentCustom.cpp        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -50,21 +50,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-// FIXME: Require support for [PutForward=XXX] Web IDL extended attribute.
-void JSDocument::setLocation(ExecState* exec, JSValue value)
-{
-    String locationString = value.toString(exec)-&gt;value(exec);
-    if (exec-&gt;hadException())
-        return;
-
-    RefPtr&lt;Frame&gt; frame = impl().frame();
-    if (!frame)
-        return;
-
-    if (RefPtr&lt;Location&gt; location = frame-&gt;document()-&gt;domWindow()-&gt;location())
-        location-&gt;setHref(activeDOMWindow(exec), firstDOMWindow(exec), locationString);
-}
-
</del><span class="cx"> static inline JSValue createNewDocumentWrapper(ExecState&amp; state, JSDOMGlobalObject&amp; globalObject, Document&amp; document)
</span><span class="cx"> {
</span><span class="cx">     JSObject* wrapper;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -234,6 +234,20 @@
</span><span class="cx">     return $idlFiles-&gt;{$interfaceName};
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub GetAttributeFromInterface()
+{
+    my $object = shift;
+    my $outerInterface = shift;
+    my $interfaceName = shift;
+    my $attributeName = shift;
+
+    my $interface = $object-&gt;ParseInterface($outerInterface, $interfaceName);
+    for my $attribute (@{$interface-&gt;attributes}) {
+        return $attribute if $attribute-&gt;signature-&gt;name eq $attributeName;
+    }
+    die(&quot;Could not find attribute '$attributeName' on interface '$interfaceName'.&quot;);
+}
+
</ins><span class="cx"> sub ParseInterface
</span><span class="cx"> {
</span><span class="cx">     my $object = shift;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -336,7 +336,7 @@
</span><span class="cx"> sub IsReadonly
</span><span class="cx"> {
</span><span class="cx">     my $attribute = shift;
</span><del>-    return $attribute-&gt;isReadOnly &amp;&amp; !$attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;Replaceable&quot;};
</del><ins>+    return $attribute-&gt;isReadOnly &amp;&amp; !$attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;Replaceable&quot;} &amp;&amp; !$attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;PutForwards&quot;};
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub AddTypedefForScriptProfileType
</span><span class="lines">@@ -2648,7 +2648,17 @@
</span><span class="cx">                 push(@implContent, &quot;    castedThis-&gt;putDirect(exec-&gt;vm(), Identifier::fromString(exec, \&quot;$name\&quot;), value);\n&quot;);
</span><span class="cx">             } else {
</span><span class="cx">                 if (!$attribute-&gt;isStatic) {
</span><del>-                    push(@implContent, &quot;    auto&amp; impl = castedThis-&gt;impl();\n&quot;);
</del><ins>+                    my $putForwards = $attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;PutForwards&quot;};
+                    if ($putForwards) {
+                        my $implGetterFunctionName = $codeGenerator-&gt;WK_lcfirst($attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;ImplementedAs&quot;} || $name);
+                        push(@implContent, &quot;    auto* forwardedImpl = castedThis-&gt;impl().${implGetterFunctionName}();\n&quot;);
+                        push(@implContent, &quot;    if (!forwardedImpl)\n&quot;);
+                        push(@implContent, &quot;        return;\n&quot;);
+                        push(@implContent, &quot;    auto&amp; impl = *forwardedImpl;\n&quot;);
+                        $attribute = $codeGenerator-&gt;GetAttributeFromInterface($interface, $attribute-&gt;signature-&gt;type, $putForwards);
+                    } else {
+                        push(@implContent, &quot;    auto&amp; impl = castedThis-&gt;impl();\n&quot;);
+                    }
</ins><span class="cx">                 }
</span><span class="cx">                 push(@implContent, &quot;    ExceptionCode ec = 0;\n&quot;) if $setterRaisesException;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsIDLAttributestxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -102,6 +102,7 @@
</span><span class="cx"> ObjCUseDefaultView
</span><span class="cx"> OverrideBuiltins
</span><span class="cx"> PassContext
</span><ins>+PutForwards=*
</ins><span class="cx"> RaisesException
</span><span class="cx"> Reflect=*
</span><span class="cx"> Replaceable
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNode.cpp (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNode.cpp        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNode.cpp        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -92,9 +92,55 @@
</span><span class="cx"> 
</span><span class="cx"> G_DEFINE_TYPE_WITH_CODE(WebKitDOMTestNode, webkit_dom_test_node, WEBKIT_DOM_TYPE_NODE, G_IMPLEMENT_INTERFACE(WEBKIT_DOM_TYPE_EVENT_TARGET, webkit_dom_event_target_init))
</span><span class="cx"> 
</span><ins>+enum {
+    PROP_0,
+    PROP_NAME,
+};
+
+static void webkit_dom_test_node_set_property(GObject* object, guint propertyId, const GValue* value, GParamSpec* pspec)
+{
+    WebKitDOMTestNode* self = WEBKIT_DOM_TEST_NODE(object);
+
+    switch (propertyId) {
+    case PROP_NAME:
+        webkit_dom_test_node_set_name(self, g_value_get_string(value));
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyId, pspec);
+        break;
+    }
+}
+
+static void webkit_dom_test_node_get_property(GObject* object, guint propertyId, GValue* value, GParamSpec* pspec)
+{
+    WebKitDOMTestNode* self = WEBKIT_DOM_TEST_NODE(object);
+
+    switch (propertyId) {
+    case PROP_NAME:
+        g_value_take_string(value, webkit_dom_test_node_get_name(self));
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyId, pspec);
+        break;
+    }
+}
+
</ins><span class="cx"> static void webkit_dom_test_node_class_init(WebKitDOMTestNodeClass* requestClass)
</span><span class="cx"> {
</span><del>-    UNUSED_PARAM(requestClass);
</del><ins>+    GObjectClass* gobjectClass = G_OBJECT_CLASS(requestClass);
+    gobjectClass-&gt;set_property = webkit_dom_test_node_set_property;
+    gobjectClass-&gt;get_property = webkit_dom_test_node_get_property;
+
+    g_object_class_install_property(
+        gobjectClass,
+        PROP_NAME,
+        g_param_spec_string(
+            &quot;name&quot;,
+            &quot;TestNode:name&quot;,
+            &quot;read-write gchar* TestNode:name&quot;,
+            &quot;&quot;,
+            WEBKIT_PARAM_READWRITE));
+
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void webkit_dom_test_node_init(WebKitDOMTestNode* request)
</span><span class="lines">@@ -102,3 +148,22 @@
</span><span class="cx">     UNUSED_PARAM(request);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+gchar* webkit_dom_test_node_get_name(WebKitDOMTestNode* self)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_val_if_fail(WEBKIT_DOM_IS_TEST_NODE(self), 0);
+    WebCore::TestNode* item = WebKit::core(self);
+    gchar* result = convertToUTF8String(item-&gt;name());
+    return result;
+}
+
+void webkit_dom_test_node_set_name(WebKitDOMTestNode* self, const gchar* value)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_if_fail(WEBKIT_DOM_IS_TEST_NODE(self));
+    g_return_if_fail(value);
+    WebCore::TestNode* item = WebKit::core(self);
+    WTF::String convertedValue = WTF::String::fromUTF8(value);
+    item-&gt;setName(convertedValue);
+}
+
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNode.h (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNode.h        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNode.h        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -47,6 +47,27 @@
</span><span class="cx"> WEBKIT_API GType
</span><span class="cx"> webkit_dom_test_node_get_type(void);
</span><span class="cx"> 
</span><ins>+/**
+ * webkit_dom_test_node_get_name:
+ * @self: A #WebKitDOMTestNode
+ *
+ * Returns: A #gchar
+ *
+ * Stability: Unstable
+**/
+WEBKIT_API gchar*
+webkit_dom_test_node_get_name(WebKitDOMTestNode* self);
+
+/**
+ * webkit_dom_test_node_set_name:
+ * @self: A #WebKitDOMTestNode
+ * @value: A #gchar
+ *
+ * Stability: Unstable
+**/
+WEBKIT_API void
+webkit_dom_test_node_set_name(WebKitDOMTestNode* self, const gchar* value);
+
</ins><span class="cx"> G_END_DECLS
</span><span class="cx"> 
</span><span class="cx"> #endif /* WEBKIT_DOM_USE_UNSTABLE_API */
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -135,6 +135,7 @@
</span><span class="cx">     PROP_NULLABLE_LONG_SETTABLE_ATTRIBUTE,
</span><span class="cx">     PROP_NULLABLE_STRING_VALUE,
</span><span class="cx">     PROP_ATTRIBUTE,
</span><ins>+    PROP_PUT_FORWARDS_ATTRIBUTE,
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> static void webkit_dom_test_obj_finalize(GObject* object)
</span><span class="lines">@@ -430,6 +431,9 @@
</span><span class="cx">     case PROP_ATTRIBUTE:
</span><span class="cx">         g_value_take_string(value, webkit_dom_test_obj_get_attribute(self));
</span><span class="cx">         break;
</span><ins>+    case PROP_PUT_FORWARDS_ATTRIBUTE:
+        g_value_set_object(value, webkit_dom_test_obj_get_put_forwards_attribute(self));
+        break;
</ins><span class="cx">     default:
</span><span class="cx">         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyId, pspec);
</span><span class="cx">         break;
</span><span class="lines">@@ -1026,6 +1030,16 @@
</span><span class="cx">             &quot;&quot;,
</span><span class="cx">             WEBKIT_PARAM_READABLE));
</span><span class="cx"> 
</span><ins>+    g_object_class_install_property(
+        gobjectClass,
+        PROP_PUT_FORWARDS_ATTRIBUTE,
+        g_param_spec_object(
+            &quot;put-forwards-attribute&quot;,
+            &quot;TestObj:put-forwards-attribute&quot;,
+            &quot;read-only WebKitDOMTestNode* TestObj:put-forwards-attribute&quot;,
+            WEBKIT_DOM_TYPE_TEST_NODE,
+            WEBKIT_PARAM_READABLE));
+
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void webkit_dom_test_obj_init(WebKitDOMTestObj* request)
</span><span class="lines">@@ -2555,3 +2569,12 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WebKitDOMTestNode* webkit_dom_test_obj_get_put_forwards_attribute(WebKitDOMTestObj* self)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_val_if_fail(WEBKIT_DOM_IS_TEST_OBJ(self), 0);
+    WebCore::TestObj* item = WebKit::core(self);
+    RefPtr&lt;WebCore::TestNode&gt; gobjectResult = WTF::getPtr(item-&gt;putForwardsAttribute());
+    return WebKit::kit(gobjectResult.get());
+}
+
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestObjh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -1703,6 +1703,17 @@
</span><span class="cx"> WEBKIT_API gchar*
</span><span class="cx"> webkit_dom_test_obj_get_attribute(WebKitDOMTestObj* self);
</span><span class="cx"> 
</span><ins>+/**
+ * webkit_dom_test_obj_get_put_forwards_attribute:
+ * @self: A #WebKitDOMTestObj
+ *
+ * Returns: (transfer none): A #WebKitDOMTestNode
+ *
+ * Stability: Unstable
+**/
+WEBKIT_API WebKitDOMTestNode*
+webkit_dom_test_obj_get_put_forwards_attribute(WebKitDOMTestObj* self);
+
</ins><span class="cx"> G_END_DECLS
</span><span class="cx"> 
</span><span class="cx"> #endif /* WEBKIT_DOM_USE_UNSTABLE_API */
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -24,7 +24,9 @@
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><span class="cx"> #include &quot;TestNode.h&quot;
</span><ins>+#include &quot;URL.h&quot;
</ins><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><ins>+#include &lt;runtime/JSString.h&gt;
</ins><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> using namespace JSC;
</span><span class="lines">@@ -33,6 +35,8 @@
</span><span class="cx"> 
</span><span class="cx"> // Attributes
</span><span class="cx"> 
</span><ins>+JSC::EncodedJSValue jsTestNodeName(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
+void setJSTestNodeName(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
</ins><span class="cx"> JSC::EncodedJSValue jsTestNodeConstructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
</span><span class="cx"> 
</span><span class="cx"> class JSTestNodePrototype : public JSC::JSNonFinalObject {
</span><span class="lines">@@ -118,6 +122,7 @@
</span><span class="cx"> static const HashTableValue JSTestNodePrototypeTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestNodeConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) } },
</span><ins>+    { &quot;name&quot;, DontDelete | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestNodeName), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestNodeName) } },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> const ClassInfo JSTestNodePrototype::s_info = { &quot;TestNodePrototype&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestNodePrototype) };
</span><span class="lines">@@ -145,6 +150,23 @@
</span><span class="cx">     return getDOMPrototype&lt;JSTestNode&gt;(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+EncodedJSValue jsTestNodeName(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
+{
+    UNUSED_PARAM(exec);
+    UNUSED_PARAM(slotBase);
+    UNUSED_PARAM(thisValue);
+    JSTestNode* castedThis = jsDynamicCast&lt;JSTestNode*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        if (jsDynamicCast&lt;JSTestNodePrototype*&gt;(slotBase))
+            return reportDeprecatedGetterError(*exec, &quot;TestNode&quot;, &quot;name&quot;);
+        return throwGetterTypeError(*exec, &quot;TestNode&quot;, &quot;name&quot;);
+    }
+    auto&amp; impl = castedThis-&gt;impl();
+    JSValue result = jsStringWithCache(exec, impl.name());
+    return JSValue::encode(result);
+}
+
+
</ins><span class="cx"> EncodedJSValue jsTestNodeConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     JSTestNodePrototype* domObject = jsDynamicCast&lt;JSTestNodePrototype*&gt;(baseValue);
</span><span class="lines">@@ -153,6 +175,26 @@
</span><span class="cx">     return JSValue::encode(JSTestNode::getConstructor(exec-&gt;vm(), domObject-&gt;globalObject()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void setJSTestNodeName(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    JSValue value = JSValue::decode(encodedValue);
+    UNUSED_PARAM(baseObject);
+    JSTestNode* castedThis = jsDynamicCast&lt;JSTestNode*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        if (jsDynamicCast&lt;JSTestNodePrototype*&gt;(JSValue::decode(thisValue)))
+            reportDeprecatedSetterError(*exec, &quot;TestNode&quot;, &quot;name&quot;);
+        else
+            throwSetterTypeError(*exec, &quot;TestNode&quot;, &quot;name&quot;);
+        return;
+    }
+    auto&amp; impl = castedThis-&gt;impl();
+    String nativeValue = value.toString(exec)-&gt;value(exec);
+    if (UNLIKELY(exec-&gt;hadException()))
+        return;
+    impl.setName(nativeValue);
+}
+
+
</ins><span class="cx"> JSValue JSTestNode::getConstructor(VM&amp; vm, JSGlobalObject* globalObject)
</span><span class="cx"> {
</span><span class="cx">     return getDOMConstructor&lt;JSTestNodeConstructor&gt;(vm, jsCast&lt;JSDOMGlobalObject*&gt;(globalObject));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -49,6 +49,7 @@
</span><span class="cx"> #include &quot;ScriptProfile.h&quot;
</span><span class="cx"> #include &quot;SerializedScriptValue.h&quot;
</span><span class="cx"> #include &quot;Settings.h&quot;
</span><ins>+#include &quot;TestNode.h&quot;
</ins><span class="cx"> #include &quot;TestObj.h&quot;
</span><span class="cx"> #include &quot;URL.h&quot;
</span><span class="cx"> #include &quot;bool.h&quot;
</span><span class="lines">@@ -309,6 +310,8 @@
</span><span class="cx"> JSC::EncodedJSValue jsTestObjAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
</span><span class="cx"> JSC::EncodedJSValue jsTestObjAttributeWithReservedEnumType(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
</span><span class="cx"> void setJSTestObjAttributeWithReservedEnumType(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
</span><ins>+JSC::EncodedJSValue jsTestObjPutForwardsAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
+void setJSTestObjPutForwardsAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
</ins><span class="cx"> JSC::EncodedJSValue jsTestObjConstructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
</span><span class="cx"> 
</span><span class="cx"> class JSTestObjPrototype : public JSC::JSNonFinalObject {
</span><span class="lines">@@ -576,6 +579,7 @@
</span><span class="cx">     { &quot;nullableStringValue&quot;, DontDelete | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjNullableStringValue), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjNullableStringValue) } },
</span><span class="cx">     { &quot;attribute&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjAttribute), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) } },
</span><span class="cx">     { &quot;attributeWithReservedEnumType&quot;, DontDelete | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjAttributeWithReservedEnumType), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjAttributeWithReservedEnumType) } },
</span><ins>+    { &quot;putForwardsAttribute&quot;, DontDelete | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjPutForwardsAttribute), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjPutForwardsAttribute) } },
</ins><span class="cx"> #if ENABLE(Condition1)
</span><span class="cx">     { &quot;CONDITIONAL_CONST&quot;, DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, { (long long)(0) } },
</span><span class="cx"> #else
</span><span class="lines">@@ -1942,6 +1946,23 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+EncodedJSValue jsTestObjPutForwardsAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
+{
+    UNUSED_PARAM(exec);
+    UNUSED_PARAM(slotBase);
+    UNUSED_PARAM(thisValue);
+    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        if (jsDynamicCast&lt;JSTestObjPrototype*&gt;(slotBase))
+            return reportDeprecatedGetterError(*exec, &quot;TestObj&quot;, &quot;putForwardsAttribute&quot;);
+        return throwGetterTypeError(*exec, &quot;TestObj&quot;, &quot;putForwardsAttribute&quot;);
+    }
+    auto&amp; impl = castedThis-&gt;impl();
+    JSValue result = toJS(exec, castedThis-&gt;globalObject(), WTF::getPtr(impl.putForwardsAttribute()));
+    return JSValue::encode(result);
+}
+
+
</ins><span class="cx"> EncodedJSValue jsTestObjConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     JSTestObjPrototype* domObject = jsDynamicCast&lt;JSTestObjPrototype*&gt;(baseValue);
</span><span class="lines">@@ -3057,6 +3078,29 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+void setJSTestObjPutForwardsAttribute(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    JSValue value = JSValue::decode(encodedValue);
+    UNUSED_PARAM(baseObject);
+    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        if (jsDynamicCast&lt;JSTestObjPrototype*&gt;(JSValue::decode(thisValue)))
+            reportDeprecatedSetterError(*exec, &quot;TestObj&quot;, &quot;putForwardsAttribute&quot;);
+        else
+            throwSetterTypeError(*exec, &quot;TestObj&quot;, &quot;putForwardsAttribute&quot;);
+        return;
+    }
+    auto* forwardedImpl = castedThis-&gt;impl().putForwardsAttribute();
+    if (!forwardedImpl)
+        return;
+    auto&amp; impl = *forwardedImpl;
+    String nativeValue = value.toString(exec)-&gt;value(exec);
+    if (UNLIKELY(exec-&gt;hadException()))
+        return;
+    impl.setName(nativeValue);
+}
+
+
</ins><span class="cx"> JSValue JSTestObj::getConstructor(VM&amp; vm, JSGlobalObject* globalObject)
</span><span class="cx"> {
</span><span class="cx">     return getDOMConstructor&lt;JSTestObjConstructor&gt;(vm, jsCast&lt;JSDOMGlobalObject*&gt;(globalObject));
</span><span class="lines">@@ -3309,7 +3353,7 @@
</span><span class="cx"> 
</span><span class="cx">     String enumArg;
</span><span class="cx">     if (exec-&gt;argument(0).isUndefined())
</span><del>-        enumArg = String(ASCIILiteral(&quot;EnumValue1&quot;));
</del><ins>+        enumArg = ASCIILiteral(&quot;EnumValue1&quot;);
</ins><span class="cx">     else {
</span><span class="cx">         enumArg = exec-&gt;uncheckedArgument(0).toString(exec)-&gt;value(exec);
</span><span class="cx">         if (UNLIKELY(exec-&gt;hadException()))
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNode.h (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNode.h        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNode.h        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -26,6 +26,9 @@
</span><span class="cx"> 
</span><span class="cx"> #import &lt;WebCore/DOMNode.h&gt;
</span><span class="cx"> 
</span><ins>+@class NSString;
+
</ins><span class="cx"> WEBKIT_CLASS_AVAILABLE_MAC(9876_5)
</span><span class="cx"> WEBCORE_EXPORT @interface DOMTestNode : DOMNode
</span><ins>+@property (copy) NSString *name;
</ins><span class="cx"> @end
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestNodemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNode.mm (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNode.mm        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNode.mm        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -35,6 +35,7 @@
</span><span class="cx"> #import &quot;JSMainThreadExecState.h&quot;
</span><span class="cx"> #import &quot;TestNode.h&quot;
</span><span class="cx"> #import &quot;ThreadCheck.h&quot;
</span><ins>+#import &quot;URL.h&quot;
</ins><span class="cx"> #import &quot;WebScriptObjectPrivate.h&quot;
</span><span class="cx"> #import &lt;wtf/GetPtr.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -42,6 +43,18 @@
</span><span class="cx"> 
</span><span class="cx"> @implementation DOMTestNode
</span><span class="cx"> 
</span><ins>+- (NSString *)name
+{
+    WebCore::JSMainThreadNullState state;
+    return IMPL-&gt;name();
+}
+
+- (void)setName:(NSString *)newName
+{
+    WebCore::JSMainThreadNullState state;
+    IMPL-&gt;setName(newName);
+}
+
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> WebCore::TestNode* core(DOMTestNode *wrapper)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestObjh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -122,6 +122,7 @@
</span><span class="cx"> @property int nullableLongSettableAttribute;
</span><span class="cx"> @property int nullableStringValue;
</span><span class="cx"> @property (readonly, copy) NSString *attribute;
</span><ins>+@property (readonly, strong) DOMTestNode *putForwardsAttribute;
</ins><span class="cx"> 
</span><span class="cx"> - (void)voidMethod;
</span><span class="cx"> - (void)voidMethodWithArgs:(int)longArg strArg:(NSString *)strArg objArg:(DOMTestObj *)objArg;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestObjmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -830,6 +830,12 @@
</span><span class="cx">     return IMPL-&gt;attribute();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (DOMTestNode *)putForwardsAttribute
+{
+    WebCore::JSMainThreadNullState state;
+    return kit(WTF::getPtr(IMPL-&gt;putForwardsAttribute()));
+}
+
</ins><span class="cx"> - (void)voidMethod
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestNodeidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/TestNode.idl (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestNode.idl        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/TestNode.idl        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -22,5 +22,6 @@
</span><span class="cx">     EventTarget,
</span><span class="cx">     Constructor,
</span><span class="cx"> ] interface TestNode : Node {
</span><ins>+    attribute DOMString name;
</ins><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestObjidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/TestObj.idl (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestObj.idl        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/bindings/scripts/test/TestObj.idl        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -299,6 +299,9 @@
</span><span class="cx">     Promise testPromiseFunctionWithFloatArgument(float a);
</span><span class="cx">     [RaisesException] Promise testPromiseFunctionWithException();
</span><span class="cx">     Promise testPromiseFunctionWithOptionalIntArgument(optional long a);
</span><ins>+
+    // PutForwards
+    [PutForwards=name] readonly attribute TestNode putForwardsAttribute;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> // The following comment should not generate any code.
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.idl (190022 => 190023)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.idl        2015-09-20 01:09:05 UTC (rev 190022)
+++ trunk/Source/WebCore/dom/Document.idl        2015-09-20 01:59:36 UTC (rev 190023)
</span><span class="lines">@@ -170,7 +170,7 @@
</span><span class="cx">     NodeList getElementsByName([Default=Undefined,AtomicString] optional DOMString elementName);
</span><span class="cx"> 
</span><span class="cx"> #if defined(LANGUAGE_JAVASCRIPT) &amp;&amp; LANGUAGE_JAVASCRIPT
</span><del>-    [CustomSetter, Unforgeable] attribute Location location;
</del><ins>+    [PutForwards=href, Unforgeable] readonly attribute Location location;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     // IE extensions
</span></span></pre>
</div>
</div>

</body>
</html>