Chromium Code Reviews| 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..f0079197d313ad8741fc002ee2f66086c1a8ceeb 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,26 @@ |
| // 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 {!Set<!Workspace.UISourceCode>} */ |
| + this._loadingUISourceCodes = new Set(); |
| + this._modifiedUISourceCodes = new Set(); |
| + this._workspace.addEventListener(Workspace.Workspace.Events.WorkingCopyChanged, this._uiSourceCodeChanged, this), |
|
luoe
2017/03/23 02:03:16
nit: should end w/ a ;
einbinder
2017/03/23 04:32:48
Done.
|
| + 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); |
| } |
| /** |
| @@ -36,6 +52,13 @@ WorkspaceDiff.WorkspaceDiff = class { |
| } |
| /** |
| + * @return {!Array<!Workspace.UISourceCode>} |
| + */ |
| + modifiedUISourceCodes() { |
| + return Array.from(this._modifiedUISourceCodes); |
| + } |
| + |
| + /** |
| * @param {!Workspace.UISourceCode} uiSourceCode |
| * @return {!WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff} |
| */ |
| @@ -44,6 +67,90 @@ 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._removeUISourceCode(uiSourceCode); |
| + } |
| + |
| + /** |
| + * @param {!Common.Event} event |
| + */ |
| + _projectRemoved(event) { |
| + var project = /** @type {!Workspace.Project} */ (event.data); |
| + for (var uiSourceCode of project.uiSourceCodes()) |
| + this._removeUISourceCode(uiSourceCode); |
| + } |
| + |
| + /** |
| + * @param {!Workspace.UISourceCode} uiSourceCode |
| + */ |
| + _removeUISourceCode(uiSourceCode) { |
| + this._loadingUISourceCodes.delete(uiSourceCode); |
| + if (this._modifiedUISourceCodes.delete(uiSourceCode)) |
| + this.emit(new WorkspaceDiff.UnmodifiedEvent(uiSourceCode)); |
| + } |
| + |
| + /** |
| + * @param {!Workspace.UISourceCode} uiSourceCode |
| + */ |
| + _addUISourceCode(uiSourceCode) { |
|
luoe
2017/03/23 02:03:16
Perhaps 'mark' instead of 'add'?
einbinder
2017/03/23 04:32:48
Done.
|
| + 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._removeUISourceCode(uiSourceCode); |
| + return; |
| + } |
| + if (uiSourceCode.isDirty()) { |
| + this._addUISourceCode(uiSourceCode); |
| + return; |
| + } |
| + if (!uiSourceCode.history().length) { |
| + this._removeUISourceCode(uiSourceCode); |
| + return; |
| + } |
| + |
| + this._loadingUISourceCodes.add(uiSourceCode); |
|
luoe
2017/03/23 02:03:16
Might it be possible for this case?
First request
|
| + var originalContent = await uiSourceCode.requestOriginalContent(); |
| + if (!this._loadingUISourceCodes.has(uiSourceCode)) |
| + return; |
| + var content = await uiSourceCode.requestContent(); |
| + if (!this._loadingUISourceCodes.has(uiSourceCode)) |
| + return; |
| + |
| + if (content !== null && content !== originalContent) |
|
luoe
2017/03/23 02:03:16
joel: and originalContent !== null
einbinder
2017/03/23 04:32:48
Done.
|
| + this._addUISourceCode(uiSourceCode); |
| + else |
| + this._removeUISourceCode(uiSourceCode); |
| + } |
| }; |
| WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff = class extends Common.Object { |
| @@ -108,11 +215,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; |
| }; |