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

Unified Diff: third_party/WebKit/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js

Issue 2801543002: DevTools: simplify ScriptFormatterEditorAction (Closed)
Patch Set: fixed cleanup Created 3 years, 8 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
« no previous file with comments | « third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-3.html ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js b/third_party/WebKit/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js
index eea6a9377fbc44783269ebc854db90bdcaa71aa0..87f3301675b08c347142ea7b0550ef3403621d56 100644
--- a/third_party/WebKit/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js
+++ b/third_party/WebKit/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js
@@ -1,42 +1,25 @@
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+
/**
* @implements {Bindings.DebuggerSourceMapping}
- * @unrestricted
*/
Sources.FormatterScriptMapping = class {
/**
- * @param {!SDK.DebuggerModel} debuggerModel
- * @param {!Sources.ScriptFormatterEditorAction} editorAction
- */
- constructor(debuggerModel, editorAction) {
- this._debuggerModel = debuggerModel;
- this._editorAction = editorAction;
- }
-
- /**
* @override
* @param {!SDK.DebuggerModel.Location} rawLocation
* @return {?Workspace.UILocation}
*/
rawLocationToUILocation(rawLocation) {
- var debuggerModelLocation = /** @type {!SDK.DebuggerModel.Location} */ (rawLocation);
- var script = debuggerModelLocation.script();
- if (!script)
- return null;
- var uiSourceCode = this._editorAction._uiSourceCodes.get(script);
- if (!uiSourceCode)
- return null;
-
- var formatData = this._editorAction._formatData.get(uiSourceCode);
+ var script = rawLocation.script();
+ var formatData = script && Sources.SourceFormatData._for(script);
if (!formatData)
return null;
- var mapping = formatData.mapping;
- var lineNumber = debuggerModelLocation.lineNumber;
- var columnNumber = debuggerModelLocation.columnNumber || 0;
- var formattedLocation = mapping.originalToFormatted(lineNumber, columnNumber);
- return uiSourceCode.uiLocation(formattedLocation[0], formattedLocation[1]);
+ var lineNumber = rawLocation.lineNumber;
+ var columnNumber = rawLocation.columnNumber || 0;
+ var formattedLocation = formatData.mapping.originalToFormatted(lineNumber, columnNumber);
+ return formatData.formattedSourceCode.uiLocation(formattedLocation[0], formattedLocation[1]);
}
/**
@@ -47,15 +30,14 @@ Sources.FormatterScriptMapping = class {
* @return {?SDK.DebuggerModel.Location}
*/
uiLocationToRawLocation(uiSourceCode, lineNumber, columnNumber) {
- var formatData = this._editorAction._formatData.get(uiSourceCode);
+ var formatData = Sources.SourceFormatData._for(uiSourceCode);
if (!formatData)
return null;
var originalLocation = formatData.mapping.formattedToOriginal(lineNumber, columnNumber);
- for (var i = 0; i < formatData.scripts.length; ++i) {
- if (formatData.scripts[i].debuggerModel === this._debuggerModel)
- return this._debuggerModel.createRawLocation(formatData.scripts[i], originalLocation[0], originalLocation[1]);
- }
- return null;
+ var scripts = Sources.ScriptFormatterEditorAction._scriptsForUISourceCode(formatData.originalSourceCode);
+ if (!scripts.length)
+ return null;
+ return scripts[0].debuggerModel.createRawLocation(scripts[0], originalLocation[0], originalLocation[1]);
}
/**
@@ -77,27 +59,35 @@ Sources.FormatterScriptMapping = class {
}
};
-/**
- * @unrestricted
- */
-Sources.FormatterScriptMapping.FormatData = class {
+Sources.SourceFormatData = class {
/**
- * @param {string} projectId
- * @param {string} path
+ * @param {!Workspace.UISourceCode} originalSourceCode
+ * @param {!Workspace.UISourceCode} formattedSourceCode
* @param {!Sources.FormatterSourceMapping} mapping
- * @param {!Array.<!SDK.Script>} scripts
*/
- constructor(projectId, path, mapping, scripts) {
- this.projectId = projectId;
- this.path = path;
+ constructor(originalSourceCode, formattedSourceCode, mapping) {
+ this.originalSourceCode = originalSourceCode;
+ this.formattedSourceCode = formattedSourceCode;
this.mapping = mapping;
- this.scripts = scripts;
+ }
+
+ originalPath() {
+ return this.originalSourceCode.project().id() + ':' + this.originalSourceCode.url();
+ }
+
+ /**
+ * @param {!Object} object
+ * @return {?Sources.SourceFormatData}
+ */
+ static _for(object) {
+ return object[Sources.SourceFormatData._formatDataSymbol];
}
};
+Sources.SourceFormatData._formatDataSymbol = Symbol('formatData');
+
/**
* @implements {Sources.SourcesView.EditorAction}
- * @implements {SDK.SDKModelObserver<!SDK.DebuggerModel>}
* @unrestricted
*/
Sources.ScriptFormatterEditorAction = class {
@@ -107,39 +97,23 @@ Sources.ScriptFormatterEditorAction = class {
Workspace.workspace, this._projectId, Workspace.projectTypes.Formatter, 'formatter',
true /* isServiceProject */);
- /** @type {!Map.<!SDK.Script, !Workspace.UISourceCode>} */
- this._uiSourceCodes = new Map();
- /** @type {!Map.<string, string>} */
+ /** @type {!Map<string, !Workspace.UISourceCode>} */
this._formattedPaths = new Map();
- /** @type {!Map.<!Workspace.UISourceCode, !Sources.FormatterScriptMapping.FormatData>} */
- this._formatData = new Map();
-
- /** @type {!Set.<string>} */
+ /** @type {!Set<string>} */
this._pathsToFormatOnLoad = new Set();
-
- /** @type {!Map.<!SDK.DebuggerModel, !Sources.FormatterScriptMapping>} */
- this._scriptMappingByDebuggerModel = new Map();
- this._workspace = Workspace.workspace;
- SDK.targetManager.observeModels(SDK.DebuggerModel, this);
- }
-
- /**
- * @override
- * @param {!SDK.DebuggerModel} debuggerModel
- */
- modelAdded(debuggerModel) {
- this._scriptMappingByDebuggerModel.set(debuggerModel, new Sources.FormatterScriptMapping(debuggerModel, this));
- debuggerModel.addEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
+ this._scriptMapping = new Sources.FormatterScriptMapping();
+ Workspace.workspace.addEventListener(
+ Workspace.Workspace.Events.UISourceCodeRemoved, this._onUISourceCodeRemoved, this);
}
/**
- * @override
- * @param {!SDK.DebuggerModel} debuggerModel
+ * @param {!Common.Event} event
*/
- modelRemoved(debuggerModel) {
- this._scriptMappingByDebuggerModel.remove(debuggerModel);
- this._cleanForModel(debuggerModel);
- debuggerModel.removeEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
+ _onUISourceCodeRemoved(event) {
+ var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data);
+ var formattedUISourceCode = this._formattedPaths.get(uiSourceCode.project().id() + ':' + uiSourceCode.url());
+ if (formattedUISourceCode)
+ this._discardFormattedUISourceCodeScript(formattedUISourceCode, false);
}
/**
@@ -164,7 +138,7 @@ Sources.ScriptFormatterEditorAction = class {
if (wasSelected)
this._updateButton(null);
- this._discardFormattedUISourceCodeScript(uiSourceCode);
+ this._discardFormattedUISourceCodeScript(uiSourceCode, true);
}
/**
@@ -240,76 +214,41 @@ Sources.ScriptFormatterEditorAction = class {
/**
* @param {!Workspace.UISourceCode} formattedUISourceCode
+ * @param {boolean} userAction
*/
- _discardFormattedUISourceCodeScript(formattedUISourceCode) {
- var formatData = this._formatData.get(formattedUISourceCode);
+ _discardFormattedUISourceCodeScript(formattedUISourceCode, userAction) {
+ var formatData = Sources.SourceFormatData._for(formattedUISourceCode);
if (!formatData)
return;
- this._formatData.remove(formattedUISourceCode);
- var path = formatData.projectId + ':' + formatData.path;
+ var path = formatData.originalPath();
this._formattedPaths.remove(path);
- this._pathsToFormatOnLoad.delete(path);
- for (var i = 0; i < formatData.scripts.length; ++i) {
- this._uiSourceCodes.remove(formatData.scripts[i]);
- Bindings.debuggerWorkspaceBinding.popSourceMapping(formatData.scripts[i]);
+ delete formattedUISourceCode[Sources.SourceFormatData._formatDataSymbol];
+ if (userAction)
+ this._pathsToFormatOnLoad.delete(path);
+ var scripts = Sources.ScriptFormatterEditorAction._scriptsForUISourceCode(formatData.originalSourceCode);
+ for (var script of scripts) {
+ delete script[Sources.SourceFormatData._formatDataSymbol];
+ Bindings.debuggerWorkspaceBinding.popSourceMapping(script);
}
+ if (scripts[0])
+ Bindings.debuggerWorkspaceBinding.setSourceMapping(scripts[0].debuggerModel, formattedUISourceCode, null);
this._project.removeFile(formattedUISourceCode.url());
}
/**
- * @param {!SDK.DebuggerModel} debuggerModel
- */
- _cleanForModel(debuggerModel) {
- var uiSourceCodes = this._formatData.keysArray();
- for (var i = 0; i < uiSourceCodes.length; ++i) {
- Bindings.debuggerWorkspaceBinding.setSourceMapping(debuggerModel, uiSourceCodes[i], null);
- var formatData = this._formatData.get(uiSourceCodes[i]);
- var scripts = [];
- for (var j = 0; j < formatData.scripts.length; ++j) {
- if (formatData.scripts[j].debuggerModel === debuggerModel)
- this._uiSourceCodes.remove(formatData.scripts[j]);
- else
- scripts.push(formatData.scripts[j]);
- }
-
- if (scripts.length) {
- formatData.scripts = scripts;
- } else {
- this._formattedPaths.remove(formatData.projectId + ':' + formatData.path);
- this._formatData.remove(uiSourceCodes[i]);
- this._project.removeFile(uiSourceCodes[i].url());
- }
- }
- }
-
- /**
- * @param {!Common.Event} event
- */
- _debuggerReset(event) {
- var debuggerModel = /** @type {!SDK.DebuggerModel} */ (event.data);
- this._cleanForModel(debuggerModel);
- }
-
- /**
* @param {!Workspace.UISourceCode} uiSourceCode
- * @return {!Array.<!SDK.Script>}
+ * @return {!Array<!SDK.Script>}
*/
- _scriptsForUISourceCode(uiSourceCode) {
- /**
- * @param {!SDK.Script} script
- * @return {boolean}
- */
- function isInlineScript(script) {
- return script.isInlineScript() && !script.hasSourceURL;
- }
-
+ static _scriptsForUISourceCode(uiSourceCode) {
if (uiSourceCode.contentType() === Common.resourceTypes.Document) {
- var scripts = [];
- var debuggerModels = SDK.targetManager.models(SDK.DebuggerModel);
- for (var i = 0; i < debuggerModels.length; ++i)
- scripts.pushAll(debuggerModels[i].scriptsForSourceURL(uiSourceCode.url()));
- return scripts.filter(isInlineScript);
+ var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
+ var debuggerModel = target && target.model(SDK.DebuggerModel);
+ if (debuggerModel) {
+ var scripts = debuggerModel.scriptsForSourceURL(uiSourceCode.url())
+ .filter(script => script.isInlineScript() && !script.hasSourceURL);
+ return scripts;
+ }
}
if (uiSourceCode.contentType().isScript()) {
var rawLocation = Bindings.debuggerWorkspaceBinding.uiLocationToRawLocation(uiSourceCode, 0, 0);
@@ -323,16 +262,14 @@ Sources.ScriptFormatterEditorAction = class {
* @param {!Workspace.UISourceCode} uiSourceCode
*/
_formatUISourceCodeScript(uiSourceCode) {
- var formattedPath = this._formattedPaths.get(uiSourceCode.project().id() + ':' + uiSourceCode.url());
- if (formattedPath) {
- var uiSourceCodePath = formattedPath;
- var formattedUISourceCode = this._workspace.uiSourceCode(this._projectId, uiSourceCodePath);
- var formatData = formattedUISourceCode ? this._formatData.get(formattedUISourceCode) : null;
+ var formattedUISourceCode = this._formattedPaths.get(uiSourceCode.project().id() + ':' + uiSourceCode.url());
+ if (formattedUISourceCode) {
+ var formatData = Sources.SourceFormatData._for(formattedUISourceCode);
if (formatData) {
this._showIfNeeded(
uiSourceCode, /** @type {!Workspace.UISourceCode} */ (formattedUISourceCode), formatData.mapping);
+ return;
}
- return;
}
uiSourceCode.requestContent().then(contentLoaded.bind(this));
@@ -352,33 +289,28 @@ Sources.ScriptFormatterEditorAction = class {
* @param {!Sources.FormatterSourceMapping} formatterMapping
*/
function innerCallback(formattedContent, formatterMapping) {
- var scripts = this._scriptsForUISourceCode(uiSourceCode);
var formattedURL = uiSourceCode.url() + ':formatted';
var contentProvider =
Common.StaticContentProvider.fromString(formattedURL, uiSourceCode.contentType(), formattedContent);
var formattedUISourceCode = this._project.addContentProvider(formattedURL, contentProvider);
- var formattedPath = formattedUISourceCode.url();
- var formatData = new Sources.FormatterScriptMapping.FormatData(
- uiSourceCode.project().id(), uiSourceCode.url(), formatterMapping, scripts);
- this._formatData.set(formattedUISourceCode, formatData);
- var path = uiSourceCode.project().id() + ':' + uiSourceCode.url();
- this._formattedPaths.set(path, formattedPath);
+ var formatData = new Sources.SourceFormatData(uiSourceCode, formattedUISourceCode, formatterMapping);
+ formattedUISourceCode[Sources.SourceFormatData._formatDataSymbol] = formatData;
+
+ var path = formatData.originalPath();
+ this._formattedPaths.set(path, formattedUISourceCode);
this._pathsToFormatOnLoad.add(path);
- for (var i = 0; i < scripts.length; ++i) {
- this._uiSourceCodes.set(scripts[i], formattedUISourceCode);
- var scriptMapping =
- /** @type {!Sources.FormatterScriptMapping} */ (
- this._scriptMappingByDebuggerModel.get(scripts[i].debuggerModel));
- Bindings.debuggerWorkspaceBinding.pushSourceMapping(scripts[i], scriptMapping);
- }
- var debuggerModels = SDK.targetManager.models(SDK.DebuggerModel);
- for (var i = 0; i < debuggerModels.length; ++i) {
- var scriptMapping =
- /** @type {!Sources.FormatterScriptMapping} */ (this._scriptMappingByDebuggerModel.get(debuggerModels[i]));
- Bindings.debuggerWorkspaceBinding.setSourceMapping(debuggerModels[i], formattedUISourceCode, scriptMapping);
+ var scripts = Sources.ScriptFormatterEditorAction._scriptsForUISourceCode(uiSourceCode);
+ if (!scripts)
+ return;
+ for (var script of scripts) {
+ script[Sources.SourceFormatData._formatDataSymbol] = formatData;
+ Bindings.debuggerWorkspaceBinding.pushSourceMapping(script, this._scriptMapping);
}
+ Bindings.debuggerWorkspaceBinding.setSourceMapping(
+ scripts[0].debuggerModel, formattedUISourceCode, this._scriptMapping);
+
for (var decoration of uiSourceCode.allDecorations()) {
var range = decoration.range();
var startLocation = formatterMapping.originalToFormatted(range.startLine, range.startColumn);
« no previous file with comments | « third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-3.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698