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 8f0d1aa35008ab94881a9e607c4582686bde2f5b..360e60b8bd003cb89dfe2f4f03f8016281bff88c 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js |
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js |
@@ -54,6 +54,9 @@ SDK.CSSModel = class extends SDK.SDKModel { |
/** @type {!Map.<string, !Object.<!Protocol.Page.FrameId, !Array.<!Protocol.CSS.StyleSheetId>>>} */ |
this._styleSheetIdsForURL = new Map(); |
+ /** @type {!Multimap<string, function(!SDK.CSSStyleSheetHeader)>} */ |
+ this._styleSheetChangeSubscribers = new Multimap(); |
+ |
/** @type {!Map.<!SDK.CSSStyleSheetHeader, !Promise<?string>>} */ |
this._originalStyleSheetText = new Map(); |
@@ -90,6 +93,22 @@ SDK.CSSModel = class extends SDK.SDKModel { |
return text.substr(0, sourceURLLineIndex) + text.substr(sourceURLLineIndex + sourceURLLine.length + 1); |
} |
+ /** |
+ * @param {string} headerId |
+ * @param {function(!SDK.CSSStyleSheetHeader)} callback |
+ */ |
+ subscribeToStyleSheetChanged(headerId, callback) { |
+ this._styleSheetChangeSubscribers.set(headerId, callback); |
+ } |
+ |
+ /** |
+ * @param {string} headerId |
+ * @param {function(!SDK.CSSStyleSheetHeader)} callback |
+ */ |
+ unsubscribeFromStyleSheetChanged(headerId, callback) { |
+ this._styleSheetChangeSubscribers.delete(headerId, callback); |
+ } |
+ |
/** |
* @return {!SDK.DOMModel} |
*/ |
@@ -545,6 +564,12 @@ SDK.CSSModel = class extends SDK.SDKModel { |
* @param {!SDK.CSSModel.Edit=} edit |
*/ |
_fireStyleSheetChanged(styleSheetId, edit) { |
+ if (this._styleSheetChangeSubscribers.has(styleSheetId)) { |
+ var header = this._styleSheetIdToHeader.get(styleSheetId); |
+ var subscribers = Array.from(this._styleSheetChangeSubscribers.get(styleSheetId)); |
+ if (header && subscribers) |
+ subscribers.forEach(subscriber => subscriber.call(null, header)); |
+ } |
this.dispatchEventToListeners(SDK.CSSModel.Events.StyleSheetChanged, {styleSheetId: styleSheetId, edit: edit}); |
} |
@@ -609,6 +634,7 @@ SDK.CSSModel = class extends SDK.SDKModel { |
if (!header) |
return; |
this._styleSheetIdToHeader.remove(id); |
+ this._styleSheetChangeSubscribers.deleteAll(id); |
var url = header.resourceURL(); |
var frameIdToStyleSheetIds = /** @type {!Object.<!Protocol.Page.FrameId, !Array.<!Protocol.CSS.StyleSheetId>>} */ ( |
this._styleSheetIdsForURL.get(url)); |