Index: third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js b/third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js |
index 19a97cfbe7ff2d1d72afca49e3875ac2078e7612..ca6f7c57a9c8d1dfee85c86b9ffab389777b579a 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js |
+++ b/third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js |
@@ -107,11 +107,11 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
/** |
* @param {!SDK.Target} target |
* @param {?SDK.ResourceTreeFrame} frame |
- * @param {boolean} isContentScripts |
+ * @param {string} bucketType |
* @return {string} |
*/ |
- static projectId(target, frame, isContentScripts) { |
- return target.id() + ':' + (frame ? frame.id : '') + ':' + (isContentScripts ? 'contentscripts' : ''); |
+ static projectId(target, frame, bucketType) { |
+ return target.id() + ':' + (frame ? frame.id : '') + ':' + bucketType; |
} |
/** |
@@ -163,12 +163,14 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
/** |
* @param {?SDK.ResourceTreeFrame} frame |
- * @param {boolean} isContentScripts |
+ * @param {string} bucketType |
* @return {!Bindings.ContentProviderBasedProject} |
*/ |
- _workspaceProject(frame, isContentScripts) { |
- var projectId = Bindings.NetworkProject.projectId(this.target(), frame, isContentScripts); |
- var projectType = isContentScripts ? Workspace.projectTypes.ContentScripts : Workspace.projectTypes.Network; |
+ _workspaceProject(frame, bucketType) { |
+ var projectId = Bindings.NetworkProject.projectId(this.target(), frame, bucketType); |
+ var isContentScriptBucket = bucketType === Bindings.ProjectBuckets.ContentScriptsBucket || |
+ bucketType === Bindings.ProjectBuckets.SourceMapContentScriptsBucket; |
+ var projectType = isContentScriptBucket ? Workspace.projectTypes.ContentScripts : Workspace.projectTypes.Network; |
var project = this._workspaceProjects.get(projectId); |
if (project) |
@@ -178,6 +180,7 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
this._workspace, projectId, projectType, '', false /* isServiceProject */); |
project[Bindings.NetworkProject._targetSymbol] = this.target(); |
project[Bindings.NetworkProject._frameSymbol] = frame; |
+ project[Bindings.NetworkProject._bucketSymbol] = bucketType; |
this._workspaceProjects.set(projectId, project); |
return project; |
} |
@@ -190,7 +193,9 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
* @return {!Workspace.UISourceCode} |
*/ |
addFile(contentProvider, frame, isContentScript, contentSize) { |
- var uiSourceCode = this._createFile(contentProvider, frame, isContentScript || false); |
+ var bucketType = isContentScript ? Bindings.ProjectBuckets.SourceMapContentScriptsBucket : |
+ Bindings.ProjectBuckets.SourceMapBucket; |
+ var uiSourceCode = this._createFile(contentProvider, frame, bucketType); |
var metadata = typeof contentSize === 'number' ? new Workspace.UISourceCodeMetadata(null, contentSize) : null; |
this._addUISourceCodeWithProvider(uiSourceCode, contentProvider, metadata); |
return uiSourceCode; |
@@ -199,15 +204,16 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
/** |
* @param {?SDK.ResourceTreeFrame} frame |
* @param {string} url |
+ * @param {string} bucketType |
*/ |
- _removeFileForURL(frame, url) { |
- var project = this._workspaceProjects.get(Bindings.NetworkProject.projectId(this.target(), frame, false)); |
+ _removeFileForURL(frame, url, bucketType) { |
+ var project = this._workspaceProjects.get(Bindings.NetworkProject.projectId(this.target(), frame, bucketType)); |
if (!project) |
return; |
project.removeFile(url); |
} |
- _populate() { |
+ _populateResources() { |
/** |
* @param {!SDK.ResourceTreeFrame} frame |
* @this {Bindings.NetworkProject} |
@@ -251,8 +257,9 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
return; |
} |
var originalContentProvider = script.originalContentProvider(); |
- var uiSourceCode = |
- this._createFile(originalContentProvider, SDK.ResourceTreeFrame.fromScript(script), script.isContentScript()); |
+ var bucketType = script.isContentScript() ? Bindings.ProjectBuckets.ContentScriptsBucket : |
+ Bindings.ProjectBuckets.RegularScriptsBucket; |
+ var uiSourceCode = this._createFile(originalContentProvider, SDK.ResourceTreeFrame.fromScript(script), bucketType); |
uiSourceCode[Bindings.NetworkProject._scriptSymbol] = script; |
var resource = SDK.ResourceTreeModel.resourceForURL(uiSourceCode.url()); |
this._addUISourceCodeWithProvider(uiSourceCode, originalContentProvider, this._resourceMetadata(resource)); |
@@ -269,7 +276,9 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
return; |
var originalContentProvider = header.originalContentProvider(); |
- var uiSourceCode = this._createFile(originalContentProvider, SDK.ResourceTreeFrame.fromStyleSheet(header), false); |
+ var uiSourceCode = this._createFile( |
+ originalContentProvider, SDK.ResourceTreeFrame.fromStyleSheet(header), |
+ Bindings.ProjectBuckets.StyleSheetsBucket); |
uiSourceCode[Bindings.NetworkProject._styleSheetSymbol] = header; |
var resource = SDK.ResourceTreeModel.resourceForURL(uiSourceCode.url()); |
this._addUISourceCodeWithProvider(uiSourceCode, originalContentProvider, this._resourceMetadata(resource)); |
@@ -283,7 +292,8 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
if (header.isInline && !header.hasSourceURL && header.origin !== 'inspector') |
return; |
- this._removeFileForURL(SDK.ResourceTreeFrame.fromStyleSheet(header), header.resourceURL()); |
+ this._removeFileForURL( |
+ SDK.ResourceTreeFrame.fromStyleSheet(header), header.resourceURL(), Bindings.ProjectBuckets.StyleSheetsBucket); |
} |
/** |
@@ -316,12 +326,12 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
var frame = SDK.ResourceTreeFrame.fromResource(resource); |
// Never load document twice. |
- var projectId = Bindings.NetworkProject.projectId(this.target(), frame, false); |
+ var projectId = Bindings.NetworkProject.projectId(this.target(), frame, Bindings.ProjectBuckets.ResourcesBucket); |
var project = this._workspaceProjects.get(projectId); |
if (project && project.uiSourceCodeForURL(resource.url)) |
return; |
- var uiSourceCode = this._createFile(resource, frame, false); |
+ var uiSourceCode = this._createFile(resource, frame, Bindings.ProjectBuckets.ResourcesBucket); |
uiSourceCode[Bindings.NetworkProject._resourceSymbol] = resource; |
this._addUISourceCodeWithProvider(uiSourceCode, resource, this._resourceMetadata(resource)); |
} |
@@ -330,12 +340,17 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
* @param {!SDK.ResourceTreeFrame} frame |
*/ |
_removeFrameResources(frame) { |
- var project = this._workspaceProject(frame, false); |
- for (var resource of frame.resources()) |
- project.removeUISourceCode(resource.url); |
- project = this._workspaceProject(frame, true); |
- for (var resource of frame.resources()) |
- project.removeUISourceCode(resource.url); |
+ // TODO(lushnikov): this method should clean up only ResourcesBucket. |
+ var projects = [ |
+ this._workspaceProject(frame, Bindings.ProjectBuckets.ResourcesBucket), |
+ this._workspaceProject(frame, Bindings.ProjectBuckets.ContentScriptsBucket), |
+ this._workspaceProject(frame, Bindings.ProjectBuckets.RegularScriptsBucket), |
+ this._workspaceProject(frame, Bindings.ProjectBuckets.StyleSheetsBucket), |
+ ]; |
+ for (var resource of frame.resources()) { |
+ for (var project of projects) |
+ project.removeUISourceCode(resource.url); |
+ } |
} |
/** |
@@ -358,25 +373,25 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
* @param {!Common.Event} event |
*/ |
_mainFrameNavigated(event) { |
- this._reset(); |
+ this._resetResources(); |
} |
_suspendStateChanged() { |
if (this.target().targetManager().allTargetsSuspended()) |
- this._reset(); |
+ this._resetResources(); |
else |
- this._populate(); |
+ this._populateResources(); |
} |
/** |
* @param {!Common.ContentProvider} contentProvider |
* @param {?SDK.ResourceTreeFrame} frame |
- * @param {boolean} isContentScript |
+ * @param {string} bucketType |
* @return {!Workspace.UISourceCode} |
*/ |
- _createFile(contentProvider, frame, isContentScript) { |
+ _createFile(contentProvider, frame, bucketType) { |
var url = contentProvider.contentURL(); |
- var project = this._workspaceProject(frame, isContentScript); |
+ var project = this._workspaceProject(frame, bucketType); |
var uiSourceCode = project.createUISourceCode(url, contentProvider.contentType()); |
uiSourceCode[Bindings.NetworkProject._targetSymbol] = this.target(); |
return uiSourceCode; |
@@ -393,15 +408,28 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
} |
_dispose() { |
- this._reset(); |
+ for (var project of this._workspaceProjects.values()) |
+ project.removeProject(); |
Common.EventTarget.removeEventListeners(this._eventListeners); |
delete this.target()[Bindings.NetworkProject._networkProjectSymbol]; |
} |
- _reset() { |
- for (var project of this._workspaceProjects.values()) |
- project.removeProject(); |
- this._workspaceProjects.clear(); |
+ _resetResources() { |
+ // TODO(lushnikov): this method should clean up only ResourcesBucket. |
+ for (var projectId of this._workspaceProjects.keys()) { |
+ var project = this._workspaceProjects.get(projectId); |
+ switch (project[Bindings.NetworkProject._bucketSymbol]) { |
+ case Bindings.ProjectBuckets.ResourcesBucket: |
+ case Bindings.ProjectBuckets.ContentScriptsBucket: |
+ case Bindings.ProjectBuckets.RegularScriptsBucket: |
+ case Bindings.ProjectBuckets.StyleSheetsBucket: |
+ case Bindings.ProjectBuckets.SourceMapBucket: |
+ case Bindings.ProjectBuckets.SourceMapContentScriptsBucket: |
+ project.removeProject(); |
+ this._workspaceProjects.delete(projectId); |
+ break; |
+ } |
+ } |
} |
/** |
@@ -411,10 +439,24 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
* @return {?Workspace.UISourceCode} |
*/ |
static uiSourceCodeForScriptURL(workspace, url, script) { |
+ var buckets = []; |
+ if (script.isContentScript()) { |
+ buckets = [Bindings.ProjectBuckets.SourceMapContentScriptsBucket, Bindings.ProjectBuckets.ContentScriptsBucket]; |
+ } else { |
+ buckets = [ |
+ Bindings.ProjectBuckets.SourceMapBucket, Bindings.ProjectBuckets.RegularScriptsBucket, |
+ Bindings.ProjectBuckets.ResourcesBucket |
+ ]; |
+ } |
var target = script.debuggerModel.target(); |
var frame = SDK.ResourceTreeFrame.fromScript(script); |
- return workspace.uiSourceCode(Bindings.NetworkProject.projectId(target, frame, false), url) || |
- workspace.uiSourceCode(Bindings.NetworkProject.projectId(target, frame, true), url); |
+ var projectIds = buckets.map(bucket => Bindings.NetworkProject.projectId(target, frame, bucket)); |
+ for (var projectId of projectIds) { |
+ var uiSourceCode = workspace.uiSourceCode(projectId, url); |
+ if (uiSourceCode) |
+ return uiSourceCode; |
+ } |
+ return null; |
} |
/** |
@@ -424,14 +466,36 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
* @return {?Workspace.UISourceCode} |
*/ |
static uiSourceCodeForStyleURL(workspace, url, header) { |
+ var buckets = [ |
+ Bindings.ProjectBuckets.SourceMapBucket, Bindings.ProjectBuckets.StyleSheetsBucket, |
+ Bindings.ProjectBuckets.ResourcesBucket |
+ ]; |
var frame = SDK.ResourceTreeFrame.fromStyleSheet(header); |
- return workspace.uiSourceCode(Bindings.NetworkProject.projectId(header.target(), frame, false), url); |
+ var target = header.target(); |
+ var projectIds = buckets.map(bucket => Bindings.NetworkProject.projectId(target, frame, bucket)); |
+ for (var projectId of projectIds) { |
+ var uiSourceCode = workspace.uiSourceCode(projectId, url); |
+ if (uiSourceCode) |
+ return uiSourceCode; |
+ } |
+ return null; |
} |
}; |
+/** @enum {string} */ |
+Bindings.ProjectBuckets = { |
+ ResourcesBucket: 'ResourcesBucket', |
+ ContentScriptsBucket: 'ContentScriptsBucket', |
+ RegularScriptsBucket: 'RegularScriptsBucket', |
+ StyleSheetsBucket: 'StyleSheetsBucket', |
+ SourceMapBucket: 'SourceMapBucket', |
+ SourceMapContentScriptsBucket: 'SourceMapContentScriptsBucket', |
+}; |
+ |
Bindings.NetworkProject._networkProjectSymbol = Symbol('networkProject'); |
Bindings.NetworkProject._resourceSymbol = Symbol('resource'); |
Bindings.NetworkProject._scriptSymbol = Symbol('script'); |
Bindings.NetworkProject._styleSheetSymbol = Symbol('styleSheet'); |
Bindings.NetworkProject._targetSymbol = Symbol('target'); |
Bindings.NetworkProject._frameSymbol = Symbol('frame'); |
+Bindings.NetworkProject._bucketSymbol = Symbol('bucket'); |