<!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>[197909] trunk/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/197909">197909</a></dd>
<dt>Author</dt> <dd>mattbaker@apple.com</dd>
<dt>Date</dt> <dd>2016-03-09 17:38:03 -0800 (Wed, 09 Mar 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Web Inspector: Timelines UI redesign: use DataGridNode for TimelineView selection path components
https://bugs.webkit.org/show_bug.cgi?id=154954
&lt;rdar://problem/24947939&gt;

Reviewed by Timothy Hatcher.

This patch adds a new path component, TimelineDataGridNodePathComponent,
for creating a path component from the current grid selection. This is
needed since TimelineViews will no longer have an associated content tree
outline once the navigation sidebar is removed.

TimelineDataGridNode has new protected methods, &quot;displayName&quot; and
&quot;iconClassNames&quot;, which are used to populate hierarchical path components,
create grid node data, and create cell content.

TimelineView subclasses share a certain amount of boilerplate code for
getting selection path components and handling path component selection.
In the future we may be able to reduce this code by introducing a new
DataGridTimelineView base class.

* UserInterface/Main.html:
Added/removed files.

* UserInterface/Views/LayoutTimelineDataGridNode.js:
(WebInspector.LayoutTimelineDataGridNode.prototype.get data):
(WebInspector.LayoutTimelineDataGridNode.prototype.createCellContent):
(WebInspector.LayoutTimelineDataGridNode):
(WebInspector.LayoutTimelineDataGridNode.prototype.get record): Deleted.
Moved to base class.

* UserInterface/Views/LayoutTimelineView.js:
(WebInspector.LayoutTimelineView.prototype.get selectionPathComponents):
(WebInspector.LayoutTimelineView.prototype.dataGridNodePathComponentSelected):
(WebInspector.LayoutTimelineView.prototype.treeElementPathComponentSelected): Deleted.
TimelineView tree outlines are going away.

* UserInterface/Views/MemoryTimelineView.js:
(WebInspector.MemoryTimelineView.prototype.treeElementPathComponentSelected): Deleted.
TimelineView tree outlines are going away.

* UserInterface/Views/NetworkTimelineView.js:
(WebInspector.NetworkTimelineView.prototype.get selectionPathComponents):
(WebInspector.NetworkTimelineView.prototype.dataGridNodePathComponentSelected):
(WebInspector.NetworkTimelineView.prototype.treeElementPathComponentSelected): Deleted.
TimelineView tree outlines are going away.

* UserInterface/Views/ProfileNodeDataGridNode.js:
(WebInspector.ProfileNodeDataGridNode.prototype.get data):
(WebInspector.ProfileNodeDataGridNode.prototype.createCellContent):
(WebInspector.ProfileNodeDataGridNode.prototype.displayName):
(WebInspector.ProfileNodeDataGridNode.prototype.iconClassNames):
(WebInspector.ProfileNodeDataGridNode):
(WebInspector.ProfileNodeDataGridNode.prototype._iconClassNameForProfileNode): Deleted.
(WebInspector.ProfileNodeDataGridNode.prototype._titleForProfileNode): Deleted.
Re-implemented as overrides of the base class methods &quot;iconClassNames&quot;
and &quot;displayName&quot;.

* UserInterface/Views/RenderingFrameTimelineDataGridNode.js:
(WebInspector.RenderingFrameTimelineDataGridNode.prototype.createCellContent):
(WebInspector.RenderingFrameTimelineDataGridNode):
(WebInspector.RenderingFrameTimelineDataGridNode.prototype.get record): Deleted.
Moved to base class.

* UserInterface/Views/ResourceTimelineDataGridNode.js:
(WebInspector.ResourceTimelineDataGridNode.prototype.createCellContent):
(WebInspector.ResourceTimelineDataGridNode.prototype.displayName):
(WebInspector.ResourceTimelineDataGridNode.prototype.iconClassNames):
Override base class methods, making it possible to remove ResourceTimelineDataGridNodePathComponent,
and treat all TimelineDataGridNodes in a uniform manner.

(WebInspector.ResourceTimelineDataGridNode.prototype._createNameCellDocumentFragment):
Replace duplicated code with call to &quot;displayName&quot;.

* UserInterface/Views/ResourceTimelineDataGridNodePathComponent.js: Removed.
Replaced by more generic solution, TimelineDataGridNodePathComponent.

* UserInterface/Views/ScriptDetailsTimelineView.js:
(WebInspector.ScriptDetailsTimelineView.prototype.get selectionPathComponents):
(WebInspector.ScriptDetailsTimelineView.prototype.dataGridNodePathComponentSelected):
(WebInspector.ScriptDetailsTimelineView.prototype.treeElementPathComponentSelected): Deleted.
TimelineView tree outlines are going away.

* UserInterface/Views/ScriptTimelineDataGridNode.js:
(WebInspector.ScriptTimelineDataGridNode.prototype.createCellContent):
(WebInspector.ScriptTimelineDataGridNode.prototype._createNameCellDocumentFragment):
Replace duplicated code with call to &quot;displayName&quot;.

(WebInspector.ScriptTimelineDataGridNode):
(WebInspector.ScriptTimelineDataGridNode.prototype.get record): Deleted.
Moved to base class.

* UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js:
(WebInspector.SourceCodeTimelineTimelineDataGridNode.prototype.createCellContent):
(WebInspector.SourceCodeTimelineTimelineDataGridNode.prototype._createNameCellContent):
Replace duplicated code with call to &quot;displayName&quot;.

* UserInterface/Views/TimelineDataGridNode.js:
(WebInspector.TimelineDataGridNode.prototype.get record):
Implemented in terms of the &quot;records&quot; getter, since all subclasses simply returned the
node's first (or only) record.

(WebInspector.TimelineDataGridNode.prototype.displayName):
(WebInspector.TimelineDataGridNode.prototype.iconClassNames):
Base class implementations, using utility methods in TimelineTabContentView
to get display data based on the node's timeline record. Can be overridden
by nodes that either don't have a timeline record (ProfileNodeDataGridNode)

* UserInterface/Views/TimelineDataGridNodePathComponent.js:
(WebInspector.TimelineDataGridNodePathComponent):
(WebInspector.TimelineDataGridNodePathComponent.prototype.get timelineDataGridNode):
(WebInspector.TimelineDataGridNodePathComponent.prototype.get previousSibling):
(WebInspector.TimelineDataGridNodePathComponent.prototype.get nextSibling):

* UserInterface/Views/TimelineView.js:
(WebInspector.TimelineView):
(WebInspector.TimelineView.prototype.get selectionPathComponents):
Must be implemented by subclasses since not all TimelineViews use a DataGrid.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceMainhtml">trunk/Source/WebInspectorUI/UserInterface/Main.html</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsLayoutTimelineDataGridNodejs">trunk/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGridNode.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsLayoutTimelineViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsMemoryTimelineViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/MemoryTimelineView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsNetworkTimelineViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTimelineView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsProfileNodeDataGridNodejs">trunk/Source/WebInspectorUI/UserInterface/Views/ProfileNodeDataGridNode.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsRenderingFrameTimelineDataGridNodejs">trunk/Source/WebInspectorUI/UserInterface/Views/RenderingFrameTimelineDataGridNode.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsResourceTimelineDataGridNodejs">trunk/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNode.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsScriptDetailsTimelineViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/ScriptDetailsTimelineView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsScriptTimelineDataGridNodejs">trunk/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGridNode.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsSourceCodeTimelineTimelineDataGridNodejs">trunk/Source/WebInspectorUI/UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsTimelineDataGridNodejs">trunk/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNode.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsTimelineViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/TimelineView.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsTimelineDataGridNodePathComponentjs">trunk/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNodePathComponent.js</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsResourceTimelineDataGridNodePathComponentjs">trunk/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNodePathComponent.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/ChangeLog        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -1,5 +1,125 @@
</span><span class="cx"> 2016-03-09  Matt Baker  &lt;mattbaker@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Web Inspector: Timelines UI redesign: use DataGridNode for TimelineView selection path components
+        https://bugs.webkit.org/show_bug.cgi?id=154954
+        &lt;rdar://problem/24947939&gt;
+
+        Reviewed by Timothy Hatcher.
+
+        This patch adds a new path component, TimelineDataGridNodePathComponent,
+        for creating a path component from the current grid selection. This is
+        needed since TimelineViews will no longer have an associated content tree
+        outline once the navigation sidebar is removed.
+
+        TimelineDataGridNode has new protected methods, &quot;displayName&quot; and
+        &quot;iconClassNames&quot;, which are used to populate hierarchical path components,
+        create grid node data, and create cell content.
+
+        TimelineView subclasses share a certain amount of boilerplate code for
+        getting selection path components and handling path component selection.
+        In the future we may be able to reduce this code by introducing a new
+        DataGridTimelineView base class.
+
+        * UserInterface/Main.html:
+        Added/removed files.
+
+        * UserInterface/Views/LayoutTimelineDataGridNode.js:
+        (WebInspector.LayoutTimelineDataGridNode.prototype.get data):
+        (WebInspector.LayoutTimelineDataGridNode.prototype.createCellContent):
+        (WebInspector.LayoutTimelineDataGridNode):
+        (WebInspector.LayoutTimelineDataGridNode.prototype.get record): Deleted.
+        Moved to base class.
+
+        * UserInterface/Views/LayoutTimelineView.js:
+        (WebInspector.LayoutTimelineView.prototype.get selectionPathComponents):
+        (WebInspector.LayoutTimelineView.prototype.dataGridNodePathComponentSelected):
+        (WebInspector.LayoutTimelineView.prototype.treeElementPathComponentSelected): Deleted.
+        TimelineView tree outlines are going away.
+
+        * UserInterface/Views/MemoryTimelineView.js:
+        (WebInspector.MemoryTimelineView.prototype.treeElementPathComponentSelected): Deleted.
+        TimelineView tree outlines are going away.
+
+        * UserInterface/Views/NetworkTimelineView.js:
+        (WebInspector.NetworkTimelineView.prototype.get selectionPathComponents):
+        (WebInspector.NetworkTimelineView.prototype.dataGridNodePathComponentSelected):
+        (WebInspector.NetworkTimelineView.prototype.treeElementPathComponentSelected): Deleted.
+        TimelineView tree outlines are going away.
+
+        * UserInterface/Views/ProfileNodeDataGridNode.js:
+        (WebInspector.ProfileNodeDataGridNode.prototype.get data):
+        (WebInspector.ProfileNodeDataGridNode.prototype.createCellContent):
+        (WebInspector.ProfileNodeDataGridNode.prototype.displayName):
+        (WebInspector.ProfileNodeDataGridNode.prototype.iconClassNames):
+        (WebInspector.ProfileNodeDataGridNode):
+        (WebInspector.ProfileNodeDataGridNode.prototype._iconClassNameForProfileNode): Deleted.
+        (WebInspector.ProfileNodeDataGridNode.prototype._titleForProfileNode): Deleted.
+        Re-implemented as overrides of the base class methods &quot;iconClassNames&quot;
+        and &quot;displayName&quot;.
+
+        * UserInterface/Views/RenderingFrameTimelineDataGridNode.js:
+        (WebInspector.RenderingFrameTimelineDataGridNode.prototype.createCellContent):
+        (WebInspector.RenderingFrameTimelineDataGridNode):
+        (WebInspector.RenderingFrameTimelineDataGridNode.prototype.get record): Deleted.
+        Moved to base class.
+
+        * UserInterface/Views/ResourceTimelineDataGridNode.js:
+        (WebInspector.ResourceTimelineDataGridNode.prototype.createCellContent):
+        (WebInspector.ResourceTimelineDataGridNode.prototype.displayName):
+        (WebInspector.ResourceTimelineDataGridNode.prototype.iconClassNames):
+        Override base class methods, making it possible to remove ResourceTimelineDataGridNodePathComponent,
+        and treat all TimelineDataGridNodes in a uniform manner.
+
+        (WebInspector.ResourceTimelineDataGridNode.prototype._createNameCellDocumentFragment):
+        Replace duplicated code with call to &quot;displayName&quot;.
+
+        * UserInterface/Views/ResourceTimelineDataGridNodePathComponent.js: Removed.
+        Replaced by more generic solution, TimelineDataGridNodePathComponent.
+
+        * UserInterface/Views/ScriptDetailsTimelineView.js:
+        (WebInspector.ScriptDetailsTimelineView.prototype.get selectionPathComponents):
+        (WebInspector.ScriptDetailsTimelineView.prototype.dataGridNodePathComponentSelected):
+        (WebInspector.ScriptDetailsTimelineView.prototype.treeElementPathComponentSelected): Deleted.
+        TimelineView tree outlines are going away.
+
+        * UserInterface/Views/ScriptTimelineDataGridNode.js:
+        (WebInspector.ScriptTimelineDataGridNode.prototype.createCellContent):
+        (WebInspector.ScriptTimelineDataGridNode.prototype._createNameCellDocumentFragment):
+        Replace duplicated code with call to &quot;displayName&quot;.
+
+        (WebInspector.ScriptTimelineDataGridNode):
+        (WebInspector.ScriptTimelineDataGridNode.prototype.get record): Deleted.
+        Moved to base class.
+
+        * UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js:
+        (WebInspector.SourceCodeTimelineTimelineDataGridNode.prototype.createCellContent):
+        (WebInspector.SourceCodeTimelineTimelineDataGridNode.prototype._createNameCellContent):
+        Replace duplicated code with call to &quot;displayName&quot;.
+
+        * UserInterface/Views/TimelineDataGridNode.js:
+        (WebInspector.TimelineDataGridNode.prototype.get record):
+        Implemented in terms of the &quot;records&quot; getter, since all subclasses simply returned the
+        node's first (or only) record.
+
+        (WebInspector.TimelineDataGridNode.prototype.displayName):
+        (WebInspector.TimelineDataGridNode.prototype.iconClassNames):
+        Base class implementations, using utility methods in TimelineTabContentView
+        to get display data based on the node's timeline record. Can be overridden
+        by nodes that either don't have a timeline record (ProfileNodeDataGridNode)
+
+        * UserInterface/Views/TimelineDataGridNodePathComponent.js:
+        (WebInspector.TimelineDataGridNodePathComponent):
+        (WebInspector.TimelineDataGridNodePathComponent.prototype.get timelineDataGridNode):
+        (WebInspector.TimelineDataGridNodePathComponent.prototype.get previousSibling):
+        (WebInspector.TimelineDataGridNodePathComponent.prototype.get nextSibling):
+
+        * UserInterface/Views/TimelineView.js:
+        (WebInspector.TimelineView):
+        (WebInspector.TimelineView.prototype.get selectionPathComponents):
+        Must be implemented by subclasses since not all TimelineViews use a DataGrid.
+
+2016-03-09  Matt Baker  &lt;mattbaker@apple.com&gt;
+
</ins><span class="cx">         Web Inspector: Nodes in Computed Styles &gt; Container Regions formatted incorrectly.
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=155277
</span><span class="cx">         &lt;rdar://problem/25072711&gt;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceMainhtml"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Main.html (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Main.html        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Main.html        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -567,7 +567,6 @@
</span><span class="cx">     &lt;script src=&quot;Views/ResourceDetailsSidebarPanel.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/ResourceSidebarPanel.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/ResourceTimelineDataGridNode.js&quot;&gt;&lt;/script&gt;
</span><del>-    &lt;script src=&quot;Views/ResourceTimelineDataGridNodePathComponent.js&quot;&gt;&lt;/script&gt;
</del><span class="cx">     &lt;script src=&quot;Views/RulesStyleDetailsPanel.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/ScopeBar.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/ScopeBarItem.js&quot;&gt;&lt;/script&gt;
</span><span class="lines">@@ -596,6 +595,7 @@
</span><span class="cx">     &lt;script src=&quot;Views/SyntaxHighlightingSupport.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/TextContentView.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/TextResourceContentView.js&quot;&gt;&lt;/script&gt;
</span><ins>+    &lt;script src=&quot;Views/TimelineDataGridNodePathComponent.js&quot;&gt;&lt;/script&gt;
</ins><span class="cx">     &lt;script src=&quot;Views/TimelineRecordBar.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/TimelineRecordFrame.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/TimelineRecordingContentView.js&quot;&gt;&lt;/script&gt;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsLayoutTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGridNode.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGridNode.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineDataGridNode.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -35,11 +35,6 @@
</span><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><del>-    get record()
-    {
-        return this._record;
-    }
-
</del><span class="cx">     get records()
</span><span class="cx">     {
</span><span class="cx">         return [this._record];
</span><span class="lines">@@ -49,7 +44,7 @@
</span><span class="cx">     {
</span><span class="cx">         if (!this._cachedData) {
</span><span class="cx">             this._cachedData = {
</span><del>-                name: WebInspector.LayoutTimelineRecord.displayNameForEventType(this._record.eventType),
</del><ins>+                name: this.displayName(),
</ins><span class="cx">                 width: this._record.width,
</span><span class="cx">                 height: this._record.height,
</span><span class="cx">                 area: this._record.width * this._record.height,
</span><span class="lines">@@ -68,7 +63,7 @@
</span><span class="cx"> 
</span><span class="cx">         switch (columnIdentifier) {
</span><span class="cx">         case &quot;name&quot;:
</span><del>-            cell.classList.add(WebInspector.TimelineTabContentView.iconClassNameForRecord(this._record));
</del><ins>+            cell.classList.add(...this.iconClassNames());
</ins><span class="cx">             return value;
</span><span class="cx"> 
</span><span class="cx">         case &quot;width&quot;:
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsLayoutTimelineViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineView.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineView.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/LayoutTimelineView.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -102,6 +102,19 @@
</span><span class="cx">         return WebInspector.UIString(&quot;Records&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    get selectionPathComponents()
+    {
+        if (!this._dataGrid.selectedNode || this._dataGrid.selectedNode.hidden)
+            return null;
+
+        let timelineDataGridNode = this._dataGrid.selectedNode;
+        console.assert(timelineDataGridNode instanceof WebInspector.TimelineDataGridNode);
+
+        let pathComponent = new WebInspector.TimelineDataGridNodePathComponent(timelineDataGridNode);
+        pathComponent.addEventListener(WebInspector.HierarchicalPathComponent.Event.SiblingWasSelected, this.dataGridNodePathComponentSelected, this);
+        return [pathComponent];
+    }
+
</ins><span class="cx">     shown()
</span><span class="cx">     {
</span><span class="cx">         super.shown();
</span><span class="lines">@@ -153,11 +166,11 @@
</span><span class="cx"> 
</span><span class="cx">     // Protected
</span><span class="cx"> 
</span><del>-    treeElementPathComponentSelected(event)
</del><ins>+    dataGridNodePathComponentSelected(event)
</ins><span class="cx">     {
</span><del>-        var dataGridNode = this._dataGrid.dataGridNodeForTreeElement(event.data.pathComponent.generalTreeElement);
-        if (!dataGridNode)
-            return;
</del><ins>+        let dataGridNode = event.data.pathComponent.timelineDataGridNode;
+        console.assert(dataGridNode.dataGrid === this._dataGrid);
+
</ins><span class="cx">         dataGridNode.revealAndSelect();
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsMemoryTimelineViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/MemoryTimelineView.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/MemoryTimelineView.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/MemoryTimelineView.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -154,11 +154,6 @@
</span><span class="cx"> 
</span><span class="cx">     // Protected
</span><span class="cx"> 
</span><del>-    treeElementPathComponentSelected(event)
-    {
-        // Nothing. The sidebar will soon be removed.
-    }
-
</del><span class="cx">     layout()
</span><span class="cx">     {
</span><span class="cx">         // Always update timeline ruler.
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsNetworkTimelineViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTimelineView.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTimelineView.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTimelineView.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -111,6 +111,18 @@
</span><span class="cx">         return WebInspector.UIString(&quot;Resources&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    get selectionPathComponents()
+    {
+        if (!this._dataGrid.selectedNode || this._dataGrid.selectedNode.hidden)
+            return null;
+
+        console.assert(this._dataGrid.selectedNode instanceof WebInspector.ResourceTimelineDataGridNode);
+
+        let pathComponent = new WebInspector.TimelineDataGridNodePathComponent(this._dataGrid.selectedNode, this._dataGrid.selectedNode.resource);
+        pathComponent.addEventListener(WebInspector.HierarchicalPathComponent.Event.SiblingWasSelected, this.dataGridNodePathComponentSelected, this);
+        return [pathComponent];
+    }
+
</ins><span class="cx">     shown()
</span><span class="cx">     {
</span><span class="cx">         super.shown();
</span><span class="lines">@@ -166,11 +178,14 @@
</span><span class="cx">         console.error(&quot;Unknown tree element selected.&quot;, treeElement);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    treeElementPathComponentSelected(event)
</del><ins>+    dataGridNodePathComponentSelected(event)
</ins><span class="cx">     {
</span><del>-        var dataGridNode = this._dataGrid.dataGridNodeForTreeElement(event.data.pathComponent.generalTreeElement);
-        if (!dataGridNode)
-            return;
</del><ins>+        let pathComponent = event.data.pathComponent;
+        console.assert(pathComponent instanceof WebInspector.TimelineDataGridNodePathComponent);
+
+        let dataGridNode = pathComponent.timelineDataGridNode;
+        console.assert(dataGridNode.dataGrid === this._dataGrid);
+
</ins><span class="cx">         dataGridNode.revealAndSelect();
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsProfileNodeDataGridNodejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ProfileNodeDataGridNode.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ProfileNodeDataGridNode.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ProfileNodeDataGridNode.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx">     {
</span><span class="cx">         if (!this._cachedData) {
</span><span class="cx">             this._cachedData = this._profileNode.computeCallInfoForTimeRange(this._rangeStartTime, this._rangeEndTime);
</span><del>-            this._cachedData.name = this._titleForProfileNode();
</del><ins>+            this._cachedData.name = this.displayName();
</ins><span class="cx">             this._cachedData.location = this._profileNode.sourceCodeLocation;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -114,7 +114,7 @@
</span><span class="cx"> 
</span><span class="cx">         switch (columnIdentifier) {
</span><span class="cx">         case &quot;name&quot;:
</span><del>-            cell.classList.add(this._iconClassNameForProfileNode());
</del><ins>+            cell.classList.add(...this.iconClassNames());
</ins><span class="cx">             return value;
</span><span class="cx"> 
</span><span class="cx">         case &quot;startTime&quot;:
</span><span class="lines">@@ -129,9 +129,27 @@
</span><span class="cx">         return super.createCellContent(columnIdentifier, cell);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    // Private
</del><ins>+    displayName()
+    {
+        let title = this._profileNode.functionName;
+        if (!title) {
+            switch (this._profileNode.type) {
+            case WebInspector.ProfileNode.Type.Function:
+                title = WebInspector.UIString(&quot;(anonymous function)&quot;);
+                break;
+            case WebInspector.ProfileNode.Type.Program:
+                title = WebInspector.UIString(&quot;(program)&quot;);
+                break;
+            default:
+                title = WebInspector.UIString(&quot;(anonymous function)&quot;);
+                console.error(&quot;Unknown ProfileNode type: &quot; + this._profileNode.type);
+            }
+        }
</ins><span class="cx"> 
</span><del>-    _iconClassNameForProfileNode()
</del><ins>+        return title;
+    }
+
+    iconClassNames()
</ins><span class="cx">     {
</span><span class="cx">         let className;
</span><span class="cx">         switch (this._profileNode.type) {
</span><span class="lines">@@ -152,26 +170,6 @@
</span><span class="cx">         if (this._profileNode.functionName &amp;&amp; this._profileNode.functionName.startsWith(&quot;on&quot;) &amp;&amp; this._profileNode.functionName.length &gt;= 5)
</span><span class="cx">             className = WebInspector.CallFrameView.EventListenerIconStyleClassName;
</span><span class="cx"> 
</span><del>-        return className;
</del><ins>+        return [className];
</ins><span class="cx">     }
</span><del>-
-    _titleForProfileNode()
-    {
-        let title = this._profileNode.functionName;
-        if (!name) {
-            switch (this._profileNode.type) {
-            case WebInspector.ProfileNode.Type.Function:
-                title = WebInspector.UIString(&quot;(anonymous function)&quot;);
-                break;
-            case WebInspector.ProfileNode.Type.Program:
-                title = WebInspector.UIString(&quot;(program)&quot;);
-                break;
-            default:
-                title = WebInspector.UIString(&quot;(anonymous function)&quot;);
-                console.error(&quot;Unknown ProfileNode type: &quot; + this._profileNode.type);
-            }
-        }
-
-        return title;
-    }
</del><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsRenderingFrameTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/RenderingFrameTimelineDataGridNode.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/RenderingFrameTimelineDataGridNode.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/RenderingFrameTimelineDataGridNode.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -35,11 +35,6 @@
</span><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><del>-    get record()
-    {
-        return this._record;
-    }
-
</del><span class="cx">     get records()
</span><span class="cx">     {
</span><span class="cx">         return [this._record];
</span><span class="lines">@@ -73,7 +68,7 @@
</span><span class="cx"> 
</span><span class="cx">         switch (columnIdentifier) {
</span><span class="cx">         case &quot;name&quot;:
</span><del>-            cell.classList.add(WebInspector.TimelineTabContentView.iconClassNameForRecord(this._record));
</del><ins>+            cell.classList.add(...this.iconClassNames());
</ins><span class="cx">             return value;
</span><span class="cx"> 
</span><span class="cx">         case &quot;startTime&quot;:
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsResourceTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNode.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNode.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNode.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx"> 
</span><span class="cx">         switch (columnIdentifier) {
</span><span class="cx">         case &quot;name&quot;:
</span><del>-            cell.classList.add(WebInspector.ResourceTreeElement.ResourceIconStyleClassName, resource.type);
</del><ins>+            cell.classList.add(...this.iconClassNames());
</ins><span class="cx">             cell.title = resource.displayURL;
</span><span class="cx">             this._updateStatus(cell);
</span><span class="cx">             return this._createNameCellDocumentFragment();
</span><span class="lines">@@ -141,12 +141,17 @@
</span><span class="cx">         super.refresh();
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    iconClassNames()
+    {
+        return [WebInspector.ResourceTreeElement.ResourceIconStyleClassName, this.resource.type];
+    }
+
</ins><span class="cx">     // Private
</span><span class="cx"> 
</span><span class="cx">     _createNameCellDocumentFragment()
</span><span class="cx">     {
</span><span class="cx">         let fragment = document.createDocumentFragment();
</span><del>-        let mainTitle = WebInspector.TimelineTabContentView.displayNameForRecord(this._record);
</del><ins>+        let mainTitle = this.displayName();
</ins><span class="cx">         fragment.append(mainTitle);
</span><span class="cx"> 
</span><span class="cx">         // Show the host as the subtitle if it is different from the main resource or if this is the main frame's main resource.
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsResourceTimelineDataGridNodePathComponentjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNodePathComponent.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNodePathComponent.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNodePathComponent.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -1,58 +0,0 @@
</span><del>-/*
- * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-WebInspector.ResourceTimelineDataGridNodePathComponent = class ResourceTimelineDataGridNodePathComponent extends WebInspector.HierarchicalPathComponent
-{
-    constructor(resourceTimelineDataGridNode)
-    {
-        var resource = resourceTimelineDataGridNode.record.resource;
-        var classNames = [WebInspector.ResourceTreeElement.ResourceIconStyleClassName, resource.type];
-
-        super(resourceTimelineDataGridNode.data.name, classNames, resource);
-
-        this._resourceTimelineDataGridNode = resourceTimelineDataGridNode;
-    }
-
-    // Public
-
-    get resourceTimelineDataGridNode()
-    {
-        return this._resourceTimelineDataGridNode;
-    }
-
-    get previousSibling()
-    {
-        if (!this._resourceTimelineDataGridNode.previousSibling)
-            return null;
-        return new WebInspector.ResourceTimelineDataGridNodePathComponent(this._resourceTimelineDataGridNode.previousSibling);
-    }
-
-    get nextSibling()
-    {
-        if (!this._resourceTimelineDataGridNode.nextSibling)
-            return null;
-        return new WebInspector.ResourceTimelineDataGridNodePathComponent(this._resourceTimelineDataGridNode.nextSibling);
-    }
-};
</del></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsScriptDetailsTimelineViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ScriptDetailsTimelineView.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ScriptDetailsTimelineView.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ScriptDetailsTimelineView.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -126,16 +126,16 @@
</span><span class="cx">         var pathComponents = [];
</span><span class="cx"> 
</span><span class="cx">         while (dataGridNode &amp;&amp; !dataGridNode.root) {
</span><del>-            var treeElement = this._dataGrid.treeElementForDataGridNode(dataGridNode);
-            console.assert(treeElement);
-            if (!treeElement)
-                break;
-
-            if (treeElement.hidden)
</del><ins>+            console.assert(dataGridNode instanceof WebInspector.TimelineDataGridNode);
+            if (dataGridNode.hidden)
</ins><span class="cx">                 return null;
</span><span class="cx"> 
</span><del>-            var pathComponent = new WebInspector.GeneralTreeElementPathComponent(treeElement);
-            pathComponent.addEventListener(WebInspector.HierarchicalPathComponent.Event.SiblingWasSelected, this.treeElementPathComponentSelected, this);
</del><ins>+            let representedObject = null;
+            if (dataGridNode instanceof WebInspector.ProfileNodeDataGridNode)
+                representedObject = dataGridNode.profileNode;
+
+            let pathComponent = new WebInspector.TimelineDataGridNodePathComponent(dataGridNode);
+            pathComponent.addEventListener(WebInspector.HierarchicalPathComponent.Event.SiblingWasSelected, this.dataGridNodePathComponentSelected, this);
</ins><span class="cx">             pathComponents.unshift(pathComponent);
</span><span class="cx">             dataGridNode = dataGridNode.parent;
</span><span class="cx">         }
</span><span class="lines">@@ -172,11 +172,11 @@
</span><span class="cx">         super.showContentViewForTreeElement(treeElement);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    treeElementPathComponentSelected(event)
</del><ins>+    dataGridNodePathComponentSelected(event)
</ins><span class="cx">     {
</span><del>-        var dataGridNode = this._dataGrid.dataGridNodeForTreeElement(event.data.pathComponent.generalTreeElement);
-        if (!dataGridNode)
-            return;
</del><ins>+        let dataGridNode = event.data.pathComponent.timelineDataGridNode;
+        console.assert(dataGridNode.dataGrid === this._dataGrid);
+
</ins><span class="cx">         dataGridNode.revealAndSelect();
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsScriptTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGridNode.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGridNode.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ScriptTimelineDataGridNode.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -37,11 +37,6 @@
</span><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><del>-    get record()
-    {
-        return this._record;
-    }
-
</del><span class="cx">     get records()
</span><span class="cx">     {
</span><span class="cx">         return [this._record];
</span><span class="lines">@@ -125,7 +120,7 @@
</span><span class="cx"> 
</span><span class="cx">         switch (columnIdentifier) {
</span><span class="cx">         case &quot;name&quot;:
</span><del>-            cell.classList.add(WebInspector.TimelineTabContentView.iconClassNameForRecord(this._record));
</del><ins>+            cell.classList.add(...this.iconClassNames());
</ins><span class="cx">             return this._createNameCellDocumentFragment();
</span><span class="cx"> 
</span><span class="cx">         case &quot;startTime&quot;:
</span><span class="lines">@@ -148,8 +143,7 @@
</span><span class="cx">     _createNameCellDocumentFragment(cellElement)
</span><span class="cx">     {
</span><span class="cx">         let fragment = document.createDocumentFragment();
</span><del>-        let mainTitle = WebInspector.TimelineTabContentView.displayNameForRecord(this._record);
-        fragment.append(mainTitle);
</del><ins>+        fragment.append(this.displayName());
</ins><span class="cx"> 
</span><span class="cx">         if (this._record.eventType === WebInspector.ScriptTimelineRecord.EventType.TimerInstalled) {
</span><span class="cx">             let subtitleElement = document.createElement(&quot;span&quot;);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsSourceCodeTimelineTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -53,7 +53,7 @@
</span><span class="cx">     createCellContent(columnIdentifier, cell)
</span><span class="cx">     {
</span><span class="cx">         if (columnIdentifier === &quot;name&quot; &amp;&amp; this.records.length) {
</span><del>-            cell.classList.add(WebInspector.TimelineTabContentView.iconClassNameForRecord(this.records[0]));
</del><ins>+            cell.classList.add(...this.iconClassNames());
</ins><span class="cx">             return this._createNameCellContent(cell);
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx">             return null;
</span><span class="cx"> 
</span><span class="cx">         let fragment = document.createDocumentFragment();
</span><del>-        let mainTitle = WebInspector.TimelineTabContentView.displayNameForRecord(this.records[0]);
</del><ins>+        let mainTitle = this.displayName();
</ins><span class="cx">         fragment.append(mainTitle);
</span><span class="cx"> 
</span><span class="cx">         let sourceCodeLocation = this._sourceCodeTimeline.sourceCodeLocation;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsTimelineDataGridNodejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNode.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNode.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNode.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -42,6 +42,11 @@
</span><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><ins>+    get record()
+    {
+        return this.records &amp;&amp; this.records.length ? this.records[0] : null;;
+    }
+
</ins><span class="cx">     get records()
</span><span class="cx">     {
</span><span class="cx">         // Implemented by subclasses.
</span><span class="lines">@@ -308,6 +313,18 @@
</span><span class="cx">         this._scheduledGraphRefreshIdentifier = requestAnimationFrame(this.refreshGraph.bind(this));
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    displayName()
+    {
+        // Can be overridden by subclasses.
+        return WebInspector.TimelineTabContentView.displayNameForRecord(this.record);
+    }
+
+    iconClassNames()
+    {
+        // Can be overridden by subclasses.
+        return [WebInspector.TimelineTabContentView.iconClassNameForRecord(this.record)];
+    }
+
</ins><span class="cx">     // Protected
</span><span class="cx"> 
</span><span class="cx">     createGoToArrowButton(cellElement, callback)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsTimelineDataGridNodePathComponentjsfromrev197908trunkSourceWebInspectorUIUserInterfaceViewsResourceTimelineDataGridNodePathComponentjs"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNodePathComponent.js (from rev 197908, trunk/Source/WebInspectorUI/UserInterface/Views/ResourceTimelineDataGridNodePathComponent.js) (0 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNodePathComponent.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TimelineDataGridNodePathComponent.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.TimelineDataGridNodePathComponent = class TimelineDataGridNodePathComponent extends WebInspector.HierarchicalPathComponent
+{
+    constructor(timelineDataGridNode, representedObject)
+    {
+        super(timelineDataGridNode.displayName(), timelineDataGridNode.iconClassNames(), representedObject || timelineDataGridNode.record);
+
+        this._timelineDataGridNode = timelineDataGridNode;
+    }
+
+    // Public
+
+    get timelineDataGridNode()
+    {
+        return this._timelineDataGridNode;
+    }
+
+    get previousSibling()
+    {
+        let previousSibling = this._timelineDataGridNode.previousSibling;
+        while (previousSibling &amp;&amp; previousSibling.hidden)
+            previousSibling = previousSibling.previousSibling;
+
+        if (!previousSibling)
+            return null;
+
+        return new WebInspector.TimelineDataGridNodePathComponent(previousSibling, this.representedObject);
+    }
+
+    get nextSibling()
+    {
+        let nextSibling = this._timelineDataGridNode.nextSibling;
+        while (nextSibling &amp;&amp; nextSibling.hidden)
+            nextSibling = nextSibling.nextSibling;
+
+        if (!nextSibling)
+            return null;
+
+        return new WebInspector.TimelineDataGridNodePathComponent(nextSibling, this.representedObject);
+    }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsTimelineViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/TimelineView.js (197908 => 197909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/TimelineView.js        2016-03-10 01:37:35 UTC (rev 197908)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TimelineView.js        2016-03-10 01:38:03 UTC (rev 197909)
</span><span class="lines">@@ -80,12 +80,8 @@
</span><span class="cx"> 
</span><span class="cx">     get selectionPathComponents()
</span><span class="cx">     {
</span><del>-        if (!this._contentTreeOutline.selectedTreeElement || this._contentTreeOutline.selectedTreeElement.hidden)
-            return null;
-
-        var pathComponent = new WebInspector.GeneralTreeElementPathComponent(this._contentTreeOutline.selectedTreeElement);
-        pathComponent.addEventListener(WebInspector.HierarchicalPathComponent.Event.SiblingWasSelected, this.treeElementPathComponentSelected, this);
-        return [pathComponent];
</del><ins>+        // Implemented by sub-classes if needed.
+        return null;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     get zeroTime()
</span></span></pre>
</div>
</div>

</body>
</html>