Unreviewed, rolling out r143100.
[WebKit-https.git] / Source / WebCore / inspector / front-end / SimpleWorkspaceProvider.js
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  * @constructor
33  * @implements {WebInspector.ProjectDelegate}
34  * @extends {WebInspector.Object}
35  */
36 WebInspector.SimpleProjectDelegate = function(type)
37 {
38     this._type = type;
39     /** @type {Object.<string, WebInspector.ContentProvider>} */
40     this._contentProviders = {};
41     this._lastUniqueSuffix = 0;
42 }
43
44 WebInspector.SimpleProjectDelegate.prototype = {
45     /**
46      * @return {string}
47      */
48     id: function()
49     {
50         return this._type;
51     },
52
53     /**
54      * @return {string}
55      */
56     type: function()
57     {
58         return this._type;
59     },
60
61     /**
62      * @return {string}
63      */
64     displayName: function()
65     {
66         return "";
67     },
68
69     /**
70      * @param {string} path
71      * @param {function(?string,boolean,string)} callback
72      */
73     requestFileContent: function(path, callback)
74     {
75         var contentProvider = this._contentProviders[path];
76         contentProvider.requestContent(callback);
77     },
78
79     /**
80      * @param {string} path
81      * @param {string} newContent
82      * @param {function(?string)} callback
83      */
84     setFileContent: function(path, newContent, callback)
85     {
86         callback(null);
87     },
88
89     /**
90      * @param {string} query
91      * @param {boolean} caseSensitive
92      * @param {boolean} isRegex
93      * @param {function(Array.<WebInspector.ContentProvider.SearchMatch>)} callback
94      */
95     searchInFileContent: function(path, query, caseSensitive, isRegex, callback)
96     {
97         var contentProvider = this._contentProviders[path];
98         contentProvider.searchInContent(query, caseSensitive, isRegex, callback);
99     },
100
101     /**
102      * @param {string} path
103      * @param {string} url
104      * @param {WebInspector.ContentProvider} contentProvider
105      * @param {boolean} isEditable
106      * @param {boolean=} isContentScript
107      */
108     addFile: function(path, forceUniquePath, url, contentProvider, isEditable, isContentScript)
109     {
110         if (forceUniquePath)
111             path = this._uniquePath(path); 
112         console.assert(!this._contentProviders[path]);
113         var fileDescriptor = new WebInspector.FileDescriptor(path, url, url, contentProvider.contentType(), isEditable, isContentScript);
114         this._contentProviders[path] = contentProvider;
115         this.dispatchEventToListeners(WebInspector.ProjectDelegate.Events.FileAdded, fileDescriptor);
116         return path;
117     },
118
119     /**
120      * @param {string} path
121      * @return {string}
122      */
123     _uniquePath: function(path)
124     {
125         var uniquePath = path;
126         while (this._contentProviders[uniquePath])
127             uniquePath = path + " (" + (++this._lastUniqueSuffix) + ")";
128         return uniquePath;
129     },
130
131     /**
132      * @param {string} path
133      */
134     removeFile: function(path)
135     {
136         delete this._contentProviders[path];
137         this.dispatchEventToListeners(WebInspector.ProjectDelegate.Events.FileRemoved, path);
138     },
139
140     reset: function()
141     {
142         this._contentProviders = {};
143         this.dispatchEventToListeners(WebInspector.ProjectDelegate.Events.Reset, null);
144     },
145     
146     __proto__: WebInspector.Object.prototype
147 }
148
149 /**
150  * @constructor
151  * @extends {WebInspector.Object}
152  * @param {WebInspector.Workspace} workspace
153  * @param {string} type
154  */
155 WebInspector.SimpleWorkspaceProvider = function(workspace, type)
156 {
157     this._workspace = workspace;
158     this._type = type;
159     this._simpleProjectDelegate = new WebInspector.SimpleProjectDelegate(this._type);
160     this._workspace.addProject(this._simpleProjectDelegate);
161 }
162
163 /**
164  * @param {string} url
165  * @return {string}
166  */
167 WebInspector.SimpleWorkspaceProvider.uriForURL = function(url, type)
168 {   
169     var uriTypePrefix = type !== WebInspector.projectTypes.Network ? (type + ":") : "";
170     var uri = uriTypePrefix + url;
171     return uri;
172 }
173
174 WebInspector.SimpleWorkspaceProvider.prototype = {
175     /**
176      * @param {string} url
177      * @param {WebInspector.ContentProvider} contentProvider
178      * @param {boolean} isEditable
179      * @param {boolean=} isContentScript
180      */
181     addFileForURL: function(url, contentProvider, isEditable, isContentScript)
182     {
183         return this._innerAddFileForURL(url, contentProvider, isEditable, false, isContentScript);
184     },
185
186     /**
187      * @param {string} url
188      * @param {WebInspector.ContentProvider} contentProvider
189      * @param {boolean} isEditable
190      * @param {boolean=} isContentScript
191      */
192     addUniqueFileForURL: function(url, contentProvider, isEditable, isContentScript)
193     {
194         return this._innerAddFileForURL(url, contentProvider, isEditable, true, isContentScript);
195     },
196
197     /**
198      * @param {string} url
199      * @param {WebInspector.ContentProvider} contentProvider
200      * @param {boolean} isEditable
201      * @param {boolean=} isContentScript
202      */
203     _innerAddFileForURL: function(url, contentProvider, isEditable, forceUnique, isContentScript)
204     {
205         var path = WebInspector.SimpleWorkspaceProvider.uriForURL(url, this._type);
206         path = this._simpleProjectDelegate.addFile(path, forceUnique, url, contentProvider, isEditable, isContentScript);
207         return this._workspace.uiSourceCode(this._simpleProjectDelegate.id(), path);
208     },
209
210     /**
211      * @param {string} url
212      */
213     removeFile: function(url)
214     {
215         var path = WebInspector.SimpleWorkspaceProvider.uriForURL(url, this._type);
216         this._simpleProjectDelegate.removeFile(path);
217     },
218
219     reset: function()
220     {
221         this._simpleProjectDelegate.reset();
222     },
223     
224     __proto__: WebInspector.Object.prototype
225 }