<!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>[202551] 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/202551">202551</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-06-28 00:04:55 -0700 (Tue, 28 Jun 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Binding generator should generate accessors for constructors safely accessed from JS builtin
https://bugs.webkit.org/show_bug.cgi?id=159087

Patch by Youenn Fablet &lt;youenn@apple.com&gt; on 2016-06-28
Reviewed by Alex Christensen.

Removed constructor private slots direct additions in JSDOMGlobalObject.
Added support for generating the code that will do that.
Advantage of the implementation:
- Private slots will expose constructors that are also publically visible (previously workers had some private slots filled with WebRTC constructors).
- Private slots no longer require the creation of the constructors at window creation time.

Although PublicIdentifier and PrivateIdentifier are both added where needed, the binding generator does not
support the case of a constructor accessible only privately.

Covered by existing test set and adding binding test.

* Modules/mediastream/MediaStream.idl: Marked as PublicIdentifier/PrivateIdentifier.
* Modules/mediastream/MediaStreamTrack.idl: Ditto.
* Modules/mediastream/RTCIceCandidate.idl: Ditto.
* Modules/mediastream/RTCSessionDescription.idl: Ditto.
* Modules/streams/ReadableStream.idl: Ditto.
* bindings/js/JSDOMGlobalObject.cpp:
(WebCore::JSDOMGlobalObject::addBuiltinGlobals): Removed unneeded additions.
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateImplementation): Added support for private slots for interface constructors marked as
PrivateIdentifier.
* bindings/scripts/preprocess-idls.pl:
(GenerateConstructorAttribute): Make PublicIdentifier/PrivateIdentifier copied interface attributes.
* bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.cpp:
(webkit_dom_test_global_object_set_property):
(webkit_dom_test_global_object_get_property):
(webkit_dom_test_global_object_class_init):
(webkit_dom_test_global_object_get_public_and_private_attribute):
(webkit_dom_test_global_object_set_public_and_private_attribute):
* bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.h:
* bindings/scripts/test/JS/JSTestGlobalObject.cpp:
(WebCore::JSTestGlobalObject::finishCreation):
(WebCore::jsTestGlobalObjectPublicAndPrivateAttribute):
(WebCore::setJSTestGlobalObjectPublicAndPrivateAttribute):
* bindings/scripts/test/ObjC/DOMTestGlobalObject.h:
* bindings/scripts/test/ObjC/DOMTestGlobalObject.mm:
(-[DOMTestGlobalObject publicAndPrivateAttribute]):
(-[DOMTestGlobalObject setPublicAndPrivateAttribute:]):
* bindings/scripts/test/TestGlobalObject.idl:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamMediaStreamidl">trunk/Source/WebCore/Modules/mediastream/MediaStream.idl</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamMediaStreamTrackidl">trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCIceCandidateidl">trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.idl</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCSessionDescriptionidl">trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.idl</a></li>
<li><a href="#trunkSourceWebCoreModulesstreamsReadableStreamidl">trunk/Source/WebCore/Modules/streams/ReadableStream.idl</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMGlobalObjectcpp">trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptspreprocessidlspl">trunk/Source/WebCore/bindings/scripts/preprocess-idls.pl</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestGlobalObjectcpp">trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestGlobalObjecth">trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGlobalObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestGlobalObjecth">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestGlobalObject.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestGlobalObjectmm">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestGlobalObject.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestGlobalObjectidl">trunk/Source/WebCore/bindings/scripts/test/TestGlobalObject.idl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/ChangeLog        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -1,3 +1,51 @@
</span><ins>+2016-06-28  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        Binding generator should generate accessors for constructors safely accessed from JS builtin
+        https://bugs.webkit.org/show_bug.cgi?id=159087
+
+        Reviewed by Alex Christensen.
+
+        Removed constructor private slots direct additions in JSDOMGlobalObject.
+        Added support for generating the code that will do that.
+        Advantage of the implementation:
+        - Private slots will expose constructors that are also publically visible (previously workers had some private slots filled with WebRTC constructors).
+        - Private slots no longer require the creation of the constructors at window creation time.
+
+        Although PublicIdentifier and PrivateIdentifier are both added where needed, the binding generator does not
+        support the case of a constructor accessible only privately.
+
+        Covered by existing test set and adding binding test.
+
+        * Modules/mediastream/MediaStream.idl: Marked as PublicIdentifier/PrivateIdentifier.
+        * Modules/mediastream/MediaStreamTrack.idl: Ditto.
+        * Modules/mediastream/RTCIceCandidate.idl: Ditto.
+        * Modules/mediastream/RTCSessionDescription.idl: Ditto.
+        * Modules/streams/ReadableStream.idl: Ditto.
+        * bindings/js/JSDOMGlobalObject.cpp:
+        (WebCore::JSDOMGlobalObject::addBuiltinGlobals): Removed unneeded additions.
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateImplementation): Added support for private slots for interface constructors marked as
+        PrivateIdentifier.
+        * bindings/scripts/preprocess-idls.pl:
+        (GenerateConstructorAttribute): Make PublicIdentifier/PrivateIdentifier copied interface attributes.
+        * bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.cpp:
+        (webkit_dom_test_global_object_set_property):
+        (webkit_dom_test_global_object_get_property):
+        (webkit_dom_test_global_object_class_init):
+        (webkit_dom_test_global_object_get_public_and_private_attribute):
+        (webkit_dom_test_global_object_set_public_and_private_attribute):
+        * bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.h:
+        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
+        (WebCore::JSTestGlobalObject::finishCreation):
+        (WebCore::jsTestGlobalObjectPublicAndPrivateAttribute):
+        (WebCore::setJSTestGlobalObjectPublicAndPrivateAttribute):
+        * bindings/scripts/test/ObjC/DOMTestGlobalObject.h:
+        * bindings/scripts/test/ObjC/DOMTestGlobalObject.mm:
+        (-[DOMTestGlobalObject publicAndPrivateAttribute]):
+        (-[DOMTestGlobalObject setPublicAndPrivateAttribute:]):
+        * bindings/scripts/test/TestGlobalObject.idl:
+
+
</ins><span class="cx"> 2016-06-27  Jer Noble  &lt;jer.noble@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION?(r202466): http/tests/security/canvas-remote-read-remote-video-redirect.html failing on Sierra
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamMediaStreamidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.idl (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/MediaStream.idl        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.idl        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -28,6 +28,8 @@
</span><span class="cx">     Constructor(MediaStream stream),
</span><span class="cx">     Constructor(MediaStreamTrack[] tracks),
</span><span class="cx">     ConstructorCallWith=ScriptExecutionContext,
</span><ins>+    PrivateIdentifier,
+    PublicIdentifier
</ins><span class="cx"> ] interface MediaStream : EventTarget {
</span><span class="cx"> 
</span><span class="cx">     readonly attribute DOMString id;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamMediaStreamTrackidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -29,6 +29,8 @@
</span><span class="cx">     Conditional=MEDIA_STREAM,
</span><span class="cx">     ActiveDOMObject,
</span><span class="cx">     SkipVTableValidation,
</span><ins>+    PrivateIdentifier,
+    PublicIdentifier
</ins><span class="cx"> ] interface MediaStreamTrack : EventTarget {
</span><span class="cx">     readonly attribute DOMString kind;
</span><span class="cx">     readonly attribute DOMString id;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCIceCandidateidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.idl (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.idl        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.idl        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -32,7 +32,9 @@
</span><span class="cx"> [
</span><span class="cx">     Conditional=WEB_RTC,
</span><span class="cx">     Constructor(Dictionary dictionary),
</span><del>-    ConstructorRaisesException
</del><ins>+    ConstructorRaisesException,
+    PrivateIdentifier,
+    PublicIdentifier
</ins><span class="cx"> ] interface RTCIceCandidate {
</span><span class="cx">     readonly attribute DOMString candidate;
</span><span class="cx">     readonly attribute DOMString? sdpMid;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCSessionDescriptionidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.idl (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.idl        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.idl        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -32,7 +32,9 @@
</span><span class="cx"> [
</span><span class="cx">     Conditional=WEB_RTC,
</span><span class="cx">     Constructor(Dictionary dictionary),
</span><del>-    ConstructorRaisesException
</del><ins>+    ConstructorRaisesException,
+    PrivateIdentifier,
+    PublicIdentifier
</ins><span class="cx"> ] interface RTCSessionDescription {
</span><span class="cx">     [SetterRaisesException] readonly attribute RTCSdpType type;
</span><span class="cx">     readonly attribute DOMString sdp;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesstreamsReadableStreamidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/streams/ReadableStream.idl (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/streams/ReadableStream.idl        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/Modules/streams/ReadableStream.idl        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -31,7 +31,9 @@
</span><span class="cx">     Conditional=STREAMS_API,
</span><span class="cx">     Constructor,
</span><span class="cx">     Exposed=(Window,Worker),
</span><del>-    JSBuiltin
</del><ins>+    JSBuiltin,
+    PrivateIdentifier,
+    PublicIdentifier
</ins><span class="cx"> ] interface ReadableStream {
</span><span class="cx">     Promise cancel(optional any reason);
</span><span class="cx">     Object getReader();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -83,19 +83,8 @@
</span><span class="cx">         JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamReadablePrivateName(), jsNumber(4), DontDelete | ReadOnly),
</span><span class="cx">         JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamWaitingPrivateName(), jsNumber(5), DontDelete | ReadOnly),
</span><span class="cx">         JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().streamWritablePrivateName(), jsNumber(6), DontDelete | ReadOnly),
</span><del>-#if ENABLE(MEDIA_STREAM)
-        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().MediaStreamPrivateName(), JSMediaStream::getConstructor(vm, this), DontDelete | ReadOnly),
-        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().MediaStreamTrackPrivateName(), JSMediaStreamTrack::getConstructor(vm, this), DontDelete | ReadOnly),
-#endif
-#if ENABLE(STREAMS_API)
-        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().ReadableStreamPrivateName(), JSReadableStream::getConstructor(vm, this), DontDelete | ReadOnly),
-#endif
</del><span class="cx">         JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().ReadableStreamControllerPrivateName(), privateReadableStreamControllerConstructor, DontDelete | ReadOnly),
</span><span class="cx">         JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().ReadableStreamReaderPrivateName(), privateReadableStreamReaderConstructor, DontDelete | ReadOnly),
</span><del>-#if ENABLE(WEB_RTC)
-        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().RTCIceCandidatePrivateName(), JSRTCIceCandidate::getConstructor(vm, this), DontDelete | ReadOnly),
-        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().RTCSessionDescriptionPrivateName(), JSRTCSessionDescription::getConstructor(vm, this), DontDelete | ReadOnly),
-#endif
</del><span class="cx">     };
</span><span class="cx">     addStaticGlobals(staticGlobals, WTF_ARRAY_LENGTH(staticGlobals));
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -2393,6 +2393,21 @@
</span><span class="cx">             push(@implContent, &quot;    }\n&quot;);
</span><span class="cx">             push(@implContent, &quot;#endif\n&quot;) if $conditionalString;
</span><span class="cx">         }
</span><ins>+
+        # Support PrivateIdentifier attributes on global objects
+        foreach my $attribute (@{$interface-&gt;attributes}) {
+            next unless $attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;PrivateIdentifier&quot;};
+
+            AddToImplIncludes(&quot;WebCoreJSClientData.h&quot;);
+            my $conditionalString = $codeGenerator-&gt;GenerateConditionalString($attribute-&gt;signature);
+            my $attributeName = $attribute-&gt;signature-&gt;name;
+            my $getter = GetAttributeGetterName($interface, $className, $attribute);
+
+            push(@implContent, &quot;#if ${conditionalString}\n&quot;) if $conditionalString;
+            push(@implContent, &quot;    putDirectCustomAccessor(vm, static_cast&lt;JSVMClientData*&gt;(vm.clientData)-&gt;builtinNames().&quot; . $attributeName . &quot;PrivateName(), CustomGetterSetter::create(vm, $getter, nullptr), attributesForStructure(DontDelete | ReadOnly));\n&quot;);
+            push(@implContent, &quot;#endif\n&quot;) if $conditionalString;
+        }
+
</ins><span class="cx">         # Support for RuntimeEnabled operations on global objects.
</span><span class="cx">         foreach my $function (@{$interface-&gt;functions}) {
</span><span class="cx">             next unless $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;EnabledAtRuntime&quot;};
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptspreprocessidlspl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/preprocess-idls.pl (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/preprocess-idls.pl        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/bindings/scripts/preprocess-idls.pl        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -238,7 +238,7 @@
</span><span class="cx">     my $code = &quot;    &quot;;
</span><span class="cx">     my @extendedAttributesList;
</span><span class="cx">     foreach my $attributeName (sort keys %{$extendedAttributes}) {
</span><del>-      next unless ($attributeName eq &quot;Conditional&quot; || $attributeName eq &quot;EnabledAtRuntime&quot; || $attributeName eq &quot;EnabledBySetting&quot;);
</del><ins>+      next unless ($attributeName eq &quot;Conditional&quot; || $attributeName eq &quot;EnabledAtRuntime&quot; || $attributeName eq &quot;EnabledBySetting&quot; || $attributeName eq &quot;PrivateIdentifier&quot; || $attributeName eq &quot;PublicIdentifier&quot;);
</ins><span class="cx">       my $extendedAttribute = $attributeName;
</span><span class="cx">       $extendedAttribute .= &quot;=&quot; . $extendedAttributes-&gt;{$attributeName} unless $extendedAttributes-&gt;{$attributeName} eq &quot;VALUE_IS_MISSING&quot;;
</span><span class="cx">       push(@extendedAttributesList, $extendedAttribute);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.cpp (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.cpp        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.cpp        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -70,6 +70,8 @@
</span><span class="cx"> enum {
</span><span class="cx">     PROP_0,
</span><span class="cx">     PROP_REGULAR_ATTRIBUTE,
</span><ins>+    PROP_PUBLIC_AND_PRIVATE_ATTRIBUTE,
+    PROP_PUBLIC_AND_PRIVATE_CONDITIONAL_ATTRIBUTE,
</ins><span class="cx">     PROP_ENABLED_AT_RUNTIME_ATTRIBUTE,
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -91,6 +93,12 @@
</span><span class="cx">     case PROP_REGULAR_ATTRIBUTE:
</span><span class="cx">         webkit_dom_test_global_object_set_regular_attribute(self, g_value_get_string(value));
</span><span class="cx">         break;
</span><ins>+    case PROP_PUBLIC_AND_PRIVATE_ATTRIBUTE:
+        webkit_dom_test_global_object_set_public_and_private_attribute(self, g_value_get_string(value));
+        break;
+    case PROP_PUBLIC_AND_PRIVATE_CONDITIONAL_ATTRIBUTE:
+        webkit_dom_test_global_object_set_public_and_private_conditional_attribute(self, g_value_get_string(value));
+        break;
</ins><span class="cx">     case PROP_ENABLED_AT_RUNTIME_ATTRIBUTE:
</span><span class="cx">         webkit_dom_test_global_object_set_enabled_at_runtime_attribute(self, g_value_get_string(value));
</span><span class="cx">         break;
</span><span class="lines">@@ -108,6 +116,12 @@
</span><span class="cx">     case PROP_REGULAR_ATTRIBUTE:
</span><span class="cx">         g_value_take_string(value, webkit_dom_test_global_object_get_regular_attribute(self));
</span><span class="cx">         break;
</span><ins>+    case PROP_PUBLIC_AND_PRIVATE_ATTRIBUTE:
+        g_value_take_string(value, webkit_dom_test_global_object_get_public_and_private_attribute(self));
+        break;
+    case PROP_PUBLIC_AND_PRIVATE_CONDITIONAL_ATTRIBUTE:
+        g_value_take_string(value, webkit_dom_test_global_object_get_public_and_private_conditional_attribute(self));
+        break;
</ins><span class="cx">     case PROP_ENABLED_AT_RUNTIME_ATTRIBUTE:
</span><span class="cx">         g_value_take_string(value, webkit_dom_test_global_object_get_enabled_at_runtime_attribute(self));
</span><span class="cx">         break;
</span><span class="lines">@@ -149,6 +163,26 @@
</span><span class="cx"> 
</span><span class="cx">     g_object_class_install_property(
</span><span class="cx">         gobjectClass,
</span><ins>+        PROP_PUBLIC_AND_PRIVATE_ATTRIBUTE,
+        g_param_spec_string(
+            &quot;public-and-private-attribute&quot;,
+            &quot;TestGlobalObject:public-and-private-attribute&quot;,
+            &quot;read-write gchar* TestGlobalObject:public-and-private-attribute&quot;,
+            &quot;&quot;,
+            WEBKIT_PARAM_READWRITE));
+
+    g_object_class_install_property(
+        gobjectClass,
+        PROP_PUBLIC_AND_PRIVATE_CONDITIONAL_ATTRIBUTE,
+        g_param_spec_string(
+            &quot;public-and-private-conditional-attribute&quot;,
+            &quot;TestGlobalObject:public-and-private-conditional-attribute&quot;,
+            &quot;read-write gchar* TestGlobalObject:public-and-private-conditional-attribute&quot;,
+            &quot;&quot;,
+            WEBKIT_PARAM_READWRITE));
+
+    g_object_class_install_property(
+        gobjectClass,
</ins><span class="cx">         PROP_ENABLED_AT_RUNTIME_ATTRIBUTE,
</span><span class="cx">         g_param_spec_string(
</span><span class="cx">             &quot;enabled-at-runtime-attribute&quot;,
</span><span class="lines">@@ -224,6 +258,56 @@
</span><span class="cx">     item-&gt;setRegularAttribute(convertedValue);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+gchar* webkit_dom_test_global_object_get_public_and_private_attribute(WebKitDOMTestGlobalObject* self)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_val_if_fail(WEBKIT_DOM_IS_TEST_GLOBAL_OBJECT(self), 0);
+    WebCore::TestGlobalObject* item = WebKit::core(self);
+    gchar* result = convertToUTF8String(item-&gt;publicAndPrivateAttribute());
+    return result;
+}
+
+void webkit_dom_test_global_object_set_public_and_private_attribute(WebKitDOMTestGlobalObject* self, const gchar* value)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_if_fail(WEBKIT_DOM_IS_TEST_GLOBAL_OBJECT(self));
+    g_return_if_fail(value);
+    WebCore::TestGlobalObject* item = WebKit::core(self);
+    WTF::String convertedValue = WTF::String::fromUTF8(value);
+    item-&gt;setPublicAndPrivateAttribute(convertedValue);
+}
+
+gchar* webkit_dom_test_global_object_get_public_and_private_conditional_attribute(WebKitDOMTestGlobalObject* self)
+{
+#if ENABLE(TEST_FEATURE)
+    WebCore::JSMainThreadNullState state;
+    g_return_val_if_fail(WEBKIT_DOM_IS_TEST_GLOBAL_OBJECT(self), 0);
+    WebCore::TestGlobalObject* item = WebKit::core(self);
+    gchar* result = convertToUTF8String(item-&gt;publicAndPrivateConditionalAttribute());
+    return result;
+#else
+    UNUSED_PARAM(self);
+    WEBKIT_WARN_FEATURE_NOT_PRESENT(&quot;Test Feature&quot;)
+    return 0;
+#endif /* ENABLE(TEST_FEATURE) */
+}
+
+void webkit_dom_test_global_object_set_public_and_private_conditional_attribute(WebKitDOMTestGlobalObject* self, const gchar* value)
+{
+#if ENABLE(TEST_FEATURE)
+    WebCore::JSMainThreadNullState state;
+    g_return_if_fail(WEBKIT_DOM_IS_TEST_GLOBAL_OBJECT(self));
+    g_return_if_fail(value);
+    WebCore::TestGlobalObject* item = WebKit::core(self);
+    WTF::String convertedValue = WTF::String::fromUTF8(value);
+    item-&gt;setPublicAndPrivateConditionalAttribute(convertedValue);
+#else
+    UNUSED_PARAM(self);
+    UNUSED_PARAM(value);
+    WEBKIT_WARN_FEATURE_NOT_PRESENT(&quot;Test Feature&quot;)
+#endif /* ENABLE(TEST_FEATURE) */
+}
+
</ins><span class="cx"> gchar* webkit_dom_test_global_object_get_enabled_at_runtime_attribute(WebKitDOMTestGlobalObject* self)
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestGlobalObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.h (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.h        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestGlobalObject.h        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -99,6 +99,48 @@
</span><span class="cx"> webkit_dom_test_global_object_set_regular_attribute(WebKitDOMTestGlobalObject* self, const gchar* value);
</span><span class="cx"> 
</span><span class="cx"> /**
</span><ins>+ * webkit_dom_test_global_object_get_public_and_private_attribute:
+ * @self: A #WebKitDOMTestGlobalObject
+ *
+ * Returns: A #gchar
+ *
+ * Stability: Unstable
+**/
+WEBKIT_API gchar*
+webkit_dom_test_global_object_get_public_and_private_attribute(WebKitDOMTestGlobalObject* self);
+
+/**
+ * webkit_dom_test_global_object_set_public_and_private_attribute:
+ * @self: A #WebKitDOMTestGlobalObject
+ * @value: A #gchar
+ *
+ * Stability: Unstable
+**/
+WEBKIT_API void
+webkit_dom_test_global_object_set_public_and_private_attribute(WebKitDOMTestGlobalObject* self, const gchar* value);
+
+/**
+ * webkit_dom_test_global_object_get_public_and_private_conditional_attribute:
+ * @self: A #WebKitDOMTestGlobalObject
+ *
+ * Returns: A #gchar
+ *
+ * Stability: Unstable
+**/
+WEBKIT_API gchar*
+webkit_dom_test_global_object_get_public_and_private_conditional_attribute(WebKitDOMTestGlobalObject* self);
+
+/**
+ * webkit_dom_test_global_object_set_public_and_private_conditional_attribute:
+ * @self: A #WebKitDOMTestGlobalObject
+ * @value: A #gchar
+ *
+ * Stability: Unstable
+**/
+WEBKIT_API void
+webkit_dom_test_global_object_set_public_and_private_conditional_attribute(WebKitDOMTestGlobalObject* self, const gchar* value);
+
+/**
</ins><span class="cx">  * webkit_dom_test_global_object_get_enabled_at_runtime_attribute:
</span><span class="cx">  * @self: A #WebKitDOMTestGlobalObject
</span><span class="cx">  *
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> #include &quot;JSDOMConvert.h&quot;
</span><span class="cx"> #include &quot;RuntimeEnabledFeatures.h&quot;
</span><span class="cx"> #include &quot;URL.h&quot;
</span><ins>+#include &quot;WebCoreJSClientData.h&quot;
</ins><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><span class="cx"> #include &lt;runtime/FunctionPrototype.h&gt;
</span><span class="cx"> #include &lt;runtime/JSString.h&gt;
</span><span class="lines">@@ -47,7 +48,13 @@
</span><span class="cx"> 
</span><span class="cx"> JSC::EncodedJSValue jsTestGlobalObjectRegularAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
</span><span class="cx"> bool setJSTestGlobalObjectRegularAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
</span><ins>+JSC::EncodedJSValue jsTestGlobalObjectPublicAndPrivateAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestGlobalObjectPublicAndPrivateAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
</ins><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+JSC::EncodedJSValue jsTestGlobalObjectPublicAndPrivateConditionalAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestGlobalObjectPublicAndPrivateConditionalAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+#endif
+#if ENABLE(TEST_FEATURE)
</ins><span class="cx"> JSC::EncodedJSValue jsTestGlobalObjectEnabledAtRuntimeAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
</span><span class="cx"> bool setJSTestGlobalObjectEnabledAtRuntimeAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
</span><span class="cx"> #endif
</span><span class="lines">@@ -58,15 +65,23 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><del>-static const struct CompactHashIndex JSTestGlobalObjectTableIndex[8] = {
</del><ins>+static const struct CompactHashIndex JSTestGlobalObjectTableIndex[16] = {
</ins><span class="cx">     { -1, -1 },
</span><del>-    { 1, -1 },
</del><span class="cx">     { -1, -1 },
</span><ins>+    { 2, -1 },
</ins><span class="cx">     { 0, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><span class="cx">     { -1, -1 },
</span><ins>+    { -1, -1 },
+    { 3, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { -1, -1 },
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -73,10 +88,16 @@
</span><span class="cx"> static const HashTableValue JSTestGlobalObjectTableValues[] =
</span><span class="cx"> {
</span><span class="cx">     { &quot;regularAttribute&quot;, CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestGlobalObjectRegularAttribute), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestGlobalObjectRegularAttribute) } },
</span><ins>+    { &quot;publicAndPrivateAttribute&quot;, CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestGlobalObjectPublicAndPrivateAttribute), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestGlobalObjectPublicAndPrivateAttribute) } },
+#if ENABLE(TEST_FEATURE)
+    { &quot;publicAndPrivateConditionalAttribute&quot;, CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestGlobalObjectPublicAndPrivateConditionalAttribute), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestGlobalObjectPublicAndPrivateConditionalAttribute) } },
+#else
+    { 0, 0, NoIntrinsic, { 0, 0 } },
+#endif
</ins><span class="cx">     { &quot;regularOperation&quot;, JSC::Function, NoIntrinsic, { (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestGlobalObjectInstanceFunctionRegularOperation), (intptr_t) (1) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestGlobalObjectTable = { 2, 7, true, JSTestGlobalObjectTableValues, JSTestGlobalObjectTableIndex };
</del><ins>+static const HashTable JSTestGlobalObjectTable = { 4, 15, true, JSTestGlobalObjectTableValues, JSTestGlobalObjectTableIndex };
</ins><span class="cx"> template&lt;&gt; JSValue JSTestGlobalObjectConstructor::prototypeForStructure(JSC::VM&amp; vm, const JSDOMGlobalObject&amp; globalObject)
</span><span class="cx"> {
</span><span class="cx">     UNUSED_PARAM(vm);
</span><span class="lines">@@ -125,7 +146,11 @@
</span><span class="cx">         putDirectCustomAccessor(vm, vm.propertyNames-&gt;enabledAtRuntimeAttribute, customGetterSetter, attributesForStructure(CustomAccessor));
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><ins>+    putDirectCustomAccessor(vm, static_cast&lt;JSVMClientData*&gt;(vm.clientData)-&gt;builtinNames().publicAndPrivateAttributePrivateName(), CustomGetterSetter::create(vm, jsTestGlobalObjectPublicAndPrivateAttribute, nullptr), attributesForStructure(DontDelete | ReadOnly));
</ins><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+    putDirectCustomAccessor(vm, static_cast&lt;JSVMClientData*&gt;(vm.clientData)-&gt;builtinNames().publicAndPrivateConditionalAttributePrivateName(), CustomGetterSetter::create(vm, jsTestGlobalObjectPublicAndPrivateConditionalAttribute, nullptr), attributesForStructure(DontDelete | ReadOnly));
+#endif
+#if ENABLE(TEST_FEATURE)
</ins><span class="cx">     if (RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
</span><span class="cx">         putDirectNativeFunction(vm, this, vm.propertyNames-&gt;enabledAtRuntimeOperation, 1, jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation, NoIntrinsic, attributesForStructure(JSC::Function));
</span><span class="cx"> #endif
</span><span class="lines">@@ -152,7 +177,39 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+EncodedJSValue jsTestGlobalObjectPublicAndPrivateAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    UNUSED_PARAM(state);
+    UNUSED_PARAM(thisValue);
+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(decodedThisValue);
+    if (UNLIKELY(!castedThis)) {
+        return throwGetterTypeError(*state, &quot;TestGlobalObject&quot;, &quot;publicAndPrivateAttribute&quot;);
+    }
+    auto&amp; impl = castedThis-&gt;wrapped();
+    JSValue result = jsStringWithCache(state, impl.publicAndPrivateAttribute());
+    return JSValue::encode(result);
+}
+
+
</ins><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+EncodedJSValue jsTestGlobalObjectPublicAndPrivateConditionalAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    UNUSED_PARAM(state);
+    UNUSED_PARAM(thisValue);
+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(decodedThisValue);
+    if (UNLIKELY(!castedThis)) {
+        return throwGetterTypeError(*state, &quot;TestGlobalObject&quot;, &quot;publicAndPrivateConditionalAttribute&quot;);
+    }
+    auto&amp; impl = castedThis-&gt;wrapped();
+    JSValue result = jsStringWithCache(state, impl.publicAndPrivateConditionalAttribute());
+    return JSValue::encode(result);
+}
+
+#endif
+
+#if ENABLE(TEST_FEATURE)
</ins><span class="cx"> EncodedJSValue jsTestGlobalObjectEnabledAtRuntimeAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="lines">@@ -206,7 +263,43 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+bool setJSTestGlobalObjectPublicAndPrivateAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    JSValue value = JSValue::decode(encodedValue);
+    UNUSED_PARAM(thisValue);
+    JSTestGlobalObject* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        return throwSetterTypeError(*state, &quot;TestGlobalObject&quot;, &quot;publicAndPrivateAttribute&quot;);
+    }
+    auto&amp; impl = castedThis-&gt;wrapped();
+    auto nativeValue = value.toWTFString(state);
+    if (UNLIKELY(state-&gt;hadException()))
+        return false;
+    impl.setPublicAndPrivateAttribute(WTFMove(nativeValue));
+    return true;
+}
+
+
</ins><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+bool setJSTestGlobalObjectPublicAndPrivateConditionalAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    JSValue value = JSValue::decode(encodedValue);
+    UNUSED_PARAM(thisValue);
+    JSTestGlobalObject* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        return throwSetterTypeError(*state, &quot;TestGlobalObject&quot;, &quot;publicAndPrivateConditionalAttribute&quot;);
+    }
+    auto&amp; impl = castedThis-&gt;wrapped();
+    auto nativeValue = value.toWTFString(state);
+    if (UNLIKELY(state-&gt;hadException()))
+        return false;
+    impl.setPublicAndPrivateConditionalAttribute(WTFMove(nativeValue));
+    return true;
+}
+
+#endif
+
+#if ENABLE(TEST_FEATURE)
</ins><span class="cx"> bool setJSTestGlobalObjectEnabledAtRuntimeAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><span class="cx">     JSValue value = JSValue::decode(encodedValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestGlobalObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestGlobalObject.h (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestGlobalObject.h        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestGlobalObject.h        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -31,6 +31,8 @@
</span><span class="cx"> WEBKIT_CLASS_AVAILABLE_MAC(9876_5)
</span><span class="cx"> WEBCORE_EXPORT @interface DOMTestGlobalObject : DOMObject
</span><span class="cx"> @property (copy) NSString *regularAttribute;
</span><ins>+@property (copy) NSString *publicAndPrivateAttribute;
+@property (copy) NSString *publicAndPrivateConditionalAttribute;
</ins><span class="cx"> @property (copy) NSString *enabledAtRuntimeAttribute;
</span><span class="cx"> 
</span><span class="cx"> - (void)regularOperation:(NSString *)testParam;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestGlobalObjectmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestGlobalObject.mm (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestGlobalObject.mm        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestGlobalObject.mm        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -66,7 +66,33 @@
</span><span class="cx">     IMPL-&gt;setRegularAttribute(newRegularAttribute);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (NSString *)publicAndPrivateAttribute
+{
+    WebCore::JSMainThreadNullState state;
+    return IMPL-&gt;publicAndPrivateAttribute();
+}
+
+- (void)setPublicAndPrivateAttribute:(NSString *)newPublicAndPrivateAttribute
+{
+    WebCore::JSMainThreadNullState state;
+    IMPL-&gt;setPublicAndPrivateAttribute(newPublicAndPrivateAttribute);
+}
+
</ins><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+- (NSString *)publicAndPrivateConditionalAttribute
+{
+    WebCore::JSMainThreadNullState state;
+    return IMPL-&gt;publicAndPrivateConditionalAttribute();
+}
+
+- (void)setPublicAndPrivateConditionalAttribute:(NSString *)newPublicAndPrivateConditionalAttribute
+{
+    WebCore::JSMainThreadNullState state;
+    IMPL-&gt;setPublicAndPrivateConditionalAttribute(newPublicAndPrivateConditionalAttribute);
+}
+#endif
+
+#if ENABLE(TEST_FEATURE)
</ins><span class="cx"> - (NSString *)enabledAtRuntimeAttribute
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestGlobalObjectidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/TestGlobalObject.idl (202550 => 202551)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestGlobalObject.idl        2016-06-28 07:03:16 UTC (rev 202550)
+++ trunk/Source/WebCore/bindings/scripts/test/TestGlobalObject.idl        2016-06-28 07:04:55 UTC (rev 202551)
</span><span class="lines">@@ -26,6 +26,8 @@
</span><span class="cx"> // This interface is recognized as a global object by the bindings generator.
</span><span class="cx"> interface TestGlobalObject {
</span><span class="cx">     attribute DOMString regularAttribute;
</span><ins>+    [PrivateIdentifier, PublicIdentifier] attribute DOMString publicAndPrivateAttribute;
+    [Conditional=TEST_FEATURE, PrivateIdentifier, PublicIdentifier] attribute DOMString publicAndPrivateConditionalAttribute;
</ins><span class="cx">     [Conditional=TEST_FEATURE, EnabledAtRuntime=TestFeature] attribute DOMString enabledAtRuntimeAttribute;
</span><span class="cx">     void regularOperation(DOMString testParam);
</span><span class="cx">     [Conditional=TEST_FEATURE, EnabledAtRuntime=TestFeature] void enabledAtRuntimeOperation(DOMString testParam);
</span></span></pre>
</div>
</div>

</body>
</html>