Index: third_party/WebKit/Source/devtools/front_end/persistence/Persistence.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/persistence/Persistence.js b/third_party/WebKit/Source/devtools/front_end/persistence/Persistence.js |
index 1f6948e88fe8a3567490464212f07cb63dcbc31c..7235e4cc14e9af450cec257bdb42f8c72b377113 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/persistence/Persistence.js |
+++ b/third_party/WebKit/Source/devtools/front_end/persistence/Persistence.js |
@@ -17,6 +17,10 @@ WebInspector.Persistence = function(workspace, breakpointManager, fileSystemMapp |
this._fileSystemMapping = fileSystemMapping; |
/** @type {!Set<!WebInspector.PersistenceBinding>} */ |
this._bindings = new Set(); |
+ |
+ /** @type {!Map<string, number>} */ |
+ this._filePathPrefixesToBindingCount = new Map(); |
+ |
this._eventListeners = [ |
workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, this._onUISourceCodeAdded, this), |
workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, this._onUISourceCodeRemoved, this), |
@@ -123,6 +127,8 @@ WebInspector.Persistence.prototype = { |
binding.fileSystem.addEventListener(WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._onWorkingCopyCommitted, this); |
binding.fileSystem.addEventListener(WebInspector.UISourceCode.Events.TitleChanged, this._onFileSystemUISourceCodeRenamed, this); |
+ this._addFilePathBindingPrefixes(binding.fileSystem.url()); |
+ |
this._moveBreakpoints(binding.fileSystem, binding.network); |
this.dispatchEventToListeners(WebInspector.Persistence.Events.BindingCreated, binding); |
}, |
@@ -143,6 +149,8 @@ WebInspector.Persistence.prototype = { |
binding.fileSystem.removeEventListener(WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._onWorkingCopyCommitted, this); |
binding.fileSystem.removeEventListener(WebInspector.UISourceCode.Events.TitleChanged, this._onFileSystemUISourceCodeRenamed, this); |
+ this._removeFilePathBindingPrefixes(binding.fileSystem.url()); |
+ |
this._copyBreakpoints(binding.network, binding.fileSystem); |
this.dispatchEventToListeners(WebInspector.Persistence.Events.BindingRemoved, binding); |
}, |
@@ -256,6 +264,46 @@ WebInspector.Persistence.prototype = { |
return uiSourceCode[WebInspector.Persistence._binding] || null; |
}, |
+ /** |
+ * @param {string} filePath |
+ */ |
+ _addFilePathBindingPrefixes: function(filePath) |
+ { |
+ var relative = ""; |
+ for (var token of filePath.split("/")) { |
+ relative += token + "/"; |
+ var count = this._filePathPrefixesToBindingCount.get(relative) || 0; |
+ this._filePathPrefixesToBindingCount.set(relative, count + 1); |
+ } |
+ }, |
+ |
+ /** |
+ * @param {string} filePath |
+ */ |
+ _removeFilePathBindingPrefixes: function(filePath) |
+ { |
+ var relative = ""; |
+ for (var token of filePath.split("/")) { |
+ relative += token + "/"; |
+ var count = this._filePathPrefixesToBindingCount.get(relative); |
+ if (count === 1) |
+ this._filePathPrefixesToBindingCount.delete(relative); |
+ else |
+ this._filePathPrefixesToBindingCount.set(relative, count - 1); |
+ } |
+ }, |
+ |
+ /** |
+ * @param {string} filePath |
+ * @return {boolean} |
+ */ |
+ filePathHasBindings: function(filePath) |
+ { |
+ if (!filePath.endsWith("/")) |
+ filePath += "/"; |
+ return this._filePathPrefixesToBindingCount.has(filePath); |
+ }, |
+ |
dispose: function() |
{ |
WebInspector.EventTarget.removeEventListeners(this._eventListeners); |