Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/workspace/IsolatedFileSystemManager.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/workspace/IsolatedFileSystemManager.js b/third_party/WebKit/Source/devtools/front_end/workspace/IsolatedFileSystemManager.js |
| index 0b44857479192ec0c7db0dd96015b414ef65abe5..5db5048d9be8d5e5250e7f7f6687ca83ba220629 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/workspace/IsolatedFileSystemManager.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/workspace/IsolatedFileSystemManager.js |
| @@ -41,7 +41,6 @@ WebInspector.IsolatedFileSystemManager = function() |
| /** @type {!Map<number, !WebInspector.Progress>} */ |
| this._progresses = new Map(); |
| - InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.FileSystemsLoaded, this._onFileSystemsLoaded, this); |
| InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.FileSystemRemoved, this._onFileSystemRemoved, this); |
| InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.FileSystemAdded, this._onFileSystemAdded, this); |
| InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.FileSystemFilesChanged, this._onFileSystemFilesChanged, this); |
| @@ -51,6 +50,8 @@ WebInspector.IsolatedFileSystemManager = function() |
| InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.SearchCompleted, this._onSearchCompleted, this); |
| this._initExcludePatterSetting(); |
| + |
| + this._fileSystemsLoadedPromise = this._requestFileSystems(); |
| } |
| /** @typedef {!{fileSystemName: string, rootURL: string, fileSystemPath: string}} */ |
| @@ -60,7 +61,6 @@ WebInspector.IsolatedFileSystemManager.FileSystem; |
| WebInspector.IsolatedFileSystemManager.Events = { |
| FileSystemAdded: Symbol("FileSystemAdded"), |
| FileSystemRemoved: Symbol("FileSystemRemoved"), |
| - FileSystemsLoaded: Symbol("FileSystemsLoaded"), |
| FileSystemFilesChanged: Symbol("FileSystemFilesChanged"), |
| ExcludedFolderAdded: Symbol("ExcludedFolderAdded"), |
| ExcludedFolderRemoved: Symbol("ExcludedFolderRemoved") |
| @@ -86,12 +86,28 @@ WebInspector.IsolatedFileSystemManager.normalizePath = function(fileSystemPath) |
| WebInspector.IsolatedFileSystemManager.prototype = { |
| /** |
| - * @param {function()} callback |
| + * @return {!Promise<!Array<!WebInspector.IsolatedFileSystem>>} |
| */ |
| - initialize: function(callback) |
| + _requestFileSystems: function() |
| { |
| - this._initializeCallback = callback; |
| + var fulfill; |
| + var promise = new Promise(f => fulfill = f); |
| InspectorFrontendHost.requestFileSystems(); |
| + InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.FileSystemsLoaded, onFileSystemsLoaded, this); |
| + return promise; |
| + |
| + /** |
| + * @param {!WebInspector.Event} event |
| + * @this {WebInspector.IsolatedFileSystemManager} |
| + */ |
| + function onFileSystemsLoaded(event) |
| + { |
| + var fileSystems = /** @type {!Array.<!WebInspector.IsolatedFileSystemManager.FileSystem>} */ (event.data); |
| + var promises = []; |
| + for (var i = 0; i < fileSystems.length; ++i) |
| + promises.push(this._innerAddFileSystem(fileSystems[i], false)); |
| + Promise.all(promises).then(fileSystems => fulfill(fileSystems.filter(fs => !!fs))); |
|
dgozman
2016/08/31 20:28:46
style: no nested arrow functions please
lushnikov
2016/08/31 21:46:01
yikes. done.
|
| + } |
| }, |
| addFileSystem: function() |
| @@ -104,45 +120,23 @@ WebInspector.IsolatedFileSystemManager.prototype = { |
| */ |
| removeFileSystem: function(fileSystem) |
| { |
| - |
| InspectorFrontendHost.removeFileSystem(fileSystem.embedderPath()); |
| }, |
| /** |
| - * @param {!WebInspector.Event} event |
| - */ |
| - _onFileSystemsLoaded: function(event) |
| - { |
| - var fileSystems = /** @type {!Array.<!WebInspector.IsolatedFileSystemManager.FileSystem>} */ (event.data); |
| - var promises = []; |
| - for (var i = 0; i < fileSystems.length; ++i) |
| - promises.push(this._innerAddFileSystem(fileSystems[i])); |
| - Promise.all(promises).then(fireFileSystemsLoaded.bind(this)); |
| - |
| - /** |
| - * @this {WebInspector.IsolatedFileSystemManager} |
| - */ |
| - function fireFileSystemsLoaded() |
| - { |
| - this._initializeCallback(); |
| - delete this._initializeCallback; |
| - this.dispatchEventToListeners(WebInspector.IsolatedFileSystemManager.Events.FileSystemsLoaded); |
| - } |
| - }, |
| - |
| - /** |
| - * @return {boolean} |
| + * @return {!Promise<!Array<!WebInspector.IsolatedFileSystem>>} |
| */ |
| - fileSystemsLoaded: function() |
| + waitForFileSystems: function() |
| { |
| - return !this._initializeCallback; |
| + return this._fileSystemsLoadedPromise; |
| }, |
| /** |
| * @param {!WebInspector.IsolatedFileSystemManager.FileSystem} fileSystem |
| - * @return {!Promise} |
| + * @param {boolean} dispatchEvent |
| + * @return {!Promise<?WebInspector.IsolatedFileSystem>} |
| */ |
| - _innerAddFileSystem: function(fileSystem) |
| + _innerAddFileSystem: function(fileSystem, dispatchEvent) |
| { |
| var embedderPath = fileSystem.fileSystemPath; |
| var fileSystemPath = WebInspector.IsolatedFileSystemManager.normalizePath(fileSystem.fileSystemPath); |
| @@ -156,9 +150,11 @@ WebInspector.IsolatedFileSystemManager.prototype = { |
| function storeFileSystem(fileSystem) |
| { |
| if (!fileSystem) |
| - return; |
| + return null; |
| this._fileSystems.set(fileSystemPath, fileSystem); |
| - this.dispatchEventToListeners(WebInspector.IsolatedFileSystemManager.Events.FileSystemAdded, fileSystem); |
| + if (dispatchEvent) |
| + this.dispatchEventToListeners(WebInspector.IsolatedFileSystemManager.Events.FileSystemAdded, fileSystem); |
| + return fileSystem; |
| } |
| }, |
| @@ -172,7 +168,7 @@ WebInspector.IsolatedFileSystemManager.prototype = { |
| if (errorMessage) |
| WebInspector.console.error(errorMessage); |
| else if (fileSystem) |
| - this._innerAddFileSystem(fileSystem); |
| + this._innerAddFileSystem(fileSystem, true); |
| }, |
| /** |
| @@ -180,7 +176,14 @@ WebInspector.IsolatedFileSystemManager.prototype = { |
| */ |
| _onFileSystemRemoved: function(event) |
| { |
| - this._fileSystemRemoved(/** @type {string} */ (event.data)); |
| + var embedderPath = /** @type {string} */ (event.data); |
| + var fileSystemPath = WebInspector.IsolatedFileSystemManager.normalizePath(embedderPath); |
| + var isolatedFileSystem = this._fileSystems.get(fileSystemPath); |
| + if (!isolatedFileSystem) |
| + return; |
| + this._fileSystems.delete(fileSystemPath); |
| + isolatedFileSystem.fileSystemRemoved(); |
| + this.dispatchEventToListeners(WebInspector.IsolatedFileSystemManager.Events.FileSystemRemoved, isolatedFileSystem); |
| }, |
| /** |
| @@ -194,20 +197,6 @@ WebInspector.IsolatedFileSystemManager.prototype = { |
| }, |
| /** |
| - * @param {string} embedderPath |
| - */ |
| - _fileSystemRemoved: function(embedderPath) |
| - { |
| - var fileSystemPath = WebInspector.IsolatedFileSystemManager.normalizePath(embedderPath); |
| - var isolatedFileSystem = this._fileSystems.get(fileSystemPath); |
| - if (!isolatedFileSystem) |
| - return; |
| - this._fileSystems.delete(fileSystemPath); |
| - isolatedFileSystem.fileSystemRemoved(); |
| - this.dispatchEventToListeners(WebInspector.IsolatedFileSystemManager.Events.FileSystemRemoved, isolatedFileSystem); |
| - }, |
| - |
| - /** |
| * @return {!Array<!WebInspector.IsolatedFileSystem>} |
| */ |
| fileSystems: function() |