<!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>[180594] trunk</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/180594">180594</a></dd>
<dt>Author</dt> <dd>joepeck@webkit.org</dd>
<dt>Date</dt> <dd>2015-02-24 16:31:42 -0800 (Tue, 24 Feb 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Web Inspector: Make Getter/Setter RemoteObject property and ObjectPreview handling consistent
https://bugs.webkit.org/show_bug.cgi?id=141587

Reviewed by Timothy Hatcher.

Source/JavaScriptCore:

Convert getProperties(ownAndGetterProperties) to getDisplayableProperties().
Mark PropertyDescriptors that are presumed to be native getters / bindings
separately so that the frontend may display them differently.

* inspector/InjectedScript.cpp:
(Inspector::InjectedScript::getProperties):
(Inspector::InjectedScript::getDisplayableProperties):
* inspector/InjectedScript.h:
* inspector/InjectedScriptSource.js:
* inspector/agents/InspectorRuntimeAgent.cpp:
(Inspector::InspectorRuntimeAgent::getProperties):
(Inspector::InspectorRuntimeAgent::getDisplayableProperties):
* inspector/agents/InspectorRuntimeAgent.h:
* inspector/protocol/Runtime.json:

Source/WebInspectorUI:

* UserInterface/Models/CallFrame.js:
(WebInspector.CallFrame.prototype.collectScopeChainVariableNames):
* UserInterface/Models/PropertyDescriptor.js:
(WebInspector.PropertyDescriptor.prototype.get nativeGetter):
* UserInterface/Protocol/RemoteObject.js:
(WebInspector.RemoteObject.fromPayload):
(WebInspector.RemoteObject.prototype.getOwnPropertyDescriptors):
(WebInspector.RemoteObject.prototype.getAllPropertyDescriptors):
(WebInspector.RemoteObject.prototype.getDisplayablePropertyDescriptors):
(WebInspector.RemoteObject.prototype._getPropertyDescriptors):
(WebInspector.RemoteObject.prototype.if):
(WebInspector.RemoteObject.prototype.deprecatedGetOwnProperties):
(WebInspector.RemoteObject.prototype.deprecatedGetAllProperties):
(WebInspector.RemoteObject.prototype._deprecatedGetProperties):
(WebInspector.RemoteObject.prototype.getOwnAndGetterPropertyDescriptors): Deleted.
(WebInspector.RemoteObject.prototype.callback): Deleted.
(WebInspector.RemoteObject.prototype.getOwnProperties): Deleted.
(WebInspector.RemoteObject.prototype.getOwnAndGetterProperties): Deleted.
(WebInspector.RemoteObject.prototype.getAllProperties): Deleted.
(WebInspector.RemoteObject.prototype.set else): Deleted.
* UserInterface/Views/ConsoleMessageImpl.js:
(WebInspector.ConsoleMessageImpl.prototype._formatParameterAsArray):
* UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
(WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshProperties.nodePrototypesReady):
* UserInterface/Views/ObjectPropertiesSection.js:
(WebInspector.ObjectPropertiesSection.prototype.update):
(WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
* UserInterface/Views/ObjectTreePropertyTreeElement.js:
(WebInspector.ObjectTreePropertyTreeElement.prototype.):
(WebInspector.ObjectTreePropertyTreeElement.prototype):
* UserInterface/Views/ObjectTreeView.js:
(WebInspector.ObjectTreeView.prototype.update):

LayoutTests:

* inspector/model/remote-object-get-properties-expected.txt:
* inspector/model/remote-object-get-properties.html:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsinspectormodelremoteobjectgetpropertiesexpectedtxt">trunk/LayoutTests/inspector/model/remote-object-get-properties-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectormodelremoteobjectgetpropertieshtml">trunk/LayoutTests/inspector/model/remote-object-get-properties.html</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorInjectedScriptcpp">trunk/Source/JavaScriptCore/inspector/InjectedScript.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorInjectedScripth">trunk/Source/JavaScriptCore/inspector/InjectedScript.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorInjectedScriptSourcejs">trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectoragentsInspectorRuntimeAgentcpp">trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectoragentsInspectorRuntimeAgenth">trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorprotocolRuntimejson">trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json</a></li>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsCallFramejs">trunk/Source/WebInspectorUI/UserInterface/Models/CallFrame.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsPropertyDescriptorjs">trunk/Source/WebInspectorUI/UserInterface/Models/PropertyDescriptor.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolRemoteObjectjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsConsoleMessageImpljs">trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDOMNodeDetailsSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectPropertiesSectionjs">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPropertiesSection.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectTreePropertyTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreePropertyTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectTreeViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/LayoutTests/ChangeLog        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2015-02-24  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
+        Web Inspector: Make Getter/Setter RemoteObject property and ObjectPreview handling consistent
+        https://bugs.webkit.org/show_bug.cgi?id=141587
+
+        Reviewed by Timothy Hatcher.
+
+        * inspector/model/remote-object-get-properties-expected.txt:
+        * inspector/model/remote-object-get-properties.html:
+
</ins><span class="cx"> 2015-02-24  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Constructor returning null should construct an object instead of null
</span></span></pre></div>
<a id="trunkLayoutTestsinspectormodelremoteobjectgetpropertiesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector/model/remote-object-get-properties-expected.txt (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/model/remote-object-get-properties-expected.txt        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/LayoutTests/inspector/model/remote-object-get-properties-expected.txt        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx">     b
</span><span class="cx">     __proto__
</span><span class="cx"> 
</span><del>-OWN AND GETTER PROPERTIES:
</del><ins>+DISPLAYABLE PROPERTIES:
</ins><span class="cx">     a
</span><span class="cx">     b
</span><span class="cx">     __proto__
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx">     clipboardData
</span><span class="cx">     __proto__
</span><span class="cx"> 
</span><del>-OWN AND GETTER PROPERTIES:
</del><ins>+DISPLAYABLE PROPERTIES:
</ins><span class="cx">     clipboardData
</span><span class="cx">     type
</span><span class="cx">     target
</span><span class="lines">@@ -116,12 +116,9 @@
</span><span class="cx">     _foo
</span><span class="cx">     __proto__
</span><span class="cx"> 
</span><del>-OWN AND GETTER PROPERTIES:
</del><ins>+DISPLAYABLE PROPERTIES:
</ins><span class="cx">     _bar
</span><span class="cx">     _foo
</span><del>-    getterProperty
-    foo
-    bar
</del><span class="cx">     __proto__
</span><span class="cx"> 
</span><span class="cx"> ALL PROPERTIES:
</span><span class="lines">@@ -154,8 +151,7 @@
</span><span class="cx"> OWN PROPERTIES:
</span><span class="cx">     __proto__
</span><span class="cx"> 
</span><del>-OWN AND GETTER PROPERTIES:
-    badGetter
</del><ins>+DISPLAYABLE PROPERTIES:
</ins><span class="cx">     __proto__
</span><span class="cx"> 
</span><span class="cx"> ALL PROPERTIES:
</span><span class="lines">@@ -187,7 +183,7 @@
</span><span class="cx">     prototype
</span><span class="cx">     __proto__
</span><span class="cx"> 
</span><del>-OWN AND GETTER PROPERTIES:
</del><ins>+DISPLAYABLE PROPERTIES:
</ins><span class="cx">     arguments
</span><span class="cx">     caller
</span><span class="cx">     length
</span><span class="lines">@@ -235,7 +231,7 @@
</span><span class="cx">     boundThis
</span><span class="cx">     boundArgs
</span><span class="cx"> 
</span><del>-OWN AND GETTER PROPERTIES:
</del><ins>+DISPLAYABLE PROPERTIES:
</ins><span class="cx">     name
</span><span class="cx">     length
</span><span class="cx">     arguments
</span></span></pre></div>
<a id="trunkLayoutTestsinspectormodelremoteobjectgetpropertieshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector/model/remote-object-get-properties.html (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/model/remote-object-get-properties.html        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/LayoutTests/inspector/model/remote-object-get-properties.html        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -87,8 +87,8 @@
</span><span class="cx">                 }
</span><span class="cx">             });
</span><span class="cx"> 
</span><del>-            remoteObject.getOwnAndGetterPropertyDescriptors(function(properties) {
-                InspectorTest.log(&quot;\nOWN AND GETTER PROPERTIES:&quot;);
</del><ins>+            remoteObject.getDisplayablePropertyDescriptors(function(properties) {
+                InspectorTest.log(&quot;\nDISPLAYABLE PROPERTIES:&quot;);
</ins><span class="cx">                 for (var property of properties) {
</span><span class="cx">                     InspectorTest.assert(property instanceof WebInspector.PropertyDescriptor);
</span><span class="cx">                     InspectorTest.log(&quot;    &quot; + property.name);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2015-02-24  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
+        Web Inspector: Make Getter/Setter RemoteObject property and ObjectPreview handling consistent
+        https://bugs.webkit.org/show_bug.cgi?id=141587
+
+        Reviewed by Timothy Hatcher.
+
+        Convert getProperties(ownAndGetterProperties) to getDisplayableProperties().
+        Mark PropertyDescriptors that are presumed to be native getters / bindings
+        separately so that the frontend may display them differently.
+
+        * inspector/InjectedScript.cpp:
+        (Inspector::InjectedScript::getProperties):
+        (Inspector::InjectedScript::getDisplayableProperties):
+        * inspector/InjectedScript.h:
+        * inspector/InjectedScriptSource.js:
+        * inspector/agents/InspectorRuntimeAgent.cpp:
+        (Inspector::InspectorRuntimeAgent::getProperties):
+        (Inspector::InspectorRuntimeAgent::getDisplayableProperties):
+        * inspector/agents/InspectorRuntimeAgent.h:
+        * inspector/protocol/Runtime.json:
+
</ins><span class="cx"> 2015-02-24  Mark Lam  &lt;mark.lam@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Rolling out r179753.  The fix was invalid.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorInjectedScriptcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/InjectedScript.cpp (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/InjectedScript.cpp        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/JavaScriptCore/inspector/InjectedScript.cpp        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -107,12 +107,11 @@
</span><span class="cx">     *result = BindingTraits&lt;Inspector::Protocol::Debugger::FunctionDetails&gt;::runtimeCast(WTF::move(resultValue));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void InjectedScript::getProperties(ErrorString&amp; errorString, const String&amp; objectId, bool ownProperties, bool ownAndGetterProperties, bool generatePreview, RefPtr&lt;Array&lt;Inspector::Protocol::Runtime::PropertyDescriptor&gt;&gt;* properties)
</del><ins>+void InjectedScript::getProperties(ErrorString&amp; errorString, const String&amp; objectId, bool ownProperties, bool generatePreview, RefPtr&lt;Array&lt;Inspector::Protocol::Runtime::PropertyDescriptor&gt;&gt;* properties)
</ins><span class="cx"> {
</span><span class="cx">     Deprecated::ScriptFunctionCall function(injectedScriptObject(), ASCIILiteral(&quot;getProperties&quot;), inspectorEnvironment()-&gt;functionCallHandler());
</span><span class="cx">     function.appendArgument(objectId);
</span><span class="cx">     function.appendArgument(ownProperties);
</span><del>-    function.appendArgument(ownAndGetterProperties);
</del><span class="cx">     function.appendArgument(generatePreview);
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;InspectorValue&gt; result;
</span><span class="lines">@@ -125,6 +124,22 @@
</span><span class="cx">     *properties = BindingTraits&lt;Array&lt;Inspector::Protocol::Runtime::PropertyDescriptor&gt;&gt;::runtimeCast(WTF::move(result));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void InjectedScript::getDisplayableProperties(ErrorString&amp; errorString, const String&amp; objectId, bool generatePreview, RefPtr&lt;Array&lt;Inspector::Protocol::Runtime::PropertyDescriptor&gt;&gt;* properties)
+{
+    Deprecated::ScriptFunctionCall function(injectedScriptObject(), ASCIILiteral(&quot;getDisplayableProperties&quot;), inspectorEnvironment()-&gt;functionCallHandler());
+    function.appendArgument(objectId);
+    function.appendArgument(generatePreview);
+
+    RefPtr&lt;InspectorValue&gt; result;
+    makeCall(function, &amp;result);
+    if (!result || result-&gt;type() != InspectorValue::Type::Array) {
+        errorString = ASCIILiteral(&quot;Internal error&quot;);
+        return;
+    }
+
+    *properties = BindingTraits&lt;Array&lt;Inspector::Protocol::Runtime::PropertyDescriptor&gt;&gt;::runtimeCast(WTF::move(result));
+}
+
</ins><span class="cx"> void InjectedScript::getInternalProperties(ErrorString&amp; errorString, const String&amp; objectId, bool generatePreview, RefPtr&lt;Array&lt;Inspector::Protocol::Runtime::InternalPropertyDescriptor&gt;&gt;* properties)
</span><span class="cx"> {
</span><span class="cx">     Deprecated::ScriptFunctionCall function(injectedScriptObject(), ASCIILiteral(&quot;getInternalProperties&quot;), inspectorEnvironment()-&gt;functionCallHandler());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorInjectedScripth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/InjectedScript.h (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/InjectedScript.h        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/JavaScriptCore/inspector/InjectedScript.h        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -56,7 +56,8 @@
</span><span class="cx">     void callFunctionOn(ErrorString&amp;, const String&amp; objectId, const String&amp; expression, const String&amp; arguments, bool returnByValue, bool generatePreview, RefPtr&lt;Protocol::Runtime::RemoteObject&gt;* result, Protocol::OptOutput&lt;bool&gt;* wasThrown);
</span><span class="cx">     void evaluateOnCallFrame(ErrorString&amp;, const Deprecated::ScriptValue&amp; callFrames, const String&amp; callFrameId, const String&amp; expression, const String&amp; objectGroup, bool includeCommandLineAPI, bool returnByValue, bool generatePreview, RefPtr&lt;Protocol::Runtime::RemoteObject&gt;* result, Protocol::OptOutput&lt;bool&gt;* wasThrown);
</span><span class="cx">     void getFunctionDetails(ErrorString&amp;, const String&amp; functionId, RefPtr&lt;Protocol::Debugger::FunctionDetails&gt;* result);
</span><del>-    void getProperties(ErrorString&amp;, const String&amp; objectId, bool ownProperties, bool ownAndGetterProperties, bool generatePreview, RefPtr&lt;Protocol::Array&lt;Protocol::Runtime::PropertyDescriptor&gt;&gt;* result);
</del><ins>+    void getProperties(ErrorString&amp;, const String&amp; objectId, bool ownProperties, bool generatePreview, RefPtr&lt;Protocol::Array&lt;Protocol::Runtime::PropertyDescriptor&gt;&gt;* result);
+    void getDisplayableProperties(ErrorString&amp;, const String&amp; objectId, bool generatePreview, RefPtr&lt;Protocol::Array&lt;Protocol::Runtime::PropertyDescriptor&gt;&gt;* result);
</ins><span class="cx">     void getInternalProperties(ErrorString&amp;, const String&amp; objectId, bool generatePreview, RefPtr&lt;Protocol::Array&lt;Protocol::Runtime::InternalPropertyDescriptor&gt;&gt;* result);
</span><span class="cx">     void getCollectionEntries(ErrorString&amp;, const String&amp; objectId, const String&amp; objectGroup, int startIndex, int numberToFetch, RefPtr&lt;Protocol::Array&lt;Protocol::Runtime::CollectionEntry&gt;&gt;* entries);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorInjectedScriptSourcejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -68,9 +68,9 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> InjectedScript.CollectionMode = {
</span><del>-    OwnProperties: 1 &lt;&lt; 0,    // own properties.
-    GetterProperties: 1 &lt;&lt; 1, // getter properties in the prototype chain.
-    AllProperties: 1 &lt;&lt; 2,    // all properties in the prototype chain.
</del><ins>+    OwnProperties: 1 &lt;&lt; 0,          // own properties.
+    NativeGetterProperties: 1 &lt;&lt; 1, // native getter properties in the prototype chain.
+    AllProperties: 1 &lt;&lt; 2,          // all properties in the prototype chain.
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> InjectedScript.prototype = {
</span><span class="lines">@@ -196,7 +196,7 @@
</span><span class="cx">         return result;
</span><span class="cx">     },
</span><span class="cx"> 
</span><del>-    getProperties: function(objectId, ownProperties, ownAndGetterProperties, generatePreview)
</del><ins>+    _getProperties: function(objectId, collectionMode, generatePreview)
</ins><span class="cx">     {
</span><span class="cx">         var parsedObjectId = this._parseObjectId(objectId);
</span><span class="cx">         var object = this._objectForId(parsedObjectId);
</span><span class="lines">@@ -208,12 +208,6 @@
</span><span class="cx">         if (isSymbol(object))
</span><span class="cx">             return false;
</span><span class="cx"> 
</span><del>-        var collectionMode = InjectedScript.CollectionMode.AllProperties;
-        if (ownProperties)
-            collectionMode = InjectedScript.CollectionMode.OwnProperties;
-        else if (ownAndGetterProperties)
-            collectionMode = InjectedScript.CollectionMode.OwnProperties | InjectedScript.CollectionMode.GetterProperties;
-
</del><span class="cx">         var descriptors = this._propertyDescriptors(object, collectionMode);
</span><span class="cx"> 
</span><span class="cx">         // Go over properties, wrap object values.
</span><span class="lines">@@ -234,6 +228,18 @@
</span><span class="cx">         return descriptors;
</span><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    getProperties: function(objectId, ownProperties, generatePreview)
+    {
+        var collectionMode = ownProperties ? InjectedScript.CollectionMode.OwnProperties : InjectedScript.CollectionMode.AllProperties;
+        return this._getProperties(objectId, collectionMode, generatePreview);
+    },
+
+    getDisplayableProperties: function(objectId, generatePreview)
+    {
+        var collectionMode = InjectedScript.CollectionMode.OwnProperties | InjectedScript.CollectionMode.NativeGetterProperties;
+        return this._getProperties(objectId, collectionMode, generatePreview);
+    },
+
</ins><span class="cx">     getInternalProperties: function(objectId, generatePreview)
</span><span class="cx">     {
</span><span class="cx">         var parsedObjectId = this._parseObjectId(objectId);
</span><span class="lines">@@ -564,10 +570,13 @@
</span><span class="cx">         var nameProcessed = {};
</span><span class="cx">         nameProcessed[&quot;__proto__&quot;] = null;
</span><span class="cx"> 
</span><del>-        function createFakeValueDescriptor(name, descriptor, isOwnProperty)
</del><ins>+        function createFakeValueDescriptor(name, descriptor, isOwnProperty, possibleNativeBindingGetter)
</ins><span class="cx">         {
</span><span class="cx">             try {
</span><del>-                return {name: name, value: object[name], writable: descriptor.writable || false, configurable: descriptor.configurable || false, enumerable: descriptor.enumerable || false};
</del><ins>+                var descriptor = {name: name, value: object[name], writable: descriptor.writable || false, configurable: descriptor.configurable || false, enumerable: descriptor.enumerable || false};
+                if (possibleNativeBindingGetter)
+                    descriptor.nativeGetter = true;
+                return descriptor;
</ins><span class="cx">             } catch (e) {
</span><span class="cx">                 var errorDescriptor = {name: name, value: e, wasThrown: true};
</span><span class="cx">                 if (isOwnProperty)
</span><span class="lines">@@ -590,13 +599,10 @@
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            // Getter properties.
-            if (collectionMode &amp; InjectedScript.CollectionMode.GetterProperties) {
-                if (descriptor.hasOwnProperty(&quot;get&quot;) &amp;&amp; descriptor.get) {
-                    // Getter property in the prototype chain. Create a fake value descriptor.
-                    descriptors.push(createFakeValueDescriptor(descriptor.name, descriptor, isOwnProperty));
-                    return;
-                }
</del><ins>+            // Native Getter properties.
+            if (collectionMode &amp; InjectedScript.CollectionMode.NativeGetterProperties) {
+                // FIXME: &lt;https://webkit.org/b/140575&gt; Web Inspector: Native Bindings Descriptors are Incomplete
+                // if (descriptor.hasOwnProperty(&quot;get&quot;) &amp;&amp; descriptor.get &amp;&amp; isNativeFunction(descriptor.get)) { ... }
</ins><span class="cx"> 
</span><span class="cx">                 if (possibleNativeBindingGetter) {
</span><span class="cx">                     // Possible getter property in the prototype chain.
</span><span class="lines">@@ -628,7 +634,7 @@
</span><span class="cx">                     // FIXME: &lt;https://webkit.org/b/140575&gt; Web Inspector: Native Bindings Descriptors are Incomplete
</span><span class="cx">                     // Developers may create such a descriptors, so we should be resilient:
</span><span class="cx">                     // var x = {}; Object.defineProperty(x, &quot;p&quot;, {get:undefined}); Object.getOwnPropertyDescriptor(x, &quot;p&quot;)
</span><del>-                    var fakeDescriptor = createFakeValueDescriptor(name, descriptor, isOwnProperty);
</del><ins>+                    var fakeDescriptor = createFakeValueDescriptor(name, descriptor, isOwnProperty, true);
</ins><span class="cx">                     processDescriptor(fakeDescriptor, isOwnProperty, true);
</span><span class="cx">                     continue;
</span><span class="cx">                 }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorRuntimeAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -160,7 +160,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void InspectorRuntimeAgent::getProperties(ErrorString&amp; errorString, const String&amp; objectId, const bool* const ownProperties, const bool* const ownAndGetterProperties, const bool* const generatePreview, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::PropertyDescriptor&gt;&gt;&amp; result, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::InternalPropertyDescriptor&gt;&gt;&amp; internalProperties)
</del><ins>+void InspectorRuntimeAgent::getProperties(ErrorString&amp; errorString, const String&amp; objectId, const bool* const ownProperties, const bool* const generatePreview, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::PropertyDescriptor&gt;&gt;&amp; result, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::InternalPropertyDescriptor&gt;&gt;&amp; internalProperties)
</ins><span class="cx"> {
</span><span class="cx">     InjectedScript injectedScript = m_injectedScriptManager-&gt;injectedScriptForObjectId(objectId);
</span><span class="cx">     if (injectedScript.hasNoValue()) {
</span><span class="lines">@@ -171,13 +171,31 @@
</span><span class="cx">     ScriptDebugServer::PauseOnExceptionsState previousPauseOnExceptionsState = setPauseOnExceptionsState(m_scriptDebugServer, ScriptDebugServer::DontPauseOnExceptions);
</span><span class="cx">     muteConsole();
</span><span class="cx"> 
</span><del>-    injectedScript.getProperties(errorString, objectId, asBool(ownProperties), asBool(ownAndGetterProperties), asBool(generatePreview), &amp;result);
</del><ins>+    injectedScript.getProperties(errorString, objectId, asBool(ownProperties), asBool(generatePreview), &amp;result);
</ins><span class="cx">     injectedScript.getInternalProperties(errorString, objectId, asBool(generatePreview), &amp;internalProperties);
</span><span class="cx"> 
</span><span class="cx">     unmuteConsole();
</span><span class="cx">     setPauseOnExceptionsState(m_scriptDebugServer, previousPauseOnExceptionsState);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void InspectorRuntimeAgent::getDisplayableProperties(ErrorString&amp; errorString, const String&amp; objectId, const bool* const generatePreview, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::PropertyDescriptor&gt;&gt;&amp; result, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::InternalPropertyDescriptor&gt;&gt;&amp; internalProperties)
+{
+    InjectedScript injectedScript = m_injectedScriptManager-&gt;injectedScriptForObjectId(objectId);
+    if (injectedScript.hasNoValue()) {
+        errorString = ASCIILiteral(&quot;Inspected frame has gone&quot;);
+        return;
+    }
+
+    ScriptDebugServer::PauseOnExceptionsState previousPauseOnExceptionsState = setPauseOnExceptionsState(m_scriptDebugServer, ScriptDebugServer::DontPauseOnExceptions);
+    muteConsole();
+
+    injectedScript.getDisplayableProperties(errorString, objectId, asBool(generatePreview), &amp;result);
+    injectedScript.getInternalProperties(errorString, objectId, asBool(generatePreview), &amp;internalProperties);
+
+    unmuteConsole();
+    setPauseOnExceptionsState(m_scriptDebugServer, previousPauseOnExceptionsState);
+}
+
</ins><span class="cx"> void InspectorRuntimeAgent::getCollectionEntries(ErrorString&amp; errorString, const String&amp; objectId, const String* objectGroup, const int* startIndex, const int* numberToFetch, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::CollectionEntry&gt;&gt;&amp; entries)
</span><span class="cx"> {
</span><span class="cx">     InjectedScript injectedScript = m_injectedScriptManager-&gt;injectedScriptForObjectId(objectId);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorRuntimeAgenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -63,7 +63,8 @@
</span><span class="cx">     virtual void evaluate(ErrorString&amp;, const String&amp; expression, const String* objectGroup, const bool* includeCommandLineAPI, const bool* doNotPauseOnExceptionsAndMuteConsole, const int* executionContextId, const bool* returnByValue, const bool* generatePreview, RefPtr&lt;Inspector::Protocol::Runtime::RemoteObject&gt;&amp; result, Inspector::Protocol::OptOutput&lt;bool&gt;* wasThrown) override final;
</span><span class="cx">     virtual void callFunctionOn(ErrorString&amp;, const String&amp; objectId, const String&amp; expression, const RefPtr&lt;Inspector::InspectorArray&gt;&amp;&amp; optionalArguments, const bool* doNotPauseOnExceptionsAndMuteConsole, const bool* returnByValue, const bool* generatePreview, RefPtr&lt;Inspector::Protocol::Runtime::RemoteObject&gt;&amp; result, Inspector::Protocol::OptOutput&lt;bool&gt;* wasThrown) override final;
</span><span class="cx">     virtual void releaseObject(ErrorString&amp;, const ErrorString&amp; objectId) override final;
</span><del>-    virtual void getProperties(ErrorString&amp;, const String&amp; objectId, const bool* ownProperties, const bool* ownAndGetterProperties, const bool* generatePreview, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::PropertyDescriptor&gt;&gt;&amp; result, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::InternalPropertyDescriptor&gt;&gt;&amp; internalProperties) override final;
</del><ins>+    virtual void getProperties(ErrorString&amp;, const String&amp; objectId, const bool* ownProperties, const bool* generatePreview, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::PropertyDescriptor&gt;&gt;&amp; result, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::InternalPropertyDescriptor&gt;&gt;&amp; internalProperties) override final;
+    virtual void getDisplayableProperties(ErrorString&amp;, const String&amp; objectId, const bool* generatePreview, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::PropertyDescriptor&gt;&gt;&amp; result, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::InternalPropertyDescriptor&gt;&gt;&amp; internalProperties) override final;
</ins><span class="cx">     virtual void getCollectionEntries(ErrorString&amp;, const String&amp; objectId, const String* objectGroup, const int* startIndex, const int* numberToFetch, RefPtr&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Runtime::CollectionEntry&gt;&gt;&amp; entries) override final;
</span><span class="cx">     virtual void releaseObjectGroup(ErrorString&amp;, const String&amp; objectGroup) override final;
</span><span class="cx">     virtual void run(ErrorString&amp;) override;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorprotocolRuntimejson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -76,7 +76,8 @@
</span><span class="cx">                 { &quot;name&quot;: &quot;configurable&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object.&quot; },
</span><span class="cx">                 { &quot;name&quot;: &quot;enumerable&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;True if this property shows up during enumeration of the properties on the corresponding object.&quot; },
</span><span class="cx">                 { &quot;name&quot;: &quot;wasThrown&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;True if the result was thrown during the evaluation.&quot; },
</span><del>-                { &quot;name&quot;: &quot;isOwn&quot;, &quot;optional&quot;: true, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;True if the property is owned for the object.&quot; }
</del><ins>+                { &quot;name&quot;: &quot;isOwn&quot;, &quot;optional&quot;: true, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;True if the property is owned for the object.&quot; },
+                { &quot;name&quot;: &quot;nativeGetter&quot;, &quot;optional&quot;: true, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;True if the property value came from a native getter.&quot; }
</ins><span class="cx">             ]
</span><span class="cx">         },
</span><span class="cx">         {
</span><span class="lines">@@ -237,7 +238,6 @@
</span><span class="cx">             &quot;parameters&quot;: [
</span><span class="cx">                 { &quot;name&quot;: &quot;objectId&quot;, &quot;$ref&quot;: &quot;RemoteObjectId&quot;, &quot;description&quot;: &quot;Identifier of the object to return properties for.&quot; },
</span><span class="cx">                 { &quot;name&quot;: &quot;ownProperties&quot;, &quot;optional&quot;: true, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true, returns properties belonging only to the object itself, not to its prototype chain.&quot; },
</span><del>-                { &quot;name&quot;: &quot;ownAndGetterProperties&quot;, &quot;optional&quot;: true, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true, returns properties belonging to the object itself, and getters in its prototype chain.&quot; },
</del><span class="cx">                 { &quot;name&quot;: &quot;generatePreview&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Whether preview should be generated for property values.&quot; }
</span><span class="cx">             ],
</span><span class="cx">             &quot;returns&quot;: [
</span><span class="lines">@@ -247,6 +247,18 @@
</span><span class="cx">             &quot;description&quot;: &quot;Returns properties of a given object. Object group of the result is inherited from the target object.&quot;
</span><span class="cx">         },
</span><span class="cx">         {
</span><ins>+            &quot;name&quot;: &quot;getDisplayableProperties&quot;,
+            &quot;parameters&quot;: [
+                { &quot;name&quot;: &quot;objectId&quot;, &quot;$ref&quot;: &quot;RemoteObjectId&quot;, &quot;description&quot;: &quot;Identifier of the object to return properties for.&quot; },
+                { &quot;name&quot;: &quot;generatePreview&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Whether preview should be generated for property values.&quot; }
+            ],
+            &quot;returns&quot;: [
+                { &quot;name&quot;: &quot;properties&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;: &quot;PropertyDescriptor&quot;}, &quot;description&quot;: &quot;Object properties.&quot; },
+                { &quot;name&quot;: &quot;internalProperties&quot;, &quot;optional&quot;: true, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;: &quot;InternalPropertyDescriptor&quot;}, &quot;description&quot;: &quot;Internal object properties.&quot; }
+            ],
+            &quot;description&quot;: &quot;Returns displayable properties of a given object. Object group of the result is inherited from the target object. Displayable properties are own properties, internal properties, and native getters in the prototype chain (assumed to be bindings and treated like own properties for the frontend).&quot;
+        },
+        {
</ins><span class="cx">             &quot;name&quot;: &quot;getCollectionEntries&quot;,
</span><span class="cx">             &quot;description&quot;: &quot;Returns entries of given Map / Set collection.&quot;,
</span><span class="cx">             &quot;parameters&quot;: [
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/WebInspectorUI/ChangeLog        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -1,5 +1,45 @@
</span><span class="cx"> 2015-02-24  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Web Inspector: Make Getter/Setter RemoteObject property and ObjectPreview handling consistent
+        https://bugs.webkit.org/show_bug.cgi?id=141587
+
+        Reviewed by Timothy Hatcher.
+
+        * UserInterface/Models/CallFrame.js:
+        (WebInspector.CallFrame.prototype.collectScopeChainVariableNames):
+        * UserInterface/Models/PropertyDescriptor.js:
+        (WebInspector.PropertyDescriptor.prototype.get nativeGetter):
+        * UserInterface/Protocol/RemoteObject.js:
+        (WebInspector.RemoteObject.fromPayload):
+        (WebInspector.RemoteObject.prototype.getOwnPropertyDescriptors):
+        (WebInspector.RemoteObject.prototype.getAllPropertyDescriptors):
+        (WebInspector.RemoteObject.prototype.getDisplayablePropertyDescriptors):
+        (WebInspector.RemoteObject.prototype._getPropertyDescriptors):
+        (WebInspector.RemoteObject.prototype.if):
+        (WebInspector.RemoteObject.prototype.deprecatedGetOwnProperties):
+        (WebInspector.RemoteObject.prototype.deprecatedGetAllProperties):
+        (WebInspector.RemoteObject.prototype._deprecatedGetProperties):
+        (WebInspector.RemoteObject.prototype.getOwnAndGetterPropertyDescriptors): Deleted.
+        (WebInspector.RemoteObject.prototype.callback): Deleted.
+        (WebInspector.RemoteObject.prototype.getOwnProperties): Deleted.
+        (WebInspector.RemoteObject.prototype.getOwnAndGetterProperties): Deleted.
+        (WebInspector.RemoteObject.prototype.getAllProperties): Deleted.
+        (WebInspector.RemoteObject.prototype.set else): Deleted.
+        * UserInterface/Views/ConsoleMessageImpl.js:
+        (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsArray):
+        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
+        (WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshProperties.nodePrototypesReady):
+        * UserInterface/Views/ObjectPropertiesSection.js:
+        (WebInspector.ObjectPropertiesSection.prototype.update):
+        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
+        * UserInterface/Views/ObjectTreePropertyTreeElement.js:
+        (WebInspector.ObjectTreePropertyTreeElement.prototype.):
+        (WebInspector.ObjectTreePropertyTreeElement.prototype):
+        * UserInterface/Views/ObjectTreeView.js:
+        (WebInspector.ObjectTreeView.prototype.update):
+
+2015-02-24  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
</ins><span class="cx">         Web Inspector: New Object Tree View UI
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=141932
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsCallFramejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Models/CallFrame.js (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/CallFrame.js        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CallFrame.js        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         for (var i = 0; i &lt; this._scopeChain.length; ++i)
</span><del>-            this._scopeChain[i].object.getAllProperties(propertiesCollected);
</del><ins>+            this._scopeChain[i].object.deprecatedGetAllProperties(propertiesCollected);
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsPropertyDescriptorjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Models/PropertyDescriptor.js (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/PropertyDescriptor.js        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/PropertyDescriptor.js        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.PropertyDescriptor = function(descriptor, isOwnProperty, wasThrown, isInternalProperty)
</del><ins>+WebInspector.PropertyDescriptor = function(descriptor, isOwnProperty, wasThrown, nativeGetter, isInternalProperty)
</ins><span class="cx"> {
</span><span class="cx">     WebInspector.Object.call(this);
</span><span class="cx"> 
</span><span class="lines">@@ -45,6 +45,7 @@
</span><span class="cx"> 
</span><span class="cx">     this._own = isOwnProperty || false;
</span><span class="cx">     this._wasThrown = wasThrown || false;
</span><ins>+    this._nativeGetterValue = nativeGetter || false;
</ins><span class="cx">     this._internal = isInternalProperty || false;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -64,7 +65,7 @@
</span><span class="cx">         payload.isOwn = true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return new WebInspector.PropertyDescriptor(payload, payload.isOwn, payload.wasThrown, internal);
</del><ins>+    return new WebInspector.PropertyDescriptor(payload, payload.isOwn, payload.wasThrown, payload.nativeGetter, internal);
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> WebInspector.PropertyDescriptor.prototype = {
</span><span class="lines">@@ -118,6 +119,11 @@
</span><span class="cx">         return this._wasThrown;
</span><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    get nativeGetter()
+    {
+        return this._nativeGetterValue;
+    },
+
</ins><span class="cx">     get isInternalProperty()
</span><span class="cx">     {
</span><span class="cx">         return this._internal;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolRemoteObjectjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -72,9 +72,9 @@
</span><span class="cx">         // COMPATIBILITY (iOS 8): iOS 7 and 8 did not have type/subtype/description on
</span><span class="cx">         // Runtime.ObjectPreview. Copy them over from the RemoteObject.
</span><span class="cx">         if (!payload.preview.type) {
</span><del>-            payload.preview.type = obj.type;
-            payload.preview.subtype = obj.subtype;
-            payload.preview.description = obj.description;
</del><ins>+            payload.preview.type = payload.type;
+            payload.preview.subtype = payload.subtype;
+            payload.preview.description = payload.description;
</ins><span class="cx">         }
</span><span class="cx">         payload.preview = WebInspector.ObjectPreview.fromPayload(payload.preview);
</span><span class="cx">     }
</span><span class="lines">@@ -147,132 +147,112 @@
</span><span class="cx"> 
</span><span class="cx">     getOwnPropertyDescriptors: function(callback)
</span><span class="cx">     {
</span><del>-        this._getPropertyDescriptors(true, false, callback);
</del><ins>+        this._getPropertyDescriptors(true, callback);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><del>-    getOwnAndGetterPropertyDescriptors: function(callback)
-    {
-        this._getPropertyDescriptors(false, true, callback);
-    },
-
</del><span class="cx">     getAllPropertyDescriptors: function(callback)
</span><span class="cx">     {
</span><del>-        this._getPropertyDescriptors(false, false, callback);
</del><ins>+        this._getPropertyDescriptors(false, callback);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><del>-    _getPropertyDescriptors: function(ownProperties, ownAndGetterProperties, callback)
</del><ins>+    getDisplayablePropertyDescriptors: function(callback)
</ins><span class="cx">     {
</span><span class="cx">         if (!this._objectId || this._isSymbol()) {
</span><span class="cx">             callback([]);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        function remoteObjectBinder(error, properties, internalProperties)
-        {
-            if (error) {
-                callback(null);
-                return;
-            }
-
-            var descriptors = properties.map(function(payload) {
-                return WebInspector.PropertyDescriptor.fromPayload(payload);
-            });
-
-            if (internalProperties) {
-                descriptors = descriptors.concat(internalProperties.map(function(payload) {
-                    return WebInspector.PropertyDescriptor.fromPayload(payload, true);
-                }));
-            }
-
-            callback(descriptors);
-        }
-
-        // COMPATIBILITY (iOS 8): RuntimeAgent.getProperties did not support ownerAndGetterProperties.
</del><ins>+        // COMPATIBILITY (iOS 8): RuntimeAgent.getDisplayableProperties did not exist.
</ins><span class="cx">         // Here we do our best to reimplement it by getting all properties and reducing them down.
</span><del>-        if (ownAndGetterProperties &amp;&amp; !RuntimeAgent.getProperties.supports(&quot;ownAndGetterProperties&quot;)) {
</del><ins>+        if (!RuntimeAgent.getDisplayableProperties) {
</ins><span class="cx">             RuntimeAgent.getProperties(this._objectId, function(error, allProperties) {
</span><span class="cx">                 var ownOrGetterPropertiesList = [];
</span><span class="cx">                 if (allProperties) {
</span><span class="cx">                     for (var property of allProperties) {
</span><del>-                        if (property.isOwn || property.get || property.name === &quot;__proto__&quot;) {
</del><ins>+                        if (property.isOwn || property.name === &quot;__proto__&quot;) {
</ins><span class="cx">                             // Own property or getter property in prototype chain.
</span><span class="cx">                             ownOrGetterPropertiesList.push(property);
</span><span class="cx">                         } else if (property.value &amp;&amp; property.name !== property.name.toUpperCase()) {
</span><span class="cx">                             var type = property.value.type;
</span><span class="cx">                             if (type &amp;&amp; type !== &quot;function&quot; &amp;&amp; property.name !== &quot;constructor&quot;) {
</span><span class="cx">                                 // Possible native binding getter property converted to a value. Also, no CONSTANT name style and not &quot;constructor&quot;.
</span><ins>+                                // There is no way of knowing if this is native or not, so just go with it.
</ins><span class="cx">                                 ownOrGetterPropertiesList.push(property);
</span><span class="cx">                             }
</span><span class="cx">                         }
</span><span class="cx">                     }
</span><span class="cx">                 }
</span><del>-                remoteObjectBinder(error, ownOrGetterPropertiesList);
-            });
</del><ins>+                this._getPropertyDescriptorsResolver(callback, error, ownOrGetterPropertiesList);
+            }.bind(this));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        RuntimeAgent.getProperties(this._objectId, ownProperties, ownAndGetterProperties, true, remoteObjectBinder);
</del><ins>+        RuntimeAgent.getDisplayableProperties(this._objectId, true, this._getPropertyDescriptorsResolver.bind(this, callback));
</ins><span class="cx">     },
</span><span class="cx"> 
</span><del>-    // FIXME: Phase out these functions. They return RemoteObjectProperty instead of PropertyDescriptors.
</del><ins>+    _getPropertyDescriptors: function(ownProperties, callback)
+    {
+        if (!this._objectId || this._isSymbol()) {
+            callback([]);
+            return;
+        }
</ins><span class="cx"> 
</span><del>-    getOwnProperties: function(callback)
</del><ins>+
+        RuntimeAgent.getProperties(this._objectId, ownProperties, true, this._getPropertyDescriptorsResolver.bind(this, callback));
+    },
+
+    _getPropertyDescriptorsResolver: function(callback, error, properties, internalProperties)
</ins><span class="cx">     {
</span><del>-        this._getProperties(true, false, callback);
</del><ins>+        if (error) {
+            callback(null);
+            return;
+        }
+
+        var descriptors = properties.map(function(payload) {
+            return WebInspector.PropertyDescriptor.fromPayload(payload);
+        });
+
+        if (internalProperties) {
+            descriptors = descriptors.concat(internalProperties.map(function(payload) {
+                return WebInspector.PropertyDescriptor.fromPayload(payload, true);
+            }));
+        }
+
+        callback(descriptors);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><del>-    getOwnAndGetterProperties: function(callback)
</del><ins>+    // FIXME: Phase out these functions. They return RemoteObjectProperty instead of PropertyDescriptors.
+
+    deprecatedGetOwnProperties: function(callback)
</ins><span class="cx">     {
</span><del>-        this._getProperties(false, true, callback);
</del><ins>+        this._deprecatedGetProperties(true, callback);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><del>-    getAllProperties: function(callback)
</del><ins>+    deprecatedGetAllProperties: function(callback)
</ins><span class="cx">     {
</span><del>-        this._getProperties(false, false, callback);
</del><ins>+        this._deprecatedGetProperties(false, callback);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><del>-    _getProperties: function(ownProperties, ownAndGetterProperties, callback)
</del><ins>+    _deprecatedGetProperties: function(ownProperties, callback)
</ins><span class="cx">     {
</span><span class="cx">         if (!this._objectId || this._isSymbol()) {
</span><span class="cx">             callback([]);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        function remoteObjectBinder(error, properties, internalProperties)
-        {
-            if (error) {
-                callback(null);
-                return;
-            }
</del><ins>+        RuntimeAgent.getProperties(this._objectId, ownProperties, this._deprecatedGetPropertiesResolver.bind(this, callback));
+    },
</ins><span class="cx"> 
</span><del>-            // FIXME: WebInspector.PropertyDescriptor instead of RemoteObjectProperty.
-            if (internalProperties) {
-                properties = properties.concat(internalProperties.map(function(descriptor) {
-                    descriptor.writable = false;
-                    descriptor.configurable = false;
-                    descriptor.enumerable = false;
-                    descriptor.isOwn = true;
-                    return descriptor;
-                }));
-            }
-
-            var result = [];
-            for (var i = 0; properties &amp;&amp; i &lt; properties.length; ++i) {
-                var property = properties[i];
-                if (property.get || property.set) {
-                    if (property.get)
-                        result.push(new WebInspector.RemoteObjectProperty(&quot;get &quot; + property.name, WebInspector.RemoteObject.fromPayload(property.get), property));
-                    if (property.set)
-                        result.push(new WebInspector.RemoteObjectProperty(&quot;set &quot; + property.name, WebInspector.RemoteObject.fromPayload(property.set), property));
-                } else
-                    result.push(new WebInspector.RemoteObjectProperty(property.name, WebInspector.RemoteObject.fromPayload(property.value), property));
-            }
-            callback(result);
</del><ins>+    deprecatedGetDisplayableProperties: function(callback)
+    {
+        if (!this._objectId || this._isSymbol()) {
+            callback([]);
+            return;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // COMPATIBILITY (iOS 8): RuntimeAgent.getProperties did not support ownerAndGetterProperties.
</span><span class="cx">         // Here we do our best to reimplement it by getting all properties and reducing them down.
</span><del>-        if (ownAndGetterProperties &amp;&amp; !RuntimeAgent.getProperties.supports(&quot;ownAndGetterProperties&quot;)) {
</del><ins>+        if (!RuntimeAgent.getDisplayableProperties) {
</ins><span class="cx">             RuntimeAgent.getProperties(this._objectId, function(error, allProperties) {
</span><span class="cx">                 var ownOrGetterPropertiesList = [];
</span><span class="cx">                 if (allProperties) {
</span><span class="lines">@@ -289,14 +269,45 @@
</span><span class="cx">                         }
</span><span class="cx">                     }
</span><span class="cx">                 }
</span><del>-                remoteObjectBinder(error, ownOrGetterPropertiesList);
-            });
</del><ins>+                this._deprecatedGetPropertiesResolver(callback, error, ownOrGetterPropertiesList);
+            }.bind(this));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        RuntimeAgent.getProperties(this._objectId, ownProperties, ownAndGetterProperties, remoteObjectBinder);
</del><ins>+        RuntimeAgent.getDisplayableProperties(this._objectId, this._deprecatedGetPropertiesResolver.bind(this, callback));
</ins><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    _deprecatedGetPropertiesResolver: function(callback, error, properties, internalProperties)
+    {
+        if (error) {
+            callback(null);
+            return;
+        }
+
+        if (internalProperties) {
+            properties = properties.concat(internalProperties.map(function(descriptor) {
+                descriptor.writable = false;
+                descriptor.configurable = false;
+                descriptor.enumerable = false;
+                descriptor.isOwn = true;
+                return descriptor;
+            }));
+        }
+
+        var result = [];
+        for (var i = 0; properties &amp;&amp; i &lt; properties.length; ++i) {
+            var property = properties[i];
+            if (property.get || property.set) {
+                if (property.get)
+                    result.push(new WebInspector.RemoteObjectProperty(&quot;get &quot; + property.name, WebInspector.RemoteObject.fromPayload(property.get), property));
+                if (property.set)
+                    result.push(new WebInspector.RemoteObjectProperty(&quot;set &quot; + property.name, WebInspector.RemoteObject.fromPayload(property.set), property));
+            } else
+                result.push(new WebInspector.RemoteObjectProperty(property.name, WebInspector.RemoteObject.fromPayload(property.value), property));
+        }
+        callback(result);
+    },
+
</ins><span class="cx">     setPropertyValue: function(name, value, callback)
</span><span class="cx">     {
</span><span class="cx">         if (!this._objectId || this._isSymbol()) {
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsConsoleMessageImpljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -332,7 +332,7 @@
</span><span class="cx">     _formatParameterAsArray: function(arr, elem)
</span><span class="cx">     {
</span><span class="cx">         // FIXME: Array previews look poor. Keep doing what we currently do for arrays.
</span><del>-        arr.getOwnProperties(this._printArray.bind(this, arr, elem));
</del><ins>+        arr.deprecatedGetOwnProperties(this._printArray.bind(this, arr, elem));
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     _userProvidedColumnNames: function(columnNamesArgument)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDOMNodeDetailsSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -175,7 +175,7 @@
</span><span class="cx">             if (this.domNode !== domNode)
</span><span class="cx">                 return;
</span><span class="cx"> 
</span><del>-            object.getOwnProperties(fillSection.bind(this));
</del><ins>+            object.deprecatedGetOwnProperties(fillSection.bind(this));
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         function fillSection(prototypes)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectPropertiesSectionjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPropertiesSection.js (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPropertiesSection.js        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPropertiesSection.js        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -52,9 +52,9 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (this.getAllProperties)
</span><del>-            this.object.getAllProperties(callback.bind(this));
</del><ins>+            this.object.deprecatedGetAllProperties(callback.bind(this));
</ins><span class="cx">         else
</span><del>-            this.object.getOwnAndGetterProperties(callback.bind(this));
</del><ins>+            this.object.deprecatedGetDisplayableProperties(callback.bind(this));
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     updateProperties: function(properties, rootTreeElementConstructor, rootPropertyComparer)
</span><span class="lines">@@ -171,9 +171,9 @@
</span><span class="cx">         };
</span><span class="cx"> 
</span><span class="cx">         if (this.property.name === &quot;__proto__&quot;)
</span><del>-            this.property.value.getOwnProperties(callback.bind(this));
</del><ins>+            this.property.value.deprecatedGetOwnProperties(callback.bind(this));
</ins><span class="cx">         else
</span><del>-            this.property.value.getOwnAndGetterProperties(callback.bind(this));
</del><ins>+            this.property.value.deprecatedGetDisplayableProperties(callback.bind(this));
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     ondblclick: function(event)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectTreePropertyTreeElementjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreePropertyTreeElement.js (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreePropertyTreeElement.js        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreePropertyTreeElement.js        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -403,9 +403,17 @@
</span><span class="cx">                     prototypeName = this._sanitizedPrototypeString(resolvedValue);
</span><span class="cx">             }
</span><span class="cx"> 
</span><ins>+            var isAPI = mode === WebInspector.ObjectTreeView.Mode.API;
+
</ins><span class="cx">             properties.sort(WebInspector.ObjectTreeView.ComparePropertyDescriptors);
</span><del>-            for (var propertyDescriptor of properties)
</del><ins>+            for (var propertyDescriptor of properties) {
+                // FIXME: If this is a pure API ObjectTree, we should show the native getters.
+                // For now, just skip native binding getters in API mode, since we likely
+                // already showed them in the Properties section.
+                if (isAPI &amp;&amp; propertyDescriptor.nativeGetter)
+                    continue;
</ins><span class="cx">                 this.appendChild(new WebInspector.ObjectTreePropertyTreeElement(propertyDescriptor, resolvedValuePropertyPath, mode, prototypeName));
</span><ins>+            }
</ins><span class="cx"> 
</span><span class="cx">             // FIXME: Re-enable Collection Entries with new UI.
</span><span class="cx">             // if (mode === WebInspector.ObjectTreeView.Mode.Properties) {
</span><span class="lines">@@ -417,6 +425,6 @@
</span><span class="cx">         if (this._property.name === &quot;__proto__&quot;)
</span><span class="cx">             resolvedValue.getOwnPropertyDescriptors(callback.bind(this, WebInspector.ObjectTreeView.Mode.API));
</span><span class="cx">         else
</span><del>-            resolvedValue.getOwnPropertyDescriptors(callback.bind(this, this._mode));
</del><ins>+            resolvedValue.getDisplayablePropertyDescriptors(callback.bind(this, this._mode));
</ins><span class="cx">     },
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectTreeViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.js (180593 => 180594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.js        2015-02-25 00:31:38 UTC (rev 180593)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.js        2015-02-25 00:31:42 UTC (rev 180594)
</span><span class="lines">@@ -171,7 +171,7 @@
</span><span class="cx"> 
</span><span class="cx">     update: function()
</span><span class="cx">     {
</span><del>-        this._object.getOwnPropertyDescriptors(this._updateProperties.bind(this));
</del><ins>+        this._object.getDisplayablePropertyDescriptors(this._updateProperties.bind(this));
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     // Private
</span></span></pre>
</div>
</div>

</body>
</html>