Index: third_party/WebKit/Source/devtools/front_end/workspace/UISourceCode.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/workspace/UISourceCode.js b/third_party/WebKit/Source/devtools/front_end/workspace/UISourceCode.js |
index 89debaacb3f7e60ba79f9fb36d7a9df5a93c7f85..e535581587b9244229274af30104a06f603a2453 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/workspace/UISourceCode.js |
+++ b/third_party/WebKit/Source/devtools/front_end/workspace/UISourceCode.js |
@@ -48,8 +48,10 @@ WebInspector.UISourceCode = function(project, url, contentType) |
this._name = pathComponents[pathComponents.length - 1]; |
this._contentType = contentType; |
- /** @type {!Array.<function(?string)>} */ |
- this._requestContentCallbacks = []; |
+ /** @type {?function(?string)} */ |
+ this._requestContentCallback = null; |
+ /** @type {?Promise<?string>} */ |
+ this._requestContentPromise = null; |
/** @type {!Array.<!WebInspector.Revision>} */ |
this.history = []; |
@@ -222,25 +224,19 @@ WebInspector.UISourceCode.prototype = { |
/** |
* @override |
- * @param {function(?string)} callback |
+ * @return {!Promise<?string>} |
*/ |
- requestContent: function(callback) |
+ requestContent: function() |
{ |
- if (this._content || this._contentLoaded) { |
- callback(this._content); |
- return; |
- } |
- this._requestContentCallbacks.push(callback); |
- if (this._requestContentCallbacks.length === 1) |
+ if (this._content || this._contentLoaded) |
pfeldman
2016/01/20 19:23:51
return this._requestContentPromise if we have one.
lushnikov
2016/01/20 23:35:58
Acknowledged.
|
+ return Promise.resolve(this._content); |
+ var promise = this._requestContentPromise; |
+ if (!promise) { |
+ promise = new Promise(fulfill => this._requestContentCallback = fulfill); |
+ this._requestContentPromise = promise; |
this._project.requestFileContent(this, this._fireContentAvailable.bind(this)); |
- }, |
- |
- /** |
- * @return {!Promise.<?string>} |
- */ |
- requestContentPromise: function() |
- { |
- return new Promise(succ => this.requestContent(succ)); |
+ } |
+ return promise; |
}, |
/** |
@@ -332,11 +328,14 @@ WebInspector.UISourceCode.prototype = { |
}, |
/** |
- * @param {function(?string)} callback |
+ * @return {!Promise<?string>} |
*/ |
- requestOriginalContent: function(callback) |
+ requestOriginalContent: function() |
{ |
+ var callback; |
+ var promise = new Promise(fulfill => callback = fulfill); |
this._project.requestFileContent(this, callback); |
+ return promise; |
}, |
/** |
@@ -415,6 +414,9 @@ WebInspector.UISourceCode.prototype = { |
this._commitContent(content); |
}, |
+ /** |
+ * @return {!Promise} |
+ */ |
revertToOriginal: function() |
{ |
/** |
@@ -430,7 +432,7 @@ WebInspector.UISourceCode.prototype = { |
} |
WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.RevisionApplied); |
- this.requestOriginalContent(callback.bind(this)); |
+ return this.requestOriginalContent().then(callback.bind(this)); |
}, |
/** |
@@ -453,7 +455,7 @@ WebInspector.UISourceCode.prototype = { |
} |
WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.RevisionApplied); |
- this.requestOriginalContent(revert.bind(this)); |
+ this.requestOriginalContent().then(revert.bind(this)); |
}, |
/** |
@@ -564,10 +566,11 @@ WebInspector.UISourceCode.prototype = { |
this._contentLoaded = true; |
this._content = content; |
- var callbacks = this._requestContentCallbacks.slice(); |
- this._requestContentCallbacks = []; |
- for (var i = 0; i < callbacks.length; ++i) |
- callbacks[i](content); |
+ var callback = this._requestContentCallback; |
+ this._requestContentCallback = null; |
+ this._requestContentPromise = null; |
+ |
+ callback.call(null, content); |
}, |
/** |
@@ -725,19 +728,22 @@ WebInspector.Revision.prototype = { |
return this._content || null; |
}, |
+ /** |
+ * @return {!Promise} |
+ */ |
revertToThis: function() |
{ |
/** |
- * @param {string} content |
+ * @param {?string} content |
* @this {WebInspector.Revision} |
*/ |
function revert(content) |
{ |
- if (this._uiSourceCode._content !== content) |
+ if (content && this._uiSourceCode._content !== content) |
this._uiSourceCode.addRevision(content); |
} |
WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.RevisionApplied); |
- this.requestContent(revert.bind(this)); |
+ return this.requestContent().then(revert.bind(this)); |
}, |
/** |
@@ -760,11 +766,11 @@ WebInspector.Revision.prototype = { |
/** |
* @override |
- * @param {function(string)} callback |
+ * @return {!Promise<?string>} |
*/ |
- requestContent: function(callback) |
+ requestContent: function() |
{ |
- callback(this._content || ""); |
+ return Promise.resolve(/** @type {?string} */(this._content || "")); |
}, |
/** |