<!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>[193053] branches/safari-601-branch/Source/WebInspectorUI</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/193053">193053</a></dd>
<dt>Author</dt> <dd>timothy@apple.com</dd>
<dt>Date</dt> <dd>2015-12-03 10:35:53 -0800 (Thu, 03 Dec 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/187873">r187873</a>. rdar://problem/23221163</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchessafari601branchSourceWebInspectorUIChangeLog">branches/safari-601-branch/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsDOMTreeDataGridjs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DOMTreeDataGrid.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsDataGridjs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DataGrid.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsDatabaseTableContentViewjs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsIndexedDatabaseEntryDataGridNodejs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/IndexedDatabaseEntryDataGridNode.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsLayerTreeDataGridNodejs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayerTreeDataGridNode.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsLayoutTimelineDataGridjs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGrid.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsLayoutTimelineDataGridNodejs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGridNode.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsProbeSetDataGridjs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ProbeSetDataGrid.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsProfileNodeDataGridNodejs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ProfileNodeDataGridNode.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsRenderingFrameTimelineDataGridNodejs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/RenderingFrameTimelineDataGridNode.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsResourceTimelineDataGridNodejs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNode.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsScriptTimelineDataGridjs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGrid.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsScriptTimelineDataGridNodejs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGridNode.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsSourceCodeTimelineTimelineDataGridNodejs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsTimelineDataGridjs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/TimelineDataGrid.js</a></li>
<li><a href="#branchessafari601branchSourceWebInspectorUIUserInterfaceViewsTimelineDataGridNodejs">branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNode.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchessafari601branchSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/ChangeLog (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/ChangeLog        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/ChangeLog        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,38 @@
</span><span class="cx"> 2015-12-01  Timothy Hatcher  &lt;timothy@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Merge r187873. rdar://problem/23221163
+
+    2015-08-04  Brian J. Burg  &lt;bburg@apple.com&gt;
+
+            Web Inspector: Convert DataGrid and DataGridNode classes to ES6 classes
+            https://bugs.webkit.org/show_bug.cgi?id=147439
+
+            Reviewed by Joseph Pecoraro.
+
+            Along the way, inline a few style class names.
+
+            Elided mechanical changes from the Changelog.
+
+            * UserInterface/Views/DOMTreeDataGrid.js:
+            * UserInterface/Views/DataGrid.js:
+            * UserInterface/Views/DatabaseTableContentView.js:
+            * UserInterface/Views/IndexedDatabaseEntryDataGridNode.js:
+            * UserInterface/Views/LayerTreeDataGridNode.js:
+            * UserInterface/Views/LayoutTimelineDataGrid.js:
+            * UserInterface/Views/LayoutTimelineDataGridNode.js:
+            * UserInterface/Views/ProbeSetDataGrid.js:
+            * UserInterface/Views/ProfileNodeDataGridNode.js:
+            * UserInterface/Views/RenderingFrameTimelineDataGridNode.js:
+            * UserInterface/Views/ResourceTimelineDataGridNode.js:
+            * UserInterface/Views/ScriptTimelineDataGrid.js:
+            * UserInterface/Views/ScriptTimelineDataGridNode.js:
+            * UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js:
+            * UserInterface/Views/TimelineDataGrid.js:
+            * UserInterface/Views/TimelineDataGridNode.js: Move a function definition out
+            of an else branch, since this is not allowed in ES6 strict mode.
+
+2015-12-01  Timothy Hatcher  &lt;timothy@apple.com&gt;
+
</ins><span class="cx">         Merge r187872. rdar://problem/23221163
</span><span class="cx"> 
</span><span class="cx">     2015-08-04  Brian J. Burg  &lt;burg@cs.washington.edu&gt;
</span></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsDOMTreeDataGridjs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DOMTreeDataGrid.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DOMTreeDataGrid.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DOMTreeDataGrid.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) 2013 Adobe Systems Inc. All rights reserved.
</span><ins>+ * Copyright (C) 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,33 +24,34 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.DOMTreeDataGrid = function() {
-    WebInspector.DataGrid.call(this, {
-        name: { title: WebInspector.UIString(&quot;Node&quot;), sortable: false }
-    });
</del><ins>+WebInspector.DOMTreeDataGrid = class DOMTreeDataGrid extends WebInspector.DataGrid
+{
+    constructor()
+    {
+        super({
+            name: {title: WebInspector.UIString(&quot;Node&quot;), sortable: false}
+        });
</ins><span class="cx"> 
</span><del>-    this._previousHoveredElement = null;
</del><ins>+        this._previousHoveredElement = null;
</ins><span class="cx"> 
</span><del>-    this.element.classList.add(&quot;inline&quot;, &quot;dom-tree-data-grid&quot;);
</del><ins>+        this.element.classList.add(&quot;inline&quot;, &quot;dom-tree-data-grid&quot;);
</ins><span class="cx"> 
</span><del>-    this.element.addEventListener(&quot;mousemove&quot;, this._onmousemove.bind(this), false);
-    this.element.addEventListener(&quot;mouseout&quot;, this._onmouseout.bind(this), false);
-};
</del><ins>+        this.element.addEventListener(&quot;mousemove&quot;, this._onmousemove.bind(this), false);
+        this.element.addEventListener(&quot;mouseout&quot;, this._onmouseout.bind(this), false);
+    }
</ins><span class="cx"> 
</span><del>-WebInspector.DOMTreeDataGrid.prototype = {
-    constructor: WebInspector.DOMTreeDataGrid,
-    __proto__: WebInspector.DataGrid.prototype,
</del><ins>+    // Private
</ins><span class="cx"> 
</span><del>-    _onmousemove: function(event)
</del><ins>+    _onmousemove(event)
</ins><span class="cx">     {
</span><span class="cx">         var gridNode = this.dataGridNodeFromNode(event.target);
</span><span class="cx">         if (!gridNode || this._previousHoveredElement === gridNode.domNode)
</span><span class="cx">             return;
</span><span class="cx">         this._previousHoveredElement = gridNode.domNode;
</span><span class="cx">         WebInspector.domTreeManager.highlightDOMNode(gridNode.domNode.id);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _onmouseout: function(event) {
</del><ins>+    _onmouseout(event) {
</ins><span class="cx">         if (!this._previousHoveredElement)
</span><span class="cx">             return;
</span><span class="cx">         WebInspector.domTreeManager.hideDOMNodeHighlight();
</span></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsDataGridjs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DataGrid.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DataGrid.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DataGrid.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2008, 2013, 2014 Apple Inc. All Rights Reserved.
</del><ins>+ * Copyright (C) 2008, 2013-2015 Apple Inc. All Rights Reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,180 +23,162 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.DataGrid = function(columnsData, editCallback, deleteCallback, preferredColumnOrder)
</del><ins>+WebInspector.DataGrid = class DataGrid extends WebInspector.Object
</ins><span class="cx"> {
</span><del>-    this.columns = new Map;
-    this.orderedColumns = [];
</del><ins>+    constructor(columnsData, editCallback, deleteCallback, preferredColumnOrder)
+    {
+        super();
</ins><span class="cx"> 
</span><del>-    this._sortColumnIdentifier = null;
-    this._sortOrder = WebInspector.DataGrid.SortOrder.Indeterminate;
</del><ins>+        this.columns = new Map;
+        this.orderedColumns = [];
</ins><span class="cx"> 
</span><del>-    this.children = [];
-    this.selectedNode = null;
-    this.expandNodesWhenArrowing = false;
-    this.root = true;
-    this.hasChildren = false;
-    this.expanded = true;
-    this.revealed = true;
-    this.selected = false;
-    this.dataGrid = this;
-    this.indentWidth = 15;
-    this.resizers = [];
-    this._columnWidthsInitialized = false;
</del><ins>+        this._sortColumnIdentifier = null;
+        this._sortOrder = WebInspector.DataGrid.SortOrder.Indeterminate;
</ins><span class="cx"> 
</span><del>-    this.element = document.createElement(&quot;div&quot;);
-    this.element.className = &quot;data-grid&quot;;
-    this.element.tabIndex = 0;
-    this.element.addEventListener(&quot;keydown&quot;, this._keyDown.bind(this), false);
-    this.element.copyHandler = this;
</del><ins>+        this.children = [];
+        this.selectedNode = null;
+        this.expandNodesWhenArrowing = false;
+        this.root = true;
+        this.hasChildren = false;
+        this.expanded = true;
+        this.revealed = true;
+        this.selected = false;
+        this.dataGrid = this;
+        this.indentWidth = 15;
+        this.resizers = [];
+        this._columnWidthsInitialized = false;
</ins><span class="cx"> 
</span><del>-    this._headerTableElement = document.createElement(&quot;table&quot;);
-    this._headerTableElement.className = &quot;header&quot;;
-    this._headerTableColumnGroupElement = this._headerTableElement.createChild(&quot;colgroup&quot;);
-    this._headerTableBodyElement = this._headerTableElement.createChild(&quot;tbody&quot;);
-    this._headerTableRowElement = this._headerTableBodyElement.createChild(&quot;tr&quot;);
-    this._headerTableCellElements = new Map;
</del><ins>+        this.element = document.createElement(&quot;div&quot;);
+        this.element.className = &quot;data-grid&quot;;
+        this.element.tabIndex = 0;
+        this.element.addEventListener(&quot;keydown&quot;, this._keyDown.bind(this), false);
+        this.element.copyHandler = this;
</ins><span class="cx"> 
</span><del>-    this._scrollContainerElement = document.createElement(&quot;div&quot;);
-    this._scrollContainerElement.className = &quot;data-container&quot;;
</del><ins>+        this._headerTableElement = document.createElement(&quot;table&quot;);
+        this._headerTableElement.className = &quot;header&quot;;
+        this._headerTableColumnGroupElement = this._headerTableElement.createChild(&quot;colgroup&quot;);
+        this._headerTableBodyElement = this._headerTableElement.createChild(&quot;tbody&quot;);
+        this._headerTableRowElement = this._headerTableBodyElement.createChild(&quot;tr&quot;);
+        this._headerTableCellElements = new Map;
</ins><span class="cx"> 
</span><del>-    this._dataTableElement = this._scrollContainerElement.createChild(&quot;table&quot;);
-    this._dataTableElement.className = &quot;data&quot;;
</del><ins>+        this._scrollContainerElement = document.createElement(&quot;div&quot;);
+        this._scrollContainerElement.className = &quot;data-container&quot;;
</ins><span class="cx"> 
</span><del>-    this._dataTableElement.addEventListener(&quot;mousedown&quot;, this._mouseDownInDataTable.bind(this));
-    this._dataTableElement.addEventListener(&quot;click&quot;, this._clickInDataTable.bind(this));
-    this._dataTableElement.addEventListener(&quot;contextmenu&quot;, this._contextMenuInDataTable.bind(this), true);
</del><ins>+        this._dataTableElement = this._scrollContainerElement.createChild(&quot;table&quot;);
+        this._dataTableElement.className = &quot;data&quot;;
</ins><span class="cx"> 
</span><del>-    // FIXME: Add a createCallback which is different from editCallback and has different
-    // behavior when creating a new node.
-    if (editCallback) {
-        this._dataTableElement.addEventListener(&quot;dblclick&quot;, this._ondblclick.bind(this), false);
-        this._editCallback = editCallback;
-    }
-    if (deleteCallback)
-        this._deleteCallback = deleteCallback;
</del><ins>+        this._dataTableElement.addEventListener(&quot;mousedown&quot;, this._mouseDownInDataTable.bind(this));
+        this._dataTableElement.addEventListener(&quot;click&quot;, this._clickInDataTable.bind(this));
+        this._dataTableElement.addEventListener(&quot;contextmenu&quot;, this._contextMenuInDataTable.bind(this), true);
</ins><span class="cx"> 
</span><del>-    this._dataTableColumnGroupElement = this._headerTableColumnGroupElement.cloneNode(true);
-    this._dataTableElement.appendChild(this._dataTableColumnGroupElement);
</del><ins>+        // FIXME: Add a createCallback which is different from editCallback and has different
+        // behavior when creating a new node.
+        if (editCallback) {
+            this._dataTableElement.addEventListener(&quot;dblclick&quot;, this._ondblclick.bind(this), false);
+            this._editCallback = editCallback;
+        }
+        if (deleteCallback)
+            this._deleteCallback = deleteCallback;
</ins><span class="cx"> 
</span><del>-    // This element is used by DataGridNodes to manipulate table rows and cells.
-    this.dataTableBodyElement = this._dataTableElement.createChild(&quot;tbody&quot;);
-    this._fillerRowElement = this.dataTableBodyElement.createChild(&quot;tr&quot;);
-    this._fillerRowElement.className = &quot;filler&quot;;
</del><ins>+        this._dataTableColumnGroupElement = this._headerTableColumnGroupElement.cloneNode(true);
+        this._dataTableElement.appendChild(this._dataTableColumnGroupElement);
</ins><span class="cx"> 
</span><del>-    this.element.appendChild(this._headerTableElement);
-    this.element.appendChild(this._scrollContainerElement);
</del><ins>+        // This element is used by DataGridNodes to manipulate table rows and cells.
+        this.dataTableBodyElement = this._dataTableElement.createChild(&quot;tbody&quot;);
+        this._fillerRowElement = this.dataTableBodyElement.createChild(&quot;tr&quot;);
+        this._fillerRowElement.className = &quot;filler&quot;;
</ins><span class="cx"> 
</span><del>-    if (preferredColumnOrder) {
-        for (var columnIdentifier of preferredColumnOrder)
-            this.insertColumn(columnIdentifier, columnsData[columnIdentifier]);
-    } else {
-        for (var columnIdentifier in columnsData)
-            this.insertColumn(columnIdentifier, columnsData[columnIdentifier]);
-    }
</del><ins>+        this.element.appendChild(this._headerTableElement);
+        this.element.appendChild(this._scrollContainerElement);
</ins><span class="cx"> 
</span><del>-    this._generateSortIndicatorImagesIfNeeded();
-}
</del><ins>+        if (preferredColumnOrder) {
+            for (var columnIdentifier of preferredColumnOrder)
+                this.insertColumn(columnIdentifier, columnsData[columnIdentifier]);
+        } else {
+            for (var columnIdentifier in columnsData)
+                this.insertColumn(columnIdentifier, columnsData[columnIdentifier]);
+        }
</ins><span class="cx"> 
</span><del>-WebInspector.DataGrid.Event = {
-    DidLayout: &quot;datagrid-did-layout&quot;,
-    SortChanged: &quot;datagrid-sort-changed&quot;,
-    SelectedNodeChanged: &quot;datagrid-selected-node-changed&quot;,
-    ExpandedNode: &quot;datagrid-expanded-node&quot;,
-    CollapsedNode: &quot;datagrid-collapsed-node&quot;
-};
-
-WebInspector.DataGrid.SortOrder = {
-    Indeterminate: &quot;data-grid-sort-order-indeterminate&quot;,
-    Ascending: &quot;data-grid-sort-order-ascending&quot;,
-    Descending: &quot;data-grid-sort-order-descending&quot;
-};
-
-WebInspector.DataGrid.PreviousColumnOrdinalSymbol = Symbol(&quot;previous-column-ordinal&quot;);
-WebInspector.DataGrid.NextColumnOrdinalSymbol = Symbol(&quot;next-column-ordinal&quot;);
-
-WebInspector.DataGrid.SortColumnAscendingStyleClassName = &quot;sort-ascending&quot;;
-WebInspector.DataGrid.SortColumnDescendingStyleClassName = &quot;sort-descending&quot;;
-WebInspector.DataGrid.SortableColumnStyleClassName = &quot;sortable&quot;;
-
-WebInspector.DataGrid.createSortableDataGrid = function(columnNames, values)
-{
-    var numColumns = columnNames.length;
-    if (!numColumns)
-        return null;
-
-    var columnsData = {};
-    for (var columnName of columnNames) {
-        columnsData[columnName] = {
-            width: columnName.length,
-            title: columnName,
-            sortable: true,
-        };
</del><ins>+        this._generateSortIndicatorImagesIfNeeded();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    var dataGrid = new WebInspector.DataGrid(columnsData, undefined, undefined, columnNames);
-    for (var i = 0; i &lt; values.length / numColumns; ++i) {
-        var data = {};
-        for (var j = 0; j &lt; columnNames.length; ++j)
-            data[columnNames[j]] = values[numColumns * i + j];
</del><ins>+    static createSortableDataGrid(columnNames, values)
+    {
+        var numColumns = columnNames.length;
+        if (!numColumns)
+            return null;
</ins><span class="cx"> 
</span><del>-        var node = new WebInspector.DataGridNode(data, false);
-        dataGrid.appendChild(node);
-    }
</del><ins>+        var columnsData = {};
+        for (var columnName of columnNames) {
+            columnsData[columnName] = {
+                width: columnName.length,
+                title: columnName,
+                sortable: true,
+            };
+        }
</ins><span class="cx"> 
</span><del>-    function sortDataGrid()
-    {
-        var sortColumnIdentifier = dataGrid.sortColumnIdentifier;
</del><ins>+        var dataGrid = new WebInspector.DataGrid(columnsData, undefined, undefined, columnNames);
+        for (var i = 0; i &lt; values.length / numColumns; ++i) {
+            var data = {};
+            for (var j = 0; j &lt; columnNames.length; ++j)
+                data[columnNames[j]] = values[numColumns * i + j];
</ins><span class="cx"> 
</span><del>-        var columnIsNumeric = true;
-        for (var node of dataGrid.children) {
-            var value = dataGrid.textForDataGridNodeColumn(node, sortColumnIdentifier);
-            if (isNaN(Number(value)))
-                columnIsNumeric = false;
</del><ins>+            var node = new WebInspector.DataGridNode(data, false);
+            dataGrid.appendChild(node);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        function comparator(dataGridNode1, dataGridNode2)
</del><ins>+        function sortDataGrid()
</ins><span class="cx">         {
</span><del>-            var item1 = dataGrid.textForDataGridNodeColumn(dataGridNode1, sortColumnIdentifier);
-            var item2 = dataGrid.textForDataGridNodeColumn(dataGridNode2, sortColumnIdentifier);
</del><ins>+            var sortColumnIdentifier = dataGrid.sortColumnIdentifier;
</ins><span class="cx"> 
</span><del>-            var comparison;
-            if (columnIsNumeric) {
-                var number1 = parseFloat(item1);
-                var number2 = parseFloat(item2);
-                comparison = number1 &lt; number2 ? -1 : (number1 &gt; number2 ? 1 : 0);
-            } else
-                comparison = item1 &lt; item2 ? -1 : (item1 &gt; item2 ? 1 : 0);
</del><ins>+            var columnIsNumeric = true;
+            for (var node of dataGrid.children) {
+                var value = dataGrid.textForDataGridNodeColumn(node, sortColumnIdentifier);
+                if (isNaN(Number(value)))
+                    columnIsNumeric = false;
+            }
</ins><span class="cx"> 
</span><del>-            return comparison;
-        }
</del><ins>+            function comparator(dataGridNode1, dataGridNode2)
+            {
+                var item1 = dataGrid.textForDataGridNodeColumn(dataGridNode1, sortColumnIdentifier);
+                var item2 = dataGrid.textForDataGridNodeColumn(dataGridNode2, sortColumnIdentifier);
</ins><span class="cx"> 
</span><del>-        dataGrid.sortNodes(comparator);
-    }
</del><ins>+                var comparison;
+                if (columnIsNumeric) {
+                    var number1 = parseFloat(item1);
+                    var number2 = parseFloat(item2);
+                    comparison = number1 &lt; number2 ? -1 : (number1 &gt; number2 ? 1 : 0);
+                } else
+                    comparison = item1 &lt; item2 ? -1 : (item1 &gt; item2 ? 1 : 0);
</ins><span class="cx"> 
</span><del>-    dataGrid.addEventListener(WebInspector.DataGrid.Event.SortChanged, sortDataGrid, this);
</del><ins>+                return comparison;
+            }
</ins><span class="cx"> 
</span><del>-    dataGrid.sortOrder = WebInspector.DataGrid.SortOrder.Ascending;
-    dataGrid.sortColumnIdentifier = columnNames[0];
</del><ins>+            dataGrid.sortNodes(comparator);
+        }
</ins><span class="cx"> 
</span><del>-    return dataGrid;
-}
</del><ins>+        dataGrid.addEventListener(WebInspector.DataGrid.Event.SortChanged, sortDataGrid, this);
</ins><span class="cx"> 
</span><del>-WebInspector.DataGrid.prototype = {
</del><ins>+        dataGrid.sortOrder = WebInspector.DataGrid.SortOrder.Ascending;
+        dataGrid.sortColumnIdentifier = columnNames[0];
+
+        return dataGrid;
+    }
+
</ins><span class="cx">     get refreshCallback()
</span><span class="cx">     {
</span><span class="cx">         return this._refreshCallback;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set refreshCallback(refreshCallback)
</span><span class="cx">     {
</span><span class="cx">         this._refreshCallback = refreshCallback;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get sortOrder()
</span><span class="cx">     {
</span><span class="cx">         return this._sortOrder;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set sortOrder(order)
</span><span class="cx">     {
</span><span class="lines">@@ -214,12 +196,12 @@
</span><span class="cx">         sortHeaderCellElement.classList.toggle(WebInspector.DataGrid.SortColumnDescendingStyleClassName, this._sortOrder === WebInspector.DataGrid.SortOrder.Descending);
</span><span class="cx"> 
</span><span class="cx">         this.dispatchEventToListeners(WebInspector.DataGrid.Event.SortChanged);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get sortColumnIdentifier()
</span><span class="cx">     {
</span><span class="cx">         return this._sortColumnIdentifier;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set sortColumnIdentifier(columnIdentifier)
</span><span class="cx">     {
</span><span class="lines">@@ -245,17 +227,17 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         this.dispatchEventToListeners(WebInspector.DataGrid.Event.SortChanged);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _ondblclick: function(event)
</del><ins>+    _ondblclick(event)
</ins><span class="cx">     {
</span><span class="cx">         if (this._editing || this._editingNode)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         this._startEditing(event.target);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _startEditingNodeAtColumnIndex: function(node, columnIndex)
</del><ins>+    _startEditingNodeAtColumnIndex(node, columnIndex)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(node, &quot;Invalid argument: must provide DataGridNode to edit.&quot;);
</span><span class="cx"> 
</span><span class="lines">@@ -266,9 +248,9 @@
</span><span class="cx">         var element = this._editingNode._element.children[columnIndex];
</span><span class="cx">         WebInspector.startEditing(element, this._startEditingConfig(element));
</span><span class="cx">         window.getSelection().setBaseAndExtent(element, 0, element, 1);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _startEditing: function(target)
</del><ins>+    _startEditing(target)
</ins><span class="cx">     {
</span><span class="cx">         var element = target.enclosingNodeOrSelfWithNodeName(&quot;td&quot;);
</span><span class="cx">         if (!element)
</span><span class="lines">@@ -289,14 +271,14 @@
</span><span class="cx">         WebInspector.startEditing(element, this._startEditingConfig(element));
</span><span class="cx"> 
</span><span class="cx">         window.getSelection().setBaseAndExtent(element, 0, element, 1);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _startEditingConfig: function(element)
</del><ins>+    _startEditingConfig(element)
</ins><span class="cx">     {
</span><span class="cx">         return new WebInspector.EditingConfig(this._editingCommitted.bind(this), this._editingCancelled.bind(this), element.textContent);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _editingCommitted: function(element, newText, oldText, context, moveDirection)
</del><ins>+    _editingCommitted(element, newText, oldText, context, moveDirection)
</ins><span class="cx">     {
</span><span class="cx">         var columnIdentifier = element.__columnIdentifier;
</span><span class="cx">         var columnIndex = this.orderedColumns.indexOf(columnIdentifier);
</span><span class="lines">@@ -347,16 +329,16 @@
</span><span class="cx"> 
</span><span class="cx">         var textDidChange = textBeforeEditing.trim() !== newText.trim();
</span><span class="cx">         moveToNextCell.call(this, textDidChange);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _editingCancelled: function(element)
</del><ins>+    _editingCancelled(element)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(this._editingNode.element === element.enclosingNodeOrSelfWithNodeName(&quot;tr&quot;));
</span><span class="cx">         delete this._editing;
</span><span class="cx">         this._editingNode = null;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    autoSizeColumns: function(minPercent, maxPercent, maxDescentLevel)
</del><ins>+    autoSizeColumns(minPercent, maxPercent, maxDescentLevel)
</ins><span class="cx">     {
</span><span class="cx">         if (minPercent)
</span><span class="cx">             minPercent = Math.min(minPercent, Math.floor(100 / this.orderedColumns.length));
</span><span class="lines">@@ -421,9 +403,9 @@
</span><span class="cx">             column[&quot;element&quot;].style.width = widths[identifier] + &quot;%&quot;;
</span><span class="cx">         this._columnWidthsInitialized = false;
</span><span class="cx">         this.updateLayout();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    insertColumn: function(columnIdentifier, columnData, insertionIndex)
</del><ins>+    insertColumn(columnIdentifier, columnData, insertionIndex)
</ins><span class="cx">     {
</span><span class="cx">         if (insertionIndex === undefined)
</span><span class="cx">             insertionIndex = this.orderedColumns.length;
</span><span class="lines">@@ -515,9 +497,9 @@
</span><span class="cx"> 
</span><span class="cx">         if (column[&quot;hidden&quot;])
</span><span class="cx">             this._hideColumn(columnIdentifier);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    removeColumn: function(columnIdentifier)
</del><ins>+    removeColumn(columnIdentifier)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(this.columns.has(columnIdentifier));
</span><span class="cx">         var removedColumn = this.columns.get(columnIdentifier);
</span><span class="lines">@@ -549,9 +531,9 @@
</span><span class="cx"> 
</span><span class="cx">         for (var child of this.children)
</span><span class="cx">             child.refresh();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _enumerateChildren: function(rootNode, result, maxLevel)
</del><ins>+    _enumerateChildren(rootNode, result, maxLevel)
</ins><span class="cx">     {
</span><span class="cx">         if (!rootNode.root)
</span><span class="cx">             result.push(rootNode);
</span><span class="lines">@@ -560,7 +542,7 @@
</span><span class="cx">         for (var i = 0; i &lt; rootNode.children.length; ++i)
</span><span class="cx">             this._enumerateChildren(rootNode.children[i], result, maxLevel - 1);
</span><span class="cx">         return result;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     // Updates the widths of the table, including the positions of the column
</span><span class="cx">     // resizers.
</span><span class="lines">@@ -572,7 +554,7 @@
</span><span class="cx">     //
</span><span class="cx">     // If this function is not called after the DataGrid is attached to its
</span><span class="cx">     // parent element, then the DataGrid's columns will not be resizable.
</span><del>-    updateLayout: function()
</del><ins>+    updateLayout()
</ins><span class="cx">     {
</span><span class="cx">         // Do not attempt to use offsetes if we're not attached to the document tree yet.
</span><span class="cx">         if (!this._columnWidthsInitialized &amp;&amp; this.element.offsetWidth) {
</span><span class="lines">@@ -601,9 +583,9 @@
</span><span class="cx"> 
</span><span class="cx">         this._positionResizerElements();
</span><span class="cx">         this.dispatchEventToListeners(WebInspector.DataGrid.Event.DidLayout);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    columnWidthsMap: function()
</del><ins>+    columnWidthsMap()
</ins><span class="cx">     {
</span><span class="cx">         var result = {};
</span><span class="cx">         for (var [identifier, column] of this.columns) {
</span><span class="lines">@@ -611,9 +593,9 @@
</span><span class="cx">             result[columnIdentifier] = parseFloat(width);
</span><span class="cx">         }
</span><span class="cx">         return result;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    applyColumnWidthsMap: function(columnWidthsMap)
</del><ins>+    applyColumnWidthsMap(columnWidthsMap)
</ins><span class="cx">     {
</span><span class="cx">         for (var [identifier, column] of this.columns) {
</span><span class="cx">             var width = (columnWidthsMap[identifier] || 0) + &quot;%&quot;;
</span><span class="lines">@@ -623,19 +605,19 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         this.updateLayout();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _isColumnVisible: function(columnIdentifier)
</del><ins>+    _isColumnVisible(columnIdentifier)
</ins><span class="cx">     {
</span><span class="cx">         return !this.columns.get(columnIdentifier)[&quot;hidden&quot;];
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _showColumn: function(columnIdentifier)
</del><ins>+    _showColumn(columnIdentifier)
</ins><span class="cx">     {
</span><span class="cx">         delete this.columns.get(columnIdentifier)[&quot;hidden&quot;];
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _hideColumn: function(columnIdentifier)
</del><ins>+    _hideColumn(columnIdentifier)
</ins><span class="cx">     {
</span><span class="cx">         var column = this.columns.get(columnIdentifier);
</span><span class="cx">         column[&quot;hidden&quot;] = true;
</span><span class="lines">@@ -644,24 +626,24 @@
</span><span class="cx">         columnElement.style.width = 0;
</span><span class="cx"> 
</span><span class="cx">         this._columnWidthsInitialized = false;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get scrollContainer()
</span><span class="cx">     {
</span><span class="cx">         return this._scrollContainerElement;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    isScrolledToLastRow: function()
</del><ins>+    isScrolledToLastRow()
</ins><span class="cx">     {
</span><span class="cx">         return this._scrollContainerElement.isScrolledToBottom();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    scrollToLastRow: function()
</del><ins>+    scrollToLastRow()
</ins><span class="cx">     {
</span><span class="cx">         this._scrollContainerElement.scrollTop = this._scrollContainerElement.scrollHeight - this._scrollContainerElement.offsetHeight;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _positionResizerElements: function()
</del><ins>+    _positionResizerElements()
</ins><span class="cx">     {
</span><span class="cx">         var left = 0;
</span><span class="cx">         var previousResizer = null;
</span><span class="lines">@@ -698,9 +680,9 @@
</span><span class="cx">         }
</span><span class="cx">         if (previousResizer)
</span><span class="cx">             previousResizer[WebInspector.DataGrid.NextColumnOrdinalSymbol] = this.orderedColumns.length - 1;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    addPlaceholderNode: function()
</del><ins>+    addPlaceholderNode()
</ins><span class="cx">     {
</span><span class="cx">         if (this.placeholderNode)
</span><span class="cx">             this.placeholderNode.makeNormal();
</span><span class="lines">@@ -710,14 +692,14 @@
</span><span class="cx">             emptyData[identifier] = &quot;&quot;;
</span><span class="cx">         this.placeholderNode = new WebInspector.PlaceholderDataGridNode(emptyData);
</span><span class="cx">         this.appendChild(this.placeholderNode);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    appendChild: function(child)
</del><ins>+    appendChild(child)
</ins><span class="cx">     {
</span><span class="cx">         this.insertChild(child, this.children.length);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    insertChild: function(child, index)
</del><ins>+    insertChild(child, index)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(child);
</span><span class="cx">         if (!child)
</span><span class="lines">@@ -754,9 +736,9 @@
</span><span class="cx"> 
</span><span class="cx">         if (this.expanded)
</span><span class="cx">             child._attach();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    removeChild: function(child)
</del><ins>+    removeChild(child)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(child);
</span><span class="cx">         if (!child)
</span><span class="lines">@@ -785,9 +767,9 @@
</span><span class="cx">             this.hasChildren = false;
</span><span class="cx"> 
</span><span class="cx">         console.assert(!child.isPlaceholderNode, &quot;Shouldn't delete the placeholder node.&quot;);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    removeChildren: function()
</del><ins>+    removeChildren()
</ins><span class="cx">     {
</span><span class="cx">         for (var i = 0; i &lt; this.children.length; ++i) {
</span><span class="cx">             var child = this.children[i];
</span><span class="lines">@@ -802,9 +784,9 @@
</span><span class="cx"> 
</span><span class="cx">         this.children = [];
</span><span class="cx">         this.hasChildren = false;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    removeChildrenRecursive: function()
</del><ins>+    removeChildrenRecursive()
</ins><span class="cx">     {
</span><span class="cx">         var childrenToRemove = this.children;
</span><span class="cx"> 
</span><span class="lines">@@ -828,22 +810,22 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         this.children = [];
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    sortNodes: function(comparator)
</del><ins>+    sortNodes(comparator)
</ins><span class="cx">     {
</span><span class="cx">         if (this._sortNodesRequestId)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         this._sortNodesRequestId = window.requestAnimationFrame(this._sortNodesCallback.bind(this, comparator));
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    sortNodesImmediately: function(comparator)
</del><ins>+    sortNodesImmediately(comparator)
</ins><span class="cx">     {
</span><span class="cx">         this._sortNodesCallback(comparator);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _sortNodesCallback: function(comparator)
</del><ins>+    _sortNodesCallback(comparator)
</ins><span class="cx">     {
</span><span class="cx">         function comparatorWrapper(aRow, bRow)
</span><span class="cx">         {
</span><span class="lines">@@ -889,9 +871,9 @@
</span><span class="cx">             previousSiblingNode.nextSibling = null;
</span><span class="cx"> 
</span><span class="cx">         tbody.appendChild(fillerRowElement); // We expect to find a filler row when attaching nodes.
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _keyDown: function(event)
</del><ins>+    _keyDown(event)
</ins><span class="cx">     {
</span><span class="cx">         if (!this.selectedNode || event.shiftKey || event.metaKey || event.ctrlKey || this._editing)
</span><span class="cx">             return;
</span><span class="lines">@@ -960,42 +942,42 @@
</span><span class="cx">             event.preventDefault();
</span><span class="cx">             event.stopPropagation();
</span><span class="cx">         }
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    expand: function()
</del><ins>+    expand()
</ins><span class="cx">     {
</span><span class="cx">         // This is the root, do nothing.
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    collapse: function()
</del><ins>+    collapse()
</ins><span class="cx">     {
</span><span class="cx">         // This is the root, do nothing.
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    reveal: function()
</del><ins>+    reveal()
</ins><span class="cx">     {
</span><span class="cx">         // This is the root, do nothing.
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    revealAndSelect: function()
</del><ins>+    revealAndSelect()
</ins><span class="cx">     {
</span><span class="cx">         // This is the root, do nothing.
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    dataGridNodeFromNode: function(target)
</del><ins>+    dataGridNodeFromNode(target)
</ins><span class="cx">     {
</span><span class="cx">         var rowElement = target.enclosingNodeOrSelfWithNodeName(&quot;tr&quot;);
</span><span class="cx">         return rowElement &amp;&amp; rowElement._dataGridNode;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    dataGridNodeFromPoint: function(x, y)
</del><ins>+    dataGridNodeFromPoint(x, y)
</ins><span class="cx">     {
</span><span class="cx">         var node = this._dataTableElement.ownerDocument.elementFromPoint(x, y);
</span><span class="cx">         var rowElement = node.enclosingNodeOrSelfWithNodeName(&quot;tr&quot;);
</span><span class="cx">         return rowElement &amp;&amp; rowElement._dataGridNode;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _headerCellClicked: function(event)
</del><ins>+    _headerCellClicked(event)
</ins><span class="cx">     {
</span><span class="cx">         var cell = event.target.enclosingNodeOrSelfWithNodeName(&quot;th&quot;);
</span><span class="cx">         if (!cell || !cell.columnIdentifier || !cell.classList.contains(WebInspector.DataGrid.SortableColumnStyleClassName))
</span><span class="lines">@@ -1009,27 +991,27 @@
</span><span class="cx">                 this.sortOrder = WebInspector.DataGrid.SortOrder.Ascending;
</span><span class="cx">         } else
</span><span class="cx">             this.sortColumnIdentifier = clickedColumnIdentifier;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _mouseoverColumnCollapser: function(event)
</del><ins>+    _mouseoverColumnCollapser(event)
</ins><span class="cx">     {
</span><span class="cx">         var cell = event.target.enclosingNodeOrSelfWithNodeName(&quot;th&quot;);
</span><span class="cx">         if (!cell || !cell.collapsesGroup)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         cell.classList.add(&quot;mouse-over-collapser&quot;);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _mouseoutColumnCollapser: function(event)
</del><ins>+    _mouseoutColumnCollapser(event)
</ins><span class="cx">     {
</span><span class="cx">         var cell = event.target.enclosingNodeOrSelfWithNodeName(&quot;th&quot;);
</span><span class="cx">         if (!cell || !cell.collapsesGroup)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         cell.classList.remove(&quot;mouse-over-collapser&quot;);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _clickInColumnCollapser: function(event)
</del><ins>+    _clickInColumnCollapser(event)
</ins><span class="cx">     {
</span><span class="cx">         var cell = event.target.enclosingNodeOrSelfWithNodeName(&quot;th&quot;);
</span><span class="cx">         if (!cell || !cell.collapsesGroup)
</span><span class="lines">@@ -1039,9 +1021,9 @@
</span><span class="cx"> 
</span><span class="cx">         event.stopPropagation();
</span><span class="cx">         event.preventDefault();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    collapseColumnGroup: function(columnGroup)
</del><ins>+    collapseColumnGroup(columnGroup)
</ins><span class="cx">     {
</span><span class="cx">         var collapserColumnIdentifier = null;
</span><span class="cx">         for (var [identifier, column] of this.columns) {
</span><span class="lines">@@ -1057,9 +1039,9 @@
</span><span class="cx"> 
</span><span class="cx">         var cell = this._headerTableCellElements.get(collapserColumnIdentifier);
</span><span class="cx">         this._collapseColumnGroupWithCell(cell);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _collapseColumnGroupWithCell: function(cell)
</del><ins>+    _collapseColumnGroupWithCell(cell)
</ins><span class="cx">     {
</span><span class="cx">         var columnsWillCollapse = cell.classList.toggle(&quot;collapsed&quot;);
</span><span class="cx"> 
</span><span class="lines">@@ -1076,34 +1058,34 @@
</span><span class="cx">             collapserButton.title = columnsWillCollapse ? this._collapserButtonExpandColumnsToolTip() : this._collapserButtonCollapseColumnsToolTip();
</span><span class="cx"> 
</span><span class="cx">         this.didToggleColumnGroup(cell.collapsesGroup, columnsWillCollapse);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _collapserButtonCollapseColumnsToolTip: function()
</del><ins>+    _collapserButtonCollapseColumnsToolTip()
</ins><span class="cx">     {
</span><span class="cx">         return WebInspector.UIString(&quot;Collapse columns&quot;);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _collapserButtonExpandColumnsToolTip: function()
</del><ins>+    _collapserButtonExpandColumnsToolTip()
</ins><span class="cx">     {
</span><span class="cx">         return WebInspector.UIString(&quot;Expand columns&quot;);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    willToggleColumnGroup: function(columnGroup, willCollapse)
</del><ins>+    willToggleColumnGroup(columnGroup, willCollapse)
</ins><span class="cx">     {
</span><span class="cx">         // Implemented by subclasses if needed.
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    didToggleColumnGroup: function(columnGroup, didCollapse)
</del><ins>+    didToggleColumnGroup(columnGroup, didCollapse)
</ins><span class="cx">     {
</span><span class="cx">         // Implemented by subclasses if needed.
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    headerTableHeader: function(columnIdentifier)
</del><ins>+    headerTableHeader(columnIdentifier)
</ins><span class="cx">     {
</span><span class="cx">         return this._headerTableCellElements.get(columnIdentifier);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _generateSortIndicatorImagesIfNeeded: function()
</del><ins>+    _generateSortIndicatorImagesIfNeeded()
</ins><span class="cx">     {
</span><span class="cx">         if (WebInspector.DataGrid._generatedSortIndicatorImages)
</span><span class="cx">             return;
</span><span class="lines">@@ -1116,9 +1098,9 @@
</span><span class="cx"> 
</span><span class="cx">         generateColoredImagesForCSS(&quot;Images/SortIndicatorDownArrow.svg&quot;, specifications, 9, 8, &quot;data-grid-sort-indicator-down-&quot;);
</span><span class="cx">         generateColoredImagesForCSS(&quot;Images/SortIndicatorUpArrow.svg&quot;, specifications, 9, 8, &quot;data-grid-sort-indicator-up-&quot;);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _mouseDownInDataTable: function(event)
</del><ins>+    _mouseDownInDataTable(event)
</ins><span class="cx">     {
</span><span class="cx">         var gridNode = this.dataGridNodeFromNode(event.target);
</span><span class="cx">         if (!gridNode || !gridNode.selectable)
</span><span class="lines">@@ -1134,9 +1116,9 @@
</span><span class="cx">                 gridNode.select();
</span><span class="cx">         } else
</span><span class="cx">             gridNode.select();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _contextMenuInDataTable: function(event)
</del><ins>+    _contextMenuInDataTable(event)
</ins><span class="cx">     {
</span><span class="cx">         var contextMenu = new WebInspector.ContextMenu(event);
</span><span class="cx"> 
</span><span class="lines">@@ -1162,9 +1144,9 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         contextMenu.show();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _clickInDataTable: function(event)
</del><ins>+    _clickInDataTable(event)
</ins><span class="cx">     {
</span><span class="cx">         var gridNode = this.dataGridNodeFromNode(event.target);
</span><span class="cx">         if (!gridNode || !gridNode.hasChildren)
</span><span class="lines">@@ -1184,15 +1166,15 @@
</span><span class="cx">             else
</span><span class="cx">                 gridNode.expand();
</span><span class="cx">         }
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    textForDataGridNodeColumn: function(node, columnIdentifier)
</del><ins>+    textForDataGridNodeColumn(node, columnIdentifier)
</ins><span class="cx">     {
</span><span class="cx">         var data = node.data[columnIdentifier];
</span><span class="cx">         return (data instanceof Node ? data.textContent : data) || &quot;&quot;;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _copyTextForDataGridNode: function(node)
</del><ins>+    _copyTextForDataGridNode(node)
</ins><span class="cx">     {
</span><span class="cx">         var fields = [];
</span><span class="cx">         for (var identifier of node.dataGrid.orderedColumns)
</span><span class="lines">@@ -1200,15 +1182,15 @@
</span><span class="cx"> 
</span><span class="cx">         var tabSeparatedValues = fields.join(&quot;\t&quot;);
</span><span class="cx">         return tabSeparatedValues;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    handleBeforeCopyEvent: function(event)
</del><ins>+    handleBeforeCopyEvent(event)
</ins><span class="cx">     {
</span><span class="cx">         if (this.selectedNode &amp;&amp; window.getSelection().isCollapsed)
</span><span class="cx">             event.preventDefault();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    handleCopyEvent: function(event)
</del><ins>+    handleCopyEvent(event)
</ins><span class="cx">     {
</span><span class="cx">         if (!this.selectedNode || !window.getSelection().isCollapsed)
</span><span class="cx">             return;
</span><span class="lines">@@ -1217,9 +1199,9 @@
</span><span class="cx">         event.clipboardData.setData(&quot;text/plain&quot;, copyText);
</span><span class="cx">         event.stopPropagation();
</span><span class="cx">         event.preventDefault();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _copyRow: function(target)
</del><ins>+    _copyRow(target)
</ins><span class="cx">     {
</span><span class="cx">         var gridNode = this.dataGridNodeFromNode(target);
</span><span class="cx">         if (!gridNode)
</span><span class="lines">@@ -1227,29 +1209,29 @@
</span><span class="cx"> 
</span><span class="cx">         var copyText = this._copyTextForDataGridNode(gridNode);
</span><span class="cx">         InspectorFrontendHost.copyText(copyText);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get resizeMethod()
</span><span class="cx">     {
</span><span class="cx">         if (!this._resizeMethod)
</span><span class="cx">             return WebInspector.DataGrid.ResizeMethod.Nearest;
</span><span class="cx">         return this._resizeMethod;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set resizeMethod(method)
</span><span class="cx">     {
</span><span class="cx">         this._resizeMethod = method;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    resizerDragStarted: function(resizer)
</del><ins>+    resizerDragStarted(resizer)
</ins><span class="cx">     {
</span><span class="cx">         if (!resizer[WebInspector.DataGrid.NextColumnOrdinalSymbol])
</span><span class="cx">             return true; // Abort the drag;
</span><span class="cx"> 
</span><span class="cx">         this._currentResizer = resizer;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    resizerDragging: function(resizer, positionDelta)
</del><ins>+    resizerDragging(resizer, positionDelta)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(resizer === this._currentResizer, resizer, this._currentResizer);
</span><span class="cx">         if (resizer != this._currentResizer)
</span><span class="lines">@@ -1296,9 +1278,9 @@
</span><span class="cx">         this._positionResizerElements();
</span><span class="cx">         event.preventDefault();
</span><span class="cx">         this.dispatchEventToListeners(WebInspector.DataGrid.Event.DidLayout);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    resizerDragEnded: function(resizer)
</del><ins>+    resizerDragEnded(resizer)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(resizer === this._currentResizer, resizer, this._currentResizer);
</span><span class="cx">         if (resizer != this._currentResizer)
</span><span class="lines">@@ -1306,52 +1288,73 @@
</span><span class="cx"> 
</span><span class="cx">         this._currentResizer = null;
</span><span class="cx">         this.dispatchEventToListeners(WebInspector.DataGrid.Event.DidLayout);
</span><del>-    },
</del><ins>+    }
+};
</ins><span class="cx"> 
</span><del>-    ColumnResizePadding: 10,
</del><ins>+WebInspector.DataGrid.Event = {
+    DidLayout: &quot;datagrid-did-layout&quot;,
+    SortChanged: &quot;datagrid-sort-changed&quot;,
+    SelectedNodeChanged: &quot;datagrid-selected-node-changed&quot;,
+    ExpandedNode: &quot;datagrid-expanded-node&quot;,
+    CollapsedNode: &quot;datagrid-collapsed-node&quot;
+};
</ins><span class="cx"> 
</span><del>-    CenterResizerOverBorderAdjustment: 3,
-}
-
</del><span class="cx"> WebInspector.DataGrid.ResizeMethod = {
</span><span class="cx">     Nearest: &quot;nearest&quot;,
</span><span class="cx">     First: &quot;first&quot;,
</span><span class="cx">     Last: &quot;last&quot;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-WebInspector.DataGrid.prototype.__proto__ = WebInspector.Object.prototype;
</del><ins>+WebInspector.DataGrid.SortOrder = {
+    Indeterminate: &quot;data-grid-sort-order-indeterminate&quot;,
+    Ascending: &quot;data-grid-sort-order-ascending&quot;,
+    Descending: &quot;data-grid-sort-order-descending&quot;
+};
</ins><span class="cx"> 
</span><del>-WebInspector.DataGridNode = function(data, hasChildren)
</del><ins>+WebInspector.DataGrid.PreviousColumnOrdinalSymbol = Symbol(&quot;previous-column-ordinal&quot;);
+WebInspector.DataGrid.NextColumnOrdinalSymbol = Symbol(&quot;next-column-ordinal&quot;);
+
+WebInspector.DataGrid.ColumnResizePadding = 10;
+WebInspector.DataGrid.CenterResizerOverBorderAdjustment = 3;
+
+WebInspector.DataGrid.SortColumnAscendingStyleClassName = &quot;sort-ascending&quot;;
+WebInspector.DataGrid.SortColumnDescendingStyleClassName = &quot;sort-descending&quot;;
+WebInspector.DataGrid.SortableColumnStyleClassName = &quot;sortable&quot;;
+
+WebInspector.DataGridNode = class DataGridNode extends WebInspector.Object
</ins><span class="cx"> {
</span><del>-    this._expanded = false;
-    this._selected = false;
-    this._copyable = true;
-    this._shouldRefreshChildren = true;
-    this._data = data || {};
-    this.hasChildren = hasChildren || false;
-    this.children = [];
-    this.dataGrid = null;
-    this.parent = null;
-    this.previousSibling = null;
-    this.nextSibling = null;
-    this.disclosureToggleWidth = 10;
-}
</del><ins>+    constructor(data, hasChildren)
+    {
+        super();
</ins><span class="cx"> 
</span><del>-WebInspector.DataGridNode.prototype = {
</del><ins>+        this._expanded = false;
+        this._selected = false;
+        this._copyable = true;
+        this._shouldRefreshChildren = true;
+        this._data = data || {};
+        this.hasChildren = hasChildren || false;
+        this.children = [];
+        this.dataGrid = null;
+        this.parent = null;
+        this.previousSibling = null;
+        this.nextSibling = null;
+        this.disclosureToggleWidth = 10;
+    }
+
</ins><span class="cx">     get selectable()
</span><span class="cx">     {
</span><span class="cx">         return !this._element || !this._element.classList.contains(&quot;hidden&quot;);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get copyable()
</span><span class="cx">     {
</span><span class="cx">         return this._copyable;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set copyable(x)
</span><span class="cx">     {
</span><span class="cx">         this._copyable = x;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get element()
</span><span class="cx">     {
</span><span class="lines">@@ -1375,15 +1378,15 @@
</span><span class="cx"> 
</span><span class="cx">         this.createCells();
</span><span class="cx">         return this._element;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    createCells: function()
</del><ins>+    createCells()
</ins><span class="cx">     {
</span><span class="cx">         for (var columnIdentifier of this.dataGrid.orderedColumns)
</span><span class="cx">             this._element.appendChild(this.createCell(columnIdentifier));
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    refreshIfNeeded: function()
</del><ins>+    refreshIfNeeded()
</ins><span class="cx">     {
</span><span class="cx">         if (!this._needsRefresh)
</span><span class="cx">             return;
</span><span class="lines">@@ -1391,9 +1394,9 @@
</span><span class="cx">         delete this._needsRefresh;
</span><span class="cx"> 
</span><span class="cx">         this.refresh();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    needsRefresh: function()
</del><ins>+    needsRefresh()
</ins><span class="cx">     {
</span><span class="cx">         this._needsRefresh = true;
</span><span class="cx"> 
</span><span class="lines">@@ -1404,18 +1407,18 @@
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         this._scheduledRefreshIdentifier = requestAnimationFrame(this.refresh.bind(this));
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get data()
</span><span class="cx">     {
</span><span class="cx">         return this._data;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set data(x)
</span><span class="cx">     {
</span><span class="cx">         this._data = x || {};
</span><span class="cx">         this.needsRefresh();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get revealed()
</span><span class="cx">     {
</span><span class="lines">@@ -1434,7 +1437,7 @@
</span><span class="cx"> 
</span><span class="cx">         this._revealed = true;
</span><span class="cx">         return true;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set hasChildren(x)
</span><span class="cx">     {
</span><span class="lines">@@ -1456,12 +1459,12 @@
</span><span class="cx">         {
</span><span class="cx">             this._element.classList.remove(&quot;parent&quot;, &quot;expanded&quot;);
</span><span class="cx">         }
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get hasChildren()
</span><span class="cx">     {
</span><span class="cx">         return this._hasChildren;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set revealed(x)
</span><span class="cx">     {
</span><span class="lines">@@ -1481,7 +1484,7 @@
</span><span class="cx"> 
</span><span class="cx">         for (var i = 0; i &lt; this.children.length; ++i)
</span><span class="cx">             this.children[i].revealed = x &amp;&amp; this.expanded;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get depth()
</span><span class="cx">     {
</span><span class="lines">@@ -1492,7 +1495,7 @@
</span><span class="cx">         else
</span><span class="cx">             this._depth = 0;
</span><span class="cx">         return this._depth;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get leftPadding()
</span><span class="cx">     {
</span><span class="lines">@@ -1501,24 +1504,24 @@
</span><span class="cx"> 
</span><span class="cx">         this._leftPadding = this.depth * this.dataGrid.indentWidth;
</span><span class="cx">         return this._leftPadding;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get shouldRefreshChildren()
</span><span class="cx">     {
</span><span class="cx">         return this._shouldRefreshChildren;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set shouldRefreshChildren(x)
</span><span class="cx">     {
</span><span class="cx">         this._shouldRefreshChildren = x;
</span><span class="cx">         if (x &amp;&amp; this.expanded)
</span><span class="cx">             this.expand();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get selected()
</span><span class="cx">     {
</span><span class="cx">         return this._selected;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set selected(x)
</span><span class="cx">     {
</span><span class="lines">@@ -1526,12 +1529,12 @@
</span><span class="cx">             this.select();
</span><span class="cx">         else
</span><span class="cx">             this.deselect();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get expanded()
</span><span class="cx">     {
</span><span class="cx">         return this._expanded;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set expanded(x)
</span><span class="cx">     {
</span><span class="lines">@@ -1539,9 +1542,9 @@
</span><span class="cx">             this.expand();
</span><span class="cx">         else
</span><span class="cx">             this.collapse();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    refresh: function()
</del><ins>+    refresh()
</ins><span class="cx">     {
</span><span class="cx">         if (!this._element || !this.dataGrid)
</span><span class="cx">             return;
</span><span class="lines">@@ -1555,14 +1558,14 @@
</span><span class="cx"> 
</span><span class="cx">         this._element.removeChildren();
</span><span class="cx">         this.createCells();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    updateLayout: function()
</del><ins>+    updateLayout()
</ins><span class="cx">     {
</span><span class="cx">         // Implemented by subclasses if needed.
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    createCell: function(columnIdentifier)
</del><ins>+    createCell(columnIdentifier)
</ins><span class="cx">     {
</span><span class="cx">         var cellElement = document.createElement(&quot;td&quot;);
</span><span class="cx">         cellElement.className = columnIdentifier + &quot;-column&quot;;
</span><span class="lines">@@ -1587,30 +1590,30 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         return cellElement;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    createCellContent: function(columnIdentifier)
</del><ins>+    createCellContent(columnIdentifier)
</ins><span class="cx">     {
</span><span class="cx">         return this.data[columnIdentifier] || &quot;\u200b&quot;; // Zero width space to keep the cell from collapsing.
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    elementWithColumnIdentifier: function(columnIdentifier)
</del><ins>+    elementWithColumnIdentifier(columnIdentifier)
</ins><span class="cx">     {
</span><span class="cx">         var index = this.dataGrid.orderedColumns.indexOf(columnIdentifier);
</span><span class="cx">         if (index === -1)
</span><span class="cx">             return null;
</span><span class="cx"> 
</span><span class="cx">         return this._element.children[index];
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     // Share these functions with DataGrid. They are written to work with a DataGridNode this object.
</span><del>-    appendChild: WebInspector.DataGrid.prototype.appendChild,
-    insertChild: WebInspector.DataGrid.prototype.insertChild,
-    removeChild: WebInspector.DataGrid.prototype.removeChild,
-    removeChildren: WebInspector.DataGrid.prototype.removeChildren,
-    removeChildrenRecursive: WebInspector.DataGrid.prototype.removeChildrenRecursive,
</del><ins>+    appendChild() { return WebInspector.DataGrid.prototype.appendChild.apply(this, arguments); }
+    insertChild() { return WebInspector.DataGrid.prototype.insertChild.apply(this, arguments); }
+    removeChild() { return WebInspector.DataGrid.prototype.removeChild.apply(this, arguments); }
+    removeChildren() { return WebInspector.DataGrid.prototype.removeChildren.apply(this, arguments); }
+    removeChildrenRecursive() { return WebInspector.DataGrid.prototype.removeChildrenRecursive.apply(this, arguments); }
</ins><span class="cx"> 
</span><del>-    _recalculateSiblings: function(myIndex)
</del><ins>+    _recalculateSiblings(myIndex)
</ins><span class="cx">     {
</span><span class="cx">         if (!this.parent)
</span><span class="cx">             return;
</span><span class="lines">@@ -1630,9 +1633,9 @@
</span><span class="cx">             this.nextSibling = nextChild;
</span><span class="cx">         } else
</span><span class="cx">             this.nextSibling = null;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    collapse: function()
</del><ins>+    collapse()
</ins><span class="cx">     {
</span><span class="cx">         if (this._element)
</span><span class="cx">             this._element.classList.remove(&quot;expanded&quot;);
</span><span class="lines">@@ -1646,9 +1649,9 @@
</span><span class="cx"> 
</span><span class="cx">         if (this.dataGrid)
</span><span class="cx">             this.dataGrid.dispatchEventToListeners(WebInspector.DataGrid.Event.CollapsedNode, {dataGridNode: this});
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    collapseRecursively: function()
</del><ins>+    collapseRecursively()
</ins><span class="cx">     {
</span><span class="cx">         var item = this;
</span><span class="cx">         while (item) {
</span><span class="lines">@@ -1656,9 +1659,9 @@
</span><span class="cx">                 item.collapse();
</span><span class="cx">             item = item.traverseNextNode(false, this, true);
</span><span class="cx">         }
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    expand: function()
</del><ins>+    expand()
</ins><span class="cx">     {
</span><span class="cx">         if (!this.hasChildren || this.expanded)
</span><span class="cx">             return;
</span><span class="lines">@@ -1694,18 +1697,18 @@
</span><span class="cx"> 
</span><span class="cx">         if (this.dataGrid)
</span><span class="cx">             this.dataGrid.dispatchEventToListeners(WebInspector.DataGrid.Event.ExpandedNode, {dataGridNode: this});
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    expandRecursively: function()
</del><ins>+    expandRecursively()
</ins><span class="cx">     {
</span><span class="cx">         var item = this;
</span><span class="cx">         while (item) {
</span><span class="cx">             item.expand();
</span><span class="cx">             item = item.traverseNextNode(false, this);
</span><span class="cx">         }
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    reveal: function()
</del><ins>+    reveal()
</ins><span class="cx">     {
</span><span class="cx">         var currentAncestor = this.parent;
</span><span class="cx">         while (currentAncestor &amp;&amp; !currentAncestor.root) {
</span><span class="lines">@@ -1717,9 +1720,9 @@
</span><span class="cx">         this.element.scrollIntoViewIfNeeded(false);
</span><span class="cx"> 
</span><span class="cx">         this.dispatchEventToListeners(&quot;revealed&quot;);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    select: function(supressSelectedEvent)
</del><ins>+    select(supressSelectedEvent)
</ins><span class="cx">     {
</span><span class="cx">         if (!this.dataGrid || !this.selectable || this.selected)
</span><span class="cx">             return;
</span><span class="lines">@@ -1735,15 +1738,15 @@
</span><span class="cx"> 
</span><span class="cx">         if (!supressSelectedEvent)
</span><span class="cx">             this.dataGrid.dispatchEventToListeners(WebInspector.DataGrid.Event.SelectedNodeChanged);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    revealAndSelect: function()
</del><ins>+    revealAndSelect()
</ins><span class="cx">     {
</span><span class="cx">         this.reveal();
</span><span class="cx">         this.select();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    deselect: function(supressDeselectedEvent)
</del><ins>+    deselect(supressDeselectedEvent)
</ins><span class="cx">     {
</span><span class="cx">         if (!this.dataGrid || this.dataGrid.selectedNode !== this || !this.selected)
</span><span class="cx">             return;
</span><span class="lines">@@ -1756,9 +1759,9 @@
</span><span class="cx"> 
</span><span class="cx">         if (!supressDeselectedEvent)
</span><span class="cx">             this.dataGrid.dispatchEventToListeners(WebInspector.DataGrid.Event.SelectedNodeChanged);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    traverseNextNode: function(skipHidden, stayWithin, dontPopulate, info)
</del><ins>+    traverseNextNode(skipHidden, stayWithin, dontPopulate, info)
</ins><span class="cx">     {
</span><span class="cx">         if (!dontPopulate &amp;&amp; this.hasChildren)
</span><span class="cx">             this.dispatchEventToListeners(&quot;populate&quot;);
</span><span class="lines">@@ -1791,9 +1794,9 @@
</span><span class="cx">             return null;
</span><span class="cx"> 
</span><span class="cx">         return (!skipHidden || node.revealed) ? node.nextSibling : null;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    traversePreviousNode: function(skipHidden, dontPopulate)
</del><ins>+    traversePreviousNode(skipHidden, dontPopulate)
</ins><span class="cx">     {
</span><span class="cx">         var node = (!skipHidden || this.revealed) ? this.previousSibling : null;
</span><span class="cx">         if (!dontPopulate &amp;&amp; node &amp;&amp; node.hasChildren)
</span><span class="lines">@@ -1812,9 +1815,9 @@
</span><span class="cx">             return null;
</span><span class="cx"> 
</span><span class="cx">         return this.parent;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    isEventWithinDisclosureTriangle: function(event)
</del><ins>+    isEventWithinDisclosureTriangle(event)
</ins><span class="cx">     {
</span><span class="cx">         if (!this.hasChildren)
</span><span class="cx">             return false;
</span><span class="lines">@@ -1824,9 +1827,9 @@
</span><span class="cx"> 
</span><span class="cx">         var left = cell.totalOffsetLeft + this.leftPadding;
</span><span class="cx">         return event.pageX &gt;= left &amp;&amp; event.pageX &lt;= left + this.disclosureToggleWidth;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _attach: function()
</del><ins>+    _attach()
</ins><span class="cx">     {
</span><span class="cx">         if (!this.dataGrid || this._attached)
</span><span class="cx">             return;
</span><span class="lines">@@ -1854,9 +1857,9 @@
</span><span class="cx">         if (this.expanded)
</span><span class="cx">             for (var i = 0; i &lt; this.children.length; ++i)
</span><span class="cx">                 this.children[i]._attach();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _detach: function()
</del><ins>+    _detach()
</ins><span class="cx">     {
</span><span class="cx">         if (!this._attached)
</span><span class="cx">             return;
</span><span class="lines">@@ -1868,9 +1871,9 @@
</span><span class="cx"> 
</span><span class="cx">         for (var i = 0; i &lt; this.children.length; ++i)
</span><span class="cx">             this.children[i]._detach();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    savePosition: function()
</del><ins>+    savePosition()
</ins><span class="cx">     {
</span><span class="cx">         if (this._savedPosition)
</span><span class="cx">             return;
</span><span class="lines">@@ -1883,9 +1886,9 @@
</span><span class="cx">             parent: this.parent,
</span><span class="cx">             index: this.parent.children.indexOf(this)
</span><span class="cx">         };
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    restorePosition: function()
</del><ins>+    restorePosition()
</ins><span class="cx">     {
</span><span class="cx">         if (!this._savedPosition)
</span><span class="cx">             return;
</span><span class="lines">@@ -1895,23 +1898,19 @@
</span><span class="cx"> 
</span><span class="cx">         delete this._savedPosition;
</span><span class="cx">     }
</span><del>-}
</del><ins>+};
</ins><span class="cx"> 
</span><del>-WebInspector.DataGridNode.prototype.__proto__ = WebInspector.Object.prototype;
-
</del><span class="cx"> // Used to create a new table row when entering new data by editing cells.
</span><del>-WebInspector.PlaceholderDataGridNode = function(data)
</del><ins>+WebInspector.PlaceholderDataGridNode = class PlaceholderDataGridNode extends WebInspector.DataGridNode
</ins><span class="cx"> {
</span><del>-    WebInspector.DataGridNode.call(this, data, false);
-    this.isPlaceholderNode = true;
-}
</del><ins>+    constructor(data)
+    {
+        super(data, false);
+        this.isPlaceholderNode = true;
+    }
</ins><span class="cx"> 
</span><del>-WebInspector.PlaceholderDataGridNode.prototype = {
-    constructor: WebInspector.PlaceholderDataGridNode,
-    __proto__: WebInspector.DataGridNode.prototype,
-
-    makeNormal: function()
</del><ins>+    makeNormal()
</ins><span class="cx">     {
</span><span class="cx">         this.isPlaceholderNode = false;
</span><span class="cx">     }
</span><del>-}
</del><ins>+};
</ins></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsDatabaseTableContentViewjs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx">         // how to sort arbitrary columns.
</span><span class="cx">         this.element.removeChildren();
</span><span class="cx"> 
</span><del>-        this._dataGrid = new WebInspector.DataGrid.createSortableDataGrid(columnNames, values);
</del><ins>+        this._dataGrid = WebInspector.DataGrid.createSortableDataGrid(columnNames, values);
</ins><span class="cx">         if (!this._dataGrid || !this._dataGrid.element) {
</span><span class="cx">             this._dataGrid = undefined;
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsIndexedDatabaseEntryDataGridNodejs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/IndexedDatabaseEntryDataGridNode.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/IndexedDatabaseEntryDataGridNode.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/IndexedDatabaseEntryDataGridNode.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,30 +23,28 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.IndexedDatabaseEntryDataGridNode = function(entry)
</del><ins>+WebInspector.IndexedDatabaseEntryDataGridNode = class IndexedDatabaseEntryDataGridNode extends WebInspector.DataGridNode
</ins><span class="cx"> {
</span><del>-    WebInspector.DataGridNode.call(this, entry);
</del><ins>+    constructor(entry)
+    {
+        super(entry);
</ins><span class="cx"> 
</span><del>-    this._entry = entry;
-};
</del><ins>+        this._entry = entry;
+    }
</ins><span class="cx"> 
</span><del>-WebInspector.IndexedDatabaseEntryDataGridNode.prototype = {
-    constructor: WebInspector.IndexedDatabaseEntryDataGridNode,
-    __proto__: WebInspector.DataGridNode.prototype,
-
</del><span class="cx">     // Public
</span><span class="cx"> 
</span><span class="cx">     get entry()
</span><span class="cx">     {
</span><span class="cx">         return this._entry;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    createCellContent: function(columnIdentifier, cell)
</del><ins>+    createCellContent(columnIdentifier, cell)
</ins><span class="cx">     {
</span><span class="cx">         var value = this._entry[columnIdentifier];
</span><span class="cx">         if (value instanceof WebInspector.RemoteObject)
</span><span class="cx">             return WebInspector.FormattedValue.createObjectTreeOrFormattedValueForRemoteObject(value, null, true);
</span><span class="cx"> 
</span><del>-        return WebInspector.DataGridNode.prototype.createCellContent.call(this, columnIdentifier, cell);
</del><ins>+        return super.createCellContent(columnIdentifier, cell);
</ins><span class="cx">     }
</span><span class="cx"> };
</span></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsLayerTreeDataGridNodejs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayerTreeDataGridNode.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayerTreeDataGridNode.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayerTreeDataGridNode.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,40 +23,38 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.LayerTreeDataGridNode = function(layer)
</del><ins>+WebInspector.LayerTreeDataGridNode = class LayerTreeDataGridNode extends WebInspector.DataGridNode
</ins><span class="cx"> {
</span><del>-    WebInspector.DataGridNode.call(this);
</del><ins>+    constructor(layer)
+    {
+        super();
</ins><span class="cx"> 
</span><del>-    this._outlets = {};
</del><ins>+        this._outlets = {};
+        this.layer = layer;
+    }
</ins><span class="cx"> 
</span><del>-    this.layer = layer;
-};
-
-WebInspector.LayerTreeDataGridNode.prototype = {
-    constructor: WebInspector.DataGridNode,
-
</del><span class="cx">     // DataGridNode Overrides.
</span><span class="cx"> 
</span><del>-    createCells: function()
</del><ins>+    createCells()
</ins><span class="cx">     {
</span><del>-        WebInspector.DataGridNode.prototype.createCells.call(this);
</del><ins>+        super.createCells();
</ins><span class="cx"> 
</span><span class="cx">         this._cellsWereCreated = true;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    createCellContent: function(columnIdentifier, cell)
</del><ins>+    createCellContent(columnIdentifier, cell)
</ins><span class="cx">     {
</span><span class="cx">         var cell = columnIdentifier === &quot;name&quot; ? this._makeNameCell() : this._makeOutlet(columnIdentifier, document.createTextNode());
</span><span class="cx">         this._updateCell(columnIdentifier);
</span><span class="cx">         return cell;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><span class="cx">     get layer()
</span><span class="cx">     {
</span><span class="cx">         return this._layer;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set layer(layer)
</span><span class="cx">     {
</span><span class="lines">@@ -69,12 +67,12 @@
</span><span class="cx">             paintCount: layer.paintCount || &quot;\u2014&quot;,
</span><span class="cx">             memory: Number.bytesToString(layer.memory || 0)
</span><span class="cx">         };
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get data()
</span><span class="cx">     {
</span><span class="cx">         return this._data;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     set data(data)
</span><span class="cx">     {
</span><span class="lines">@@ -86,17 +84,17 @@
</span><span class="cx">             if (this._cellsWereCreated)
</span><span class="cx">                 this._updateCell(columnIdentifier);
</span><span class="cx">         }, this);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     // Private
</span><span class="cx"> 
</span><del>-    _makeOutlet: function(name, element)
</del><ins>+    _makeOutlet(name, element)
</ins><span class="cx">     {
</span><span class="cx">         this._outlets[name] = element;
</span><span class="cx">         return element;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _makeNameCell: function()
</del><ins>+    _makeNameCell()
</ins><span class="cx">     {
</span><span class="cx">         var fragment = document.createDocumentFragment();
</span><span class="cx"> 
</span><span class="lines">@@ -119,18 +117,18 @@
</span><span class="cx">         reflectionLabel.textContent = &quot; \u2014 &quot; + WebInspector.UIString(&quot;Reflection&quot;);
</span><span class="cx"> 
</span><span class="cx">         return fragment;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _updateCell: function(columnIdentifier)
</del><ins>+    _updateCell(columnIdentifier)
</ins><span class="cx">     {
</span><span class="cx">         var data = this._data[columnIdentifier];
</span><span class="cx">         if (columnIdentifier === &quot;name&quot;)
</span><span class="cx">             this._updateNameCellData(data);
</span><span class="cx">         else
</span><span class="cx">             this._outlets[columnIdentifier].textContent = data;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _updateNameCellData: function(data)
</del><ins>+    _updateNameCellData(data)
</ins><span class="cx">     {
</span><span class="cx">         var layer = this._layer;
</span><span class="cx">         var label = this._outlets.label;
</span><span class="lines">@@ -157,13 +155,11 @@
</span><span class="cx">             element.classList.add(&quot;reflection&quot;);
</span><span class="cx">         else if (layer.pseudoElement)
</span><span class="cx">             element.classList.add(&quot;pseudo-element&quot;);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _goToArrowWasClicked: function()
</del><ins>+    _goToArrowWasClicked()
</ins><span class="cx">     {
</span><span class="cx">         var domNode = WebInspector.domTreeManager.nodeForId(this._layer.nodeId);
</span><span class="cx">         WebInspector.showMainFrameDOMTree(domNode);
</span><span class="cx">     }
</span><span class="cx"> };
</span><del>-
-WebInspector.LayerTreeDataGridNode.prototype.__proto__ = WebInspector.DataGridNode.prototype;
</del></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsLayoutTimelineDataGridjs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGrid.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGrid.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGrid.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,20 +23,17 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.LayoutTimelineDataGrid = function(treeOutline, columns, delegate, editCallback, deleteCallback)
</del><ins>+WebInspector.LayoutTimelineDataGrid = class LayoutTimelineDataGrid extends WebInspector.TimelineDataGrid
</ins><span class="cx"> {
</span><del>-    WebInspector.TimelineDataGrid.call(this, treeOutline, columns, delegate, editCallback, deleteCallback);
-};
</del><ins>+    constructor(treeOutline, columns, delegate, editCallback, deleteCallback)
+    {
+        super(treeOutline, columns, delegate, editCallback, deleteCallback);
+    }
</ins><span class="cx"> 
</span><del>-WebInspector.LayoutTimelineDataGrid.prototype = {
-    constructor: WebInspector.LayoutTimelineDataGrid,
-
</del><span class="cx">     // Protected
</span><span class="cx"> 
</span><del>-    callFramePopoverAnchorElement: function()
</del><ins>+    callFramePopoverAnchorElement()
</ins><span class="cx">     {
</span><span class="cx">         return this.selectedNode.elementWithColumnIdentifier(&quot;location&quot;);
</span><span class="cx">     }
</span><span class="cx"> };
</span><del>-
-WebInspector.LayoutTimelineDataGrid.prototype.__proto__ = WebInspector.TimelineDataGrid.prototype;
</del></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsLayoutTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGridNode.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGridNode.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGridNode.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,42 +23,34 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.LayoutTimelineDataGridNode = function(layoutTimelineRecord, baseStartTime)
</del><ins>+WebInspector.LayoutTimelineDataGridNode = class LayoutTimelineDataGridNode extends WebInspector.TimelineDataGridNode
</ins><span class="cx"> {
</span><del>-    WebInspector.TimelineDataGridNode.call(this, false, null);
</del><ins>+    constructor(layoutTimelineRecord, baseStartTime)
+    {
+        super(false, null);
</ins><span class="cx"> 
</span><del>-    this._record = layoutTimelineRecord;
-    this._baseStartTime = baseStartTime || 0;
-};
</del><ins>+        this._record = layoutTimelineRecord;
+        this._baseStartTime = baseStartTime || 0;
+    }
</ins><span class="cx"> 
</span><del>-// FIXME: Move to a WebInspector.Object subclass and we can remove this.
-WebInspector.Object.deprecatedAddConstructorFunctions(WebInspector.LayoutTimelineDataGridNode);
-
-WebInspector.LayoutTimelineDataGridNode.IconStyleClassName = &quot;icon&quot;;
-WebInspector.LayoutTimelineDataGridNode.SubtitleStyleClassName = &quot;subtitle&quot;;
-
-WebInspector.LayoutTimelineDataGridNode.prototype = {
-    constructor: WebInspector.LayoutTimelineDataGridNode,
-    __proto__: WebInspector.TimelineDataGridNode.prototype,
-
</del><span class="cx">     // Public
</span><span class="cx"> 
</span><span class="cx">     get record()
</span><span class="cx">     {
</span><span class="cx">         return this._record;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get records()
</span><span class="cx">     {
</span><span class="cx">         return [this._record];
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get data()
</span><span class="cx">     {
</span><span class="cx">         return {eventType: this._record.eventType, width: this._record.width, height: this._record.height, area: this._record.width * this._record.height, startTime: this._record.startTime, totalTime: this._record.duration, location: this._record.initiatorCallFrame};
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    createCellContent: function(columnIdentifier, cell)
</del><ins>+    createCellContent(columnIdentifier, cell)
</ins><span class="cx">     {
</span><span class="cx">         const emptyValuePlaceholderString = &quot;\u2014&quot;;
</span><span class="cx">         var value = this.data[columnIdentifier];
</span><span class="lines">@@ -81,6 +73,6 @@
</span><span class="cx">             return isNaN(value) ? emptyValuePlaceholderString : Number.secondsToString(value, true);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        return WebInspector.TimelineDataGridNode.prototype.createCellContent.call(this, columnIdentifier, cell);
</del><ins>+        return super.createCellContent(columnIdentifier, cell);
</ins><span class="cx">     }
</span><span class="cx"> };
</span></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsProbeSetDataGridjs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ProbeSetDataGrid.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ProbeSetDataGrid.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ProbeSetDataGrid.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) 2013 University of Washington. All rights reserved.
</span><del>- * Copyright (C) 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -24,75 +24,67 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.ProbeSetDataGrid = function(probeSet)
</del><ins>+WebInspector.ProbeSetDataGrid = class ProbeSetDataGrid extends WebInspector.DataGrid
</ins><span class="cx"> {
</span><del>-    console.assert(probeSet instanceof WebInspector.ProbeSet, &quot;Invalid ProbeSet argument: &quot;, probeSet);
-    this.probeSet = probeSet;
</del><ins>+    constructor(probeSet)
+    {
+        console.assert(probeSet instanceof WebInspector.ProbeSet, &quot;Invalid ProbeSet argument: &quot;, probeSet);
+        this.probeSet = probeSet;
</ins><span class="cx"> 
</span><del>-    var columnsData = {};
-    for (var probe of probeSet.probes) {
-        var probeTitle = probe.expression || WebInspector.UIString(&quot;(uninitialized)&quot;);
-        columnsData[probe.id] = { title: probeTitle };
-    }
</del><ins>+        var columns = {};
+        for (var probe of probeSet.probes) {
+            var title = probe.expression || WebInspector.UIString(&quot;(uninitialized)&quot;);
+            columns[probe.id] = {title};
+        }
</ins><span class="cx"> 
</span><del>-    WebInspector.DataGrid.call(this, columnsData);
</del><ins>+        super(columns);
</ins><span class="cx"> 
</span><del>-    this.element.classList.add(&quot;inline&quot;);
</del><ins>+        this.element.classList.add(&quot;inline&quot;);
</ins><span class="cx"> 
</span><del>-    this._frameNodes = new Map;
-    this._nodesSinceLastNavigation = [];
</del><ins>+        this._frameNodes = new Map;
+        this._nodesSinceLastNavigation = [];
</ins><span class="cx"> 
</span><del>-    this._listeners = new WebInspector.EventListenerSet(this, &quot;ProbeSetDataGrid instance listeners&quot;);
-    this._listeners.register(probeSet, WebInspector.ProbeSet.Event.ProbeAdded, this._setupProbe);
-    this._listeners.register(probeSet, WebInspector.ProbeSet.Event.ProbeRemoved, this._teardownProbe);
-    this._listeners.register(probeSet, WebInspector.ProbeSet.Event.SamplesCleared, this._setupData);
-    this._listeners.register(WebInspector.Probe, WebInspector.Probe.Event.ExpressionChanged, this._probeExpressionChanged);
-    this._listeners.install();
</del><ins>+        this._listeners = new WebInspector.EventListenerSet(this, &quot;ProbeSetDataGrid instance listeners&quot;);
+        this._listeners.register(probeSet, WebInspector.ProbeSet.Event.ProbeAdded, this._setupProbe);
+        this._listeners.register(probeSet, WebInspector.ProbeSet.Event.ProbeRemoved, this._teardownProbe);
+        this._listeners.register(probeSet, WebInspector.ProbeSet.Event.SamplesCleared, this._setupData);
+        this._listeners.register(WebInspector.Probe, WebInspector.Probe.Event.ExpressionChanged, this._probeExpressionChanged);
+        this._listeners.install();
</ins><span class="cx"> 
</span><del>-    this._setupData();
-};
</del><ins>+        this._setupData();
+    }
</ins><span class="cx"> 
</span><del>-WebInspector.ProbeSetDataGrid.DataUpdatedStyleClassName = &quot;data-updated&quot;;
-WebInspector.ProbeSetDataGrid.PastFrameStyleClassName = &quot;past-value&quot;;
-WebInspector.ProbeSetDataGrid.HighlightedFrameStyleClassName = &quot;highlighted&quot;;
-
-WebInspector.ProbeSetDataGrid.DataUpdatedAnimationDuration = 300; // milliseconds
-
-WebInspector.ProbeSetDataGrid.prototype = {
-    constructor: WebInspector.ProbeSetDataGrid,
-    __proto__: WebInspector.DataGrid.prototype,
-
</del><span class="cx">     // Public
</span><span class="cx"> 
</span><del>-    closed: function()
</del><ins>+    closed()
</ins><span class="cx">     {
</span><span class="cx">         for (var probe of this.probeSet)
</span><span class="cx">             this._teardownProbe(probe);
</span><span class="cx"> 
</span><span class="cx">         this._listeners.uninstall(true);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     // Private
</span><span class="cx"> 
</span><del>-    _setupProbe: function(event)
</del><ins>+    _setupProbe(event)
</ins><span class="cx">     {
</span><span class="cx">         var probe = event.data;
</span><span class="cx">         this.insertColumn(probe.id, {title: probe.expression});
</span><span class="cx"> 
</span><span class="cx">         for (var frame of this._data.frames)
</span><span class="cx">             this._updateNodeForFrame(frame);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _teardownProbe: function(event)
</del><ins>+    _teardownProbe(event)
</ins><span class="cx">     {
</span><span class="cx">         var probe = event.data;
</span><span class="cx">         this.removeColumn(probe.id);
</span><span class="cx"> 
</span><span class="cx">         for (var frame of this._data.frames)
</span><span class="cx">             this._updateNodeForFrame(frame);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _setupData: function()
</del><ins>+    _setupData()
</ins><span class="cx">     {
</span><span class="cx">         this._data = this.probeSet.dataTable;
</span><span class="cx">         for (var frame of this._data.frames)
</span><span class="lines">@@ -103,18 +95,18 @@
</span><span class="cx">         this._dataListeners.register(this._data, WebInspector.ProbeSetDataTable.Event.SeparatorInserted, this._dataSeparatorInserted);
</span><span class="cx">         this._dataListeners.register(this._data, WebInspector.ProbeSetDataTable.Event.WillRemove, this._teardownData);
</span><span class="cx">         this._dataListeners.install();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _teardownData: function()
</del><ins>+    _teardownData()
</ins><span class="cx">     {
</span><span class="cx">         this._dataListeners.uninstall(true);
</span><span class="cx">         this.removeChildren();
</span><span class="cx">         this._frameNodes = new Map;
</span><span class="cx">         this._separators = new Map;
</span><span class="cx">         delete this._lastUpdatedFrame;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _updateNodeForFrame: function(frame)
</del><ins>+    _updateNodeForFrame(frame)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(frame instanceof WebInspector.ProbeSetDataFrame, &quot;Invalid ProbeSetDataFrame argument: &quot;, frame);
</span><span class="cx">         var node = null;
</span><span class="lines">@@ -142,39 +134,39 @@
</span><span class="cx">         }
</span><span class="cx">         console.assert(node);
</span><span class="cx"> 
</span><del>-        node.element.classList.add(WebInspector.ProbeSetDataGrid.DataUpdatedStyleClassName);
</del><ins>+        node.element.classList.add(&quot;data-updated&quot;);
</ins><span class="cx">         window.setTimeout(function() {
</span><del>-            node.element.classList.remove(WebInspector.ProbeSetDataGrid.DataUpdatedStyleClassName);
</del><ins>+            node.element.classList.remove(&quot;data-updated&quot;);
</ins><span class="cx">         }, WebInspector.ProbeSetDataGrid.DataUpdatedAnimationDuration);
</span><span class="cx"> 
</span><span class="cx">         this._nodesSinceLastNavigation.push(node);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _updateNodeForSeparator: function(frame)
</del><ins>+    _updateNodeForSeparator(frame)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(this._frameNodes.has(frame), &quot;Tried to add separator for unknown data frame: &quot;, frame);
</span><span class="cx">         this._frameNodes.get(frame).updateCellsForSeparator(frame, this.probeSet);
</span><span class="cx"> 
</span><span class="cx">         for (var node of this._nodesSinceLastNavigation)
</span><del>-            node.element.classList.add(WebInspector.ProbeSetDataGrid.PastFrameStyleClassName);
</del><ins>+            node.element.classList.add(&quot;past-value&quot;);
</ins><span class="cx"> 
</span><span class="cx">         this._nodesSinceLastNavigation = [];
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _dataFrameInserted: function(event)
</del><ins>+    _dataFrameInserted(event)
</ins><span class="cx">     {
</span><span class="cx">         var frame = event.data;
</span><span class="cx">         this._lastUpdatedFrame = frame;
</span><span class="cx">         this._updateNodeForFrame(frame);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _dataSeparatorInserted: function(event)
</del><ins>+    _dataSeparatorInserted(event)
</ins><span class="cx">     {
</span><span class="cx">         var frame = event.data;
</span><span class="cx">         this._updateNodeForSeparator(frame);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _probeExpressionChanged: function(event)
</del><ins>+    _probeExpressionChanged(event)
</ins><span class="cx">     {
</span><span class="cx">         var probe = event.target;
</span><span class="cx">         if (probe.breakpoint !== this.probeSet.breakpoint)
</span><span class="lines">@@ -193,3 +185,5 @@
</span><span class="cx">             this._updateNodeForFrame(frame);
</span><span class="cx">     }
</span><span class="cx"> };
</span><ins>+
+WebInspector.ProbeSetDataGrid.DataUpdatedAnimationDuration = 300; // milliseconds
</ins></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsProfileNodeDataGridNodejs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ProfileNodeDataGridNode.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ProfileNodeDataGridNode.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ProfileNodeDataGridNode.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,63 +23,56 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.ProfileNodeDataGridNode = function(profileNode, baseStartTime, rangeStartTime, rangeEndTime)
</del><ins>+WebInspector.ProfileNodeDataGridNode = class ProfileNodeDataGridNode extends WebInspector.TimelineDataGridNode
</ins><span class="cx"> {
</span><del>-    var hasChildren = !!profileNode.childNodes.length;
</del><ins>+    constructor(profileNode, baseStartTime, rangeStartTime, rangeEndTime)
+    {
+        var hasChildren = !!profileNode.childNodes.length;
</ins><span class="cx"> 
</span><del>-    WebInspector.TimelineDataGridNode.call(this, false, null, hasChildren);
</del><ins>+        super(false, null, hasChildren);
</ins><span class="cx"> 
</span><del>-    this._profileNode = profileNode;
-    this._baseStartTime = baseStartTime || 0;
-    this._rangeStartTime = rangeStartTime || 0;
-    this._rangeEndTime = typeof rangeEndTime === &quot;number&quot; ? rangeEndTime : Infinity;
</del><ins>+        this._profileNode = profileNode;
+        this._baseStartTime = baseStartTime || 0;
+        this._rangeStartTime = rangeStartTime || 0;
+        this._rangeEndTime = typeof rangeEndTime === &quot;number&quot; ? rangeEndTime : Infinity;
</ins><span class="cx"> 
</span><del>-    this._data = this._profileNode.computeCallInfoForTimeRange(this._rangeStartTime, this._rangeEndTime);
-    this._data.location = this._profileNode.sourceCodeLocation;
-};
</del><ins>+        this._data = this._profileNode.computeCallInfoForTimeRange(this._rangeStartTime, this._rangeEndTime);
+        this._data.location = this._profileNode.sourceCodeLocation;
+    }
</ins><span class="cx"> 
</span><del>-// FIXME: Move to a WebInspector.Object subclass and we can remove this.
-WebInspector.Object.deprecatedAddConstructorFunctions(WebInspector.ProfileNodeDataGridNode);
-
-WebInspector.ProfileNodeDataGridNode.IconStyleClassName = &quot;icon&quot;;
-
-WebInspector.ProfileNodeDataGridNode.prototype = {
-    constructor: WebInspector.ProfileNodeDataGridNode,
-    __proto__: WebInspector.TimelineDataGridNode.prototype,
-
</del><span class="cx">     // Public
</span><span class="cx"> 
</span><span class="cx">     get profileNode()
</span><span class="cx">     {
</span><span class="cx">         return this._profileNode;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get records()
</span><span class="cx">     {
</span><span class="cx">         return null;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get baseStartTime()
</span><span class="cx">     {
</span><span class="cx">         return this._baseStartTime;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get rangeStartTime()
</span><span class="cx">     {
</span><span class="cx">         return this._rangeStartTime;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get rangeEndTime()
</span><span class="cx">     {
</span><span class="cx">         return this._rangeEndTime;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get data()
</span><span class="cx">     {
</span><span class="cx">         return this._data;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    updateRangeTimes: function(startTime, endTime)
</del><ins>+    updateRangeTimes(startTime, endTime)
</ins><span class="cx">     {
</span><span class="cx">         var oldRangeStartTime = this._rangeStartTime;
</span><span class="cx">         var oldRangeEndTime = this._rangeEndTime;
</span><span class="lines">@@ -100,17 +93,17 @@
</span><span class="cx"> 
</span><span class="cx">         if (oldStartBoundary !== newStartBoundary || oldEndBoundary !== newEndBoundary)
</span><span class="cx">             this.needsRefresh();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    refresh: function()
</del><ins>+    refresh()
</ins><span class="cx">     {
</span><span class="cx">         this._data = this._profileNode.computeCallInfoForTimeRange(this._rangeStartTime, this._rangeEndTime);
</span><span class="cx">         this._data.location = this._profileNode.sourceCodeLocation;
</span><span class="cx"> 
</span><del>-        WebInspector.TimelineDataGridNode.prototype.refresh.call(this);
-    },
</del><ins>+        super.refresh();
+    }
</ins><span class="cx"> 
</span><del>-    createCellContent: function(columnIdentifier, cell)
</del><ins>+    createCellContent(columnIdentifier, cell)
</ins><span class="cx">     {
</span><span class="cx">         const emptyValuePlaceholderString = &quot;\u2014&quot;;
</span><span class="cx">         var value = this.data[columnIdentifier];
</span><span class="lines">@@ -125,6 +118,6 @@
</span><span class="cx">             return isNaN(value) ? emptyValuePlaceholderString : Number.secondsToString(value, true);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        return WebInspector.TimelineDataGridNode.prototype.createCellContent.call(this, columnIdentifier, cell);
</del><ins>+        return super.createCellContent(columnIdentifier, cell);
</ins><span class="cx">     }
</span><span class="cx"> };
</span></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsRenderingFrameTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/RenderingFrameTimelineDataGridNode.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/RenderingFrameTimelineDataGridNode.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/RenderingFrameTimelineDataGridNode.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -23,32 +23,27 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.RenderingFrameTimelineDataGridNode = function(renderingFrameTimelineRecord, baseStartTime)
</del><ins>+WebInspector.RenderingFrameTimelineDataGridNode = class RenderingFrameTimelineDataGridNode extends WebInspector.TimelineDataGridNode
</ins><span class="cx"> {
</span><del>-    WebInspector.TimelineDataGridNode.call(this, false, null);
</del><ins>+    constructor(renderingFrameTimelineRecord, baseStartTime)
+    {
+        super(false, null);
</ins><span class="cx"> 
</span><del>-    this._record = renderingFrameTimelineRecord;
-    this._baseStartTime = baseStartTime || 0;
-};
</del><ins>+        this._record = renderingFrameTimelineRecord;
+        this._baseStartTime = baseStartTime || 0;
+    }
</ins><span class="cx"> 
</span><del>-WebInspector.RenderingFrameTimelineDataGridNode.IconStyleClassName = &quot;icon&quot;;
-WebInspector.RenderingFrameTimelineDataGridNode.SubtitleStyleClassName = &quot;subtitle&quot;;
-
-WebInspector.RenderingFrameTimelineDataGridNode.prototype = {
-    constructor: WebInspector.RenderingFrameTimelineDataGridNode,
-    __proto__: WebInspector.TimelineDataGridNode.prototype,
-
</del><span class="cx">     // Public
</span><span class="cx"> 
</span><span class="cx">     get record()
</span><span class="cx">     {
</span><span class="cx">         return this._record;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get records()
</span><span class="cx">     {
</span><span class="cx">         return [this._record];
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get data()
</span><span class="cx">     {
</span><span class="lines">@@ -57,9 +52,9 @@
</span><span class="cx">         var paintTime = this._record.durationForTask(WebInspector.RenderingFrameTimelineRecord.TaskType.Paint);
</span><span class="cx">         var otherTime = this._record.durationForTask(WebInspector.RenderingFrameTimelineRecord.TaskType.Other);
</span><span class="cx">         return {startTime: this._record.startTime, scriptTime, layoutTime, paintTime, otherTime, totalTime: this._record.duration};
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    createCellContent: function(columnIdentifier, cell)
</del><ins>+    createCellContent(columnIdentifier, cell)
</ins><span class="cx">     {
</span><span class="cx">         const emptyValuePlaceholderString = &quot;\u2014&quot;;
</span><span class="cx">         var value = this.data[columnIdentifier];
</span><span class="lines">@@ -76,6 +71,6 @@
</span><span class="cx">             return (isNaN(value) || value === 0) ? emptyValuePlaceholderString : Number.secondsToString(value, true);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        return WebInspector.TimelineDataGridNode.prototype.createCellContent.call(this, columnIdentifier, cell);
</del><ins>+        return super.createCellContent(columnIdentifier, cell);
</ins><span class="cx">     }
</span><span class="cx"> };
</span></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsResourceTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNode.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNode.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNode.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,46 +23,38 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.ResourceTimelineDataGridNode = function(resourceTimelineRecord, graphOnly, graphDataSource)
</del><ins>+WebInspector.ResourceTimelineDataGridNode = class ResourceTimelineDataGridNode extends WebInspector.TimelineDataGridNode
</ins><span class="cx"> {
</span><del>-    WebInspector.TimelineDataGridNode.call(this, graphOnly, graphDataSource);
</del><ins>+    constructor(resourceTimelineRecord, graphOnly, graphDataSource)
+    {
+        super(graphOnly, graphDataSource);
</ins><span class="cx"> 
</span><del>-    this._resource = resourceTimelineRecord.resource;
-    this._record = resourceTimelineRecord;
</del><ins>+        this._resource = resourceTimelineRecord.resource;
+        this._record = resourceTimelineRecord;
</ins><span class="cx"> 
</span><del>-    this._record.addEventListener(WebInspector.TimelineRecord.Event.Updated, graphOnly ? this._timelineRecordUpdated : this._needsRefresh, this);
</del><ins>+        this._record.addEventListener(WebInspector.TimelineRecord.Event.Updated, graphOnly ? this._timelineRecordUpdated : this._needsRefresh, this);
</ins><span class="cx"> 
</span><del>-    if (!graphOnly) {
-        this._resource.addEventListener(WebInspector.Resource.Event.URLDidChange, this._needsRefresh, this);
-        this._resource.addEventListener(WebInspector.Resource.Event.TypeDidChange, this._needsRefresh, this);
-        this._resource.addEventListener(WebInspector.Resource.Event.LoadingDidFinish, this._needsRefresh, this);
-        this._resource.addEventListener(WebInspector.Resource.Event.LoadingDidFail, this._needsRefresh, this);
-        this._resource.addEventListener(WebInspector.Resource.Event.SizeDidChange, this._needsRefresh, this);
-        this._resource.addEventListener(WebInspector.Resource.Event.TransferSizeDidChange, this._needsRefresh, this);
</del><ins>+        if (!graphOnly) {
+            this._resource.addEventListener(WebInspector.Resource.Event.URLDidChange, this._needsRefresh, this);
+            this._resource.addEventListener(WebInspector.Resource.Event.TypeDidChange, this._needsRefresh, this);
+            this._resource.addEventListener(WebInspector.Resource.Event.LoadingDidFinish, this._needsRefresh, this);
+            this._resource.addEventListener(WebInspector.Resource.Event.LoadingDidFail, this._needsRefresh, this);
+            this._resource.addEventListener(WebInspector.Resource.Event.SizeDidChange, this._needsRefresh, this);
+            this._resource.addEventListener(WebInspector.Resource.Event.TransferSizeDidChange, this._needsRefresh, this);
+        }
</ins><span class="cx">     }
</span><del>-};
</del><span class="cx"> 
</span><del>-// FIXME: Move to a WebInspector.Object subclass and we can remove this.
-WebInspector.Object.deprecatedAddConstructorFunctions(WebInspector.ResourceTimelineDataGridNode);
-
-WebInspector.ResourceTimelineDataGridNode.IconStyleClassName = &quot;icon&quot;;
-WebInspector.ResourceTimelineDataGridNode.ErrorStyleClassName = &quot;error&quot;;
-
-WebInspector.ResourceTimelineDataGridNode.prototype = {
-    constructor: WebInspector.ResourceTimelineDataGridNode,
-    __proto__: WebInspector.TimelineDataGridNode.prototype,
-
</del><span class="cx">     // Public
</span><span class="cx"> 
</span><span class="cx">     get records()
</span><span class="cx">     {
</span><span class="cx">         return [this._record];
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get resource()
</span><span class="cx">     {
</span><span class="cx">         return this._resource;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get data()
</span><span class="cx">     {
</span><span class="lines">@@ -92,14 +84,14 @@
</span><span class="cx"> 
</span><span class="cx">         this._cachedData = data;
</span><span class="cx">         return data;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    createCellContent: function(columnIdentifier, cell)
</del><ins>+    createCellContent(columnIdentifier, cell)
</ins><span class="cx">     {
</span><span class="cx">         var resource = this._resource;
</span><span class="cx"> 
</span><span class="cx">         if (resource.failed || resource.canceled || resource.statusCode &gt;= 400)
</span><del>-            cell.classList.add(WebInspector.ResourceTimelineDataGridNode.ErrorStyleClassName);
</del><ins>+            cell.classList.add(&quot;error&quot;);
</ins><span class="cx"> 
</span><span class="cx">         const emptyValuePlaceholderString = &quot;\u2014&quot;;
</span><span class="cx">         var value = this.data[columnIdentifier];
</span><span class="lines">@@ -128,10 +120,10 @@
</span><span class="cx">             return isNaN(value) ? emptyValuePlaceholderString : Number.secondsToString(value, true);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        return WebInspector.TimelineDataGridNode.prototype.createCellContent.call(this, columnIdentifier, cell);
-    },
</del><ins>+        return super.createCellContent(columnIdentifier, cell);
+    }
</ins><span class="cx"> 
</span><del>-    refresh: function()
</del><ins>+    refresh()
</ins><span class="cx">     {
</span><span class="cx">         if (this._scheduledRefreshIdentifier) {
</span><span class="cx">             cancelAnimationFrame(this._scheduledRefreshIdentifier);
</span><span class="lines">@@ -140,12 +132,12 @@
</span><span class="cx"> 
</span><span class="cx">         delete this._cachedData;
</span><span class="cx"> 
</span><del>-        WebInspector.TimelineDataGridNode.prototype.refresh.call(this);
-    },
</del><ins>+        super.refresh();
+    }
</ins><span class="cx"> 
</span><span class="cx">     // Private
</span><span class="cx"> 
</span><del>-    _needsRefresh: function()
</del><ins>+    _needsRefresh()
</ins><span class="cx">     {
</span><span class="cx">         if (this.dataGrid instanceof WebInspector.TimelineDataGrid) {
</span><span class="cx">             this.dataGrid.dataGridNodeNeedsRefresh(this);
</span><span class="lines">@@ -156,9 +148,9 @@
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         this._scheduledRefreshIdentifier = requestAnimationFrame(this.refresh.bind(this));
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _timelineRecordUpdated: function(event)
</del><ins>+    _timelineRecordUpdated(event)
</ins><span class="cx">     {
</span><span class="cx">         if (this.isRecordVisible(this._record))
</span><span class="cx">             this.needsGraphRefresh();
</span></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsScriptTimelineDataGridjs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGrid.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGrid.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGrid.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,20 +23,17 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.ScriptTimelineDataGrid = function(treeOutline, columns, delegate, editCallback, deleteCallback)
</del><ins>+WebInspector.ScriptTimelineDataGrid = class ScriptTimelineDataGrid extends WebInspector.TimelineDataGrid
</ins><span class="cx"> {
</span><del>-    WebInspector.TimelineDataGrid.call(this, treeOutline, columns, delegate, editCallback, deleteCallback);
-};
</del><ins>+    constructor(treeOutline, columns, delegate, editCallback, deleteCallback)
+    {
+        super(treeOutline, columns, delegate, editCallback, deleteCallback);
+    }
</ins><span class="cx"> 
</span><del>-WebInspector.ScriptTimelineDataGrid.prototype = {
-    constructor: WebInspector.ScriptTimelineDataGrid,
-
</del><span class="cx">     // Protected
</span><span class="cx"> 
</span><del>-    callFramePopoverAnchorElement: function()
</del><ins>+    callFramePopoverAnchorElement()
</ins><span class="cx">     {
</span><span class="cx">         return this.selectedNode.elementWithColumnIdentifier(&quot;location&quot;);
</span><span class="cx">     }
</span><span class="cx"> };
</span><del>-
-WebInspector.ScriptTimelineDataGrid.prototype.__proto__ = WebInspector.TimelineDataGrid.prototype;
</del></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsScriptTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGridNode.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGridNode.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGridNode.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,51 +23,44 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.ScriptTimelineDataGridNode = function(scriptTimelineRecord, baseStartTime, rangeStartTime, rangeEndTime)
</del><ins>+WebInspector.ScriptTimelineDataGridNode = class ScriptTimelineDataGridNode extends WebInspector.TimelineDataGridNode
</ins><span class="cx"> {
</span><del>-    WebInspector.TimelineDataGridNode.call(this, false, null);
</del><ins>+    constructor(scriptTimelineRecord, baseStartTime, rangeStartTime, rangeEndTime)
+    {
+        super(false, null);
</ins><span class="cx"> 
</span><del>-    this._record = scriptTimelineRecord;
-    this._baseStartTime = baseStartTime || 0;
-    this._rangeStartTime = rangeStartTime || 0;
-    this._rangeEndTime = typeof rangeEndTime === &quot;number&quot; ? rangeEndTime : Infinity;
-};
</del><ins>+        this._record = scriptTimelineRecord;
+        this._baseStartTime = baseStartTime || 0;
+        this._rangeStartTime = rangeStartTime || 0;
+        this._rangeEndTime = typeof rangeEndTime === &quot;number&quot; ? rangeEndTime : Infinity;
+    }
</ins><span class="cx"> 
</span><del>-// FIXME: Move to a WebInspector.Object subclass and we can remove this.
-WebInspector.Object.deprecatedAddConstructorFunctions(WebInspector.ScriptTimelineDataGridNode);
-
-WebInspector.ScriptTimelineDataGridNode.IconStyleClassName = &quot;icon&quot;;
-
-WebInspector.ScriptTimelineDataGridNode.prototype = {
-    constructor: WebInspector.ScriptTimelineDataGridNode,
-    __proto__: WebInspector.TimelineDataGridNode.prototype,
-
</del><span class="cx">     // Public
</span><span class="cx"> 
</span><span class="cx">     get record()
</span><span class="cx">     {
</span><span class="cx">         return this._record;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get records()
</span><span class="cx">     {
</span><span class="cx">         return [this._record];
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get baseStartTime()
</span><span class="cx">     {
</span><span class="cx">         return this._baseStartTime;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get rangeStartTime()
</span><span class="cx">     {
</span><span class="cx">         return this._rangeStartTime;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get rangeEndTime()
</span><span class="cx">     {
</span><span class="cx">         return this._rangeEndTime;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get data()
</span><span class="cx">     {
</span><span class="lines">@@ -86,9 +79,9 @@
</span><span class="cx"> 
</span><span class="cx">         return {eventType: this._record.eventType, startTime, selfTime: duration, totalTime: duration,
</span><span class="cx">             averageTime: duration, callCount: 1, location: callFrameOrSourceCodeLocation};
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    updateRangeTimes: function(startTime, endTime)
</del><ins>+    updateRangeTimes(startTime, endTime)
</ins><span class="cx">     {
</span><span class="cx">         var oldRangeStartTime = this._rangeStartTime;
</span><span class="cx">         var oldRangeEndTime = this._rangeEndTime;
</span><span class="lines">@@ -113,9 +106,9 @@
</span><span class="cx"> 
</span><span class="cx">         if (oldStartBoundary !== newStartBoundary || oldEndBoundary !== newEndBoundary)
</span><span class="cx">             this.needsRefresh();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    createCellContent: function(columnIdentifier, cell)
</del><ins>+    createCellContent(columnIdentifier, cell)
</ins><span class="cx">     {
</span><span class="cx">         const emptyValuePlaceholderString = &quot;\u2014&quot;;
</span><span class="cx">         var value = this.data[columnIdentifier];
</span><span class="lines">@@ -133,6 +126,6 @@
</span><span class="cx">             return isNaN(value) ? emptyValuePlaceholderString : Number.secondsToString(value, true);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        return WebInspector.TimelineDataGridNode.prototype.createCellContent.call(this, columnIdentifier, cell);
</del><ins>+        return super.createCellContent(columnIdentifier, cell);
</ins><span class="cx">     }
</span><span class="cx"> };
</span></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsSourceCodeTimelineTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,41 +23,36 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.SourceCodeTimelineTimelineDataGridNode = function(sourceCodeTimeline, graphDataSource)
</del><ins>+WebInspector.SourceCodeTimelineTimelineDataGridNode = class SourceCodeTimelineTimelineDataGridNode extends WebInspector.TimelineDataGridNode
</ins><span class="cx"> {
</span><del>-    WebInspector.TimelineDataGridNode.call(this, true, graphDataSource);
</del><ins>+    constructor(sourceCodeTimeline, graphDataSource)
+    {
+        super(true, graphDataSource);
</ins><span class="cx"> 
</span><del>-    this._sourceCodeTimeline = sourceCodeTimeline;
-    this._sourceCodeTimeline.addEventListener(WebInspector.Timeline.Event.RecordAdded, this._timelineRecordAdded, this);
-};
</del><ins>+        this._sourceCodeTimeline = sourceCodeTimeline;
+        this._sourceCodeTimeline.addEventListener(WebInspector.Timeline.Event.RecordAdded, this._timelineRecordAdded, this);
+    }
</ins><span class="cx"> 
</span><del>-// FIXME: Move to a WebInspector.Object subclass and we can remove this.
-WebInspector.Object.deprecatedAddConstructorFunctions(WebInspector.SourceCodeTimelineTimelineDataGridNode);
-
-WebInspector.SourceCodeTimelineTimelineDataGridNode.prototype = {
-    constructor: WebInspector.SourceCodeTimelineTimelineDataGridNode,
-    __proto__: WebInspector.TimelineDataGridNode.prototype,
-
</del><span class="cx">     // Public
</span><span class="cx"> 
</span><span class="cx">     get records()
</span><span class="cx">     {
</span><span class="cx">         return this._sourceCodeTimeline.records;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get sourceCodeTimeline()
</span><span class="cx">     {
</span><span class="cx">         return this._sourceCodeTimeline;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get data()
</span><span class="cx">     {
</span><span class="cx">         return {graph: this._sourceCodeTimeline.startTime};
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     // Private
</span><span class="cx"> 
</span><del>-    _timelineRecordAdded: function(event)
</del><ins>+    _timelineRecordAdded(event)
</ins><span class="cx">     {
</span><span class="cx">         if (this.isRecordVisible(event.data.record))
</span><span class="cx">             this.needsGraphRefresh();
</span></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsTimelineDataGridjs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/TimelineDataGrid.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/TimelineDataGrid.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/TimelineDataGrid.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,115 +23,104 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.TimelineDataGrid = function(treeOutline, columns, delegate, editCallback, deleteCallback)
</del><ins>+WebInspector.TimelineDataGrid = class TimelineDataGrid extends WebInspector.DataGrid
</ins><span class="cx"> {
</span><del>-    WebInspector.DataGrid.call(this, columns, editCallback, deleteCallback);
</del><ins>+    constructor(treeOutline, columns, delegate, editCallback, deleteCallback)
+    {
+        super(columns, editCallback, deleteCallback);
</ins><span class="cx"> 
</span><del>-    this._treeOutlineDataGridSynchronizer = new WebInspector.TreeOutlineDataGridSynchronizer(treeOutline, this, delegate);
</del><ins>+        this._treeOutlineDataGridSynchronizer = new WebInspector.TreeOutlineDataGridSynchronizer(treeOutline, this, delegate);
</ins><span class="cx"> 
</span><del>-    this.element.classList.add(WebInspector.TimelineDataGrid.StyleClassName);
</del><ins>+        this.element.classList.add(&quot;timeline&quot;);
</ins><span class="cx"> 
</span><del>-    this._filterableColumns = [];
</del><ins>+        this._filterableColumns = [];
</ins><span class="cx"> 
</span><del>-    // Check if any of the cells can be filtered.
-    for (var [identifier, column] of this.columns) {
-        var scopeBar = column.scopeBar;
</del><ins>+        // Check if any of the cells can be filtered.
+        for (var [identifier, column] of this.columns) {
+            var scopeBar = column.scopeBar;
</ins><span class="cx"> 
</span><del>-        if (!scopeBar)
-            continue;
</del><ins>+            if (!scopeBar)
+                continue;
</ins><span class="cx"> 
</span><del>-        this._filterableColumns.push(identifier);
-        scopeBar.columnIdentifier = identifier;
-        scopeBar.addEventListener(WebInspector.ScopeBar.Event.SelectionChanged, this._scopeBarSelectedItemsDidChange, this);
-    }
</del><ins>+            this._filterableColumns.push(identifier);
+            scopeBar.columnIdentifier = identifier;
+            scopeBar.addEventListener(WebInspector.ScopeBar.Event.SelectionChanged, this._scopeBarSelectedItemsDidChange, this);
+        }
</ins><span class="cx"> 
</span><del>-    if (this._filterableColumns.length &gt; 1) {
-        console.error(&quot;Creating a TimelineDataGrid with more than one filterable column is not yet supported.&quot;);
-        return;
-    }
</del><ins>+        if (this._filterableColumns.length &gt; 1) {
+            console.error(&quot;Creating a TimelineDataGrid with more than one filterable column is not yet supported.&quot;);
+            return;
+        }
</ins><span class="cx"> 
</span><del>-    this.addEventListener(WebInspector.DataGrid.Event.SelectedNodeChanged, this._dataGridSelectedNodeChanged, this);
-    this.addEventListener(WebInspector.DataGrid.Event.SortChanged, this._sort, this);
</del><ins>+        this.addEventListener(WebInspector.DataGrid.Event.SelectedNodeChanged, this._dataGridSelectedNodeChanged, this);
+        this.addEventListener(WebInspector.DataGrid.Event.SortChanged, this._sort, this);
</ins><span class="cx"> 
</span><del>-    window.addEventListener(&quot;resize&quot;, this);
-};
</del><ins>+        window.addEventListener(&quot;resize&quot;, this);
+    }
</ins><span class="cx"> 
</span><del>-WebInspector.TimelineDataGrid.StyleClassName = &quot;timeline&quot;;
-WebInspector.TimelineDataGrid.HasNonDefaultFilterStyleClassName = &quot;has-non-default-filter&quot;;
-WebInspector.TimelineDataGrid.DelayedPopoverShowTimeout = 250;
-WebInspector.TimelineDataGrid.DelayedPopoverHideContentClearTimeout = 500;
</del><ins>+    static createColumnScopeBar(prefix, map)
+    {
+        prefix = prefix + &quot;-timeline-data-grid-&quot;;
</ins><span class="cx"> 
</span><del>-WebInspector.TimelineDataGrid.Event = {
-    FiltersDidChange: &quot;timelinedatagrid-filters-did-change&quot;
-};
</del><ins>+        var scopeBarItems = [];
+        for (var [key, value] of map) {
+            var id = prefix + key;
+            var item = new WebInspector.ScopeBarItem(id, value);
+            item.value = key;
+            scopeBarItems.push(item);
+        }
</ins><span class="cx"> 
</span><del>-WebInspector.TimelineDataGrid.createColumnScopeBar = function(prefix, map)
-{
-    prefix = prefix + &quot;-timeline-data-grid-&quot;;
</del><ins>+        var allItem = new WebInspector.ScopeBarItem(prefix + &quot;type-all&quot;, WebInspector.UIString(&quot;All&quot;));
+        scopeBarItems.unshift(allItem);
</ins><span class="cx"> 
</span><del>-    var scopeBarItems = [];
-    for (var [key, value] of map) {
-        var id = prefix + key;
-        var item = new WebInspector.ScopeBarItem(id, value);
-        item.value = key;
-        scopeBarItems.push(item);
</del><ins>+        return new WebInspector.ScopeBar(prefix + &quot;scope-bar&quot;, scopeBarItems, allItem, true);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    var allItem = new WebInspector.ScopeBarItem(prefix + &quot;type-all&quot;, WebInspector.UIString(&quot;All&quot;));
-    scopeBarItems.unshift(allItem);
-
-    return new WebInspector.ScopeBar(prefix + &quot;scope-bar&quot;, scopeBarItems, allItem, true);
-};
-
-WebInspector.TimelineDataGrid.prototype = {
-    constructor: WebInspector.TimelineDataGrid,
-    __proto__: WebInspector.DataGrid.prototype,
-
</del><span class="cx">     // Public
</span><span class="cx"> 
</span><del>-    reset: function()
</del><ins>+    reset()
</ins><span class="cx">     {
</span><span class="cx">         // May be overridden by subclasses. If so, they should call the superclass.
</span><span class="cx"> 
</span><span class="cx">         this._hidePopover();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    shown: function()
</del><ins>+    shown()
</ins><span class="cx">     {
</span><span class="cx">         // May be overridden by subclasses. If so, they should call the superclass.
</span><span class="cx"> 
</span><span class="cx">         this._treeOutlineDataGridSynchronizer.synchronize();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    hidden: function()
</del><ins>+    hidden()
</ins><span class="cx">     {
</span><span class="cx">         // May be overridden by subclasses. If so, they should call the superclass.
</span><span class="cx"> 
</span><span class="cx">         this._hidePopover();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    closed: function()
</del><ins>+    closed()
</ins><span class="cx">     {
</span><span class="cx">         window.removeEventListener(&quot;resize&quot;, this);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    treeElementForDataGridNode: function(dataGridNode)
</del><ins>+    treeElementForDataGridNode(dataGridNode)
</ins><span class="cx">     {
</span><span class="cx">         return this._treeOutlineDataGridSynchronizer.treeElementForDataGridNode(dataGridNode);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    dataGridNodeForTreeElement: function(treeElement)
</del><ins>+    dataGridNodeForTreeElement(treeElement)
</ins><span class="cx">     {
</span><span class="cx">         return this._treeOutlineDataGridSynchronizer.dataGridNodeForTreeElement(treeElement);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    callFramePopoverAnchorElement: function()
</del><ins>+    callFramePopoverAnchorElement()
</ins><span class="cx">     {
</span><span class="cx">         // Implemented by subclasses.
</span><span class="cx">         return null;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    treeElementMatchesActiveScopeFilters: function(treeElement)
</del><ins>+    treeElementMatchesActiveScopeFilters(treeElement)
</ins><span class="cx">     {
</span><span class="cx">         var dataGridNode = this._treeOutlineDataGridSynchronizer.dataGridNodeForTreeElement(treeElement);
</span><span class="cx">         console.assert(dataGridNode);
</span><span class="lines">@@ -151,9 +140,9 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         return true;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    addRowInSortOrder: function(treeElement, dataGridNode, parentElement)
</del><ins>+    addRowInSortOrder(treeElement, dataGridNode, parentElement)
</ins><span class="cx">     {
</span><span class="cx">         this._treeOutlineDataGridSynchronizer.associate(treeElement, dataGridNode);
</span><span class="cx"> 
</span><span class="lines">@@ -171,23 +160,23 @@
</span><span class="cx">             // Append to the parent, which will cause the synchronizer to append to the data grid.
</span><span class="cx">             parentElement.appendChild(treeElement);
</span><span class="cx">         }
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    shouldIgnoreSelectionEvent: function()
</del><ins>+    shouldIgnoreSelectionEvent()
</ins><span class="cx">     {
</span><span class="cx">         return this._ignoreSelectionEvent || false;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     // Protected
</span><span class="cx"> 
</span><del>-    handleEvent: function(event)
</del><ins>+    handleEvent(event)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(event.type === &quot;resize&quot;);
</span><span class="cx"> 
</span><span class="cx">         this._windowResized(event);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    dataGridNodeNeedsRefresh: function(dataGridNode)
</del><ins>+    dataGridNodeNeedsRefresh(dataGridNode)
</ins><span class="cx">     {
</span><span class="cx">         if (!this._dirtyDataGridNodes)
</span><span class="cx">             this._dirtyDataGridNodes = new Set;
</span><span class="lines">@@ -197,11 +186,11 @@
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         this._scheduledDataGridNodeRefreshIdentifier = requestAnimationFrame(this._refreshDirtyDataGridNodes.bind(this));
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     // Private
</span><span class="cx"> 
</span><del>-    _refreshDirtyDataGridNodes: function()
</del><ins>+    _refreshDirtyDataGridNodes()
</ins><span class="cx">     {
</span><span class="cx">         if (this._scheduledDataGridNodeRefreshIdentifier) {
</span><span class="cx">             cancelAnimationFrame(this._scheduledDataGridNodeRefreshIdentifier);
</span><span class="lines">@@ -254,9 +243,9 @@
</span><span class="cx">         this._treeOutlineDataGridSynchronizer.enabled = true;
</span><span class="cx"> 
</span><span class="cx">         delete this._dirtyDataGridNodes;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _sort: function()
</del><ins>+    _sort()
</ins><span class="cx">     {
</span><span class="cx">         var sortColumnIdentifier = this.sortColumnIdentifier;
</span><span class="cx">         if (!sortColumnIdentifier)
</span><span class="lines">@@ -312,9 +301,9 @@
</span><span class="cx">             selectedNode.revealAndSelect();
</span><span class="cx"> 
</span><span class="cx">         delete this._ignoreSelectionEvent;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _sortComparator: function(node1, node2)
</del><ins>+    _sortComparator(node1, node2)
</ins><span class="cx">     {
</span><span class="cx">         var sortColumnIdentifier = this.sortColumnIdentifier;
</span><span class="cx">         if (!sortColumnIdentifier)
</span><span class="lines">@@ -351,9 +340,9 @@
</span><span class="cx"> 
</span><span class="cx">         // For everything else (mostly booleans).
</span><span class="cx">         return (value1 &lt; value2 ? -1 : (value1 &gt; value2 ? 1 : 0)) * sortDirection;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _updateScopeBarForcedVisibility: function()
</del><ins>+    _updateScopeBarForcedVisibility()
</ins><span class="cx">     {
</span><span class="cx">         for (var identifier of this._filterableColumns) {
</span><span class="cx">             var scopeBar = this.columns.get(identifier).scopeBar;
</span><span class="lines">@@ -362,17 +351,17 @@
</span><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">         }
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _scopeBarSelectedItemsDidChange: function(event)
</del><ins>+    _scopeBarSelectedItemsDidChange(event)
</ins><span class="cx">     {
</span><span class="cx">         this._updateScopeBarForcedVisibility();
</span><span class="cx"> 
</span><span class="cx">         var columnIdentifier = event.target.columnIdentifier;
</span><span class="cx">         this.dispatchEventToListeners(WebInspector.TimelineDataGrid.Event.FiltersDidChange, {columnIdentifier});
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _dataGridSelectedNodeChanged: function(event)
</del><ins>+    _dataGridSelectedNodeChanged(event)
</ins><span class="cx">     {
</span><span class="cx">         if (!this.selectedNode) {
</span><span class="cx">             this._hidePopover();
</span><span class="lines">@@ -386,15 +375,15 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         this._showPopoverForSelectedNodeSoon();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _windowResized: function(event)
</del><ins>+    _windowResized(event)
</ins><span class="cx">     {
</span><span class="cx">         if (this._popover &amp;&amp; this._popover.visible)
</span><span class="cx">             this._updatePopoverForSelectedNode(false);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _showPopoverForSelectedNodeSoon: function()
</del><ins>+    _showPopoverForSelectedNodeSoon()
</ins><span class="cx">     {
</span><span class="cx">         if (this._showPopoverTimeout)
</span><span class="cx">             return;
</span><span class="lines">@@ -408,9 +397,9 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         this._showPopoverTimeout = setTimeout(delayedWork.bind(this), WebInspector.TimelineDataGrid.DelayedPopoverShowTimeout);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _hidePopover: function()
</del><ins>+    _hidePopover()
</ins><span class="cx">     {
</span><span class="cx">         if (this._showPopoverTimeout) {
</span><span class="cx">             clearTimeout(this._showPopoverTimeout);
</span><span class="lines">@@ -429,9 +418,9 @@
</span><span class="cx">         if (this._hidePopoverContentClearTimeout)
</span><span class="cx">             clearTimeout(this._hidePopoverContentClearTimeout);
</span><span class="cx">         this._hidePopoverContentClearTimeout = setTimeout(delayedWork.bind(this), WebInspector.TimelineDataGrid.DelayedPopoverHideContentClearTimeout);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _updatePopoverForSelectedNode: function(updateContent)
</del><ins>+    _updatePopoverForSelectedNode(updateContent)
</ins><span class="cx">     {
</span><span class="cx">         if (!this._popover || !this.selectedNode)
</span><span class="cx">             return;
</span><span class="lines">@@ -456,9 +445,9 @@
</span><span class="cx">             this._popover.content = this._createPopoverContent();
</span><span class="cx"> 
</span><span class="cx">         this._popover.present(targetFrame.pad(2), [WebInspector.RectEdge.MAX_Y, WebInspector.RectEdge.MIN_Y, WebInspector.RectEdge.MAX_X]);
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _createPopoverContent: function()
</del><ins>+    _createPopoverContent()
</ins><span class="cx">     {
</span><span class="cx">         if (!this._popoverCallStackTreeOutline) {
</span><span class="cx">             var contentElement = document.createElement(&quot;ol&quot;);
</span><span class="lines">@@ -478,9 +467,9 @@
</span><span class="cx">         content.className = &quot;timeline-data-grid-popover&quot;;
</span><span class="cx">         content.appendChild(this._popoverCallStackTreeOutline.element);
</span><span class="cx">         return content;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    _popoverCallStackTreeElementSelected: function(treeElement, selectedByUser)
</del><ins>+    _popoverCallStackTreeElementSelected(treeElement, selectedByUser)
</ins><span class="cx">     {
</span><span class="cx">         this._popover.dismiss();
</span><span class="cx"> 
</span><span class="lines">@@ -492,3 +481,12 @@
</span><span class="cx">         WebInspector.showSourceCodeLocation(callFrame.sourceCodeLocation);
</span><span class="cx">     }
</span><span class="cx"> };
</span><ins>+
+WebInspector.TimelineDataGrid.HasNonDefaultFilterStyleClassName = &quot;has-non-default-filter&quot;;
+WebInspector.TimelineDataGrid.DelayedPopoverShowTimeout = 250;
+WebInspector.TimelineDataGrid.DelayedPopoverHideContentClearTimeout = 500;
+
+WebInspector.TimelineDataGrid.Event = {
+    FiltersDidChange: &quot;timelinedatagrid-filters-did-change&quot;
+};
+
</ins></span></pre></div>
<a id="branchessafari601branchSourceWebInspectorUIUserInterfaceViewsTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNode.js (193052 => 193053)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNode.js        2015-12-03 18:35:42 UTC (rev 193052)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNode.js        2015-12-03 18:35:53 UTC (rev 193053)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,40 +23,35 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.TimelineDataGridNode = function(graphOnly, graphDataSource, hasChildren)
</del><ins>+WebInspector.TimelineDataGridNode = class TimelineDataGridNode extends WebInspector.DataGridNode
</ins><span class="cx"> {
</span><del>-    WebInspector.DataGridNode.call(this, {}, hasChildren);
</del><ins>+    constructor(graphOnly, graphDataSource, hasChildren)
+    {
+        super({}, hasChildren);
</ins><span class="cx"> 
</span><del>-    this.copyable = false;
</del><ins>+        this.copyable = false;
</ins><span class="cx"> 
</span><del>-    this._graphOnly = graphOnly || false;
-    this._graphDataSource = graphDataSource || null;
</del><ins>+        this._graphOnly = graphOnly || false;
+        this._graphDataSource = graphDataSource || null;
</ins><span class="cx"> 
</span><del>-    if (graphDataSource) {
-        this._graphContainerElement = document.createElement(&quot;div&quot;);
-        this._timelineRecordBars = [];
</del><ins>+        if (graphDataSource) {
+            this._graphContainerElement = document.createElement(&quot;div&quot;);
+            this._timelineRecordBars = [];
+        }
</ins><span class="cx">     }
</span><del>-};
</del><span class="cx"> 
</span><del>-// FIXME: Move to a WebInspector.Object subclass and we can remove this.
-WebInspector.Object.deprecatedAddConstructorFunctions(WebInspector.TimelineDataGridNode);
-
-WebInspector.TimelineDataGridNode.prototype = {
-    constructor: WebInspector.TimelineDataGridNode,
-    __proto__: WebInspector.DataGridNode.prototype,
-
</del><span class="cx">     // Public
</span><span class="cx"> 
</span><span class="cx">     get records()
</span><span class="cx">     {
</span><span class="cx">         // Implemented by subclasses.
</span><span class="cx">         return [];
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get graphDataSource()
</span><span class="cx">     {
</span><span class="cx">         return this._graphDataSource;
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     get data()
</span><span class="cx">     {
</span><span class="lines">@@ -65,22 +60,22 @@
</span><span class="cx"> 
</span><span class="cx">         var records = this.records || [];
</span><span class="cx">         return {graph: records.length ? records[0].startTime : 0};
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    collapse: function()
</del><ins>+    collapse()
</ins><span class="cx">     {
</span><del>-        WebInspector.DataGridNode.prototype.collapse.call(this);
</del><ins>+        super.collapse();
</ins><span class="cx"> 
</span><span class="cx">         if (!this._graphDataSource || !this.revealed)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         // Refresh to show child bars in our graph now that we collapsed.
</span><span class="cx">         this.refreshGraph();
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    expand: function()
</del><ins>+    expand()
</ins><span class="cx">     {
</span><del>-        WebInspector.DataGridNode.prototype.expand.call(this);
</del><ins>+        super.expand();
</ins><span class="cx"> 
</span><span class="cx">         if (!this._graphDataSource || !this.revealed)
</span><span class="cx">             return;
</span><span class="lines">@@ -95,9 +90,9 @@
</span><span class="cx">                 childNode.refreshGraph();
</span><span class="cx">             childNode = childNode.traverseNextNode(true, this);
</span><span class="cx">         }
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    createCellContent: function(columnIdentifier, cell)
</del><ins>+    createCellContent(columnIdentifier, cell)
</ins><span class="cx">     {
</span><span class="cx">         if (columnIdentifier === &quot;graph&quot; &amp;&amp; this._graphDataSource) {
</span><span class="cx">             this.needsGraphRefresh();
</span><span class="lines">@@ -162,7 +157,7 @@
</span><span class="cx">                 fragment.appendChild(goToArrowButtonLink);
</span><span class="cx"> 
</span><span class="cx">                 var icon = document.createElement(&quot;div&quot;);
</span><del>-                icon.className = WebInspector.LayoutTimelineDataGridNode.IconStyleClassName;
</del><ins>+                icon.classList.add(&quot;icon&quot;);
</ins><span class="cx">                 fragment.appendChild(icon);
</span><span class="cx"> 
</span><span class="cx">                 if (isAnonymousFunction) {
</span><span class="lines">@@ -190,7 +185,7 @@
</span><span class="cx">                     fragment.appendChild(document.createTextNode(functionName));
</span><span class="cx"> 
</span><span class="cx">                     var subtitleElement = document.createElement(&quot;span&quot;);
</span><del>-                    subtitleElement.className = WebInspector.LayoutTimelineDataGridNode.SubtitleStyleClassName;
</del><ins>+                    subtitleElement.classList.add(&quot;subtitle&quot;);
</ins><span class="cx">                     callFrame.sourceCodeLocation.populateLiveDisplayLocationString(subtitleElement, &quot;textContent&quot;);
</span><span class="cx"> 
</span><span class="cx">                     fragment.appendChild(subtitleElement);
</span><span class="lines">@@ -200,28 +195,28 @@
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             var icon = document.createElement(&quot;div&quot;);
</span><del>-            icon.className = WebInspector.LayoutTimelineDataGridNode.IconStyleClassName;
-            fragment.appendChild(icon);
</del><ins>+            icon.classList.add(&quot;icon&quot;);
</ins><span class="cx"> 
</span><ins>+            fragment.appendChild(icon);
</ins><span class="cx">             fragment.appendChild(document.createTextNode(functionName));
</span><span class="cx"> 
</span><span class="cx">             return fragment;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        return WebInspector.DataGridNode.prototype.createCellContent.call(this, columnIdentifier, cell);
-    },
</del><ins>+        return super.createCellContent(columnIdentifier, cell);
+    }
</ins><span class="cx"> 
</span><del>-    refresh: function()
</del><ins>+    refresh()
</ins><span class="cx">     {
</span><span class="cx">         if (this._graphDataSource &amp;&amp; this._graphOnly) {
</span><span class="cx">             this.needsGraphRefresh();
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        WebInspector.DataGridNode.prototype.refresh.call(this);
-    },
</del><ins>+        super.refresh();
+    }
</ins><span class="cx"> 
</span><del>-    refreshGraph: function()
</del><ins>+    refreshGraph()
</ins><span class="cx">     {
</span><span class="cx">         if (!this._graphDataSource)
</span><span class="cx">             return;
</span><span class="lines">@@ -257,6 +252,19 @@
</span><span class="cx">             ++recordBarIndex;
</span><span class="cx">         }
</span><span class="cx"> 
</span><ins>+        function collectRecordsByType(records, recordsByTypeMap)
+        {
+            for (var record of records) {
+                var typedRecords = recordsByTypeMap.get(record.type);
+                if (!typedRecords) {
+                    typedRecords = [];
+                    recordsByTypeMap.set(record.type, typedRecords);
+                }
+
+                typedRecords.push(record);
+            }
+        }
+
</ins><span class="cx">         var boundCreateBar = createBar.bind(this);
</span><span class="cx"> 
</span><span class="cx">         if (this.expanded) {
</span><span class="lines">@@ -267,26 +275,12 @@
</span><span class="cx">             // To share bars better, group records by type.
</span><span class="cx"> 
</span><span class="cx">             var recordTypeMap = new Map;
</span><ins>+            collectRecordsByType(this.records, recordTypeMap);
</ins><span class="cx"> 
</span><del>-            function collectRecordsByType(records)
-            {
-                for (var record of records) {
-                    var typedRecords = recordTypeMap.get(record.type);
-                    if (!typedRecords) {
-                        typedRecords = [];
-                        recordTypeMap.set(record.type, typedRecords);
-                    }
-
-                    typedRecords.push(record);
-                }
-            }
-
-            collectRecordsByType(this.records);
-
</del><span class="cx">             var childNode = this.children[0];
</span><span class="cx">             while (childNode) {
</span><span class="cx">                 if (childNode instanceof WebInspector.TimelineDataGridNode)
</span><del>-                    collectRecordsByType(childNode.records);
</del><ins>+                    collectRecordsByType(childNode.records, recordTypeMap);
</ins><span class="cx">                 childNode = childNode.traverseNextNode(false, this);
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="lines">@@ -299,9 +293,9 @@
</span><span class="cx">             this._timelineRecordBars[recordBarIndex].records = null;
</span><span class="cx">             this._timelineRecordBars[recordBarIndex].element.remove();
</span><span class="cx">         }
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><del>-    needsGraphRefresh: function()
</del><ins>+    needsGraphRefresh()
</ins><span class="cx">     {
</span><span class="cx">         if (!this.revealed) {
</span><span class="cx">             // We are not visible, but an ancestor will be drawing our graph.
</span><span class="lines">@@ -323,11 +317,11 @@
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         this._scheduledGraphRefreshIdentifier = requestAnimationFrame(this.refreshGraph.bind(this));
</span><del>-    },
</del><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     // Protected
</span><span class="cx"> 
</span><del>-    isRecordVisible: function(record)
</del><ins>+    isRecordVisible(record)
</ins><span class="cx">     {
</span><span class="cx">         if (!this._graphDataSource)
</span><span class="cx">             return false;
</span></span></pre>
</div>
</div>

</body>
</html>