IsolatedFileSystemManager.js [plain text]
WebInspector.IsolatedFileSystemManager = function()
{
this._fileSystems = {};
this._pendingFileSystemRequests = {};
this._fileSystemMapping = new WebInspector.FileSystemMappingImpl();
if (this.supportsFileSystems())
this._requestFileSystems();
}
WebInspector.IsolatedFileSystemManager.FileSystem;
WebInspector.IsolatedFileSystemManager.Events = {
FileSystemAdded: "FileSystemAdded",
FileSystemRemoved: "FileSystemRemoved"
}
WebInspector.IsolatedFileSystemManager.prototype = {
mapping: function()
{
return this._fileSystemMapping;
},
supportsFileSystems: function()
{
return InspectorFrontendHost.supportsFileSystems();
},
_requestFileSystems: function()
{
console.assert(!this._loaded);
InspectorFrontendHost.requestFileSystems();
},
addFileSystem: function(callback)
{
this._selectFileSystemPathCallback = callback;
InspectorFrontendHost.addFileSystem();
},
removeFileSystem: function(fileSystemPath, callback)
{
this._removeFileSystemCallback = callback;
InspectorFrontendHost.removeFileSystem(fileSystemPath);
},
_fileSystemsLoaded: function(fileSystems)
{
for (var i = 0; i < fileSystems.length; ++i)
this._innerAddFileSystem(fileSystems[i]);
this._loaded = true;
this._processPendingFileSystemRequests();
},
_innerAddFileSystem: function(fileSystem)
{
var fileSystemPath = fileSystem.fileSystemPath;
this._fileSystemMapping.addFileSystemMapping(fileSystemPath);
var isolatedFileSystem = new WebInspector.IsolatedFileSystem(this, fileSystemPath, fileSystem.fileSystemName, fileSystem.rootURL);
this._fileSystems[fileSystemPath] = isolatedFileSystem;
this.dispatchEventToListeners(WebInspector.IsolatedFileSystemManager.Events.FileSystemAdded, isolatedFileSystem);
},
_fileSystemPaths: function()
{
return Object.keys(this._fileSystems);
},
_processPendingFileSystemRequests: function()
{
for (var fileSystemPath in this._pendingFileSystemRequests) {
var callbacks = this._pendingFileSystemRequests[fileSystemPath];
for (var i = 0; i < callbacks.length; ++i)
callbacks[i](this._isolatedFileSystem(fileSystemPath));
}
delete this._pendingFileSystemRequests;
},
_fileSystemAdded: function(errorMessage, fileSystem)
{
var fileSystemPath;
if (errorMessage)
WebInspector.showErrorMessage(errorMessage)
else if (fileSystem) {
this._innerAddFileSystem(fileSystem);
fileSystemPath = fileSystem.fileSystemPath;
}
if (this._selectFileSystemPathCallback) {
this._selectFileSystemPathCallback(fileSystemPath);
delete this._selectFileSystemPathCallback;
}
},
_fileSystemRemoved: function(fileSystemPath)
{
this._fileSystemMapping.removeFileSystemMapping(fileSystemPath);
var isolatedFileSystem = this._fileSystems[fileSystemPath];
delete this._fileSystems[fileSystemPath];
if (this._removeFileSystemCallback) {
this._removeFileSystemCallback(fileSystemPath);
delete this._removeFileSystemCallback;
}
this.dispatchEventToListeners(WebInspector.IsolatedFileSystemManager.Events.FileSystemRemoved, isolatedFileSystem);
},
_isolatedFileSystem: function(fileSystemPath)
{
var fileSystem = this._fileSystems[fileSystemPath];
if (!fileSystem)
return null;
if (!InspectorFrontendHost.isolatedFileSystem)
return null;
return InspectorFrontendHost.isolatedFileSystem(fileSystem.name(), fileSystem.rootURL());
},
requestDOMFileSystem: function(fileSystemPath, callback)
{
if (!this._loaded) {
if (!this._pendingFileSystemRequests[fileSystemPath])
this._pendingFileSystemRequests[fileSystemPath] = this._pendingFileSystemRequests[fileSystemPath] || [];
this._pendingFileSystemRequests[fileSystemPath].push(callback);
return;
}
callback(this._isolatedFileSystem(fileSystemPath));
},
__proto__: WebInspector.Object.prototype
}
WebInspector.isolatedFileSystemManager = null;
WebInspector.IsolatedFileSystemDispatcher = function(IsolatedFileSystemManager)
{
this._IsolatedFileSystemManager = IsolatedFileSystemManager;
}
WebInspector.IsolatedFileSystemDispatcher.prototype = {
fileSystemsLoaded: function(fileSystems)
{
this._IsolatedFileSystemManager._fileSystemsLoaded(fileSystems);
},
fileSystemRemoved: function(fileSystemPath)
{
this._IsolatedFileSystemManager._fileSystemRemoved(fileSystemPath);
},
fileSystemAdded: function(errorMessage, fileSystem)
{
this._IsolatedFileSystemManager._fileSystemAdded(errorMessage, fileSystem);
}
}
WebInspector.isolatedFileSystemDispatcher = null;