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

Unified Diff: third_party/WebKit/Source/devtools/front_end/sdk/DebuggerModel.js

Issue 2781923002: [WIP] DevTools: user SourceMapManager in Debugger (Closed)
Patch Set: works great 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/sdk/DebuggerModel.js
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/DebuggerModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/DebuggerModel.js
index 72693cadfdd036e221785df59aa9a22d9f65462d..a2e2e4cb38b070c21469aa2554c7a35b1e7129f3 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/DebuggerModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/DebuggerModel.js
@@ -41,6 +41,12 @@ SDK.DebuggerModel = class extends SDK.SDKModel {
target.registerDebuggerDispatcher(new SDK.DebuggerDispatcher(this));
this._agent = target.debuggerAgent();
this._runtimeModel = /** @type {!SDK.RuntimeModel} */ (target.model(SDK.RuntimeModel));
+ this._runtimeModel.addEventListener(SDK.RuntimeModel.Events.ExecutionContextDestroyed, this._executionContextDestroyed, this);
+
+ /** @type {!SDK.SourceMapManager<!SDK.Script>} */
+ this._sourceMapManager = new SDK.SourceMapManager(target);
+ /** @type {!Map<string, !SDK.Script>} */
+ this._sourceMapIdToScript = new Map();
/** @type {?SDK.DebuggerPausedDetails} */
this._debuggerPausedDetails = null;
@@ -65,6 +71,28 @@ SDK.DebuggerModel = class extends SDK.SDKModel {
/** @type {!Map<string, string>} */
this._stringMap = new Map();
+ this._sourceMapManager.setEnabled(Common.moduleSetting('jsSourceMapsEnabled').get());
+ Common.moduleSetting('jsSourceMapsEnabled')
+ .addChangeListener(event => this._sourceMapManager.setEnabled(/** @type {boolean} */ (event.data)));
+ }
+
+ /**
+ * @param {string} executionContextId
+ * @param {string} sourceURL
+ * @param {?string} sourceMapURL
+ * @return {?string}
+ */
+ static _sourceMapId(executionContextId, sourceURL, sourceMapURL) {
+ if (!sourceMapURL)
+ return null;
+ return executionContextId + ':' + sourceURL + ':' + sourceMapURL;
+ }
+
+ /**
+ * @return {!SDK.SourceMapManager<!SDK.Script>}
+ */
+ sourceMapManager() {
+ return this._sourceMapManager;
}
/**
@@ -318,6 +346,10 @@ SDK.DebuggerModel = class extends SDK.SDKModel {
this._scriptsBySourceURL.clear();
this._stringMap.clear();
this._discardableScripts = [];
+
+ for (var scriptWithSourceMap of this._sourceMapIdToScript.values())
+ this._sourceMapManager.detachSourceMap(scriptWithSourceMap);
+ this._sourceMapIdToScript.clear();
}
/**
@@ -486,6 +518,16 @@ SDK.DebuggerModel = class extends SDK.SDKModel {
this.dispatchEventToListeners(SDK.DebuggerModel.Events.ParsedScriptSource, script);
else
this.dispatchEventToListeners(SDK.DebuggerModel.Events.FailedToParseScriptSource, script);
+
+ var sourceMapId = SDK.DebuggerModel._sourceMapId(script.executionContextId, script.sourceURL, script.sourceMapURL);
+ if (sourceMapId && !hasSyntaxError) {
+ var previousSourceMapClient = this._sourceMapIdToScript.get(sourceMapId);
+ if (previousSourceMapClient)
+ this._sourceMapManager.detachSourceMap(previousSourceMapClient);
+ this._sourceMapIdToScript.set(sourceMapId, script);
+ this._sourceMapManager.attachSourceMap(script, script.sourceURL, script.sourceMapURL);
+ }
+
var isDiscardable = hasSyntaxError && script.isAnonymousScript();
if (isDiscardable) {
this._discardableScripts.push(script);
@@ -496,6 +538,33 @@ SDK.DebuggerModel = class extends SDK.SDKModel {
/**
* @param {!SDK.Script} script
+ * @param {string} newSourceMapURL
+ */
+ setSourceMapURL(script, newSourceMapURL) {
+ var sourceMapId = SDK.DebuggerModel._sourceMapId(script.executionContextId, script.sourceURL, script.sourceMapURL);
+ if (sourceMapId && this._sourceMapIdToScript.get(sourceMapId) === script)
+ this._sourceMapIdToScript.delete(sourceMapId);
+ this._sourceMapManager.detachSourceMap(script);
+
+ script.sourceMapURL = newSourceMapURL;
+ sourceMapId = SDK.DebuggerModel._sourceMapId(script.executionContextId, script.sourceURL, script.sourceMapURL);
+ this._sourceMapIdToScript.set(sourceMapId, script);
+ this._sourceMapManager.attachSourceMap(script, script.sourceURL, script.sourceMapURL);
+ }
+
+ /**
+ * @param {!Common.Event} event
+ */
+ _executionContextDestroyed(event) {
+ var executionContext = /** @type {!SDK.ExecutionContext} */ (event.data);
+ for (var script of this._sourceMapIdToScript.values()) {
+ if (script.executionContextId === executionContext.id)
+ this._sourceMapManager.detachSourceMap(script);
+ }
+ }
+
+ /**
+ * @param {!SDK.Script} script
*/
_registerScript(script) {
this._scripts[script.scriptId] = script;
@@ -772,6 +841,7 @@ SDK.DebuggerModel = class extends SDK.SDKModel {
* @override
*/
dispose() {
+ this._runtimeModel.removeEventListener(SDK.RuntimeModel.Events.ExecutionContextDestroyed, this._executionContextDestroyed, this);
Common.moduleSetting('pauseOnExceptionEnabled').removeChangeListener(this._pauseOnExceptionStateChanged, this);
Common.moduleSetting('pauseOnCaughtException').removeChangeListener(this._pauseOnExceptionStateChanged, this);
Common.moduleSetting('enableAsyncStackTraces').removeChangeListener(this.asyncStackTracesStateChanged, this);
@@ -818,6 +888,14 @@ SDK.DebuggerModel = class extends SDK.SDKModel {
this._stringMap.set(string, string);
return this._stringMap.get(string);
}
+
+ /**
+ * @override
+ */
+ dispose() {
+ super.dispose();
+ this._sourceMapManager.dispose();
+ }
};
SDK.SDKModel.register(SDK.DebuggerModel, SDK.Target.Capability.JS, true);
@@ -847,8 +925,7 @@ SDK.DebuggerModel.Events = {
DiscardedAnonymousScriptSource: Symbol('DiscardedAnonymousScriptSource'),
GlobalObjectCleared: Symbol('GlobalObjectCleared'),
CallFrameSelected: Symbol('CallFrameSelected'),
- ConsoleCommandEvaluatedInSelectedCallFrame: Symbol('ConsoleCommandEvaluatedInSelectedCallFrame'),
- SourceMapURLAdded: Symbol('SourceMapURLAdded')
+ ConsoleCommandEvaluatedInSelectedCallFrame: Symbol('ConsoleCommandEvaluatedInSelectedCallFrame')
};
/** @enum {string} */

Powered by Google App Engine
This is Rietveld 408576698