Title: [185540] trunk
Revision
185540
Author
[email protected]
Date
2015-06-13 13:42:04 -0700 (Sat, 13 Jun 2015)

Log Message

Web Inspector: console.table() with a list of objects no longer works
https://bugs.webkit.org/show_bug.cgi?id=145952

Patch by Joseph Pecoraro <[email protected]> on 2015-06-13
Reviewed by Timothy Hatcher.

Source/_javascript_Core:

* inspector/InjectedScriptSource.js:
(InjectedScript.RemoteObject.prototype._generatePreview):
Calling generatePreview again was actually starting with a preview
of the current object instead of the sub-value. Go down the other
path that correctly generates sub-previews. Leave filtering on the
backend unimplemented, which we were already ignoring.

Source/WebInspectorUI:

* UserInterface/Views/ConsoleMessageView.js:
(WebInspector.ConsoleMessageView.prototype._appendMessageTextAndArguments):
(WebInspector.ConsoleMessageView.prototype._formatParameterAsTable):
Don't allow expanding a cosole.table message, and don't output the total
object even if the table preview was lossless, as the experience is poor.

LayoutTests:

* inspector/console/console-api.html:
* inspector/console/console-table-expected.txt: Added.
* inspector/console/console-table.html:
Add a similiar console API test all about console.table().

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (185539 => 185540)


--- trunk/LayoutTests/ChangeLog	2015-06-13 19:28:38 UTC (rev 185539)
+++ trunk/LayoutTests/ChangeLog	2015-06-13 20:42:04 UTC (rev 185540)
@@ -1,3 +1,15 @@
+2015-06-13  Joseph Pecoraro  <[email protected]>
+
+        Web Inspector: console.table() with a list of objects no longer works
+        https://bugs.webkit.org/show_bug.cgi?id=145952
+
+        Reviewed by Timothy Hatcher.
+
+        * inspector/console/console-api.html:
+        * inspector/console/console-table-expected.txt: Added.
+        * inspector/console/console-table.html:
+        Add a similiar console API test all about console.table().
+
 2015-06-13  Gyuyoung Kim  <[email protected]>
 
         [EFL] Mark fast/forms/select-element-focus-ring.html to Missing

Modified: trunk/LayoutTests/inspector/console/console-api.html (185539 => 185540)


--- trunk/LayoutTests/inspector/console/console-api.html	2015-06-13 19:28:38 UTC (rev 185539)
+++ trunk/LayoutTests/inspector/console/console-api.html	2015-06-13 20:42:04 UTC (rev 185540)
@@ -2,7 +2,7 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<script type="text/_javascript_" src=""
+<script src=""
 <script>
 var string = "string";
 var object = {a:1};
@@ -37,7 +37,6 @@
     {
         if (key === "_objectId" || key === "_stackTrace")
             return "<filtered>";
-
         return value;
     }
 

Added: trunk/LayoutTests/inspector/console/console-table-expected.txt (0 => 185540)


--- trunk/LayoutTests/inspector/console/console-table-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/inspector/console/console-table-expected.txt	2015-06-13 20:42:04 UTC (rev 185540)
@@ -0,0 +1,477 @@
+CONSOLE MESSAGE: line 1: 
+CONSOLE MESSAGE: line 1: apple,orange,banana
+CONSOLE MESSAGE: line 1: [object Object]
+CONSOLE MESSAGE: line 1: John,Smith,Jane,Doe,Emily,Jones
+CONSOLE MESSAGE: line 1: [object Object],[object Object],[object Object]
+CONSOLE MESSAGE: line 1: [object Object],[object Object],[object Object]
+
+STEP: console.table([])
+{
+  "_source": "console-api",
+  "_level": "log",
+  "_messageText": "",
+  "_type": "table",
+  "_url": null,
+  "_line": 1,
+  "_column": 14,
+  "_repeatCount": 1,
+  "_parameters": [
+    {
+      "_type": "object",
+      "_subtype": "array",
+      "_objectId": "<filtered>",
+      "_description": "Array",
+      "_hasChildren": true,
+      "_size": 0,
+      "_preview": {
+        "_type": "object",
+        "_subtype": "array",
+        "_description": "Array",
+        "_lossless": true,
+        "_overflow": false,
+        "_size": 0,
+        "_properties": [],
+        "_entries": null
+      }
+    }
+  ],
+  "_stackTrace": "<filtered>",
+  "_request": null
+}
+
+STEP: console.table(['apple', 'orange', 'banana'])
+{
+  "_source": "console-api",
+  "_level": "log",
+  "_messageText": "apple,orange,banana",
+  "_type": "table",
+  "_url": null,
+  "_line": 1,
+  "_column": 14,
+  "_repeatCount": 1,
+  "_parameters": [
+    {
+      "_type": "object",
+      "_subtype": "array",
+      "_objectId": "<filtered>",
+      "_description": "Array",
+      "_hasChildren": true,
+      "_size": 3,
+      "_preview": {
+        "_type": "object",
+        "_subtype": "array",
+        "_description": "Array",
+        "_lossless": true,
+        "_overflow": false,
+        "_size": 3,
+        "_properties": [
+          {
+            "_name": "0",
+            "_type": "string",
+            "_value": "apple"
+          },
+          {
+            "_name": "1",
+            "_type": "string",
+            "_value": "orange"
+          },
+          {
+            "_name": "2",
+            "_type": "string",
+            "_value": "banana"
+          }
+        ],
+        "_entries": null
+      }
+    }
+  ],
+  "_stackTrace": "<filtered>",
+  "_request": null
+}
+
+STEP: console.table({firstName: 'John', lastName: 'Smith'})
+{
+  "_source": "console-api",
+  "_level": "log",
+  "_messageText": "[object Object]",
+  "_type": "table",
+  "_url": null,
+  "_line": 1,
+  "_column": 14,
+  "_repeatCount": 1,
+  "_parameters": [
+    {
+      "_type": "object",
+      "_objectId": "<filtered>",
+      "_description": "Object",
+      "_hasChildren": true,
+      "_preview": {
+        "_type": "object",
+        "_description": "Object",
+        "_lossless": true,
+        "_overflow": false,
+        "_properties": [
+          {
+            "_name": "firstName",
+            "_type": "string",
+            "_value": "John"
+          },
+          {
+            "_name": "lastName",
+            "_type": "string",
+            "_value": "Smith"
+          }
+        ],
+        "_entries": null
+      }
+    }
+  ],
+  "_stackTrace": "<filtered>",
+  "_request": null
+}
+
+STEP: console.table([['John', 'Smith'], ['Jane', 'Doe'], ['Emily', 'Jones']])
+{
+  "_source": "console-api",
+  "_level": "log",
+  "_messageText": "John,Smith,Jane,Doe,Emily,Jones",
+  "_type": "table",
+  "_url": null,
+  "_line": 1,
+  "_column": 14,
+  "_repeatCount": 1,
+  "_parameters": [
+    {
+      "_type": "object",
+      "_subtype": "array",
+      "_objectId": "<filtered>",
+      "_description": "Array",
+      "_hasChildren": true,
+      "_size": 3,
+      "_preview": {
+        "_type": "object",
+        "_subtype": "array",
+        "_description": "Array",
+        "_lossless": true,
+        "_overflow": false,
+        "_size": 3,
+        "_properties": [
+          {
+            "_name": "0",
+            "_type": "object",
+            "_subtype": "array",
+            "_valuePreview": {
+              "_type": "object",
+              "_subtype": "array",
+              "_description": "Array",
+              "_lossless": true,
+              "_overflow": false,
+              "_size": 2,
+              "_properties": [
+                {
+                  "_name": "0",
+                  "_type": "string",
+                  "_value": "John"
+                },
+                {
+                  "_name": "1",
+                  "_type": "string",
+                  "_value": "Smith"
+                }
+              ],
+              "_entries": null
+            }
+          },
+          {
+            "_name": "1",
+            "_type": "object",
+            "_subtype": "array",
+            "_valuePreview": {
+              "_type": "object",
+              "_subtype": "array",
+              "_description": "Array",
+              "_lossless": true,
+              "_overflow": false,
+              "_size": 2,
+              "_properties": [
+                {
+                  "_name": "0",
+                  "_type": "string",
+                  "_value": "Jane"
+                },
+                {
+                  "_name": "1",
+                  "_type": "string",
+                  "_value": "Doe"
+                }
+              ],
+              "_entries": null
+            }
+          },
+          {
+            "_name": "2",
+            "_type": "object",
+            "_subtype": "array",
+            "_valuePreview": {
+              "_type": "object",
+              "_subtype": "array",
+              "_description": "Array",
+              "_lossless": true,
+              "_overflow": false,
+              "_size": 2,
+              "_properties": [
+                {
+                  "_name": "0",
+                  "_type": "string",
+                  "_value": "Emily"
+                },
+                {
+                  "_name": "1",
+                  "_type": "string",
+                  "_value": "Jones"
+                }
+              ],
+              "_entries": null
+            }
+          }
+        ],
+        "_entries": null
+      }
+    }
+  ],
+  "_stackTrace": "<filtered>",
+  "_request": null
+}
+
+STEP: console.table([john, jane, emily])
+{
+  "_source": "console-api",
+  "_level": "log",
+  "_messageText": "[object Object],[object Object],[object Object]",
+  "_type": "table",
+  "_url": null,
+  "_line": 1,
+  "_column": 14,
+  "_repeatCount": 1,
+  "_parameters": [
+    {
+      "_type": "object",
+      "_subtype": "array",
+      "_objectId": "<filtered>",
+      "_description": "Array",
+      "_hasChildren": true,
+      "_size": 3,
+      "_preview": {
+        "_type": "object",
+        "_subtype": "array",
+        "_description": "Array",
+        "_lossless": true,
+        "_overflow": false,
+        "_size": 3,
+        "_properties": [
+          {
+            "_name": "0",
+            "_type": "object",
+            "_valuePreview": {
+              "_type": "object",
+              "_description": "Person",
+              "_lossless": true,
+              "_overflow": false,
+              "_properties": [
+                {
+                  "_name": "firstName",
+                  "_type": "string",
+                  "_value": "John"
+                },
+                {
+                  "_name": "lastName",
+                  "_type": "string",
+                  "_value": "Smith"
+                }
+              ],
+              "_entries": null
+            }
+          },
+          {
+            "_name": "1",
+            "_type": "object",
+            "_valuePreview": {
+              "_type": "object",
+              "_description": "Person",
+              "_lossless": true,
+              "_overflow": false,
+              "_properties": [
+                {
+                  "_name": "firstName",
+                  "_type": "string",
+                  "_value": "Jane"
+                },
+                {
+                  "_name": "lastName",
+                  "_type": "string",
+                  "_value": "Doe"
+                }
+              ],
+              "_entries": null
+            }
+          },
+          {
+            "_name": "2",
+            "_type": "object",
+            "_valuePreview": {
+              "_type": "object",
+              "_description": "Person",
+              "_lossless": true,
+              "_overflow": false,
+              "_properties": [
+                {
+                  "_name": "firstName",
+                  "_type": "string",
+                  "_value": "Emily"
+                },
+                {
+                  "_name": "lastName",
+                  "_type": "string",
+                  "_value": "Jones"
+                }
+              ],
+              "_entries": null
+            }
+          }
+        ],
+        "_entries": null
+      }
+    }
+  ],
+  "_stackTrace": "<filtered>",
+  "_request": null
+}
+
+STEP: console.table([john, jane, emily], ['firstName'])
+{
+  "_source": "console-api",
+  "_level": "log",
+  "_messageText": "[object Object],[object Object],[object Object]",
+  "_type": "table",
+  "_url": null,
+  "_line": 1,
+  "_column": 14,
+  "_repeatCount": 1,
+  "_parameters": [
+    {
+      "_type": "object",
+      "_subtype": "array",
+      "_objectId": "<filtered>",
+      "_description": "Array",
+      "_hasChildren": true,
+      "_size": 3,
+      "_preview": {
+        "_type": "object",
+        "_subtype": "array",
+        "_description": "Array",
+        "_lossless": true,
+        "_overflow": false,
+        "_size": 3,
+        "_properties": [
+          {
+            "_name": "0",
+            "_type": "object",
+            "_valuePreview": {
+              "_type": "object",
+              "_description": "Person",
+              "_lossless": true,
+              "_overflow": false,
+              "_properties": [
+                {
+                  "_name": "firstName",
+                  "_type": "string",
+                  "_value": "John"
+                },
+                {
+                  "_name": "lastName",
+                  "_type": "string",
+                  "_value": "Smith"
+                }
+              ],
+              "_entries": null
+            }
+          },
+          {
+            "_name": "1",
+            "_type": "object",
+            "_valuePreview": {
+              "_type": "object",
+              "_description": "Person",
+              "_lossless": true,
+              "_overflow": false,
+              "_properties": [
+                {
+                  "_name": "firstName",
+                  "_type": "string",
+                  "_value": "Jane"
+                },
+                {
+                  "_name": "lastName",
+                  "_type": "string",
+                  "_value": "Doe"
+                }
+              ],
+              "_entries": null
+            }
+          },
+          {
+            "_name": "2",
+            "_type": "object",
+            "_valuePreview": {
+              "_type": "object",
+              "_description": "Person",
+              "_lossless": true,
+              "_overflow": false,
+              "_properties": [
+                {
+                  "_name": "firstName",
+                  "_type": "string",
+                  "_value": "Emily"
+                },
+                {
+                  "_name": "lastName",
+                  "_type": "string",
+                  "_value": "Jones"
+                }
+              ],
+              "_entries": null
+            }
+          }
+        ],
+        "_entries": null
+      }
+    },
+    {
+      "_type": "object",
+      "_subtype": "array",
+      "_objectId": "<filtered>",
+      "_description": "Array",
+      "_hasChildren": true,
+      "_size": 1,
+      "_preview": {
+        "_type": "object",
+        "_subtype": "array",
+        "_description": "Array",
+        "_lossless": true,
+        "_overflow": false,
+        "_size": 1,
+        "_properties": [
+          {
+            "_name": "0",
+            "_type": "string",
+            "_value": "firstName"
+          }
+        ],
+        "_entries": null
+      }
+    }
+  ],
+  "_stackTrace": "<filtered>",
+  "_request": null
+}
+

Copied: trunk/LayoutTests/inspector/console/console-table.html (from rev 185539, trunk/LayoutTests/inspector/console/console-api.html) (0 => 185540)


--- trunk/LayoutTests/inspector/console/console-table.html	                        (rev 0)
+++ trunk/LayoutTests/inspector/console/console-table.html	2015-06-13 20:42:04 UTC (rev 185540)
@@ -0,0 +1,52 @@
+<!doctype html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<script src=""
+<script>
+function Person(firstName, lastName) {
+    this.firstName = firstName;
+    this.lastName = lastName;
+}
+
+var john = new Person("John", "Smith");
+var jane = new Person("Jane", "Doe");
+var emily = new Person("Emily", "Jones");
+
+function test()
+{
+    var currentStepIndex = 0;
+    var steps = [
+        "console.table([])", // Empty.
+        "console.table(['apple', 'orange', 'banana'])", // Index (array index), Value
+        "console.table({firstName: 'John', lastName: 'Smith'})", // Index (property name), Value (property value)
+        "console.table([['John', 'Smith'], ['Jane', 'Doe'], ['Emily', 'Jones']])", // Index, 0, 1
+        "console.table([john, jane, emily])", // Index, firstName, lastName
+        "console.table([john, jane, emily], ['firstName'])", // Index, firstName (at least).
+    ];
+
+    function remoteObjectJSONFilter(key, value)
+    {
+        if (key === "_objectId" || key === "_stackTrace")
+            return "<filtered>";
+        return value;
+    }
+
+    WebInspector.logManager.addEventListener(WebInspector.LogManager.Event.MessageAdded, function(event) {
+        var message = event.data.message;
+        InspectorTest.assert(message instanceof WebInspector.ConsoleMessage);
+        InspectorTest.log("\nSTEP: " + steps[currentStepIndex]);
+        InspectorTest.log(JSON.stringify(message, remoteObjectJSONFilter, "  "));
+
+        if (++currentStepIndex >= steps.length)
+            InspectorTest.completeTest();
+    });
+
+    for (var step of steps)
+        WebInspector.runtimeManager.evaluateInInspectedWindow(step, "test", false, true, false, true, false, function(){});
+}
+</script>
+</head>
+<body _onload_="runTest();">
+</body>
+</html>

Modified: trunk/Source/_javascript_Core/ChangeLog (185539 => 185540)


--- trunk/Source/_javascript_Core/ChangeLog	2015-06-13 19:28:38 UTC (rev 185539)
+++ trunk/Source/_javascript_Core/ChangeLog	2015-06-13 20:42:04 UTC (rev 185540)
@@ -1,3 +1,17 @@
+2015-06-13  Joseph Pecoraro  <[email protected]>
+
+        Web Inspector: console.table() with a list of objects no longer works
+        https://bugs.webkit.org/show_bug.cgi?id=145952
+
+        Reviewed by Timothy Hatcher.
+
+        * inspector/InjectedScriptSource.js:
+        (InjectedScript.RemoteObject.prototype._generatePreview):
+        Calling generatePreview again was actually starting with a preview
+        of the current object instead of the sub-value. Go down the other
+        path that correctly generates sub-previews. Leave filtering on the
+        backend unimplemented, which we were already ignoring.
+
 2015-06-13  Youenn Fablet  <[email protected]>
 
         [Streams API] ReadableJSStream should handle promises returned by JS source start callback

Modified: trunk/Source/_javascript_Core/inspector/InjectedScriptSource.js (185539 => 185540)


--- trunk/Source/_javascript_Core/inspector/InjectedScriptSource.js	2015-06-13 19:28:38 UTC (rev 185539)
+++ trunk/Source/_javascript_Core/inspector/InjectedScriptSource.js	2015-06-13 20:42:04 UTC (rev 185540)
@@ -1102,7 +1102,8 @@
                 continue;
 
             // If we have a filter, only show properties in the filter.
-            if (firstLevelKeys && firstLevelKeys.indexOf(name) === -1)
+            // FIXME: Currently these filters do nothing on the backend.
+            if (firstLevelKeys && !firstLevelKeys.includes(name))
                 continue;
 
             // Getter/setter.
@@ -1157,14 +1158,8 @@
                 property.subtype = subtype;
 
             // Second level.
-            if (secondLevelKeys === null || secondLevelKeys) {
-                var subPreview = this._generatePreview(value, secondLevelKeys || undefined, undefined);
-                property.valuePreview = subPreview;
-                if (!subPreview.lossless)
-                    preview.lossless = false;
-                if (subPreview.overflow)
-                    preview.overflow = true;
-            } else if (this._isPreviewableObject(value)) {
+            if ((secondLevelKeys === null || secondLevelKeys) || this._isPreviewableObject(value)) {
+                // FIXME: If we want secondLevelKeys filter to continue we would need some refactoring.
                 var subPreview = this._createObjectPreviewForValue(value);
                 property.valuePreview = subPreview;
                 if (!subPreview.lossless)

Modified: trunk/Source/WebInspectorUI/ChangeLog (185539 => 185540)


--- trunk/Source/WebInspectorUI/ChangeLog	2015-06-13 19:28:38 UTC (rev 185539)
+++ trunk/Source/WebInspectorUI/ChangeLog	2015-06-13 20:42:04 UTC (rev 185540)
@@ -1,3 +1,16 @@
+2015-06-13  Joseph Pecoraro  <[email protected]>
+
+        Web Inspector: console.table() with a list of objects no longer works
+        https://bugs.webkit.org/show_bug.cgi?id=145952
+
+        Reviewed by Timothy Hatcher.
+
+        * UserInterface/Views/ConsoleMessageView.js:
+        (WebInspector.ConsoleMessageView.prototype._appendMessageTextAndArguments):
+        (WebInspector.ConsoleMessageView.prototype._formatParameterAsTable):
+        Don't allow expanding a cosole.table message, and don't output the total
+        object even if the table preview was lossless, as the experience is poor.
+
 2015-06-11  Joseph Pecoraro  <[email protected]>
 
         Web Inspector: CSS Regions not displaying DOM Trees in inspector

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js (185539 => 185540)


--- trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js	2015-06-13 19:28:38 UTC (rev 185539)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js	2015-06-13 20:42:04 UTC (rev 185540)
@@ -243,9 +243,9 @@
                 break;
 
             case WebInspector.ConsoleMessage.MessageType.Table:
-                // FIXME: Remove messageText?
-                var args = this._message.parameters || [this._message.messageText];
+                var args = this._message.parameters;
                 element.appendChild(this._formatParameterAsTable(args));
+                this._extraParameters = null;
                 break;
 
             default:
@@ -735,13 +735,12 @@
             }
         }
 
-        // If lossless or not table data, output the object so full data can be gotten.
-        if (!preview.lossless || !flatValues.length) {
-            element.appendChild(this._formatParameter(table));
-            if (!flatValues.length)
-                return element;
-        }
+        // If no table data show nothing.
+        if (!flatValues.length)
+            return element;
 
+        // FIXME: Should we output something extra if the preview is lossless?
+
         var dataGrid = WebInspector.DataGrid.createSortableDataGrid(columnNames, flatValues);
         dataGrid.element.classList.add("inline");
         element.appendChild(dataGrid.element);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to