<!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>[210190] releases/WebKitGTK/webkit-2.14</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/210190">210190</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2016-12-28 01:40:14 -0800 (Wed, 28 Dec 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/207229">r207229</a> - Web Inspector: Improve support for logging Proxy objects in console
https://bugs.webkit.org/show_bug.cgi?id=163323
<rdar://problem/28432553>
Reviewed by Timothy Hatcher.
Source/JavaScriptCore:
This is based off of similiar patches in Blink for Proxy handling.
* bindings/ScriptValue.cpp:
(Deprecated::ScriptValue::isEqual):
Use strict equality. This is the intent, and it prevents the possibility of triggering
primitive conversion on objects in previous ConsoleMessage argument lists.
* inspector/InjectedScriptSource.js:
(InjectedScript.prototype._propertyDescriptors):
Bail if the object is a Proxy.
(InjectedScript.prototype._describe):
Provide a friendlier name, "Proxy" instead of "ProxyObject".
(InjectedScript.RemoteObject):
When generating a preview for a Proxy object, generate it from the final target
and mark it as lossy so that the object can always be expanded to get the internal
target/handler properties.
* inspector/JSInjectedScriptHost.h:
* inspector/JSInjectedScriptHost.cpp:
(Inspector::JSInjectedScriptHost::subtype):
New subtype for Proxy objects.
(Inspector::JSInjectedScriptHost::proxyTargetValue):
Resolve the final target value for a Proxy.
* inspector/JSInjectedScriptHostPrototype.cpp:
(Inspector::JSInjectedScriptHostPrototype::finishCreation):
(Inspector::jsInjectedScriptHostPrototypeFunctionProxyTargetValue):
Add the new method.
* inspector/ScriptArguments.cpp:
(Inspector::ScriptArguments::getFirstArgumentAsString):
Avoid triggering Proxy traps on a Proxy object when getting a quick
string description for ConsoleMessages.
* inspector/protocol/Runtime.json:
Add new "proxy" subtype.
Source/WebInspectorUI:
* UserInterface/Views/ConsoleMessageView.js:
(WebInspector.ConsoleMessageView.prototype._formatParameter):
Treat a Proxy like any other object.
LayoutTests:
* inspector/console/console-log-proxy-expected.txt: Added.
* inspector/console/console-log-proxy.html: Added.
Add a test specific to console logs of Proxy objects to ensure the get
trap is not used in different cases.
* inspector/model/remote-object-expected.txt:
* inspector/model/remote-object.html:
* platform/mac/inspector/model/remote-object-expected.txt:
Update results for Proxy objects and include a test for a multi-level
Proxy object, which should preview the target.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit214LayoutTestsChangeLog">releases/WebKitGTK/webkit-2.14/LayoutTests/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit214LayoutTestsinspectormodelremoteobjectexpectedtxt">releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/model/remote-object-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit214LayoutTestsinspectormodelremoteobjecthtml">releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/model/remote-object.html</a></li>
<li><a href="#releasesWebKitGTKwebkit214LayoutTestsplatformmacinspectormodelremoteobjectexpectedtxt">releases/WebKitGTK/webkit-2.14/LayoutTests/platform/mac/inspector/model/remote-object-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit214SourceJavaScriptCoreChangeLog">releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit214SourceJavaScriptCorebindingsScriptValuecpp">releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/bindings/ScriptValue.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorInjectedScriptSourcejs">releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/InjectedScriptSource.js</a></li>
<li><a href="#releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorJSInjectedScriptHostcpp">releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorJSInjectedScriptHosth">releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHost.h</a></li>
<li><a href="#releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorJSInjectedScriptHostPrototypecpp">releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHostPrototype.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorScriptArgumentscpp">releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/ScriptArguments.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorprotocolRuntimejson">releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/protocol/Runtime.json</a></li>
<li><a href="#releasesWebKitGTKwebkit214SourceWebInspectorUIChangeLog">releases/WebKitGTK/webkit-2.14/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit214SourceWebInspectorUIUserInterfaceViewsConsoleMessageViewjs">releases/WebKitGTK/webkit-2.14/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit214LayoutTestsinspectorconsoleconsolelogproxyexpectedtxt">releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/console/console-log-proxy-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit214LayoutTestsinspectorconsoleconsolelogproxyhtml">releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/console/console-log-proxy.html</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit214LayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/LayoutTests/ChangeLog (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/LayoutTests/ChangeLog        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/LayoutTests/ChangeLog        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2016-10-12 Joseph Pecoraro <pecoraro@apple.com>
+
+ Web Inspector: Improve support for logging Proxy objects in console
+ https://bugs.webkit.org/show_bug.cgi?id=163323
+ <rdar://problem/28432553>
+
+ Reviewed by Timothy Hatcher.
+
+ * inspector/console/console-log-proxy-expected.txt: Added.
+ * inspector/console/console-log-proxy.html: Added.
+ Add a test specific to console logs of Proxy objects to ensure the get
+ trap is not used in different cases.
+
+ * inspector/model/remote-object-expected.txt:
+ * inspector/model/remote-object.html:
+ * platform/mac/inspector/model/remote-object-expected.txt:
+ Update results for Proxy objects and include a test for a multi-level
+ Proxy object, which should preview the target.
+
</ins><span class="cx"> 2016-10-05 Daniel Bates <dabates@apple.com>
</span><span class="cx">
</span><span class="cx"> Do not follow redirects when sending violation report
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214LayoutTestsinspectorconsoleconsolelogproxyexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/console/console-log-proxy-expected.txt (0 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/console/console-log-proxy-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/console/console-log-proxy-expected.txt        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+CONSOLE MESSAGE: line 16: [object Proxy]
+CONSOLE MESSAGE: line 30: 0
+CONSOLE MESSAGE: line 31: [object Proxy]
+CONSOLE MESSAGE: line 32: 1
+Tests for the console.log with Proxy objects.
+
+
+== Running test suite: console.log.proxy
+-- Running test case: BasicProxyLog
+PASS: Logging Proxy objects should not have triggered get trap.
+
+-- Running test case: AvoidTrapWhenCheckingConsoleRepeat
+PASS: Logging Proxy objects and primitives should not have triggered get trap.
+
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit214LayoutTestsinspectorconsoleconsolelogproxyhtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/console/console-log-proxy.html (0 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/console/console-log-proxy.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/console/console-log-proxy.html        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -0,0 +1,74 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
+<script>
+function triggerProxyConsoleLog() {
+ window.accessedHandlerGet = false;
+
+ let proxy = new Proxy({foo: 1}, {
+ get(target, name, receiver) {
+ window.accessedHandlerGet = true;
+ return target[name];
+ }
+ });
+
+ console.log(proxy);
+}
+
+function triggerProxyAndPrimitiveConsoleLog() {
+ window.accessedHandlerGet = false;
+
+ let proxy = new Proxy({bar: 2}, {
+ get(target, name, receiver) {
+ window.accessedHandlerGet = true;
+ console.log(1);
+ return target[name];
+ }
+ });
+
+ console.log(0);
+ console.log(proxy);
+ console.log(1);
+}
+
+function test()
+{
+ let suite = InspectorTest.createAsyncSuite("console.log.proxy");
+
+ suite.addTestCase({
+ name: "BasicProxyLog",
+ description: "console.log of a Proxy object should not trigger proxy get trap.",
+ test(resolve, reject) {
+ InspectorTest.evaluateInPage("triggerProxyConsoleLog()", () => {
+ InspectorTest.evaluateInPage("window.accessedHandlerGet", (error, result) => {
+ let value = WebInspector.RemoteObject.fromPayload(result).value;
+ InspectorTest.expectEqual(value, false, "Logging Proxy objects should not have triggered get trap.");
+ resolve();
+ });
+ });
+ }
+ });
+
+ suite.addTestCase({
+ name: "AvoidTrapWhenCheckingConsoleRepeat",
+ description: "console.log repeat checking should not trigger proxy get trap.",
+ test(resolve, reject) {
+ InspectorTest.evaluateInPage("triggerProxyAndPrimitiveConsoleLog()", () => {
+ InspectorTest.evaluateInPage("window.accessedHandlerGet", (error, result) => {
+ let value = WebInspector.RemoteObject.fromPayload(result).value;
+ InspectorTest.expectEqual(value, false, "Logging Proxy objects and primitives should not have triggered get trap.");
+ resolve();
+ });
+ });
+ }
+ });
+
+ suite.runTestCasesAndFinish();
+}
+</script>
+</head>
+<body onload="runTest()">
+<p>Tests for the console.log with Proxy objects.</p>
+</body>
+</html>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit214LayoutTestsinspectormodelremoteobjectexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/model/remote-object-expected.txt (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/model/remote-object-expected.txt        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/model/remote-object-expected.txt        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -4659,64 +4659,28 @@
</span><span class="cx"> EXPRESSION: new Proxy({x:1, y:1}, {handler: true})
</span><span class="cx"> {
</span><span class="cx"> "_type": "object",
</span><ins>+ "_subtype": "proxy",
</ins><span class="cx"> "_objectId": "<filtered>",
</span><del>- "_description": "ProxyObject",
</del><ins>+ "_description": "Proxy",
</ins><span class="cx"> "_preview": {
</span><span class="cx"> "_listeners": null,
</span><span class="cx"> "_type": "object",
</span><del>- "_description": "ProxyObject",
- "_lossless": true,
</del><ins>+ "_subtype": "proxy",
+ "_description": "Proxy",
+ "_lossless": false,
</ins><span class="cx"> "_overflow": false,
</span><span class="cx"> "_properties": [
</span><span class="cx"> {
</span><span class="cx"> "_listeners": null,
</span><del>- "_name": "target",
- "_type": "object",
- "_valuePreview": {
- "_listeners": null,
- "_type": "object",
- "_description": "Object",
- "_lossless": true,
- "_overflow": false,
- "_properties": [
- {
- "_listeners": null,
- "_name": "x",
- "_type": "number",
- "_value": "1"
- },
- {
- "_listeners": null,
- "_name": "y",
- "_type": "number",
- "_value": "1"
- }
- ],
- "_entries": null
- },
- "_internal": true
</del><ins>+ "_name": "x",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><span class="cx"> "_listeners": null,
</span><del>- "_name": "handler",
- "_type": "object",
- "_valuePreview": {
- "_listeners": null,
- "_type": "object",
- "_description": "Object",
- "_lossless": true,
- "_overflow": false,
- "_properties": [
- {
- "_listeners": null,
- "_name": "handler",
- "_type": "boolean",
- "_value": "true"
- }
- ],
- "_entries": null
- },
- "_internal": true
</del><ins>+ "_name": "y",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> }
</span><span class="cx"> ],
</span><span class="cx"> "_entries": null
</span><span class="lines">@@ -4724,6 +4688,38 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><ins>+EXPRESSION: new Proxy(new Proxy({foo:1, bar:1}, {}), {})
+{
+ "_type": "object",
+ "_subtype": "proxy",
+ "_objectId": "<filtered>",
+ "_description": "Proxy",
+ "_preview": {
+ "_listeners": null,
+ "_type": "object",
+ "_subtype": "proxy",
+ "_description": "Proxy",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
+ {
+ "_listeners": null,
+ "_name": "foo",
+ "_type": "number",
+ "_value": "1"
+ },
+ {
+ "_listeners": null,
+ "_name": "bar",
+ "_type": "number",
+ "_value": "1"
+ }
+ ],
+ "_entries": null
+ }
+}
+
+-----------------------------------------------------
</ins><span class="cx"> EXPRESSION: Person = class Person { constructor(name){} get fullName(){} methodName(p1, p2){} }; Person
</span><span class="cx"> {
</span><span class="cx"> "_type": "function",
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214LayoutTestsinspectormodelremoteobjecthtml"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/model/remote-object.html (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/model/remote-object.html        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/LayoutTests/inspector/model/remote-object.html        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -170,6 +170,7 @@
</span><span class="cx">
</span><span class="cx"> // Proxy
</span><span class="cx"> {expression: "new Proxy({x:1, y:1}, {handler: true})"},
</span><ins>+ {expression: "new Proxy(new Proxy({foo:1, bar:1}, {}), {})"},
</ins><span class="cx">
</span><span class="cx"> // Classes
</span><span class="cx">
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214LayoutTestsplatformmacinspectormodelremoteobjectexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/LayoutTests/platform/mac/inspector/model/remote-object-expected.txt (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/LayoutTests/platform/mac/inspector/model/remote-object-expected.txt        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/LayoutTests/platform/mac/inspector/model/remote-object-expected.txt        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -4660,74 +4660,58 @@
</span><span class="cx"> EXPRESSION: new Proxy({x:1, y:1}, {handler: true})
</span><span class="cx"> {
</span><span class="cx"> "_type": "object",
</span><ins>+ "_subtype": "proxy",
</ins><span class="cx"> "_objectId": "<filtered>",
</span><del>- "_description": "ProxyObject",
</del><ins>+ "_description": "Proxy",
</ins><span class="cx"> "_preview": {
</span><span class="cx"> "_listeners": null,
</span><span class="cx"> "_type": "object",
</span><del>- "_description": "ProxyObject",
- "_lossless": true,
</del><ins>+ "_subtype": "proxy",
+ "_description": "Proxy",
+ "_lossless": false,
</ins><span class="cx"> "_overflow": false,
</span><span class="cx"> "_properties": [
</span><span class="cx"> {
</span><span class="cx"> "_listeners": null,
</span><del>- "_name": "target",
- "_type": "object",
- "_valuePreview": {
- "_listeners": null,
- "_type": "object",
- "_description": "Object",
- "_lossless": true,
- "_overflow": false,
- "_properties": [
- {
- "_listeners": null,
- "_name": "x",
- "_type": "number",
- "_value": "1"
- },
- {
- "_listeners": null,
- "_name": "y",
- "_type": "number",
- "_value": "1"
- }
- ],
- "_entries": null
- },
- "_internal": true
</del><ins>+ "_name": "x",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><span class="cx"> "_listeners": null,
</span><del>- "_name": "handler",
- "_type": "object",
- "_valuePreview": {
- "_listeners": null,
- "_type": "object",
- "_description": "Object",
- "_lossless": true,
- "_overflow": false,
- "_properties": [
- {
- "_listeners": null,
- "_name": "handler",
- "_type": "boolean",
- "_value": "true"
- }
- ],
- "_entries": null
- },
- "_internal": true
- },
</del><ins>+ "_name": "y",
+ "_type": "number",
+ "_value": "1"
+ }
+ ],
+ "_entries": null
+ }
+}
+
+-----------------------------------------------------
+EXPRESSION: new Proxy(new Proxy({foo:1, bar:1}, {}), {})
+{
+ "_type": "object",
+ "_subtype": "proxy",
+ "_objectId": "<filtered>",
+ "_description": "Proxy",
+ "_preview": {
+ "_listeners": null,
+ "_type": "object",
+ "_subtype": "proxy",
+ "_description": "Proxy",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><span class="cx"> "_listeners": null,
</span><del>- "_name": "x",
</del><ins>+ "_name": "foo",
</ins><span class="cx"> "_type": "number",
</span><span class="cx"> "_value": "1"
</span><span class="cx"> },
</span><span class="cx"> {
</span><span class="cx"> "_listeners": null,
</span><del>- "_name": "y",
</del><ins>+ "_name": "bar",
</ins><span class="cx"> "_type": "number",
</span><span class="cx"> "_value": "1"
</span><span class="cx"> }
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214SourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/ChangeLog (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/ChangeLog        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/ChangeLog        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -1,3 +1,51 @@
</span><ins>+2016-10-12 Joseph Pecoraro <pecoraro@apple.com>
+
+ Web Inspector: Improve support for logging Proxy objects in console
+ https://bugs.webkit.org/show_bug.cgi?id=163323
+ <rdar://problem/28432553>
+
+ Reviewed by Timothy Hatcher.
+
+ This is based off of similiar patches in Blink for Proxy handling.
+
+ * bindings/ScriptValue.cpp:
+ (Deprecated::ScriptValue::isEqual):
+ Use strict equality. This is the intent, and it prevents the possibility of triggering
+ primitive conversion on objects in previous ConsoleMessage argument lists.
+
+ * inspector/InjectedScriptSource.js:
+ (InjectedScript.prototype._propertyDescriptors):
+ Bail if the object is a Proxy.
+
+ (InjectedScript.prototype._describe):
+ Provide a friendlier name, "Proxy" instead of "ProxyObject".
+
+ (InjectedScript.RemoteObject):
+ When generating a preview for a Proxy object, generate it from the final target
+ and mark it as lossy so that the object can always be expanded to get the internal
+ target/handler properties.
+
+ * inspector/JSInjectedScriptHost.h:
+ * inspector/JSInjectedScriptHost.cpp:
+ (Inspector::JSInjectedScriptHost::subtype):
+ New subtype for Proxy objects.
+
+ (Inspector::JSInjectedScriptHost::proxyTargetValue):
+ Resolve the final target value for a Proxy.
+
+ * inspector/JSInjectedScriptHostPrototype.cpp:
+ (Inspector::JSInjectedScriptHostPrototype::finishCreation):
+ (Inspector::jsInjectedScriptHostPrototypeFunctionProxyTargetValue):
+ Add the new method.
+
+ * inspector/ScriptArguments.cpp:
+ (Inspector::ScriptArguments::getFirstArgumentAsString):
+ Avoid triggering Proxy traps on a Proxy object when getting a quick
+ string description for ConsoleMessages.
+
+ * inspector/protocol/Runtime.json:
+ Add new "proxy" subtype.
+
</ins><span class="cx"> 2016-09-27 Filip Pizlo <fpizlo@apple.com>
</span><span class="cx">
</span><span class="cx"> B3::lowerMacros forgets to before->updatePredecessorsAfter() when lowering ChillMod on ARM64
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214SourceJavaScriptCorebindingsScriptValuecpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/bindings/ScriptValue.cpp (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/bindings/ScriptValue.cpp        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/bindings/ScriptValue.cpp        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -132,7 +132,7 @@
</span><span class="cx"> {
</span><span class="cx"> if (hasNoValue())
</span><span class="cx"> return anotherValue.hasNoValue();
</span><del>- return JSValueIsEqual(toRef(scriptState), toRef(scriptState, jsValue()), toRef(scriptState, anotherValue.jsValue()), nullptr);
</del><ins>+ return JSValueIsStrictEqual(toRef(scriptState), toRef(scriptState, jsValue()), toRef(scriptState, anotherValue.jsValue()));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool ScriptValue::isNull() const
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorInjectedScriptSourcejs"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/InjectedScriptSource.js (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/InjectedScriptSource.js        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/InjectedScriptSource.js        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -574,6 +574,9 @@
</span><span class="cx">
</span><span class="cx"> _propertyDescriptors: function(object, collectionMode, nativeGettersAsValues)
</span><span class="cx"> {
</span><ins>+ if (InjectedScriptHost.subtype(object) === "proxy")
+ return [];
+
</ins><span class="cx"> var descriptors = [];
</span><span class="cx"> var nameProcessed = new Set;
</span><span class="cx">
</span><span class="lines">@@ -732,8 +735,7 @@
</span><span class="cx"> try {
</span><span class="cx"> if (typeof obj.splice === "function" && isFinite(obj.length))
</span><span class="cx"> return "array";
</span><del>- } catch (e) {
- }
</del><ins>+ } catch (e) {}
</ins><span class="cx">
</span><span class="cx"> return null;
</span><span class="cx"> },
</span><span class="lines">@@ -791,6 +793,9 @@
</span><span class="cx"> if (subtype === "error")
</span><span class="cx"> return toString(obj);
</span><span class="cx">
</span><ins>+ if (subtype === "proxy")
+ return "Proxy";
+
</ins><span class="cx"> if (subtype === "node")
</span><span class="cx"> return this._nodePreview(obj);
</span><span class="cx">
</span><span class="lines">@@ -958,8 +963,13 @@
</span><span class="cx"> this.className = object.name;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if (generatePreview && this.type === "object")
- this.preview = this._generatePreview(object, undefined, columnNames);
</del><ins>+ if (generatePreview && this.type === "object") {
+ if (subtype === "proxy") {
+ this.preview = this._generatePreview(InjectedScriptHost.proxyTargetValue(object));
+ this.preview.lossless = false;
+ } else
+ this.preview = this._generatePreview(object, undefined, columnNames);
+ }
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> InjectedScript.RemoteObject.createObjectPreviewForValue = function(value, generatePreview)
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorJSInjectedScriptHostcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -168,6 +168,8 @@
</span><span class="cx"> return jsNontrivialString(exec, ASCIILiteral("date"));
</span><span class="cx"> if (value.inherits(RegExpObject::info()))
</span><span class="cx"> return jsNontrivialString(exec, ASCIILiteral("regexp"));
</span><ins>+ if (value.inherits(ProxyObject::info()))
+ return jsNontrivialString(exec, ASCIILiteral("proxy"));
</ins><span class="cx">
</span><span class="cx"> if (value.inherits(JSMap::info()))
</span><span class="cx"> return jsNontrivialString(exec, ASCIILiteral("map"));
</span><span class="lines">@@ -385,6 +387,23 @@
</span><span class="cx"> return jsUndefined();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+JSValue JSInjectedScriptHost::proxyTargetValue(ExecState *exec)
+{
+ if (exec->argumentCount() < 1)
+ return jsUndefined();
+
+ JSValue value = exec->uncheckedArgument(0);
+ ProxyObject* proxy = jsDynamicCast<ProxyObject*>(value);
+ if (!proxy)
+ return jsUndefined();
+
+ JSObject* target = proxy->target();
+ while (ProxyObject* proxy = jsDynamicCast<ProxyObject*>(target))
+ target = proxy->target();
+
+ return target;
+}
+
</ins><span class="cx"> JSValue JSInjectedScriptHost::weakMapSize(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx"> if (exec->argumentCount() < 1)
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorJSInjectedScriptHosth"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHost.h (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHost.h        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHost.h        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -65,6 +65,7 @@
</span><span class="cx"> JSC::JSValue subtype(JSC::ExecState*);
</span><span class="cx"> JSC::JSValue functionDetails(JSC::ExecState*);
</span><span class="cx"> JSC::JSValue getInternalProperties(JSC::ExecState*);
</span><ins>+ JSC::JSValue proxyTargetValue(JSC::ExecState*);
</ins><span class="cx"> JSC::JSValue weakMapSize(JSC::ExecState*);
</span><span class="cx"> JSC::JSValue weakMapEntries(JSC::ExecState*);
</span><span class="cx"> JSC::JSValue weakSetSize(JSC::ExecState*);
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorJSInjectedScriptHostPrototypecpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHostPrototype.cpp (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHostPrototype.cpp        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/JSInjectedScriptHostPrototype.cpp        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -43,6 +43,7 @@
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL jsInjectedScriptHostPrototypeFunctionGetInternalProperties(ExecState*);
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL jsInjectedScriptHostPrototypeFunctionInternalConstructorName(ExecState*);
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL jsInjectedScriptHostPrototypeFunctionIsHTMLAllCollection(ExecState*);
</span><ins>+static EncodedJSValue JSC_HOST_CALL jsInjectedScriptHostPrototypeFunctionProxyTargetValue(ExecState*);
</ins><span class="cx"> static EncodedJSValue JSC_HOST_CALL jsInjectedScriptHostPrototypeFunctionWeakMapSize(ExecState*);
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL jsInjectedScriptHostPrototypeFunctionWeakMapEntries(ExecState*);
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL jsInjectedScriptHostPrototypeFunctionWeakSetSize(ExecState*);
</span><span class="lines">@@ -65,6 +66,7 @@
</span><span class="cx"> JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("getInternalProperties", jsInjectedScriptHostPrototypeFunctionGetInternalProperties, DontEnum, 1);
</span><span class="cx"> JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("internalConstructorName", jsInjectedScriptHostPrototypeFunctionInternalConstructorName, DontEnum, 1);
</span><span class="cx"> JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("isHTMLAllCollection", jsInjectedScriptHostPrototypeFunctionIsHTMLAllCollection, DontEnum, 1);
</span><ins>+ JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("proxyTargetValue", jsInjectedScriptHostPrototypeFunctionProxyTargetValue, DontEnum, 1);
</ins><span class="cx"> JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("weakMapSize", jsInjectedScriptHostPrototypeFunctionWeakMapSize, DontEnum, 1);
</span><span class="cx"> JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("weakMapEntries", jsInjectedScriptHostPrototypeFunctionWeakMapEntries, DontEnum, 1);
</span><span class="cx"> JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("weakSetSize", jsInjectedScriptHostPrototypeFunctionWeakSetSize, DontEnum, 1);
</span><span class="lines">@@ -114,6 +116,19 @@
</span><span class="cx"> return JSValue::encode(castedThis->isHTMLAllCollection(exec));
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+EncodedJSValue JSC_HOST_CALL jsInjectedScriptHostPrototypeFunctionProxyTargetValue(ExecState* exec)
+{
+ VM& vm = exec->vm();
+ auto scope = DECLARE_THROW_SCOPE(vm);
+
+ JSValue thisValue = exec->thisValue();
+ JSInjectedScriptHost* castedThis = jsDynamicCast<JSInjectedScriptHost*>(thisValue);
+ if (!castedThis)
+ return throwVMTypeError(exec, scope);
+
+ return JSValue::encode(castedThis->proxyTargetValue(exec));
+}
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsInjectedScriptHostPrototypeFunctionWeakMapSize(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx"> VM& vm = exec->vm();
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorScriptArgumentscpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/ScriptArguments.cpp (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/ScriptArguments.cpp        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/ScriptArguments.cpp        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include "ScriptArguments.h"
</span><span class="cx">
</span><span class="cx"> #include "JSCInlines.h"
</span><ins>+#include "ProxyObject.h"
</ins><span class="cx"> #include "ScriptValue.h"
</span><span class="cx">
</span><span class="cx"> namespace Inspector {
</span><span class="lines">@@ -86,6 +87,12 @@
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ JSC::JSValue value = argumentAt(0).jsValue();
+ if (JSC::jsDynamicCast<JSC::ProxyObject*>(value)) {
+ result = ASCIILiteral("[object Proxy]");
+ return true;
+ }
+
</ins><span class="cx"> result = argumentAt(0).toString(globalState());
</span><span class="cx"> return true;
</span><span class="cx"> }
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214SourceJavaScriptCoreinspectorprotocolRuntimejson"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/protocol/Runtime.json (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/protocol/Runtime.json        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/Source/JavaScriptCore/inspector/protocol/Runtime.json        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -13,7 +13,7 @@
</span><span class="cx"> "description": "Mirror object referencing original JavaScript object.",
</span><span class="cx"> "properties": [
</span><span class="cx"> { "name": "type", "type": "string", "enum": ["object", "function", "undefined", "string", "number", "boolean", "symbol"], "description": "Object type." },
</span><del>- { "name": "subtype", "type": "string", "optional": true, "enum": ["array", "null", "node", "regexp", "date", "error", "map", "set", "weakmap", "weakset", "iterator", "class"], "description": "Object subtype hint. Specified for <code>object</code> <code>function</code> (for class) type values only." },
</del><ins>+ { "name": "subtype", "type": "string", "optional": true, "enum": ["array", "null", "node", "regexp", "date", "error", "map", "set", "weakmap", "weakset", "iterator", "class", "proxy"], "description": "Object subtype hint. Specified for <code>object</code> <code>function</code> (for class) type values only." },
</ins><span class="cx"> { "name": "className", "type": "string", "optional": true, "description": "Object class (constructor) name. Specified for <code>object</code> type values only." },
</span><span class="cx"> { "name": "value", "type": "any", "optional": true, "description": "Remote object value (in case of primitive values or JSON values if it was requested)." },
</span><span class="cx"> { "name": "description", "type": "string", "optional": true, "description": "String representation of the object." },
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> "description": "Object containing abbreviated remote object value.",
</span><span class="cx"> "properties": [
</span><span class="cx"> { "name": "type", "type": "string", "enum": ["object", "function", "undefined", "string", "number", "boolean", "symbol"], "description": "Object type." },
</span><del>- { "name": "subtype", "type": "string", "optional": true, "enum": ["array", "null", "node", "regexp", "date", "error", "map", "set", "weakmap", "weakset", "iterator", "class"], "description": "Object subtype hint. Specified for <code>object</code> type values only." },
</del><ins>+ { "name": "subtype", "type": "string", "optional": true, "enum": ["array", "null", "node", "regexp", "date", "error", "map", "set", "weakmap", "weakset", "iterator", "class", "proxy"], "description": "Object subtype hint. Specified for <code>object</code> type values only." },
</ins><span class="cx"> { "name": "description", "type": "string", "optional": true, "description": "String representation of the object." },
</span><span class="cx"> { "name": "lossless", "type": "boolean", "description": "Determines whether preview is lossless (contains all information of the original object)." },
</span><span class="cx"> { "name": "overflow", "type": "boolean", "optional": true, "description": "True iff some of the properties of the original did not fit." },
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx"> "properties": [
</span><span class="cx"> { "name": "name", "type": "string", "description": "Property name." },
</span><span class="cx"> { "name": "type", "type": "string", "enum": ["object", "function", "undefined", "string", "number", "boolean", "symbol", "accessor"], "description": "Object type." },
</span><del>- { "name": "subtype", "type": "string", "optional": true, "enum": ["array", "null", "node", "regexp", "date", "error", "map", "set", "weakmap", "weakset", "iterator", "class"], "description": "Object subtype hint. Specified for <code>object</code> type values only." },
</del><ins>+ { "name": "subtype", "type": "string", "optional": true, "enum": ["array", "null", "node", "regexp", "date", "error", "map", "set", "weakmap", "weakset", "iterator", "class", "proxy"], "description": "Object subtype hint. Specified for <code>object</code> type values only." },
</ins><span class="cx"> { "name": "value", "type": "string", "optional": true, "description": "User-friendly property value string." },
</span><span class="cx"> { "name": "valuePreview", "$ref": "ObjectPreview", "optional": true, "description": "Nested value preview." },
</span><span class="cx"> { "name": "internal", "type": "boolean", "optional": true, "description": "True if this is an internal property." }
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214SourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/Source/WebInspectorUI/ChangeLog (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/Source/WebInspectorUI/ChangeLog        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/Source/WebInspectorUI/ChangeLog        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2016-10-12 Joseph Pecoraro <pecoraro@apple.com>
+
+ Web Inspector: Improve support for logging Proxy objects in console
+ https://bugs.webkit.org/show_bug.cgi?id=163323
+ <rdar://problem/28432553>
+
+ Reviewed by Timothy Hatcher.
+
+ * UserInterface/Views/ConsoleMessageView.js:
+ (WebInspector.ConsoleMessageView.prototype._formatParameter):
+ Treat a Proxy like any other object.
+
</ins><span class="cx"> 2016-09-27 Tomas Popela <tpopela@redhat.com>
</span><span class="cx">
</span><span class="cx"> [GTK] Mac defaults are used for key shortcuts on Linux
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit214SourceWebInspectorUIUserInterfaceViewsConsoleMessageViewjs"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.14/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js (210189 => 210190)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.14/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js        2016-12-28 09:35:51 UTC (rev 210189)
+++ releases/WebKitGTK/webkit-2.14/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js        2016-12-28 09:40:14 UTC (rev 210190)
</span><span class="lines">@@ -536,6 +536,7 @@
</span><span class="cx"> "weakset": this._formatParameterAsObject,
</span><span class="cx"> "iterator": this._formatParameterAsObject,
</span><span class="cx"> "class": this._formatParameterAsObject,
</span><ins>+ "proxy": this._formatParameterAsObject,
</ins><span class="cx"> "array": this._formatParameterAsArray,
</span><span class="cx"> "node": this._formatParameterAsNode,
</span><span class="cx"> "string": this._formatParameterAsString,
</span></span></pre>
</div>
</div>
</body>
</html>