Index: third_party/WebKit/Source/devtools/front_end/elements/ElementsPanel.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/elements/ElementsPanel.js b/third_party/WebKit/Source/devtools/front_end/elements/ElementsPanel.js |
index 73777b3c25fb49dfecb7ffd64b448c0b6a009b0d..3686992e756f08f1dacd49923786a4e897233559 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/elements/ElementsPanel.js |
+++ b/third_party/WebKit/Source/devtools/front_end/elements/ElementsPanel.js |
@@ -329,6 +329,9 @@ |
this._treeOutlines[i].selectDOMNode(null); |
} |
+ if (!selectedNode && this._lastValidSelectedNode) |
+ this._selectedPathOnReset = this._lastValidSelectedNode.path(); |
+ |
this._breadcrumbs.setSelectedNode(selectedNode); |
WebInspector.context.setFlavor(WebInspector.DOMNode, selectedNode); |
@@ -336,10 +339,7 @@ |
if (!selectedNode) |
return; |
selectedNode.setAsInspectedNode(); |
- if (!this._isSettingDefaultSelectedNode) { |
- this._selectedNodeOnReset = selectedNode; |
- this._hasNonDefaultSelectedNode = true; |
- } |
+ this._lastValidSelectedNode = selectedNode; |
var executionContexts = selectedNode.target().runtimeModel.executionContexts(); |
var nodeFrameId = selectedNode.frameId(); |
@@ -382,66 +382,53 @@ |
return; |
} |
- this._hasNonDefaultSelectedNode = false; |
WebInspector.domBreakpointsSidebarPane.restoreBreakpoints(inspectedRootDocument); |
- if (this._omitDefaultSelection) |
- return; |
- |
- var savedSelectedNodeOnReset = this._selectedNodeOnReset; |
- restoreNode.call(this, domModel, this._selectedNodeOnReset); |
- |
/** |
- * @param {!WebInspector.DOMModel} domModel |
- * @param {?WebInspector.DOMNode} staleNode |
+ * @this {WebInspector.ElementsPanel} |
+ * @param {?WebInspector.DOMNode} candidateFocusNode |
+ */ |
+ function selectNode(candidateFocusNode) |
+ { |
+ if (!candidateFocusNode) |
+ candidateFocusNode = inspectedRootDocument.body || inspectedRootDocument.documentElement; |
+ |
+ if (!candidateFocusNode) |
+ return; |
+ |
+ if (!this._pendingNodeReveal) { |
+ this.selectDOMNode(candidateFocusNode); |
+ if (treeOutline.selectedTreeElement) |
+ treeOutline.selectedTreeElement.expand(); |
+ } |
+ } |
+ |
+ /** |
+ * @param {?DOMAgent.NodeId} nodeId |
* @this {WebInspector.ElementsPanel} |
*/ |
- function restoreNode(domModel, staleNode) |
+ function selectLastSelectedNode(nodeId) |
{ |
- var nodePath = staleNode ? staleNode.path() : null; |
- if (!nodePath) { |
- onNodeRestored.call(this, null); |
+ if (this.selectedDOMNode()) { |
+ // Focused node has been explicitly set while reaching out for the last selected node. |
return; |
} |
- domModel.pushNodeByPathToFrontend(nodePath, onNodeRestored.bind(this)); |
- } |
- |
- /** |
- * @param {?DOMAgent.NodeId} restoredNodeId |
- * @this {WebInspector.ElementsPanel} |
- */ |
- function onNodeRestored(restoredNodeId) |
- { |
- if (savedSelectedNodeOnReset !== this._selectedNodeOnReset) |
- return; |
- var node = restoredNodeId ? domModel.nodeForId(restoredNodeId) : null; |
- if (!node) { |
- var inspectedDocument = domModel.existingDocument(); |
- node = inspectedDocument ? inspectedDocument.body || inspectedDocument.documentElement : null; |
- } |
- this._setDefaultSelectedNode(node); |
+ var node = nodeId ? domModel.nodeForId(nodeId) : null; |
+ selectNode.call(this, node); |
this._lastSelectedNodeSelectedForTest(); |
} |
+ |
+ if (this._omitDefaultSelection) |
+ return; |
+ |
+ if (this._selectedPathOnReset) |
+ domModel.pushNodeByPathToFrontend(this._selectedPathOnReset, selectLastSelectedNode.bind(this)); |
+ else |
+ selectNode.call(this, null); |
+ delete this._selectedPathOnReset; |
}, |
_lastSelectedNodeSelectedForTest: function() { }, |
- |
- /** |
- * @param {?WebInspector.DOMNode} node |
- */ |
- _setDefaultSelectedNode: function(node) |
- { |
- if (!node || this._hasNonDefaultSelectedNode || this._pendingNodeReveal) |
- return; |
- var treeOutline = WebInspector.ElementsTreeOutline.forDOMModel(node.domModel()); |
- if (!treeOutline) |
- return; |
- this._isSettingDefaultSelectedNode = true; |
- this.selectDOMNode(node); |
- this._isSettingDefaultSelectedNode = false; |
- if (treeOutline.selectedTreeElement) |
- treeOutline.selectedTreeElement.expand(); |
- }, |
/** |
* @override |
@@ -732,7 +719,7 @@ |
var treeOutline = null; |
for (var i = 0; i < this._treeOutlines.length; ++i) { |
- if (this._treeOutlines[i].selectedDOMNode()) |
+ if (this._treeOutlines[i].selectedDOMNode() === this._lastValidSelectedNode) |
treeOutline = this._treeOutlines[i]; |
} |
if (!treeOutline) |