| Index: third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js b/third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js
|
| index d062c3a3cbb82c7a31870a163a084e5a078cd4da..f6238b9cac84c56e1748560885695c0497f6343c 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/workspace_diff/WorkspaceDiff.js
|
| @@ -3,10 +3,28 @@
|
| // found in the LICENSE file.
|
|
|
|
|
| -WorkspaceDiff.WorkspaceDiff = class {
|
| - constructor() {
|
| +WorkspaceDiff.WorkspaceDiff = class extends Common.Object {
|
| + /**
|
| + * @param {!Workspace.Workspace} workspace
|
| + */
|
| + constructor(workspace) {
|
| + super();
|
| + this._workspace = workspace;
|
| /** @type {!WeakMap<!Workspace.UISourceCode, !WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff>} */
|
| this._uiSourceCodeDiffs = new WeakMap();
|
| +
|
| + /** @type {!Map<!Workspace.UISourceCode, number>} */
|
| + this._loadingUISourceCodes = new Map();
|
| + this._loadingUISourceCodesId = 0;
|
| +
|
| + /** @type {!Set<!Workspace.UISourceCode>} */
|
| + this._modifiedUISourceCodes = new Set();
|
| + this._workspace.addEventListener(Workspace.Workspace.Events.WorkingCopyChanged, this._uiSourceCodeChanged, this);
|
| + this._workspace.addEventListener(Workspace.Workspace.Events.WorkingCopyCommitted, this._uiSourceCodeChanged, this);
|
| + this._workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAdded, this);
|
| + this._workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved, this._uiSourceCodeRemoved, this);
|
| + this._workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved, this._projectRemoved, this);
|
| + this._workspace.uiSourceCodes().forEach(this._refreshUISourceCode.bind(this));
|
| }
|
|
|
| /**
|
| @@ -36,6 +54,13 @@ WorkspaceDiff.WorkspaceDiff = class {
|
| }
|
|
|
| /**
|
| + * @return {!Array<!Workspace.UISourceCode>}
|
| + */
|
| + modifiedUISourceCodes() {
|
| + return Array.from(this._modifiedUISourceCodes);
|
| + }
|
| +
|
| + /**
|
| * @param {!Workspace.UISourceCode} uiSourceCode
|
| * @return {!WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff}
|
| */
|
| @@ -44,6 +69,91 @@ WorkspaceDiff.WorkspaceDiff = class {
|
| this._uiSourceCodeDiffs.set(uiSourceCode, new WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff(uiSourceCode));
|
| return this._uiSourceCodeDiffs.get(uiSourceCode);
|
| }
|
| +
|
| + /**
|
| + * @param {!Common.Event} event
|
| + */
|
| + _uiSourceCodeChanged(event) {
|
| + var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data.uiSourceCode);
|
| + this._refreshUISourceCode(uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Common.Event} event
|
| + */
|
| + _uiSourceCodeAdded(event) {
|
| + var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data);
|
| + this._refreshUISourceCode(uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Common.Event} event
|
| + */
|
| + _uiSourceCodeRemoved(event) {
|
| + var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data);
|
| + this._markAsUnmodified(uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Common.Event} event
|
| + */
|
| + _projectRemoved(event) {
|
| + var project = /** @type {!Workspace.Project} */ (event.data);
|
| + for (var uiSourceCode of project.uiSourceCodes())
|
| + this._markAsUnmodified(uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Workspace.UISourceCode} uiSourceCode
|
| + */
|
| + _markAsUnmodified(uiSourceCode) {
|
| + this._loadingUISourceCodes.delete(uiSourceCode);
|
| + if (this._modifiedUISourceCodes.delete(uiSourceCode))
|
| + this.emit(new WorkspaceDiff.UnmodifiedEvent(uiSourceCode));
|
| + }
|
| +
|
| + /**
|
| + * @param {!Workspace.UISourceCode} uiSourceCode
|
| + */
|
| + _markAsModified(uiSourceCode) {
|
| + this._loadingUISourceCodes.delete(uiSourceCode);
|
| + if (this._modifiedUISourceCodes.has(uiSourceCode))
|
| + return;
|
| + this._modifiedUISourceCodes.add(uiSourceCode);
|
| + this.emit(new WorkspaceDiff.ModifiedEvent(uiSourceCode));
|
| + }
|
| +
|
| + /**
|
| + * @param {!Workspace.UISourceCode} uiSourceCode
|
| + */
|
| + async _refreshUISourceCode(uiSourceCode) {
|
| + if (uiSourceCode.project().type() !== Workspace.projectTypes.Network) {
|
| + this._markAsUnmodified(uiSourceCode);
|
| + return;
|
| + }
|
| + if (uiSourceCode.isDirty()) {
|
| + this._markAsModified(uiSourceCode);
|
| + return;
|
| + }
|
| + if (!uiSourceCode.history().length) {
|
| + this._markAsUnmodified(uiSourceCode);
|
| + return;
|
| + }
|
| +
|
| + var id = this._loadingUISourceCodesId++;
|
| + this._loadingUISourceCodes.set(uiSourceCode, id);
|
| + var originalContent = await uiSourceCode.requestOriginalContent();
|
| + if (this._loadingUISourceCodes.get(uiSourceCode) !== id)
|
| + return;
|
| + var content = await uiSourceCode.requestContent();
|
| + if (this._loadingUISourceCodes.get(uiSourceCode) !== id)
|
| + return;
|
| +
|
| + if (content !== null && originalContent !== null && content !== originalContent)
|
| + this._markAsModified(uiSourceCode);
|
| + else
|
| + this._markAsUnmodified(uiSourceCode);
|
| + }
|
| };
|
|
|
| WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff = class extends Common.Object {
|
| @@ -108,11 +218,35 @@ WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff = class extends Common.Object {
|
| WorkspaceDiff.DiffChangedEvent = class {};
|
|
|
| /**
|
| + * @implements {Common.Emittable}
|
| + */
|
| +WorkspaceDiff.UnmodifiedEvent = class {
|
| + /**
|
| + * @param {!Workspace.UISourceCode} uiSourceCode
|
| + */
|
| + constructor(uiSourceCode) {
|
| + this.uiSourceCode = uiSourceCode;
|
| + }
|
| +};
|
| +
|
| +/**
|
| + * @implements {Common.Emittable}
|
| + */
|
| +WorkspaceDiff.ModifiedEvent = class {
|
| + /**
|
| + * @param {!Workspace.UISourceCode} uiSourceCode
|
| + */
|
| + constructor(uiSourceCode) {
|
| + this.uiSourceCode = uiSourceCode;
|
| + }
|
| +};
|
| +
|
| +/**
|
| * @return {!WorkspaceDiff.WorkspaceDiff}
|
| */
|
| WorkspaceDiff.workspaceDiff = function() {
|
| if (!WorkspaceDiff.WorkspaceDiff._instance)
|
| - WorkspaceDiff.WorkspaceDiff._instance = new WorkspaceDiff.WorkspaceDiff();
|
| + WorkspaceDiff.WorkspaceDiff._instance = new WorkspaceDiff.WorkspaceDiff(Workspace.workspace);
|
| return WorkspaceDiff.WorkspaceDiff._instance;
|
| };
|
|
|
|
|