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

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

Issue 2869293002: DevTools: make CompilerScriptMapping / SASSSourceMapping manage UISourceCodes (Closed)
Patch Set: use {add,remove}FrameAttribution instead of changeFrameAttribution 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..98bb64a3c8a03bfcba6bec5e37c1ac5bdc840c5c 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,8 @@ 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.FrameAttributionChanged, this._frameAttributionChanged, this);
}
/**
@@ -182,10 +184,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,6 +243,21 @@ Sources.NavigatorView = class extends UI.VBox {
return !uiSourceCode.project().isServiceProject();
}
+ /**
+ * @param {!Common.Event} event
+ */
+ _frameAttributionChanged(event) {
+ var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data.uiSourceCode);
+ var addedFrame = /** @type {?SDK.ResourceTreeFrame} */ (event.data.added);
+ var removedFrame = /** @type {?SDK.ResourceTreeFrame} */ (event.data.removed);
+ if (addedFrame)
+ this._addUISourceCodeNode(uiSourceCode, addedFrame);
+ if (removedFrame) {
+ var node = Array.from(this._uiSourceCodeNodes.get(uiSourceCode)).find(node => node.frame() === removedFrame);
dgozman 2017/05/11 23:55:16 Why Array.from? It's already an array.
lushnikov 2017/05/12 01:18:00 Nah, it's a set
+ this._removeUISourceCodeNode(node);
+ }
+ }
+
/**
* @param {!Workspace.UISourceCode} uiSourceCode
*/
@@ -252,6 +269,21 @@ Sources.NavigatorView = class extends UI.VBox {
if (!Runtime.experiments.isEnabled('persistence2') && binding && binding.network === 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 +293,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 +510,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;
}
/**
@@ -517,48 +536,51 @@ Sources.NavigatorView = class extends UI.VBox {
sourceDeleted(uiSourceCode) {
}
+
dgozman 2017/05/11 23:55:16 nit: extra blank line
lushnikov 2017/05/12 01:18:00 Done.
/**
* @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);
dgozman 2017/05/11 23:55:16 You mutate the same collection in line 545. That's
lushnikov 2017/05/12 01:18:00 That's ok for sets (we have set here): http://stac
+ 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