| Index: third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js
|
| index a919dfa91f1dc99e74f358fedfd9cbfcb02e433e..fe993b267d1e3697daffaa49a05240f3ead32494 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js
|
| @@ -47,6 +47,9 @@ WebInspector.CSSModel = function(target)
|
| /** @type {!Map.<string, !Object.<!PageAgent.FrameId, !Array.<!CSSAgent.StyleSheetId>>>} */
|
| this._styleSheetIdsForURL = new Map();
|
|
|
| + /** @type {!Map.<!WebInspector.CSSStyleSheetHeader, !Promise<string>>} */
|
| + this._originalStyleSheetText = new Map();
|
| +
|
| /** @type {!Multimap<string, !CSSAgent.StyleSheetId>} */
|
| this._sourceMapLoadingStyleSheetsIds = new Multimap();
|
|
|
| @@ -385,15 +388,18 @@ WebInspector.CSSModel.prototype = {
|
|
|
| console.assert(styleSheetIds.length === ranges.length && ranges.length === texts.length, "Array lengths must be equal");
|
| var edits = [];
|
| + var ensureContentPromises = [];
|
| for (var i = 0; i < styleSheetIds.length; ++i) {
|
| edits.push({
|
| styleSheetId: styleSheetIds[i],
|
| range: ranges[i].serializeToObject(),
|
| text: texts[i]
|
| });
|
| + ensureContentPromises.push(this._ensureOriginalStyleSheetText(styleSheetIds[i]));
|
| }
|
|
|
| - return this._agent.setStyleTexts(edits, parsePayload.bind(this))
|
| + return Promise.all(ensureContentPromises)
|
| + .then(() => this._agent.setStyleTexts(edits, parsePayload.bind(this)))
|
| .catchException(false);
|
| },
|
|
|
| @@ -422,7 +428,8 @@ WebInspector.CSSModel.prototype = {
|
| }
|
|
|
| WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.StyleRuleEdited);
|
| - return this._agent.setRuleSelector(styleSheetId, range, text, callback.bind(this))
|
| + return this._ensureOriginalStyleSheetText(styleSheetId)
|
| + .then(() => this._agent.setRuleSelector(styleSheetId, range, text, callback.bind(this)))
|
| .catchException(false);
|
| },
|
|
|
| @@ -451,7 +458,8 @@ WebInspector.CSSModel.prototype = {
|
| }
|
|
|
| WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.StyleRuleEdited);
|
| - return this._agent.setKeyframeKey(styleSheetId, range, text, callback.bind(this))
|
| + return this._ensureOriginalStyleSheetText(styleSheetId)
|
| + .then(() => this._agent.setKeyframeKey(styleSheetId, range, text, callback.bind(this)))
|
| .catchException(false);
|
| },
|
|
|
| @@ -684,7 +692,8 @@ WebInspector.CSSModel.prototype = {
|
| }
|
|
|
| WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.StyleRuleEdited);
|
| - return this._agent.setMediaText(styleSheetId, range, newMediaText, parsePayload.bind(this))
|
| + return this._ensureOriginalStyleSheetText(styleSheetId)
|
| + .then(() => this._agent.setMediaText(styleSheetId, range, newMediaText, parsePayload.bind(this)))
|
| .catchException(false);
|
| },
|
|
|
| @@ -696,7 +705,8 @@ WebInspector.CSSModel.prototype = {
|
| */
|
| addRule: function(styleSheetId, ruleText, ruleLocation)
|
| {
|
| - return this._agent.addRule(styleSheetId, ruleText, ruleLocation, parsePayload.bind(this))
|
| + return this._ensureOriginalStyleSheetText(styleSheetId)
|
| + .then(() => this._agent.addRule(styleSheetId, ruleText, ruleLocation, parsePayload.bind(this)))
|
| .catchException(/** @type {?WebInspector.CSSStyleRule} */(null))
|
|
|
| /**
|
| @@ -792,6 +802,32 @@ WebInspector.CSSModel.prototype = {
|
| },
|
|
|
| /**
|
| + * @param {!CSSAgent.StyleSheetId} styleSheetId
|
| + * @return {!Promise<string>}
|
| + */
|
| + _ensureOriginalStyleSheetText: function(styleSheetId)
|
| + {
|
| + var header = this.styleSheetHeaderForId(styleSheetId);
|
| + if (!header)
|
| + return Promise.resolve("");
|
| + var promise = this._originalStyleSheetText.get(header);
|
| + if (!promise) {
|
| + promise = this.getStyleSheetText(header.id);
|
| + this._originalStyleSheetText.set(header, promise);
|
| + }
|
| + return promise;
|
| + },
|
| +
|
| + /**
|
| + * @param {!WebInspector.CSSStyleSheetHeader} header
|
| + * @return {!Promise<string>}
|
| + */
|
| + originalStyleSheetText: function(header)
|
| + {
|
| + return this._ensureOriginalStyleSheetText(header.id);
|
| + },
|
| +
|
| + /**
|
| * @param {!CSSAgent.CSSStyleSheetHeader} header
|
| */
|
| _styleSheetAdded: function(header)
|
| @@ -832,6 +868,7 @@ WebInspector.CSSModel.prototype = {
|
| if (!Object.keys(frameIdToStyleSheetIds).length)
|
| this._styleSheetIdsForURL.remove(url);
|
| }
|
| + this._originalStyleSheetText.remove(header);
|
| this._detachSourceMap(header);
|
| this.dispatchEventToListeners(WebInspector.CSSModel.Events.StyleSheetRemoved, header);
|
| },
|
| @@ -865,7 +902,8 @@ WebInspector.CSSModel.prototype = {
|
| newText = WebInspector.CSSModel.trimSourceURL(newText);
|
| if (header.hasSourceURL)
|
| newText += "\n/*# sourceURL=" + header.sourceURL + " */";
|
| - return this._agent.setStyleSheetText(header.id, newText, callback.bind(this));
|
| + return this._ensureOriginalStyleSheetText(styleSheetId)
|
| + .then(() => this._agent.setStyleSheetText(header.id, newText, callback.bind(this)));
|
|
|
| /**
|
| * @param {?Protocol.Error} error
|
|
|