Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(769)

Unified Diff: third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js

Issue 2869293002: DevTools: make CompilerScriptMapping / SASSSourceMapping manage UISourceCodes (Closed)
Patch Set: address comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js b/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js
index 79421682d8e36ed8107f2693ae59e011a17df0b1..91c4a6450c91bcf1238aac0153ea5a5191d0a1e9 100644
--- a/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js
+++ b/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js
@@ -40,8 +40,8 @@ Sources.NavigatorView = class extends UI.VBox {
this.element.appendChild(this._scriptsTree.element);
this.setDefaultFocusedElement(this._scriptsTree.element);
- /** @type {!Map.<!Workspace.UISourceCode, !Array<!Sources.NavigatorUISourceCodeTreeNode>>} */
- this._uiSourceCodeNodes = new Map();
+ /** @type {!Multimap<!Workspace.UISourceCode, !Sources.NavigatorUISourceCodeTreeNode>} */
+ this._uiSourceCodeNodes = new Multimap();
/** @type {!Map.<string, !Sources.NavigatorFolderTreeNode>} */
this._subfolderNodes = new Map();
@@ -74,6 +74,10 @@ Sources.NavigatorView = class extends UI.VBox {
SDK.targetManager.observeTargets(this);
this._resetWorkspace(Workspace.workspace);
this._workspace.uiSourceCodes().forEach(this._addUISourceCode.bind(this));
+ Bindings.networkProjectManager.addEventListener(
+ Bindings.NetworkProjectManager.Events.FrameAttributionAdded, this._frameAttributionAdded, this);
+ Bindings.networkProjectManager.addEventListener(
+ Bindings.NetworkProjectManager.Events.FrameAttributionRemoved, this._frameAttributionRemoved, this);
}
/**
@@ -182,10 +186,10 @@ Sources.NavigatorView = class extends UI.VBox {
var binding = /** @type {!Persistence.PersistenceBinding} */ (event.data);
// Update UISourceCode titles.
- var networkNodes = this._uiSourceCodeNodes.get(binding.network) || [];
+ var networkNodes = this._uiSourceCodeNodes.get(binding.network);
for (var networkNode of networkNodes)
networkNode.updateTitle();
- var fileSystemNodes = this._uiSourceCodeNodes.get(binding.fileSystem) || [];
+ var fileSystemNodes = this._uiSourceCodeNodes.get(binding.fileSystem);
for (var fileSystemNode of fileSystemNodes)
fileSystemNode.updateTitle();
@@ -241,17 +245,68 @@ Sources.NavigatorView = class extends UI.VBox {
return !uiSourceCode.project().isServiceProject();
}
+ /**
+ * @param {!Common.Event} event
+ */
+ _frameAttributionAdded(event) {
+ var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data.uiSourceCode);
+ if (!this._acceptsUISourceCode(uiSourceCode))
+ return;
+
+ var addedFrame = /** @type {?SDK.ResourceTreeFrame} */ (event.data.frame);
+ // This event does not happen for UISourceCodes without initial attribution.
+ this._addUISourceCodeNode(uiSourceCode, addedFrame);
+ }
+
+ /**
+ * @param {!Common.Event} event
+ */
+ _frameAttributionRemoved(event) {
+ var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data.uiSourceCode);
+ if (!this._acceptsUISourceCode(uiSourceCode))
+ return;
+
+ var removedFrame = /** @type {?SDK.ResourceTreeFrame} */ (event.data.frame);
+ var node = Array.from(this._uiSourceCodeNodes.get(uiSourceCode)).find(node => node.frame() === removedFrame);
+ this._removeUISourceCodeNode(node);
+ }
+
/**
* @param {!Workspace.UISourceCode} uiSourceCode
+ * @return {boolean}
*/
- _addUISourceCode(uiSourceCode) {
+ _acceptsUISourceCode(uiSourceCode) {
if (!this.accept(uiSourceCode))
- return;
+ return false;
var binding = Persistence.persistence.binding(uiSourceCode);
if (!Runtime.experiments.isEnabled('persistence2') && binding && binding.network === uiSourceCode)
+ return false;
+ return true;
+ }
+
+ /**
+ * @param {!Workspace.UISourceCode} uiSourceCode
+ */
+ _addUISourceCode(uiSourceCode) {
+ if (!this._acceptsUISourceCode(uiSourceCode))
return;
+ var frames = Bindings.NetworkProject.framesForUISourceCode(uiSourceCode);
+ if (frames.length) {
+ for (var frame of frames)
+ this._addUISourceCodeNode(uiSourceCode, frame);
+ } else {
+ this._addUISourceCodeNode(uiSourceCode, null);
+ }
+ this.uiSourceCodeAdded(uiSourceCode);
+ }
+
+ /**
+ * @param {!Workspace.UISourceCode} uiSourceCode
+ * @param {?SDK.ResourceTreeFrame} frame
+ */
+ _addUISourceCodeNode(uiSourceCode, frame) {
var isFromSourceMap = uiSourceCode.contentType().isFromSourceMap();
var path;
if (uiSourceCode.project().type() === Workspace.projectTypes.FileSystem)
@@ -261,25 +316,11 @@ Sources.NavigatorView = class extends UI.VBox {
var project = uiSourceCode.project();
var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
- var frames = Bindings.NetworkProject.framesForUISourceCode(uiSourceCode);
- var uiSourceCodeNodes = [];
- if (frames.length) {
- for (var frame of frames) {
- var folderNode =
- this._folderNode(uiSourceCode, project, target, frame, uiSourceCode.origin(), path, isFromSourceMap);
- var uiSourceCodeNode = new Sources.NavigatorUISourceCodeTreeNode(this, uiSourceCode, frame);
- folderNode.appendChild(uiSourceCodeNode);
- uiSourceCodeNodes.push(uiSourceCodeNode);
- }
- } else {
- var folderNode =
- this._folderNode(uiSourceCode, project, target, null, uiSourceCode.origin(), path, isFromSourceMap);
- var uiSourceCodeNode = new Sources.NavigatorUISourceCodeTreeNode(this, uiSourceCode, null);
- folderNode.appendChild(uiSourceCodeNode);
- uiSourceCodeNodes.push(uiSourceCodeNode);
- }
- this._uiSourceCodeNodes.set(uiSourceCode, uiSourceCodeNodes);
- this.uiSourceCodeAdded(uiSourceCode);
+ var folderNode =
+ this._folderNode(uiSourceCode, project, target, frame, uiSourceCode.origin(), path, isFromSourceMap);
+ var uiSourceCodeNode = new Sources.NavigatorUISourceCodeTreeNode(this, uiSourceCode, frame);
+ folderNode.appendChild(uiSourceCodeNode);
+ this._uiSourceCodeNodes.set(uiSourceCode, uiSourceCodeNode);
}
/**
@@ -492,14 +533,15 @@ Sources.NavigatorView = class extends UI.VBox {
*/
revealUISourceCode(uiSourceCode, select) {
var nodes = this._uiSourceCodeNodes.get(uiSourceCode);
- if (!nodes)
+ var node = nodes.firstValue();
+ if (!node)
return null;
if (this._scriptsTree.selectedTreeElement)
this._scriptsTree.selectedTreeElement.deselect();
this._lastSelectedUISourceCode = uiSourceCode;
// TODO(dgozman): figure out revealing multiple.
- nodes[0].reveal(select);
- return nodes[0];
+ node.reveal(select);
+ return node;
}
/**
@@ -521,44 +563,46 @@ Sources.NavigatorView = class extends UI.VBox {
* @param {!Workspace.UISourceCode} uiSourceCode
*/
_removeUISourceCode(uiSourceCode) {
- var nodes = this._uiSourceCodeNodes.get(uiSourceCode) || [];
- for (var i = 0; i < nodes.length; i++) {
- var node = nodes[i];
+ var nodes = this._uiSourceCodeNodes.get(uiSourceCode);
+ for (var node of nodes)
+ this._removeUISourceCodeNode(node);
+ }
- var project = uiSourceCode.project();
- var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
- var frame = node.frame();
+ /**
+ * @param {!Sources.NavigatorUISourceCodeTreeNode} node
+ */
+ _removeUISourceCodeNode(node) {
+ var uiSourceCode = node.uiSourceCode();
+ this._uiSourceCodeNodes.remove(uiSourceCode, node);
+ var project = uiSourceCode.project();
+ var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
+ var frame = node.frame();
+
+ var parentNode = node.parent;
+ parentNode.removeChild(node);
+ node = parentNode;
+
+ while (node) {
+ parentNode = node.parent;
+ if (!parentNode || !node.isEmpty())
+ break;
+ if (!(node instanceof Sources.NavigatorGroupTreeNode || node instanceof Sources.NavigatorFolderTreeNode))
+ break;
+ if (node._type === Sources.NavigatorView.Types.Frame) {
+ this._discardFrame(/** @type {!SDK.ResourceTreeFrame} */ (frame));
+ break;
+ }
- var parentNode = node.parent;
+ var folderId = this._folderNodeId(project, target, frame, uiSourceCode.origin(), node._folderPath);
+ this._subfolderNodes.delete(folderId);
parentNode.removeChild(node);
node = parentNode;
-
- while (node) {
- parentNode = node.parent;
- if (!parentNode || !node.isEmpty())
- break;
- if (!(node instanceof Sources.NavigatorGroupTreeNode || node instanceof Sources.NavigatorFolderTreeNode))
- break;
- if (node._type === Sources.NavigatorView.Types.Frame) {
- this._discardFrame(/** @type {!SDK.ResourceTreeFrame} */ (frame));
- break;
- }
-
- var folderId = this._folderNodeId(project, target, frame, uiSourceCode.origin(), node._folderPath);
- this._subfolderNodes.delete(folderId);
- parentNode.removeChild(node);
- node = parentNode;
- }
}
- this._uiSourceCodeNodes.delete(uiSourceCode);
}
reset() {
- for (var entry of this._uiSourceCodeNodes) {
- var nodes = /** @type {!Array<!Sources.NavigatorUISourceCodeTreeNode>} */ (entry[1]);
- for (var i = 0; i < nodes.length; i++)
- nodes[i].dispose();
- }
+ for (var node of this._uiSourceCodeNodes.valuesArray())
+ node.dispose();
this._scriptsTree.removeChildren();
this._uiSourceCodeNodes.clear();

Powered by Google App Engine
This is Rietveld 408576698