Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(736)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/workspace/IsolatedFileSystemManager.js

Issue 2867783003: DevTools: move IsolatedFileSystem/IsolatedFileSystemManager into persistence/ (Closed)
Patch Set: fix order Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 /**
32 * @unrestricted
33 */
34 Workspace.IsolatedFileSystemManager = class extends Common.Object {
35 constructor() {
36 super();
37
38 /** @type {!Map<string, !Workspace.IsolatedFileSystem>} */
39 this._fileSystems = new Map();
40 /** @type {!Map<number, function(!Array.<string>)>} */
41 this._callbacks = new Map();
42 /** @type {!Map<number, !Common.Progress>} */
43 this._progresses = new Map();
44
45 InspectorFrontendHost.events.addEventListener(
46 InspectorFrontendHostAPI.Events.FileSystemRemoved, this._onFileSystemRem oved, this);
47 InspectorFrontendHost.events.addEventListener(
48 InspectorFrontendHostAPI.Events.FileSystemAdded, this._onFileSystemAdded , this);
49 InspectorFrontendHost.events.addEventListener(
50 InspectorFrontendHostAPI.Events.FileSystemFilesChangedAddedRemoved, this ._onFileSystemFilesChanged, this);
51 InspectorFrontendHost.events.addEventListener(
52 InspectorFrontendHostAPI.Events.IndexingTotalWorkCalculated, this._onInd exingTotalWorkCalculated, this);
53 InspectorFrontendHost.events.addEventListener(
54 InspectorFrontendHostAPI.Events.IndexingWorked, this._onIndexingWorked, this);
55 InspectorFrontendHost.events.addEventListener(
56 InspectorFrontendHostAPI.Events.IndexingDone, this._onIndexingDone, this );
57 InspectorFrontendHost.events.addEventListener(
58 InspectorFrontendHostAPI.Events.SearchCompleted, this._onSearchCompleted , this);
59
60 this._initExcludePatterSetting();
61
62 this._fileSystemsLoadedPromise = this._requestFileSystems();
63 }
64
65 /**
66 * @return {!Promise<!Array<!Workspace.IsolatedFileSystem>>}
67 */
68 _requestFileSystems() {
69 var fulfill;
70 var promise = new Promise(f => fulfill = f);
71 InspectorFrontendHost.events.addEventListener(
72 InspectorFrontendHostAPI.Events.FileSystemsLoaded, onFileSystemsLoaded, this);
73 InspectorFrontendHost.requestFileSystems();
74 return promise;
75
76 /**
77 * @param {!Common.Event} event
78 * @this {Workspace.IsolatedFileSystemManager}
79 */
80 function onFileSystemsLoaded(event) {
81 var fileSystems = /** @type {!Array.<!Workspace.IsolatedFileSystemManager. FileSystem>} */ (event.data);
82 var promises = [];
83 for (var i = 0; i < fileSystems.length; ++i)
84 promises.push(this._innerAddFileSystem(fileSystems[i], false));
85 Promise.all(promises).then(onFileSystemsAdded);
86 }
87
88 /**
89 * @param {!Array<?Workspace.IsolatedFileSystem>} fileSystems
90 */
91 function onFileSystemsAdded(fileSystems) {
92 fulfill(fileSystems.filter(fs => !!fs));
93 }
94 }
95
96 addFileSystem() {
97 InspectorFrontendHost.addFileSystem('');
98 }
99
100 /**
101 * @param {!Workspace.IsolatedFileSystem} fileSystem
102 */
103 removeFileSystem(fileSystem) {
104 InspectorFrontendHost.removeFileSystem(fileSystem.embedderPath());
105 }
106
107 /**
108 * @return {!Promise<!Array<!Workspace.IsolatedFileSystem>>}
109 */
110 waitForFileSystems() {
111 return this._fileSystemsLoadedPromise;
112 }
113
114 /**
115 * @param {!Workspace.IsolatedFileSystemManager.FileSystem} fileSystem
116 * @param {boolean} dispatchEvent
117 * @return {!Promise<?Workspace.IsolatedFileSystem>}
118 */
119 _innerAddFileSystem(fileSystem, dispatchEvent) {
120 var embedderPath = fileSystem.fileSystemPath;
121 var fileSystemURL = Common.ParsedURL.platformPathToURL(fileSystem.fileSystem Path);
122 var promise = Workspace.IsolatedFileSystem.create(
123 this, fileSystemURL, embedderPath, fileSystem.fileSystemName, fileSystem .rootURL);
124 return promise.then(storeFileSystem.bind(this));
125
126 /**
127 * @param {?Workspace.IsolatedFileSystem} fileSystem
128 * @this {Workspace.IsolatedFileSystemManager}
129 */
130 function storeFileSystem(fileSystem) {
131 if (!fileSystem)
132 return null;
133 this._fileSystems.set(fileSystemURL, fileSystem);
134 if (dispatchEvent)
135 this.dispatchEventToListeners(Workspace.IsolatedFileSystemManager.Events .FileSystemAdded, fileSystem);
136 return fileSystem;
137 }
138 }
139
140 /**
141 * @param {!Common.Event} event
142 */
143 _onFileSystemAdded(event) {
144 var errorMessage = /** @type {string} */ (event.data['errorMessage']);
145 var fileSystem = /** @type {?Workspace.IsolatedFileSystemManager.FileSystem} */ (event.data['fileSystem']);
146 if (errorMessage)
147 Common.console.error(errorMessage);
148 else if (fileSystem)
149 this._innerAddFileSystem(fileSystem, true);
150 }
151
152 /**
153 * @param {!Common.Event} event
154 */
155 _onFileSystemRemoved(event) {
156 var embedderPath = /** @type {string} */ (event.data);
157 var fileSystemPath = Common.ParsedURL.platformPathToURL(embedderPath);
158 var isolatedFileSystem = this._fileSystems.get(fileSystemPath);
159 if (!isolatedFileSystem)
160 return;
161 this._fileSystems.delete(fileSystemPath);
162 isolatedFileSystem.fileSystemRemoved();
163 this.dispatchEventToListeners(Workspace.IsolatedFileSystemManager.Events.Fil eSystemRemoved, isolatedFileSystem);
164 }
165
166 /**
167 * @param {!Common.Event} event
168 */
169 _onFileSystemFilesChanged(event) {
170 var paths = /** @type {!Workspace.IsolatedFileSystemManager.FilesChangedData } */ (event.data);
171 var urlPaths = {};
172 urlPaths.changed = paths.changed.map(embedderPath => Common.ParsedURL.platfo rmPathToURL(embedderPath));
173 urlPaths.added = paths.added.map(embedderPath => Common.ParsedURL.platformPa thToURL(embedderPath));
174 urlPaths.removed = paths.removed.map(embedderPath => Common.ParsedURL.platfo rmPathToURL(embedderPath));
175 this.dispatchEventToListeners(Workspace.IsolatedFileSystemManager.Events.Fil eSystemFilesChanged, urlPaths);
176 }
177
178 /**
179 * @return {!Array<!Workspace.IsolatedFileSystem>}
180 */
181 fileSystems() {
182 return this._fileSystems.valuesArray();
183 }
184
185 /**
186 * @param {string} fileSystemPath
187 * @return {?Workspace.IsolatedFileSystem}
188 */
189 fileSystem(fileSystemPath) {
190 return this._fileSystems.get(fileSystemPath) || null;
191 }
192
193 _initExcludePatterSetting() {
194 var defaultCommonExcludedFolders = [
195 '/node_modules/', '/bower_components/', '/\\.devtools', '/\\.git/', '/\\.s ass-cache/', '/\\.hg/', '/\\.idea/',
196 '/\\.svn/', '/\\.cache/', '/\\.project/'
197 ];
198 var defaultWinExcludedFolders = ['/Thumbs.db$', '/ehthumbs.db$', '/Desktop.i ni$', '/\\$RECYCLE.BIN/'];
199 var defaultMacExcludedFolders = [
200 '/\\.DS_Store$', '/\\.Trashes$', '/\\.Spotlight-V100$', '/\\.AppleDouble$' , '/\\.LSOverride$', '/Icon$',
201 '/\\._.*$'
202 ];
203 var defaultLinuxExcludedFolders = ['/.*~$'];
204 var defaultExcludedFolders = defaultCommonExcludedFolders;
205 if (Host.isWin())
206 defaultExcludedFolders = defaultExcludedFolders.concat(defaultWinExcludedF olders);
207 else if (Host.isMac())
208 defaultExcludedFolders = defaultExcludedFolders.concat(defaultMacExcludedF olders);
209 else
210 defaultExcludedFolders = defaultExcludedFolders.concat(defaultLinuxExclude dFolders);
211 var defaultExcludedFoldersPattern = defaultExcludedFolders.join('|');
212 this._workspaceFolderExcludePatternSetting = Common.settings.createRegExpSet ting(
213 'workspaceFolderExcludePattern', defaultExcludedFoldersPattern, Host.isW in() ? 'i' : '');
214 }
215
216 /**
217 * @return {!Common.Setting}
218 */
219 workspaceFolderExcludePatternSetting() {
220 return this._workspaceFolderExcludePatternSetting;
221 }
222
223 /**
224 * @param {function(!Array.<string>)} callback
225 * @return {number}
226 */
227 registerCallback(callback) {
228 var requestId = ++Workspace.IsolatedFileSystemManager._lastRequestId;
229 this._callbacks.set(requestId, callback);
230 return requestId;
231 }
232
233 /**
234 * @param {!Common.Progress} progress
235 * @return {number}
236 */
237 registerProgress(progress) {
238 var requestId = ++Workspace.IsolatedFileSystemManager._lastRequestId;
239 this._progresses.set(requestId, progress);
240 return requestId;
241 }
242
243 /**
244 * @param {!Common.Event} event
245 */
246 _onIndexingTotalWorkCalculated(event) {
247 var requestId = /** @type {number} */ (event.data['requestId']);
248 var totalWork = /** @type {number} */ (event.data['totalWork']);
249
250 var progress = this._progresses.get(requestId);
251 if (!progress)
252 return;
253 progress.setTotalWork(totalWork);
254 }
255
256 /**
257 * @param {!Common.Event} event
258 */
259 _onIndexingWorked(event) {
260 var requestId = /** @type {number} */ (event.data['requestId']);
261 var worked = /** @type {number} */ (event.data['worked']);
262
263 var progress = this._progresses.get(requestId);
264 if (!progress)
265 return;
266 progress.worked(worked);
267 if (progress.isCanceled()) {
268 InspectorFrontendHost.stopIndexing(requestId);
269 this._onIndexingDone(event);
270 }
271 }
272
273 /**
274 * @param {!Common.Event} event
275 */
276 _onIndexingDone(event) {
277 var requestId = /** @type {number} */ (event.data['requestId']);
278
279 var progress = this._progresses.get(requestId);
280 if (!progress)
281 return;
282 progress.done();
283 this._progresses.delete(requestId);
284 }
285
286 /**
287 * @param {!Common.Event} event
288 */
289 _onSearchCompleted(event) {
290 var requestId = /** @type {number} */ (event.data['requestId']);
291 var files = /** @type {!Array.<string>} */ (event.data['files']);
292
293 var callback = this._callbacks.get(requestId);
294 if (!callback)
295 return;
296 callback.call(null, files);
297 this._callbacks.delete(requestId);
298 }
299 };
300
301 /** @typedef {!{fileSystemName: string, rootURL: string, fileSystemPath: string} } */
302 Workspace.IsolatedFileSystemManager.FileSystem;
303
304 /** @typedef {!{changed:!Array<string>, added:!Array<string>, removed:!Array<str ing>}} */
305 Workspace.IsolatedFileSystemManager.FilesChangedData;
306
307 /** @enum {symbol} */
308 Workspace.IsolatedFileSystemManager.Events = {
309 FileSystemAdded: Symbol('FileSystemAdded'),
310 FileSystemRemoved: Symbol('FileSystemRemoved'),
311 FileSystemFilesChanged: Symbol('FileSystemFilesChanged'),
312 ExcludedFolderAdded: Symbol('ExcludedFolderAdded'),
313 ExcludedFolderRemoved: Symbol('ExcludedFolderRemoved')
314 };
315
316 Workspace.IsolatedFileSystemManager._lastRequestId = 0;
317
318 /**
319 * @type {!Workspace.IsolatedFileSystemManager}
320 */
321 Workspace.isolatedFileSystemManager;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698