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 3686992e756f08f1dacd49923786a4e897233559..72dde7ec6ee865e92c9747e62bf6e1720fdbccb5 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/elements/ElementsPanel.js |
+++ b/third_party/WebKit/Source/devtools/front_end/elements/ElementsPanel.js |
@@ -329,9 +329,6 @@ WebInspector.ElementsPanel.prototype = { |
this._treeOutlines[i].selectDOMNode(null); |
} |
- if (!selectedNode && this._lastValidSelectedNode) |
- this._selectedPathOnReset = this._lastValidSelectedNode.path(); |
- |
this._breadcrumbs.setSelectedNode(selectedNode); |
WebInspector.context.setFlavor(WebInspector.DOMNode, selectedNode); |
@@ -339,7 +336,10 @@ WebInspector.ElementsPanel.prototype = { |
if (!selectedNode) |
return; |
selectedNode.setAsInspectedNode(); |
- this._lastValidSelectedNode = selectedNode; |
+ if (!this._isSettingDefaultSelection) { |
+ this._selectedNodeOnReset = selectedNode; |
+ this._hasNonDefaultSelectedNode = true; |
+ } |
var executionContexts = selectedNode.target().runtimeModel.executionContexts(); |
var nodeFrameId = selectedNode.frameId(); |
@@ -382,53 +382,65 @@ WebInspector.ElementsPanel.prototype = { |
return; |
} |
+ this._hasNonDefaultSelectedNode = false; |
WebInspector.domBreakpointsSidebarPane.restoreBreakpoints(inspectedRootDocument); |
- /** |
- * @this {WebInspector.ElementsPanel} |
- * @param {?WebInspector.DOMNode} candidateFocusNode |
- */ |
- function selectNode(candidateFocusNode) |
- { |
- if (!candidateFocusNode) |
- candidateFocusNode = inspectedRootDocument.body || inspectedRootDocument.documentElement; |
- |
- if (!candidateFocusNode) |
- return; |
+ var defaultSelection = inspectedRootDocument.body || inspectedRootDocument.documentElement; |
+ if (this._omitDefaultSelection || !defaultSelection) |
+ return; |
- if (!this._pendingNodeReveal) { |
- this.selectDOMNode(candidateFocusNode); |
- if (treeOutline.selectedTreeElement) |
- treeOutline.selectedTreeElement.expand(); |
- } |
- } |
+ this._restoreNode(domModel, this._selectedNodeOnReset) |
+ .then(onNodeRestored.bind(this, this._selectedNodeOnReset)) |
dgozman
2016/10/19 01:10:38
missing semicolon
lushnikov
2016/10/19 20:52:11
Done.
|
/** |
- * @param {?DOMAgent.NodeId} nodeId |
+ * @param {?WebInspector.DOMNode} staleNode |
+ * @param {?WebInspector.DOMNode} restoredNode |
* @this {WebInspector.ElementsPanel} |
*/ |
- function selectLastSelectedNode(nodeId) |
+ function onNodeRestored(staleNode, restoredNode) |
{ |
- if (this.selectedDOMNode()) { |
- // Focused node has been explicitly set while reaching out for the last selected node. |
+ if (staleNode !== this._selectedNodeOnReset) |
return; |
+ if (restoredNode) { |
+ this._preselectNode(restoredNode); |
+ this._lastSelectedNodeSelectedForTest(); |
+ } else { |
+ this._preselectNode(defaultSelection); |
dgozman
2016/10/19 01:10:38
Should recalc default selection.
lushnikov
2016/10/19 20:52:11
Done.
|
} |
- var node = nodeId ? domModel.nodeForId(nodeId) : null; |
- selectNode.call(this, node); |
- this._lastSelectedNodeSelectedForTest(); |
} |
+ }, |
- if (this._omitDefaultSelection) |
- return; |
+ _lastSelectedNodeSelectedForTest: function() { }, |
- if (this._selectedPathOnReset) |
- domModel.pushNodeByPathToFrontend(this._selectedPathOnReset, selectLastSelectedNode.bind(this)); |
- else |
- selectNode.call(this, null); |
- delete this._selectedPathOnReset; |
+ /** |
+ * @param {!WebInspector.DOMNode} node |
+ */ |
+ _preselectNode: function(node) |
dgozman
2016/10/19 01:10:38
_setDefaultSelectedNode
dgozman
2016/10/19 01:10:38
Let's make this one responsible for default select
lushnikov
2016/10/19 20:52:11
The default selection seems to fit better in the o
lushnikov
2016/10/19 20:52:11
Done.
|
+ { |
+ if (this._hasNonDefaultSelectedNode || this._pendingNodeReveal) |
+ return; |
+ var treeOutline = WebInspector.ElementsTreeOutline.forDOMModel(node.domModel()); |
+ if (!treeOutline) |
+ return; |
+ this._isSettingDefaultSelection = true; |
dgozman
2016/10/19 01:10:38
nit: _isSettingDefaultSelectedNode
lushnikov
2016/10/19 20:52:11
Done.
|
+ this.selectDOMNode(node); |
+ this._isSettingDefaultSelection = false; |
+ if (treeOutline.selectedTreeElement) |
+ treeOutline.selectedTreeElement.expand(); |
}, |
- _lastSelectedNodeSelectedForTest: function() { }, |
+ /** |
+ * @param {!WebInspector.DOMModel} domModel |
+ * @param {?WebInspector.DOMNode} staleNode |
+ * @return {!Promise<?WebInspector.DOMNode>} |
+ */ |
+ _restoreNode: function(domModel, staleNode) |
dgozman
2016/10/19 01:10:38
Let's make this inner function of _documentUpdated
lushnikov
2016/10/19 20:52:11
Done.
|
+ { |
+ var nodePath = staleNode ? staleNode.path() : null; |
+ if (!nodePath) |
+ return Promise.resolve(/** @type {?WebInspector.DOMNode} */(null)); |
+ return domModel.pushNodeByPathToFrontendPromise(nodePath); |
dgozman
2016/10/19 01:10:38
Let's maybe use callback version?
lushnikov
2016/10/19 20:52:11
Done.
|
+ }, |
/** |
* @override |
@@ -719,7 +731,7 @@ WebInspector.ElementsPanel.prototype = { |
var treeOutline = null; |
for (var i = 0; i < this._treeOutlines.length; ++i) { |
- if (this._treeOutlines[i].selectedDOMNode() === this._lastValidSelectedNode) |
+ if (this._treeOutlines[i].selectedDOMNode()) |
treeOutline = this._treeOutlines[i]; |
} |
if (!treeOutline) |