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 3655a9cea0236713f944dc39739bac1d20f50876..1a2ff109a8ba27ad0d6d13813fb314af6ac34b09 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js |
+++ b/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js |
@@ -43,7 +43,7 @@ WebInspector.NavigatorView = function() |
/** @type {!Map.<!WebInspector.UISourceCode, !WebInspector.NavigatorUISourceCodeTreeNode>} */ |
this._uiSourceCodeNodes = new Map(); |
- /** @type {!Map.<!WebInspector.NavigatorTreeNode, !Map.<string, !WebInspector.NavigatorFolderTreeNode>>} */ |
+ /** @type {!Map.<string, !WebInspector.NavigatorFolderTreeNode>} */ |
this._subfolderNodes = new Map(); |
this._rootNode = new WebInspector.NavigatorRootTreeNode(this); |
@@ -115,8 +115,12 @@ WebInspector.NavigatorView.prototype = { |
if (!this.accept(uiSourceCode)) |
return; |
var isFromSourceMap = uiSourceCode.contentType().isFromSourceMap(); |
- var projectNode = this._projectNode(uiSourceCode.project(), isFromSourceMap); |
- var folderNode = this._folderNode(projectNode, uiSourceCode.parentPath(), isFromSourceMap); |
+ var path; |
+ if (uiSourceCode.project().type() === WebInspector.projectTypes.FileSystem) |
+ path = WebInspector.FileSystemWorkspaceBinding.relativePath(uiSourceCode).slice(0, -1); |
+ else |
+ path = WebInspector.ParsedURL.splitURLIntoPathComponents(uiSourceCode.path()).slice(1, -1); |
+ var folderNode = this._folderNode(uiSourceCode.project(), uiSourceCode.host(), path, isFromSourceMap); |
var uiSourceCodeNode = new WebInspector.NavigatorUISourceCodeTreeNode(this, uiSourceCode); |
this._uiSourceCodeNodes.set(uiSourceCode, uiSourceCodeNode); |
folderNode.appendChild(uiSourceCodeNode); |
@@ -153,69 +157,61 @@ WebInspector.NavigatorView.prototype = { |
/** |
* @param {!WebInspector.Project} project |
- * @param {boolean} isFromSourceMap |
+ * @param {string} projectHost |
+ * @param {!Array<string>} path |
+ * @param {boolean} fromSourceMap |
* @return {!WebInspector.NavigatorTreeNode} |
*/ |
- _projectNode: function(project, isFromSourceMap) |
+ _folderNode: function(project, projectHost, path, fromSourceMap) |
{ |
- if (!project.displayName()) |
+ if (project.type() === WebInspector.projectTypes.Snippets) |
return this._rootNode; |
- var projectNode = this._rootNode.child(project.id()); |
- if (!projectNode) { |
- projectNode = this._createProjectNode(project, isFromSourceMap); |
- this._rootNode.appendChild(projectNode); |
+ var folderPath = path.join("/"); |
+ var folderId = project.id() + ":" + projectHost + ":" + folderPath; |
+ var folderNode = this._subfolderNodes.get(folderId); |
+ if (folderNode) |
+ return folderNode; |
+ |
+ var parentNode = path.length ? this._folderNode(project, projectHost, path.slice(0, -1), fromSourceMap) : this._rootNode; |
+ |
+ var type = fromSourceMap ? WebInspector.NavigatorView.Types.SourceMapFolder : WebInspector.NavigatorView.Types.Folder; |
+ var name = path[path.length - 1]; |
+ if (parentNode === this._rootNode) { |
+ var target = WebInspector.NetworkProject.targetForProject(project); |
+ if (target) { |
+ name = this._computeProjectDisplayName(target, projectHost); |
+ if (!fromSourceMap) |
+ type = WebInspector.NavigatorView.Types.Domain; |
+ } else { |
+ name = project.displayName(); |
+ } |
} |
- return projectNode; |
- }, |
- /** |
- * @param {!WebInspector.Project} project |
- * @param {boolean} isFromSourceMap |
- * @return {!WebInspector.NavigatorTreeNode} |
- */ |
- _createProjectNode: function(project, isFromSourceMap) |
- { |
- var type; |
- if (isFromSourceMap) |
- type = WebInspector.NavigatorView.Types.SourceMapFolder; |
- else |
- type = project.type() === WebInspector.projectTypes.FileSystem ? WebInspector.NavigatorView.Types.FileSystem : WebInspector.NavigatorView.Types.Domain; |
- var projectNode = new WebInspector.NavigatorFolderTreeNode(this, project, project.id(), type, "", project.displayName()); |
- return projectNode; |
+ folderNode = new WebInspector.NavigatorFolderTreeNode(this, project, folderId, type, folderPath, name); |
+ this._subfolderNodes.set(folderId, folderNode); |
+ parentNode.appendChild(folderNode); |
+ return folderNode; |
}, |
/** |
- * @param {!WebInspector.NavigatorTreeNode} projectNode |
- * @param {string} folderPath |
- * @param {boolean} fromSourceMap |
- * @return {!WebInspector.NavigatorTreeNode} |
+ * @param {!WebInspector.Target} target |
+ * @param {string} projectHost |
+ * @return {string} |
*/ |
- _folderNode: function(projectNode, folderPath, fromSourceMap) |
+ _computeProjectDisplayName: function(target, projectHost) |
{ |
- if (!folderPath) |
- return projectNode; |
- |
- var subfolderNodes = this._subfolderNodes.get(projectNode); |
- if (!subfolderNodes) { |
- subfolderNodes = /** @type {!Map.<string, !WebInspector.NavigatorFolderTreeNode>} */ (new Map()); |
- this._subfolderNodes.set(projectNode, subfolderNodes); |
+ for (var context of target.runtimeModel.executionContexts()) { |
+ if (context.name && context.origin && projectHost.startsWith(context.origin)) |
+ return context.name; |
} |
- var folderNode = subfolderNodes.get(folderPath); |
- if (folderNode) |
- return folderNode; |
- |
- var parentNode = projectNode; |
- var index = folderPath.lastIndexOf("/"); |
- if (index !== -1) |
- parentNode = this._folderNode(projectNode, folderPath.substring(0, index), fromSourceMap); |
- |
- var name = folderPath.substring(index + 1); |
- folderNode = new WebInspector.NavigatorFolderTreeNode(this, null, name, fromSourceMap ? WebInspector.NavigatorView.Types.SourceMapFolder : WebInspector.NavigatorView.Types.Folder, folderPath, name); |
- subfolderNodes.set(folderPath, folderNode); |
- parentNode.appendChild(folderNode); |
- return folderNode; |
+ var targetSuffix = target.isPage() ? "" : " \u2014 " + target.name(); |
+ if (!projectHost) |
+ return WebInspector.UIString("(no domain)") + targetSuffix; |
+ var parsedURL = new WebInspector.ParsedURL(projectHost); |
+ var prettyURL = parsedURL.isValid ? parsedURL.host + (parsedURL.port ? (":" + parsedURL.port) : "") : ""; |
+ return (prettyURL || projectHost) + targetSuffix; |
}, |
/** |
@@ -260,8 +256,6 @@ WebInspector.NavigatorView.prototype = { |
if (!node) |
return; |
- var projectNode = this._projectNode(uiSourceCode.project(), false); |
- var subfolderNodes = this._subfolderNodes.get(projectNode); |
var parentNode = node.parent; |
this._uiSourceCodeNodes.remove(uiSourceCode); |
parentNode.removeChild(node); |
@@ -271,8 +265,7 @@ WebInspector.NavigatorView.prototype = { |
parentNode = node.parent; |
if (!parentNode || !node.isEmpty()) |
break; |
- if (subfolderNodes) |
- subfolderNodes.remove(node._folderPath); |
+ this._subfolderNodes.remove(uiSourceCode.project().id() + ":" + uiSourceCode.host() + ":" + node._folderPath); |
parentNode.removeChild(node); |
node = parentNode; |
} |
@@ -336,7 +329,7 @@ WebInspector.NavigatorView.prototype = { |
var shouldExclude = window.confirm(WebInspector.UIString("Are you sure you want to exclude this folder?")); |
if (shouldExclude) { |
WebInspector.startBatchUpdate(); |
- project.excludeFolder(path); |
+ project.excludeFolder(WebInspector.FileSystemWorkspaceBinding.completeURL(project, path)); |
WebInspector.endBatchUpdate(); |
} |
}, |
@@ -379,17 +372,12 @@ WebInspector.NavigatorView.prototype = { |
*/ |
handleFolderContextMenu: function(event, node) |
{ |
- var contextMenu = new WebInspector.ContextMenu(event); |
- var path = "/"; |
- var projectNode = node; |
- while (projectNode.parent !== this._rootNode) { |
- path = "/" + projectNode.id + path; |
- projectNode = projectNode.parent; |
- } |
+ var path = node._folderPath; |
+ var project = node._project; |
- var project = projectNode._project; |
+ var contextMenu = new WebInspector.ContextMenu(event); |
- if (project.type() === WebInspector.projectTypes.FileSystem) { |
+ if (project && project.type() === WebInspector.projectTypes.FileSystem) { |
contextMenu.appendItem(WebInspector.UIString.capitalize("Refresh"), this._handleContextMenuRefresh.bind(this, project, path)); |
contextMenu.appendItem(WebInspector.UIString.capitalize("New ^file"), this._handleContextMenuCreate.bind(this, project, path)); |
contextMenu.appendItem(WebInspector.UIString.capitalize("Exclude ^folder"), this._handleContextMenuExclude.bind(this, project, path)); |
@@ -404,7 +392,7 @@ WebInspector.NavigatorView.prototype = { |
project.remove(); |
} |
- if (project.type() === WebInspector.projectTypes.FileSystem && node === projectNode) { |
+ if (project.type() === WebInspector.projectTypes.FileSystem) { |
var removeFolderLabel = WebInspector.UIString.capitalize("Remove ^folder from ^workspace"); |
contextMenu.appendItem(removeFolderLabel, removeFolder); |
} |
@@ -901,15 +889,6 @@ WebInspector.NavigatorTreeNode.prototype = { |
}, |
/** |
- * @param {string} id |
- * @return {?WebInspector.NavigatorTreeNode} |
- */ |
- child: function(id) |
- { |
- return this._children.get(id) || null; |
- }, |
- |
- /** |
* @return {!Array.<!WebInspector.NavigatorTreeNode>} |
*/ |
children: function() |
@@ -985,7 +964,7 @@ WebInspector.NavigatorRootTreeNode.prototype = { |
*/ |
WebInspector.NavigatorUISourceCodeTreeNode = function(navigatorView, uiSourceCode) |
{ |
- WebInspector.NavigatorTreeNode.call(this, uiSourceCode.name()); |
+ WebInspector.NavigatorTreeNode.call(this, uiSourceCode.project().id() + ":" + uiSourceCode.path()); |
this._navigatorView = navigatorView; |
this._uiSourceCode = uiSourceCode; |
this._treeElement = null; |
@@ -1030,10 +1009,11 @@ WebInspector.NavigatorUISourceCodeTreeNode.prototype = { |
var titleText = this._uiSourceCode.displayName(); |
if (!ignoreIsDirty && (this._uiSourceCode.isDirty() || this._uiSourceCode.hasUnsavedCommittedChanges())) |
titleText = "*" + titleText; |
- var tooltip = titleText; |
+ this._treeElement.title = titleText; |
+ |
+ var tooltip = this._uiSourceCode.originURL(); |
if (this._uiSourceCode.contentType().isFromSourceMap()) |
tooltip = WebInspector.UIString("%s (from source map)", this._uiSourceCode.displayName()); |
- this._treeElement.title = titleText; |
this._treeElement.tooltip = tooltip; |
}, |