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 13c1d7b3b4628e673d1a1f6205e6d0315144393f..9698bdb413fe040fef6d3d18c43563e90b7d0909 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(); |
@@ -91,6 +94,22 @@ SDK.CSSModel = class extends SDK.SDKModel { |
} |
/** |
+ * @param {string} headerId |
+ * @param {function(!SDK.CSSStyleSheetHeader)} callback |
+ */ |
+ subscribeToStyleSheetChanged(headerId, callback) { |
dgozman
2017/05/17 16:46:20
Why subscribe here and not route through StyleSour
lushnikov
2017/05/20 01:24:18
Subscribe/unsubscribe is a natural API to get upda
|
+ this._styleSheetChangeSubscribers.set(headerId, callback); |
+ } |
+ |
+ /** |
+ * @param {string} headerId |
+ * @param {function(!SDK.CSSStyleSheetHeader)} callback |
+ */ |
+ unsubscribeFromStyleSheetChanged(headerId, callback) { |
+ this._styleSheetChangeSubscribers.remove(headerId, callback); |
+ } |
+ |
+ /** |
* @return {!SDK.DOMModel} |
*/ |
domModel() { |
@@ -636,6 +655,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}); |
} |
@@ -700,6 +725,7 @@ SDK.CSSModel = class extends SDK.SDKModel { |
if (!header) |
return; |
this._styleSheetIdToHeader.remove(id); |
+ this._styleSheetChangeSubscribers.removeAll(id); |
var url = header.resourceURL(); |
var frameIdToStyleSheetIds = /** @type {!Object.<!Protocol.Page.FrameId, !Array.<!Protocol.CSS.StyleSheetId>>} */ ( |
this._styleSheetIdsForURL.get(url)); |