Title: [143202] trunk
Revision
143202
Author
vse...@chromium.org
Date
2013-02-18 05:26:29 -0800 (Mon, 18 Feb 2013)

Log Message

Web Inspector: Create separate project for each domain for UISourceCode based on browser resources.
https://bugs.webkit.org/show_bug.cgi?id=109691

Reviewed by Pavel Feldman.

Source/WebCore:

Separate project of certain type is now created for each domain.
UISourceCode path represents a path in the project now.
UISourceCode uri is now calculated based on project id and path.
It is also possible to calculate path based on projectId and URI, which is used for uiSourceCodeForURI() methods.

* inspector/front-end/FileSystemProjectDelegate.js:
(WebInspector.FileSystemProjectDelegate.prototype._filePathForPath):
(WebInspector.FileSystemProjectDelegate.prototype.setFileContent):
(WebInspector.FileSystemProjectDelegate.prototype._populate.filesLoaded):
(WebInspector.FileSystemProjectDelegate.prototype._populate):
(WebInspector.FileSystemProjectDelegate.prototype._removeFile):
* inspector/front-end/ScriptSnippetModel.js:
(WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
* inspector/front-end/SimpleWorkspaceProvider.js:
(WebInspector.SimpleProjectDelegate):
(WebInspector.SimpleProjectDelegate.projectId):
(WebInspector.SimpleProjectDelegate.prototype.id):
(WebInspector.SimpleProjectDelegate.prototype.displayName):
(WebInspector.SimpleProjectDelegate.prototype.addFile):
(WebInspector.SimpleWorkspaceProvider):
(WebInspector.SimpleWorkspaceProvider.splitURL):
(WebInspector.SimpleWorkspaceProvider._pathForSplittedURL):
(WebInspector.SimpleWorkspaceProvider.uriForURL):
(WebInspector.SimpleWorkspaceProvider.prototype._projectDelegate):
(WebInspector.SimpleWorkspaceProvider.prototype._innerAddFileForURL):
(WebInspector.SimpleWorkspaceProvider.prototype.addFileByName):
(WebInspector.SimpleWorkspaceProvider.prototype._innerAddFile):
(WebInspector.SimpleWorkspaceProvider.prototype.removeFileByName):
(WebInspector.SimpleWorkspaceProvider.prototype.reset):
* inspector/front-end/UISourceCode.js:
(WebInspector.UISourceCode.uri):
(WebInspector.UISourceCode.path):
(WebInspector.UISourceCode.prototype.uri):
* inspector/front-end/Workspace.js:
(WebInspector.Project.prototype._fileAdded):
(WebInspector.Project.prototype._fileRemoved):
(WebInspector.Project.prototype.uiSourceCodeForURI):

LayoutTests:

* inspector/debugger/live-edit-breakpoints-expected.txt:
* inspector/debugger/live-edit-breakpoints.html:
* inspector/uisourcecode-revisions.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (143201 => 143202)


--- trunk/LayoutTests/ChangeLog	2013-02-18 13:21:53 UTC (rev 143201)
+++ trunk/LayoutTests/ChangeLog	2013-02-18 13:26:29 UTC (rev 143202)
@@ -1,3 +1,14 @@
+2013-02-18  Vsevolod Vlasov  <vse...@chromium.org>
+
+        Web Inspector: Create separate project for each domain for UISourceCode based on browser resources.
+        https://bugs.webkit.org/show_bug.cgi?id=109691
+
+        Reviewed by Pavel Feldman.
+
+        * inspector/debugger/live-edit-breakpoints-expected.txt:
+        * inspector/debugger/live-edit-breakpoints.html:
+        * inspector/uisourcecode-revisions.html:
+
 2013-02-18  Zoltan Arvai  <zar...@inf.u-szeged.hu>
 
         [Qt] Unreviewed gardening.

Modified: trunk/LayoutTests/inspector/debugger/live-edit-breakpoints-expected.txt (143201 => 143202)


--- trunk/LayoutTests/inspector/debugger/live-edit-breakpoints-expected.txt	2013-02-18 13:21:53 UTC (rev 143201)
+++ trunk/LayoutTests/inspector/debugger/live-edit-breakpoints-expected.txt	2013-02-18 13:26:29 UTC (rev 143202)
@@ -9,7 +9,7 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: network
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: network, project id: file://
 Editing source:
     TextEditor.removeBreakpoint(lineNumber = 2)
     TextEditor.addBreakpoint(lineNumber = 2, disabled = true)
@@ -17,7 +17,7 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: debugger
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: debugger, project id: debugger:file://
 Undoing source editing:
     OriginalTextEditor.removeBreakpoint(lineNumber = 2)
     TextEditor.removeBreakpoint(lineNumber = 2)
@@ -26,7 +26,7 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: network
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: network, project id: file://
 Finally removing breakpoint:
     TextEditor.removeBreakpoint(lineNumber = 2)
     Dumping breakpoint storage
@@ -38,7 +38,7 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: network
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: network, project id: file://
 Editing source:
     OriginalTextEditor.addBreakpoint(lineNumber = 2, disabled = false)
     TextEditor.removeBreakpoint(lineNumber = 2)
@@ -46,7 +46,7 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: debugger
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: debugger, project id: debugger:file://
 Committing edited source:
     OriginalTextEditor.removeBreakpoint(lineNumber = 2)
     TextEditor.removeBreakpoint(lineNumber = 2)
@@ -55,7 +55,7 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: network
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: network, project id: file://
 Finally removing breakpoint:
     TextEditor.removeBreakpoint(lineNumber = 2)
     Dumping breakpoint storage
@@ -67,7 +67,7 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: network
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: network, project id: file://
 Editing source:
     OriginalTextEditor.addBreakpoint(lineNumber = 2, disabled = false)
     TextEditor.removeBreakpoint(lineNumber = 2)
@@ -75,17 +75,17 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: debugger
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: debugger, project id: debugger:file://
 Committing edited source:
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: debugger
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: debugger, project id: debugger:file://
 Editing source again so that live edit could succeed:
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: debugger
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: debugger, project id: debugger:file://
 Committing edited source again:
     OriginalTextEditor.removeBreakpoint(lineNumber = 2)
     TextEditor.removeBreakpoint(lineNumber = 2)
@@ -94,7 +94,7 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: network
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: network, project id: file://
 Finally removing breakpoint:
     TextEditor.removeBreakpoint(lineNumber = 2)
     Dumping breakpoint storage
@@ -106,7 +106,7 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: network
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: network, project id: file://
 Editing source:
     OriginalTextEditor.addBreakpoint(lineNumber = 2, disabled = false)
     TextEditor.removeBreakpoint(lineNumber = 2)
@@ -114,17 +114,17 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: debugger
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: debugger, project id: debugger:file://
 Committing edited source:
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: debugger
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: debugger, project id: debugger:file://
 Undoing source editing:
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: debugger
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: debugger, project id: debugger:file://
 Committing edited source again:
     OriginalTextEditor.removeBreakpoint(lineNumber = 2)
     TextEditor.removeBreakpoint(lineNumber = 2)
@@ -133,7 +133,7 @@
     Dumping breakpoint storage
         edit-me-breakpoints.js:2, enabled:true
     Dumping breakpoint locations
-        url: edit-me-breakpoints.js, lineNumber: 2, project name: network
+        url: edit-me-breakpoints.js, lineNumber: 2, project type: network, project id: file://
 Finally removing breakpoint:
     TextEditor.removeBreakpoint(lineNumber = 2)
     Dumping breakpoint storage
@@ -148,15 +148,15 @@
     TextEditor.addBreakpoint(lineNumber = 2, disabled = false)
     Dumping breakpoint storage
     Dumping breakpoint locations
-        url: , lineNumber: 2, project name: debugger
+        url: , lineNumber: 2, project type: debugger, project id: debugger:
 Editing source:
     Dumping breakpoint storage
     Dumping breakpoint locations
-        url: , lineNumber: 2, project name: debugger
+        url: , lineNumber: 2, project type: debugger, project id: debugger:
 Undoing source editing:
     Dumping breakpoint storage
     Dumping breakpoint locations
-        url: , lineNumber: 2, project name: debugger
+        url: , lineNumber: 2, project type: debugger, project id: debugger:
 Finally removing breakpoint:
     TextEditor.removeBreakpoint(lineNumber = 2)
     Dumping breakpoint storage
@@ -171,15 +171,15 @@
     TextEditor.addBreakpoint(lineNumber = 2, disabled = false)
     Dumping breakpoint storage
     Dumping breakpoint locations
-        url: , lineNumber: 2, project name: debugger
+        url: , lineNumber: 2, project type: debugger, project id: debugger:
 Editing source:
     Dumping breakpoint storage
     Dumping breakpoint locations
-        url: , lineNumber: 2, project name: debugger
+        url: , lineNumber: 2, project type: debugger, project id: debugger:
 Undoing source editing:
     Dumping breakpoint storage
     Dumping breakpoint locations
-        url: , lineNumber: 2, project name: debugger
+        url: , lineNumber: 2, project type: debugger, project id: debugger:
 Finally removing breakpoint:
     TextEditor.removeBreakpoint(lineNumber = 2)
     Dumping breakpoint storage

Modified: trunk/LayoutTests/inspector/debugger/live-edit-breakpoints.html (143201 => 143202)


--- trunk/LayoutTests/inspector/debugger/live-edit-breakpoints.html	2013-02-18 13:21:53 UTC (rev 143201)
+++ trunk/LayoutTests/inspector/debugger/live-edit-breakpoints.html	2013-02-18 13:26:29 UTC (rev 143202)
@@ -39,8 +39,8 @@
         for (var i = 0; i < locations.length; ++i) {
             var uiLocation = locations[i].uiLocation;
             var uiSourceCode = uiLocation.uiSourceCode;
-            var project = WebInspector.workspace.projectForUISourceCode(uiSourceCode);
-            InspectorTest.addResult("        url: " + pathToFileName(uiSourceCode.originURL()) + ", lineNumber: " + uiLocation.lineNumber + ", project name: " + project.id());
+            var project = uiSourceCode.project();
+            InspectorTest.addResult("        url: " + pathToFileName(uiSourceCode.originURL()) + ", lineNumber: " + uiLocation.lineNumber + ", project type: " + project.type() + ", project id: " + project.id());
         }
     }
 

Modified: trunk/LayoutTests/inspector/uisourcecode-revisions.html (143201 => 143202)


--- trunk/LayoutTests/inspector/uisourcecode-revisions.html	2013-02-18 13:21:53 UTC (rev 143201)
+++ trunk/LayoutTests/inspector/uisourcecode-revisions.html	2013-02-18 13:26:29 UTC (rev 143202)
@@ -9,7 +9,7 @@
     function createMockProject()
     {
         var workspace = new WebInspector.Workspace();
-        var projectDelegate = new WebInspector.SimpleProjectDelegate(WebInspector.projectTypes.Network);
+        var projectDelegate = new WebInspector.SimpleProjectDelegate("", WebInspector.projectTypes.Network);
         var project = workspace.addProject(projectDelegate);
         project.requestFileContent = function(uri, callback)
         {

Modified: trunk/Source/WebCore/ChangeLog (143201 => 143202)


--- trunk/Source/WebCore/ChangeLog	2013-02-18 13:21:53 UTC (rev 143201)
+++ trunk/Source/WebCore/ChangeLog	2013-02-18 13:26:29 UTC (rev 143202)
@@ -1,3 +1,48 @@
+2013-02-18  Vsevolod Vlasov  <vse...@chromium.org>
+
+        Web Inspector: Create separate project for each domain for UISourceCode based on browser resources.
+        https://bugs.webkit.org/show_bug.cgi?id=109691
+
+        Reviewed by Pavel Feldman.
+
+        Separate project of certain type is now created for each domain.
+        UISourceCode path represents a path in the project now.
+        UISourceCode uri is now calculated based on project id and path.
+        It is also possible to calculate path based on projectId and URI, which is used for uiSourceCodeForURI() methods.
+
+        * inspector/front-end/FileSystemProjectDelegate.js:
+        (WebInspector.FileSystemProjectDelegate.prototype._filePathForPath):
+        (WebInspector.FileSystemProjectDelegate.prototype.setFileContent):
+        (WebInspector.FileSystemProjectDelegate.prototype._populate.filesLoaded):
+        (WebInspector.FileSystemProjectDelegate.prototype._populate):
+        (WebInspector.FileSystemProjectDelegate.prototype._removeFile):
+        * inspector/front-end/ScriptSnippetModel.js:
+        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
+        * inspector/front-end/SimpleWorkspaceProvider.js:
+        (WebInspector.SimpleProjectDelegate):
+        (WebInspector.SimpleProjectDelegate.projectId):
+        (WebInspector.SimpleProjectDelegate.prototype.id):
+        (WebInspector.SimpleProjectDelegate.prototype.displayName):
+        (WebInspector.SimpleProjectDelegate.prototype.addFile):
+        (WebInspector.SimpleWorkspaceProvider):
+        (WebInspector.SimpleWorkspaceProvider.splitURL):
+        (WebInspector.SimpleWorkspaceProvider._pathForSplittedURL):
+        (WebInspector.SimpleWorkspaceProvider.uriForURL):
+        (WebInspector.SimpleWorkspaceProvider.prototype._projectDelegate):
+        (WebInspector.SimpleWorkspaceProvider.prototype._innerAddFileForURL):
+        (WebInspector.SimpleWorkspaceProvider.prototype.addFileByName):
+        (WebInspector.SimpleWorkspaceProvider.prototype._innerAddFile):
+        (WebInspector.SimpleWorkspaceProvider.prototype.removeFileByName):
+        (WebInspector.SimpleWorkspaceProvider.prototype.reset):
+        * inspector/front-end/UISourceCode.js:
+        (WebInspector.UISourceCode.uri):
+        (WebInspector.UISourceCode.path):
+        (WebInspector.UISourceCode.prototype.uri):
+        * inspector/front-end/Workspace.js:
+        (WebInspector.Project.prototype._fileAdded):
+        (WebInspector.Project.prototype._fileRemoved):
+        (WebInspector.Project.prototype.uiSourceCodeForURI):
+
 2013-02-18  Gyuyoung Kim  <gyuyoung....@samsung.com>
 
         [EFL] Rebaseline failure media tests after r142947

Modified: trunk/Source/WebCore/inspector/front-end/FileSystemProjectDelegate.js (143201 => 143202)


--- trunk/Source/WebCore/inspector/front-end/FileSystemProjectDelegate.js	2013-02-18 13:21:53 UTC (rev 143201)
+++ trunk/Source/WebCore/inspector/front-end/FileSystemProjectDelegate.js	2013-02-18 13:26:29 UTC (rev 143202)
@@ -68,21 +68,21 @@
     },
 
     /**
-     * @param {string} uri
+     * @param {string} path
      * @return {string}
      */
-    _filePathForURI: function(uri)
+    _filePathForPath: function(path)
     {
-        return uri.substr(uri.indexOf("/") + 1);
+        return "/" + path;
     },
 
     /**
-     * @param {string} uri
+     * @param {string} path
      * @param {function(?string,boolean,string)} callback
      */
-    requestFileContent: function(uri, callback)
+    requestFileContent: function(path, callback)
     {
-        var filePath = this._filePathForURI(uri);
+        var filePath = this._filePathForPath(path);
         this._fileSystem.requestFileContent(filePath, innerCallback.bind(this));
         
         /**
@@ -96,26 +96,26 @@
     },
 
     /**
-     * @param {string} uri
+     * @param {string} path
      * @param {string} newContent
      * @param {function(?string)} callback
      */
-    setFileContent: function(uri, newContent, callback)
+    setFileContent: function(path, newContent, callback)
     {
-        var filePath = this._filePathForURI(uri);
+        var filePath = this._filePathForPath(path);
         this._fileSystem.setFileContent(filePath, newContent, callback.bind(this, ""));
     },
 
     /**
-     * @param {string} uri
+     * @param {string} path
      * @param {string} query
      * @param {boolean} caseSensitive
      * @param {boolean} isRegex
      * @param {function(Array.<WebInspector.ContentProvider.SearchMatch>)} callback
      */
-    searchInFileContent: function(uri, query, caseSensitive, isRegex, callback)
+    searchInFileContent: function(path, query, caseSensitive, isRegex, callback)
     {
-        this.requestFileContent(uri, contentCallback.bind(this));
+        this.requestFileContent(path, contentCallback.bind(this));
 
         /**
          * @param {?string} content
@@ -160,10 +160,12 @@
         function filesLoaded(files)
         {
             for (var i = 0; i < files.length; ++i) {
-                var uri = this.id() + files[i];
+                var path = files[i].substr(1);
+                // FIXME: FileSystemProject delegate should know nothing about UISourceCode.
+                var uri = WebInspector.UISourceCode.uri(this.id(), path);
                 var contentType = this._contentTypeForPath(files[i]);
                 var url = ""
-                var fileDescriptor = new WebInspector.FileDescriptor(uri, "file://" + this._fileSystem.path() + files[i], url, contentType, true);
+                var fileDescriptor = new WebInspector.FileDescriptor(path, "file://" + this._fileSystem.path() + files[i], url, contentType, true);
                 this._addFile(fileDescriptor);
             } 
         }
@@ -178,11 +180,11 @@
     },
 
     /**
-     * @param {string} uri
+     * @param {string} path
      */
-    _removeFile: function(uri)
+    _removeFile: function(path)
     {
-        this.dispatchEventToListeners(WebInspector.ProjectDelegate.Events.FileRemoved, uri);
+        this.dispatchEventToListeners(WebInspector.ProjectDelegate.Events.FileRemoved, path);
     },
 
     reset: function()

Modified: trunk/Source/WebCore/inspector/front-end/ScriptSnippetModel.js (143201 => 143202)


--- trunk/Source/WebCore/inspector/front-end/ScriptSnippetModel.js	2013-02-18 13:21:53 UTC (rev 143201)
+++ trunk/Source/WebCore/inspector/front-end/ScriptSnippetModel.js	2013-02-18 13:26:29 UTC (rev 143202)
@@ -82,7 +82,7 @@
      */
     _addScriptSnippet: function(snippet)
     {
-        var uiSourceCode = this._workspaceProvider.addFileForURL(snippet.name, new WebInspector.SnippetContentProvider(snippet), true);
+        var uiSourceCode = this._workspaceProvider.addFileByName("", snippet.name, new WebInspector.SnippetContentProvider(snippet), true);
         var scriptFile = new WebInspector.SnippetScriptFile(this, uiSourceCode);
         uiSourceCode.setScriptFile(scriptFile);
         this._snippetIdForUISourceCode.put(uiSourceCode, snippet.id);
@@ -103,7 +103,7 @@
         this._releaseSnippetScript(uiSourceCode);
         delete this._uiSourceCodeForSnippetId[snippet.id];
         this._snippetIdForUISourceCode.remove(uiSourceCode);
-        this._workspaceProvider.removeFile(snippet.name);
+        this._workspaceProvider.removeFileByName("", snippet.name);
     },
 
     /**

Modified: trunk/Source/WebCore/inspector/front-end/SimpleWorkspaceProvider.js (143201 => 143202)


--- trunk/Source/WebCore/inspector/front-end/SimpleWorkspaceProvider.js	2013-02-18 13:21:53 UTC (rev 143201)
+++ trunk/Source/WebCore/inspector/front-end/SimpleWorkspaceProvider.js	2013-02-18 13:26:29 UTC (rev 143202)
@@ -33,21 +33,28 @@
  * @implements {WebInspector.ProjectDelegate}
  * @extends {WebInspector.Object}
  */
-WebInspector.SimpleProjectDelegate = function(type)
+WebInspector.SimpleProjectDelegate = function(name, type)
 {
+    this._name = name;
     this._type = type;
     /** @type {Object.<string, WebInspector.ContentProvider>} */
     this._contentProviders = {};
     this._lastUniqueSuffix = 0;
 }
 
+WebInspector.SimpleProjectDelegate.projectId = function(name, type)
+{
+    var typePrefix = type !== WebInspector.projectTypes.Network ? (type + ":") : "";
+    return typePrefix + name;
+}
+
 WebInspector.SimpleProjectDelegate.prototype = {
     /**
      * @return {string}
      */
     id: function()
     {
-        return this._type;
+        return WebInspector.SimpleProjectDelegate.projectId(this._name, this._type);
     },
 
     /**
@@ -63,7 +70,18 @@
      */
     displayName: function()
     {
-        return "";
+        if (typeof this._displayName !== "undefined")
+            return this._displayName;
+        if (!this._name) {
+            this._displayName = "";
+            return this._displayName;
+        }
+        var parsedURL = new WebInspector.ParsedURL(this._name);
+        if (parsedURL.isValid)
+            this._displayName = parsedURL.host + (parsedURL.port ? (":" + parsedURL.port) : "");
+        else
+            this._displayName = this._name;
+        return this._displayName;
     },
 
     /**
@@ -87,6 +105,7 @@
     },
 
     /**
+     * @param {string} path
      * @param {string} query
      * @param {boolean} caseSensitive
      * @param {boolean} isRegex
@@ -104,12 +123,12 @@
      * @param {WebInspector.ContentProvider} contentProvider
      * @param {boolean} isEditable
      * @param {boolean=} isContentScript
+     * @return {string}
      */
     addFile: function(path, forceUniquePath, url, contentProvider, isEditable, isContentScript)
     {
         if (forceUniquePath)
             path = this._uniquePath(path); 
-        console.assert(!this._contentProviders[path]);
         var fileDescriptor = new WebInspector.FileDescriptor(path, url, url, contentProvider.contentType(), isEditable, isContentScript);
         this._contentProviders[path] = contentProvider;
         this.dispatchEventToListeners(WebInspector.ProjectDelegate.Events.FileAdded, fileDescriptor);
@@ -156,27 +175,84 @@
 {
     this._workspace = workspace;
     this._type = type;
-    this._simpleProjectDelegate = new WebInspector.SimpleProjectDelegate(this._type);
-    this._workspace.addProject(this._simpleProjectDelegate);
+    this._simpleProjectDelegates = {};
 }
 
 /**
  * @param {string} url
+ * @return {Array.<string>}
+ */
+WebInspector.SimpleWorkspaceProvider.splitURL = function(url)
+{
+    var parsedURL = new WebInspector.ParsedURL(url);
+    var origin;
+    var folderPath;
+    var name;
+    if (parsedURL.isValid) {
+        origin = parsedURL.scheme + "://" + parsedURL.host;
+        if (parsedURL.port)
+            origin += ":" + parsedURL.port;
+        folderPath = parsedURL.folderPathComponents;
+        name = parsedURL.lastPathComponent;
+        if (parsedURL.queryParams)
+            name += "?" + parsedURL.queryParams;
+    } else {
+        origin = "";
+        folderPath = "";
+        name = url;
+    }
+    var result = [origin];
+    var splittedPath = folderPath.split("/");
+    for (var i = 1; i < splittedPath.length; ++i)
+        result.push(splittedPath[i]);
+    result.push(name);
+    return result;
+}
+
+/**
+ * @param {Array.<string>} splittedURL
  * @return {string}
  */
-WebInspector.SimpleWorkspaceProvider.uriForURL = function(url, type)
-{   
-    var uriTypePrefix = type !== WebInspector.projectTypes.Network ? (type + ":") : "";
-    var uri = uriTypePrefix + url;
-    return uri;
+WebInspector.SimpleWorkspaceProvider._pathForSplittedURL = function(splittedURL)
+{
+    splittedURL.shift();
+    return splittedURL.join("/");
 }
 
+/**
+ * @param {string} url
+ * @param {string} type
+ * @return {string}
+ */
+WebInspector.SimpleWorkspaceProvider.uriForURL = function(url, type)
+{
+    var splittedURL = WebInspector.SimpleWorkspaceProvider.splitURL(url);
+    var projectId = WebInspector.SimpleProjectDelegate.projectId(splittedURL[0], type);
+    var path = WebInspector.SimpleWorkspaceProvider._pathForSplittedURL(splittedURL);
+    return WebInspector.UISourceCode.uri(projectId, path);
+ }
+
 WebInspector.SimpleWorkspaceProvider.prototype = {
     /**
+     * @param {string} projectName
+     * @return {WebInspector.ProjectDelegate}
+     */
+    _projectDelegate: function(projectName)
+    {
+        if (this._simpleProjectDelegates[projectName])
+            return this._simpleProjectDelegates[projectName];
+        var simpleProjectDelegate = new WebInspector.SimpleProjectDelegate(projectName, this._type);
+        this._simpleProjectDelegates[projectName] = simpleProjectDelegate;
+        this._workspace.addProject(simpleProjectDelegate);
+        return simpleProjectDelegate;
+    },
+ 
+    /**
      * @param {string} url
      * @param {WebInspector.ContentProvider} contentProvider
      * @param {boolean} isEditable
      * @param {boolean=} isContentScript
+     * @return {WebInspector.UISourceCode}
      */
     addFileForURL: function(url, contentProvider, isEditable, isContentScript)
     {
@@ -188,6 +264,7 @@
      * @param {WebInspector.ContentProvider} contentProvider
      * @param {boolean} isEditable
      * @param {boolean=} isContentScript
+     * @return {WebInspector.UISourceCode}
      */
     addUniqueFileForURL: function(url, contentProvider, isEditable, isContentScript)
     {
@@ -198,27 +275,62 @@
      * @param {string} url
      * @param {WebInspector.ContentProvider} contentProvider
      * @param {boolean} isEditable
+     * @param {boolean} forceUnique
      * @param {boolean=} isContentScript
+     * @return {WebInspector.UISourceCode}
      */
     _innerAddFileForURL: function(url, contentProvider, isEditable, forceUnique, isContentScript)
     {
-        var path = WebInspector.SimpleWorkspaceProvider.uriForURL(url, this._type);
-        path = this._simpleProjectDelegate.addFile(path, forceUnique, url, contentProvider, isEditable, isContentScript);
-        return this._workspace.uiSourceCode(this._simpleProjectDelegate.id(), path);
+        var splittedURL = WebInspector.SimpleWorkspaceProvider.splitURL(url);
+        var projectName = splittedURL[0];
+        var path = WebInspector.SimpleWorkspaceProvider._pathForSplittedURL(splittedURL);
+        return this._innerAddFile(projectName, path, url, contentProvider, isEditable, forceUnique, isContentScript);
     },
 
     /**
-     * @param {string} url
+     * @param {string} projectName
+     * @param {string} name
+     * @param {WebInspector.ContentProvider} contentProvider
+     * @param {boolean} isEditable
+     * @param {boolean=} isContentScript
+     * @return {WebInspector.UISourceCode}
      */
-    removeFile: function(url)
+    addFileByName: function(projectName, name, contentProvider, isEditable, isContentScript)
     {
-        var path = WebInspector.SimpleWorkspaceProvider.uriForURL(url, this._type);
-        this._simpleProjectDelegate.removeFile(path);
+        return this._innerAddFile("", name, name, contentProvider, isEditable, false, isContentScript);
     },
 
+    /**
+     * @param {string} projectName
+     * @param {string} path
+     * @param {WebInspector.ContentProvider} contentProvider
+     * @param {boolean} isEditable
+     * @param {boolean} forceUnique
+     * @param {boolean=} isContentScript
+     * @return {WebInspector.UISourceCode}
+     */
+    _innerAddFile: function(projectName, path, url, contentProvider, isEditable, forceUnique, isContentScript)
+    {
+        var projectDelegate = this._projectDelegate(projectName);
+        path = projectDelegate.addFile(path, forceUnique, url, contentProvider, isEditable, isContentScript);
+        return this._workspace.uiSourceCode(projectDelegate.id(), path);
+    },
+
+    /**
+     * @param {string} projectName
+     * @param {string} path
+     */
+    removeFileByName: function(projectName, path)
+    {
+        var projectDelegate = this._projectDelegate(projectName);
+        projectDelegate.removeFile(path);
+    },
+
     reset: function()
     {
-        this._simpleProjectDelegate.reset();
+        for (var projectName in this._simpleProjectDelegates)
+            this._simpleProjectDelegates[projectName].reset();
+        this._simpleProjectDelegates = {};
     },
     
     __proto__: WebInspector.Object.prototype

Modified: trunk/Source/WebCore/inspector/front-end/UISourceCode.js (143201 => 143202)


--- trunk/Source/WebCore/inspector/front-end/UISourceCode.js	2013-02-18 13:21:53 UTC (rev 143201)
+++ trunk/Source/WebCore/inspector/front-end/UISourceCode.js	2013-02-18 13:26:29 UTC (rev 143202)
@@ -81,6 +81,37 @@
     SourceMappingChanged: "SourceMappingChanged",
 }
 
+/**
+ * @param {string} projectId
+ * @param {string} path
+ * @return {string}
+ */
+WebInspector.UISourceCode.uri = function(projectId, path)
+{
+    if (!projectId)
+        return path;
+    if (!path)
+        return projectId;
+    return projectId + "/" + path;
+}
+
+/**
+ * @param {string} projectId
+ * @param {string} uri
+ * @return {?string}
+ */
+WebInspector.UISourceCode.path = function(projectId, uri)
+{
+    if (!projectId)
+        return uri;
+    if (!uri.startsWith(projectId))
+        return null;
+    var path = uri.substr(projectId.length);
+    if (path.length && path[0] === "/")
+        path = path.substr(1);
+    return path;
+}
+
 WebInspector.UISourceCode.prototype = {
     /**
      * @return {string}
@@ -103,7 +134,7 @@
      */
     uri: function()
     {
-        return this._path;
+        return WebInspector.UISourceCode.uri(this._project.id(), this._path);
     },
 
     /**

Modified: trunk/Source/WebCore/inspector/front-end/Workspace.js (143201 => 143202)


--- trunk/Source/WebCore/inspector/front-end/Workspace.js	2013-02-18 13:21:53 UTC (rev 143201)
+++ trunk/Source/WebCore/inspector/front-end/Workspace.js	2013-02-18 13:26:29 UTC (rev 143202)
@@ -187,7 +187,7 @@
     _fileAdded: function(event)
     {
         var fileDescriptor = /** @type {WebInspector.FileDescriptor} */ (event.data);
-        var uiSourceCode = this.uiSourceCodeForURI(fileDescriptor.path);
+        var uiSourceCode = this.uiSourceCode(fileDescriptor.path);
         if (uiSourceCode) {
             // FIXME: Implement
             return;
@@ -201,7 +201,7 @@
     _fileRemoved: function(event)
     {
         var path = /** @type {string} */ (event.data);
-        var uiSourceCode = this.uiSourceCodeForURI(path);
+        var uiSourceCode = this.uiSourceCode(path);
         if (!uiSourceCode)
             return;
         delete this._uiSourceCodes[uiSourceCode.path()];
@@ -243,7 +243,10 @@
      */
     uiSourceCodeForURI: function(uri)
     {
-        return this.uiSourceCode(uri);
+        var path = WebInspector.UISourceCode.path(this.id(), uri);
+        if (typeof path !== "string")
+            return null;
+        return this._uiSourceCodes[path];
     },
 
     /**
@@ -295,7 +298,6 @@
 WebInspector.projectTypes = {
     Debugger: "debugger",
     LiveEdit: "liveedit",
-    Compiler: "compiler",
     Network: "network",
     Snippets: "snippets",
     FileSystem: "filesystem"
@@ -441,19 +443,6 @@
         return result;
     },
 
-    /**
-     * @return {?WebInspector.Project}
-     */
-    projectForUISourceCode: function(uiSourceCode)
-    {
-        for (var projectId in this._projects) {
-            var project = this._projects[projectId];
-            if (project.uiSourceCodeForURI(uiSourceCode.uri()))
-                return project;
-        }
-        return null;
-    },
-
     __proto__: WebInspector.Object.prototype
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to