1926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/* 2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 3926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 4926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * modification, are permitted provided that the following conditions are 6926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * met: 7926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 8926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 9926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 10926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 11926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 12926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * in the documentation and/or other materials provided with the 13926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * distribution. 14926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 15926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 16926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * this software without specific prior written permission. 17926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 18926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 30926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 31926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 32926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 33926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @implements {WebInspector.ProjectDelegate} 34926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.Object} 35926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.IsolatedFileSystem} isolatedFileSystem 36926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.Workspace} workspace 37926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 38926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.FileSystemProjectDelegate = function(isolatedFileSystem, workspace) 39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 40926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._fileSystem = isolatedFileSystem; 41e6d4491e48613634a83c1957c72759da80987961Ben Murdoch this._normalizedFileSystemPath = this._fileSystem.path(); 42e6d4491e48613634a83c1957c72759da80987961Ben Murdoch if (WebInspector.isWin()) 43e6d4491e48613634a83c1957c72759da80987961Ben Murdoch this._normalizedFileSystemPath = this._normalizedFileSystemPath.replace(/\\/g, "/"); 44e6d4491e48613634a83c1957c72759da80987961Ben Murdoch this._fileSystemURL = "file://" + this._normalizedFileSystemPath + "/"; 45926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._workspace = workspace; 46f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** @type {Object.<number, function(Array.<string>)>} */ 47f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) this._searchCallbacks = {}; 48f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** @type {Object.<number, function()>} */ 49f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) this._indexingCallbacks = {}; 50f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** @type {Object.<number, WebInspector.Progress>} */ 51f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) this._indexingProgresses = {}; 52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 54591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochWebInspector.FileSystemProjectDelegate._scriptExtensions = ["js", "java", "coffee", "ts", "dart"].keySet(); 55591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochWebInspector.FileSystemProjectDelegate._styleSheetExtensions = ["css", "scss", "sass", "less"].keySet(); 56591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochWebInspector.FileSystemProjectDelegate._documentExtensions = ["htm", "html", "asp", "aspx", "phtml", "jsp"].keySet(); 57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.FileSystemProjectDelegate.projectId = function(fileSystemPath) 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return "filesystem:" + fileSystemPath; 61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 63f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)WebInspector.FileSystemProjectDelegate._lastRequestId = 0; 64f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.FileSystemProjectDelegate.prototype = { 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {string} 68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) id: function() 70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return WebInspector.FileSystemProjectDelegate.projectId(this._fileSystem.path()); 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 73926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 74926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {string} 76926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 77926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) type: function() 78926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return WebInspector.projectTypes.FileSystem; 80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {string} 84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 85926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) fileSystemPath: function() 86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._fileSystem.path(); 88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {string} 92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) displayName: function() 94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 95e6d4491e48613634a83c1957c72759da80987961Ben Murdoch return this._normalizedFileSystemPath.substr(this._normalizedFileSystemPath.lastIndexOf("/") + 1); 96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 99591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} path 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {string} 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _filePathForPath: function(path) 103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 104591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return "/" + path; 105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 108591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} path 109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function(?string,boolean,string)} callback 110926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) requestFileContent: function(path, callback) 112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var filePath = this._filePathForPath(path); 114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._fileSystem.requestFileContent(filePath, innerCallback.bind(this)); 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {?string} content 118926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function innerCallback(content) 120926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 121591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var extension = this._extensionForPath(path); 122591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var mimeType = WebInspector.ResourceType.mimeTypesForExtensions[extension]; 123591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch callback(content, false, mimeType); 124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 128591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} path 129591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {function(?Date, ?number)} callback 130591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 131591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch requestMetadata: function(path, callback) 132591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 133591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var filePath = this._filePathForPath(path); 134591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._fileSystem.requestMetadata(filePath, callback); 135591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 136591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 137591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 138926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {boolean} 139926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 140926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) canSetFileContent: function() 141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 142926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return true; 143926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 144926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 145926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 146591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} path 147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} newContent 148926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function(?string)} callback 149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setFileContent: function(path, newContent, callback) 151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var filePath = this._filePathForPath(path); 153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._fileSystem.setFileContent(filePath, newContent, callback.bind(this, "")); 154926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 155926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 156926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 15793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * @return {boolean} 15893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 15993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) canRename: function() 16093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 1615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return true; 16293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 16393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 16493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) /** 165591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} path 16693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * @param {string} newName 16793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * @param {function(boolean, string=)} callback 16893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 16993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) rename: function(path, newName, callback) 17093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 1715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var filePath = this._filePathForPath(path); 1725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) this._fileSystem.renameFile(filePath, newName, callback); 17393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 17493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 17593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) /** 176591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} path 177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} query 178926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {boolean} caseSensitive 179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {boolean} isRegex 180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function(Array.<WebInspector.ContentProvider.SearchMatch>)} callback 181926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 182926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) searchInFileContent: function(path, query, caseSensitive, isRegex, callback) 183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 184926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var filePath = this._filePathForPath(path); 185926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._fileSystem.requestFileContent(filePath, contentCallback.bind(this)); 186926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 187926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 188926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {?string} content 189926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function contentCallback(content) 191926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 192926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var result = []; 193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (content !== null) 194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) result = WebInspector.ContentProvider.performSearchInContent(content, query, caseSensitive, isRegex); 195926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callback(result); 196926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 198926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 199926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 200f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {string} query 201f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {boolean} caseSensitive 202f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {boolean} isRegex 203f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {WebInspector.Progress} progress 204f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {function(StringMap)} callback 205f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) */ 206f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) searchInContent: function(query, caseSensitive, isRegex, progress, callback) 207f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 208f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) var requestId = ++WebInspector.FileSystemProjectDelegate._lastRequestId; 209f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) this._searchCallbacks[requestId] = innerCallback.bind(this); 2101fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch InspectorFrontendHost.searchInPath(requestId, this._fileSystem.path(), isRegex ? "" : query); 211f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 212f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) function innerCallback(files) 213f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 214d3549321f2fe80c2cb1c3e6b0a7c41a4e79c05a5Torne (Richard Coles) function trimAndNormalizeFileSystemPath(fullPath) 215f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 216d3549321f2fe80c2cb1c3e6b0a7c41a4e79c05a5Torne (Richard Coles) var trimmedPath = fullPath.substr(this._fileSystem.path().length + 1); 217d3549321f2fe80c2cb1c3e6b0a7c41a4e79c05a5Torne (Richard Coles) if (WebInspector.isWin()) 218d3549321f2fe80c2cb1c3e6b0a7c41a4e79c05a5Torne (Richard Coles) trimmedPath = trimmedPath.replace(/\\/g, "/"); 219d3549321f2fe80c2cb1c3e6b0a7c41a4e79c05a5Torne (Richard Coles) return trimmedPath; 220f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } 221f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 222d3549321f2fe80c2cb1c3e6b0a7c41a4e79c05a5Torne (Richard Coles) files = files.map(trimAndNormalizeFileSystemPath.bind(this)); 223f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) var result = new StringMap(); 224e6d4491e48613634a83c1957c72759da80987961Ben Murdoch progress.setTotalWork(files.length); 225e6d4491e48613634a83c1957c72759da80987961Ben Murdoch if (files.length === 0) { 226e6d4491e48613634a83c1957c72759da80987961Ben Murdoch progress.done(); 227f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) callback(result); 228f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return; 229f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } 230f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 231e6d4491e48613634a83c1957c72759da80987961Ben Murdoch var fileIndex = 0; 232e6d4491e48613634a83c1957c72759da80987961Ben Murdoch var maxFileContentRequests = 20; 233e6d4491e48613634a83c1957c72759da80987961Ben Murdoch var callbacksLeft = 0; 234e6d4491e48613634a83c1957c72759da80987961Ben Murdoch 235e6d4491e48613634a83c1957c72759da80987961Ben Murdoch function searchInNextFiles() 236e6d4491e48613634a83c1957c72759da80987961Ben Murdoch { 237e6d4491e48613634a83c1957c72759da80987961Ben Murdoch for (; callbacksLeft < maxFileContentRequests; ++callbacksLeft) { 238e6d4491e48613634a83c1957c72759da80987961Ben Murdoch if (fileIndex >= files.length) 239e6d4491e48613634a83c1957c72759da80987961Ben Murdoch break; 240e6d4491e48613634a83c1957c72759da80987961Ben Murdoch var path = files[fileIndex++]; 241e6d4491e48613634a83c1957c72759da80987961Ben Murdoch var filePath = this._filePathForPath(path); 242e6d4491e48613634a83c1957c72759da80987961Ben Murdoch this._fileSystem.requestFileContent(filePath, contentCallback.bind(this, path)); 243e6d4491e48613634a83c1957c72759da80987961Ben Murdoch } 244f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } 245e6d4491e48613634a83c1957c72759da80987961Ben Murdoch 246e6d4491e48613634a83c1957c72759da80987961Ben Murdoch searchInNextFiles.call(this); 247f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 248f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** 249f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {string} path 250f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {?string} content 251f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) */ 252f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) function contentCallback(path, content) 253f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 254f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) var matches = []; 255f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (content !== null) 256f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) matches = WebInspector.ContentProvider.performSearchInContent(content, query, caseSensitive, isRegex); 257f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 258f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) result.put(path, matches); 259e6d4491e48613634a83c1957c72759da80987961Ben Murdoch progress.worked(1); 260e6d4491e48613634a83c1957c72759da80987961Ben Murdoch 261e6d4491e48613634a83c1957c72759da80987961Ben Murdoch --callbacksLeft; 262e6d4491e48613634a83c1957c72759da80987961Ben Murdoch if (fileIndex < files.length) { 263e6d4491e48613634a83c1957c72759da80987961Ben Murdoch searchInNextFiles.call(this); 264e6d4491e48613634a83c1957c72759da80987961Ben Murdoch } else { 265e6d4491e48613634a83c1957c72759da80987961Ben Murdoch if (callbacksLeft) 266e6d4491e48613634a83c1957c72759da80987961Ben Murdoch return; 267e6d4491e48613634a83c1957c72759da80987961Ben Murdoch progress.done(); 268e6d4491e48613634a83c1957c72759da80987961Ben Murdoch callback(result); 269e6d4491e48613634a83c1957c72759da80987961Ben Murdoch } 270f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } 271f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } 272f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) }, 273f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 274f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** 275f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {number} requestId 276f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {Array.<string>} files 277f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) */ 278f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) searchCompleted: function(requestId, files) 279f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 280f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!this._searchCallbacks[requestId]) 281f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return; 282f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) var callback = this._searchCallbacks[requestId]; 283f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) delete this._searchCallbacks[requestId]; 284f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) callback(files); 285f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) }, 286f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 287f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** 288f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {WebInspector.Progress} progress 289f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {function()} callback 290f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) */ 291f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) indexContent: function(progress, callback) 292f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 293f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) var requestId = ++WebInspector.FileSystemProjectDelegate._lastRequestId; 294f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) this._indexingCallbacks[requestId] = callback; 295f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) this._indexingProgresses[requestId] = progress; 296f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) progress.setTotalWork(1); 297f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) progress.addEventListener(WebInspector.Progress.Events.Canceled, this._indexingCanceled.bind(this, requestId)); 2981fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch InspectorFrontendHost.indexPath(requestId, this._fileSystem.path()); 299f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) }, 300f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 301f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** 302f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {number} requestId 303f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) */ 304f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) _indexingCanceled: function(requestId) 305f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 306f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!this._indexingProgresses[requestId]) 307f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return; 3081fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch InspectorFrontendHost.stopIndexing(requestId); 309f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) delete this._indexingProgresses[requestId]; 310f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) delete this._indexingCallbacks[requestId]; 311f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) }, 312f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 313f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** 314f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {number} requestId 315f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {number} totalWork 316f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) */ 317f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) indexingTotalWorkCalculated: function(requestId, totalWork) 318f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 319f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!this._indexingProgresses[requestId]) 320f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return; 321f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) var progress = this._indexingProgresses[requestId]; 322f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) progress.setTotalWork(totalWork); 323f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) }, 324f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 325f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** 326f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {number} requestId 327f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {number} worked 328f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) */ 329f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) indexingWorked: function(requestId, worked) 330f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 331f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!this._indexingProgresses[requestId]) 332f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return; 333f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) var progress = this._indexingProgresses[requestId]; 334f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) progress.worked(worked); 335f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) }, 336f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 337f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** 338f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {number} requestId 339f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) */ 340f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) indexingDone: function(requestId) 341f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 342f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!this._indexingProgresses[requestId]) 343f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return; 344f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) var progress = this._indexingProgresses[requestId]; 345f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) var callback = this._indexingCallbacks[requestId]; 346f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) delete this._indexingProgresses[requestId]; 347f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) delete this._indexingCallbacks[requestId]; 348f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) progress.done(); 349f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) callback.call(); 350f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) }, 351f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 352f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** 353591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} path 354591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @return {string} 355591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 356591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _extensionForPath: function(path) 357591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 358591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var extensionIndex = path.lastIndexOf("."); 359591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (extensionIndex === -1) 360591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return ""; 361591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return path.substring(extensionIndex + 1).toLowerCase(); 362591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 363591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 364591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 365591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} extension 366926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {WebInspector.ResourceType} 367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 368591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _contentTypeForExtension: function(extension) 369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 370926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (WebInspector.FileSystemProjectDelegate._scriptExtensions[extension]) 371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return WebInspector.resourceTypes.Script; 37253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (WebInspector.FileSystemProjectDelegate._styleSheetExtensions[extension]) 373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return WebInspector.resourceTypes.Stylesheet; 374591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (WebInspector.FileSystemProjectDelegate._documentExtensions[extension]) 375926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return WebInspector.resourceTypes.Document; 376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return WebInspector.resourceTypes.Other; 377926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 378926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 379926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) populate: function() 380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 3815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) this._fileSystem.requestFilesRecursive("", this._addFile.bind(this)); 382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 384926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 3851fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch * @param {string} path 3861fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch */ 3871fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch refresh: function(path) 3881fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch { 3891fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch this._fileSystem.requestFilesRecursive(path, this._addFile.bind(this)); 3901fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch }, 3911fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch 3921fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch /** 39323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {string} path 39423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {?string} name 39523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {function(?string)} callback 39623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch */ 39723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch createFile: function(path, name, callback) 39823e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 39923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch this._fileSystem.createFile(path, name, innerCallback.bind(this)); 40023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 40123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch function innerCallback(filePath) 40223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 40323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch this._addFile(filePath); 40423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch callback(filePath); 40523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch } 40623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch }, 40723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 40823e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch /** 40923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {string} path 41023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch */ 41123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch deleteFile: function(path) 41223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 41323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch this._fileSystem.deleteFile(path); 41423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch this._removeFile(path); 41523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch }, 41623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 417e6d4491e48613634a83c1957c72759da80987961Ben Murdoch remove: function() 418e6d4491e48613634a83c1957c72759da80987961Ben Murdoch { 419e6d4491e48613634a83c1957c72759da80987961Ben Murdoch WebInspector.isolatedFileSystemManager.removeFileSystem(this._fileSystem.path()); 420e6d4491e48613634a83c1957c72759da80987961Ben Murdoch }, 421e6d4491e48613634a83c1957c72759da80987961Ben Murdoch 42223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch /** 4235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {string} filePath 424926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 4255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) _addFile: function(filePath) 4265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 427591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!filePath) 428591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch console.assert(false); 429521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 430591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var slash = filePath.lastIndexOf("/"); 431591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var parentPath = filePath.substring(0, slash); 432591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var name = filePath.substring(slash + 1); 433591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 434521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) var url = this._workspace.urlForPath(this._fileSystem.path(), filePath); 435e6d4491e48613634a83c1957c72759da80987961Ben Murdoch var extension = this._extensionForPath(name); 436591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch var contentType = this._contentTypeForExtension(extension); 437591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 438e6d4491e48613634a83c1957c72759da80987961Ben Murdoch var fileDescriptor = new WebInspector.FileDescriptor(parentPath, name, this._fileSystemURL + filePath, url, contentType, true); 439926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.ProjectDelegate.Events.FileAdded, fileDescriptor); 440926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 441926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 442926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 443591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} path 444926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 445926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _removeFile: function(path) 446926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 447926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.ProjectDelegate.Events.FileRemoved, path); 448926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 449926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 450926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) reset: function() 451926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 452926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.ProjectDelegate.Events.Reset, null); 453926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 454926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 455926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.Object.prototype 456926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 457926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 458926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 459926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @type {?WebInspector.FileSystemProjectDelegate} 460926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 461926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.fileSystemProjectDelegate = null; 462926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 463926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 464926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 465926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.IsolatedFileSystemManager} isolatedFileSystemManager 466926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.Workspace} workspace 467926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 468926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.FileSystemWorkspaceProvider = function(isolatedFileSystemManager, workspace) 469926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 470926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._isolatedFileSystemManager = isolatedFileSystemManager; 471926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._workspace = workspace; 472926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._isolatedFileSystemManager.addEventListener(WebInspector.IsolatedFileSystemManager.Events.FileSystemAdded, this._fileSystemAdded, this); 473926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._isolatedFileSystemManager.addEventListener(WebInspector.IsolatedFileSystemManager.Events.FileSystemRemoved, this._fileSystemRemoved, this); 474f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) this._projectDelegates = {}; 475926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 476926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 477926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.FileSystemWorkspaceProvider.prototype = { 478926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 479926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.Event} event 480926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 481926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _fileSystemAdded: function(event) 482926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 483926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var fileSystem = /** @type {WebInspector.IsolatedFileSystem} */ (event.data); 484926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var projectId = WebInspector.FileSystemProjectDelegate.projectId(fileSystem.path()); 485926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var projectDelegate = new WebInspector.FileSystemProjectDelegate(fileSystem, this._workspace) 486f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) this._projectDelegates[projectDelegate.id()] = projectDelegate; 487926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) console.assert(!this._workspace.project(projectDelegate.id())); 488926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._workspace.addProject(projectDelegate); 489926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) projectDelegate.populate(); 490926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 491926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 492926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 493926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.Event} event 494926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 495926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _fileSystemRemoved: function(event) 496926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 497926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var fileSystem = /** @type {WebInspector.IsolatedFileSystem} */ (event.data); 498926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var projectId = WebInspector.FileSystemProjectDelegate.projectId(fileSystem.path()); 499926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._workspace.removeProject(projectId); 500f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) delete this._projectDelegates[projectId]; 501926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 502926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 503926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 504926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.UISourceCode} uiSourceCode 505926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 506926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) fileSystemPath: function(uiSourceCode) 507926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 508f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) var projectDelegate = this._projectDelegates[uiSourceCode.project().id()]; 509926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return projectDelegate.fileSystemPath(); 510f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) }, 511f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 512f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) /** 513f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) * @param {WebInspector.FileSystemProjectDelegate} fileSystemPath 514f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) */ 515f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) delegate: function(fileSystemPath) 516f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 517f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) var projectId = WebInspector.FileSystemProjectDelegate.projectId(fileSystemPath); 518f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return this._projectDelegates[projectId]; 519926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 520926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 521926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 522926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 523926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @type {?WebInspector.FileSystemWorkspaceProvider} 524926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 525926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.fileSystemWorkspaceProvider = null; 526