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

Unified Diff: third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js

Issue 2739983002: DevTools: cleanup script UISourceCodes on executionContextDestroyed (Closed)
Patch Set: ad jsdoc Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
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:

Powered by Google App Engine
This is Rietveld 408576698