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 ca6f7c57a9c8d1dfee85c86b9ffab389777b579a..602273c3ddd20532abc7f20d38b4e8790bd884b4 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js |
+++ b/third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js |
@@ -87,11 +87,15 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.FrameDetached, this._frameDetached, this)); |
} |
- var debuggerModel = SDK.DebuggerModel.fromTarget(target); |
- if (debuggerModel) { |
+ var runtimeModel = target.runtimeModel; |
+ this._debuggerModel = SDK.DebuggerModel.fromTarget(target); |
+ if (this._debuggerModel && runtimeModel) { |
this._eventListeners.push( |
- debuggerModel.addEventListener(SDK.DebuggerModel.Events.ParsedScriptSource, this._parsedScriptSource, this), |
- debuggerModel.addEventListener( |
+ runtimeModel.addEventListener( |
+ SDK.RuntimeModel.Events.ExecutionContextDestroyed, this._executionContextDestroyed, this), |
+ this._debuggerModel.addEventListener( |
+ SDK.DebuggerModel.Events.ParsedScriptSource, this._parsedScriptSource, this), |
+ this._debuggerModel.addEventListener( |
SDK.DebuggerModel.Events.FailedToParseScriptSource, this._parsedScriptSource, this)); |
} |
var cssModel = target.model(SDK.CSSModel); |
@@ -244,23 +248,35 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
} |
/** |
- * @param {!Common.Event} event |
+ * @param {!SDK.Script} script |
+ * @return {boolean} |
*/ |
- _parsedScriptSource(event) { |
- var script = /** @type {!SDK.Script} */ (event.data); |
+ _acceptsScript(script) { |
if (!script.sourceURL || script.isLiveEdit() || (script.isInlineScript() && !script.hasSourceURL)) |
- return; |
+ return false; |
// Filter out embedder injected content scripts. |
if (script.isContentScript() && !script.hasSourceURL) { |
var parsedURL = new Common.ParsedURL(script.sourceURL); |
if (!parsedURL.isValid) |
- return; |
+ return false; |
} |
+ return true; |
+ } |
+ |
+ /** |
+ * @param {!Common.Event} event |
+ */ |
+ _parsedScriptSource(event) { |
+ var script = /** @type {!SDK.Script} */ (event.data); |
+ if (!this._acceptsScript(script)) |
+ return; |
+ var frame = SDK.ResourceTreeFrame.fromScript(script); |
var originalContentProvider = script.originalContentProvider(); |
var bucketType = script.isContentScript() ? Bindings.ProjectBuckets.ContentScriptsBucket : |
Bindings.ProjectBuckets.RegularScriptsBucket; |
- var uiSourceCode = this._createFile(originalContentProvider, SDK.ResourceTreeFrame.fromScript(script), bucketType); |
+ var uiSourceCode = this._createFile(originalContentProvider, frame, bucketType); |
uiSourceCode[Bindings.NetworkProject._scriptSymbol] = script; |
+ script[Bindings.NetworkProject._frameSymbol] = frame; |
var resource = SDK.ResourceTreeModel.resourceForURL(uiSourceCode.url()); |
this._addUISourceCodeWithProvider(uiSourceCode, originalContentProvider, this._resourceMetadata(resource)); |
} |
@@ -268,6 +284,22 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
/** |
* @param {!Common.Event} event |
*/ |
+ _executionContextDestroyed(event) { |
+ var executionContext = /** @type {!SDK.ExecutionContext} */ (event.data); |
+ var scripts = this._debuggerModel.scriptsForExecutionContext(executionContext); |
+ for (var script of scripts) { |
+ if (!this._acceptsScript(script)) |
+ continue; |
+ var frame = script[Bindings.NetworkProject._frameSymbol]; |
+ var bucketType = script.isContentScript() ? Bindings.ProjectBuckets.ContentScriptsBucket : |
+ Bindings.ProjectBuckets.RegularScriptsBucket; |
+ this._removeFileForURL(frame, script.contentURL(), bucketType); |
+ } |
+ } |
+ |
+ /** |
+ * @param {!Common.Event} event |
+ */ |
_styleSheetAdded(event) { |
var header = /** @type {!SDK.CSSStyleSheetHeader} */ (event.data); |
if (header.isInline && !header.hasSourceURL && header.origin !== 'inspector') |
@@ -314,7 +346,6 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
resourceType !== Common.resourceTypes.Document && resourceType !== Common.resourceTypes.Manifest) |
return; |
- |
// Ignore non-images and non-fonts. |
if (resourceType === Common.resourceTypes.Image && resource.mimeType && !resource.mimeType.startsWith('image')) |
return; |
@@ -343,8 +374,6 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
// 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()) { |
@@ -420,8 +449,6 @@ Bindings.NetworkProject = class extends SDK.SDKObject { |
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: |