| Index: Source/devtools/front_end/CSSStyleModel.js
|
| diff --git a/Source/devtools/front_end/CSSStyleModel.js b/Source/devtools/front_end/CSSStyleModel.js
|
| index 125a46d9a68eabf66642f68a9e3831f48c6d62cb..03d05612ddf0d2018805c2fe4072178564b55e2a 100644
|
| --- a/Source/devtools/front_end/CSSStyleModel.js
|
| +++ b/Source/devtools/front_end/CSSStyleModel.js
|
| @@ -73,7 +73,9 @@ WebInspector.CSSStyleModel.parseRuleMatchArrayPayload = function(matchArray)
|
| }
|
|
|
| WebInspector.CSSStyleModel.Events = {
|
| + StyleSheetAdded: "StyleSheetAdded",
|
| StyleSheetChanged: "StyleSheetChanged",
|
| + StyleSheetRemoved: "StyleSheetRemoved",
|
| MediaQueryResultChanged: "MediaQueryResultChanged",
|
| NamedFlowCreated: "NamedFlowCreated",
|
| NamedFlowRemoved: "NamedFlowRemoved",
|
| @@ -358,6 +360,14 @@ WebInspector.CSSStyleModel.prototype = {
|
| },
|
|
|
| /**
|
| + * @return {Array.<CSSAgent.CSSStyleSheetHeader>}
|
| + */
|
| + styleSheetHeaders: function()
|
| + {
|
| + return Object.values(this._resourceBinding._styleSheetIdToHeader);
|
| + },
|
| +
|
| + /**
|
| * @param {DOMAgent.NodeId} nodeId
|
| */
|
| _ownerDocumentId: function(nodeId)
|
| @@ -384,6 +394,20 @@ WebInspector.CSSStyleModel.prototype = {
|
| this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.StyleSheetChanged, { styleSheetId: styleSheetId, majorChange: majorChange });
|
| },
|
|
|
| + _styleSheetAdded: function(header)
|
| + {
|
| + this._resourceBinding._setHeaderForStyleSheetId(header.styleSheetId, header);
|
| + this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.StyleSheetAdded, header);
|
| + },
|
| +
|
| + _styleSheetRemoved: function(id)
|
| + {
|
| + var header = this._resourceBinding._styleSheetIdToHeader[id];
|
| + console.assert(header);
|
| + this._resourceBinding._setHeaderForStyleSheetId(id, null);
|
| + this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.StyleSheetRemoved, header);
|
| + },
|
| +
|
| /**
|
| * @param {CSSAgent.NamedFlow} namedFlowPayload
|
| */
|
| @@ -462,15 +486,13 @@ WebInspector.CSSStyleModel.prototype = {
|
|
|
| /**
|
| * @param {WebInspector.CSSRule} rule
|
| - * @param {function(?WebInspector.Resource)} callback
|
| + * @return {?WebInspector.Resource}
|
| */
|
| - getViaInspectorResourceForRule: function(rule, callback)
|
| + viaInspectorResourceForRule: function(rule)
|
| {
|
| - if (!rule.id) {
|
| - callback(null);
|
| - return;
|
| - }
|
| - this._resourceBinding._requestViaInspectorResource(rule.id.styleSheetId, callback);
|
| + if (!rule.id)
|
| + return null;
|
| + return this._resourceBinding._inspectorResource(rule.id.styleSheetId);
|
| },
|
|
|
| /**
|
| @@ -1258,136 +1280,80 @@ WebInspector.CSSStyleModelResourceBinding = function()
|
|
|
| WebInspector.CSSStyleModelResourceBinding.prototype = {
|
| /**
|
| - * @param {WebInspector.Resource} resource
|
| - * @param {function(?CSSAgent.StyleSheetId)} callback
|
| + * @param {CSSAgent.StyleSheetId} styleSheetId
|
| + * @param {CSSAgent.CSSStyleSheetHeader} header
|
| */
|
| - requestStyleSheetIdForResource: function(resource, callback)
|
| + _setHeaderForStyleSheetId: function(styleSheetId, header)
|
| {
|
| - function innerCallback()
|
| - {
|
| - callback(this._styleSheetIdForResource(resource));
|
| + var oldHeader = this._styleSheetIdToHeader[styleSheetId];
|
| + if (oldHeader) {
|
| + delete this._styleSheetIdToHeader[styleSheetId];
|
| + delete this._frameAndURLToStyleSheetId[this._headerKey(oldHeader)];
|
| + }
|
| + if (header) {
|
| + this._styleSheetIdToHeader[styleSheetId] = header;
|
| + if (header.origin === "inspector")
|
| + this._createInspectorResource(header);
|
| + else
|
| + this._frameAndURLToStyleSheetId[this._headerKey(header)] = header.styleSheetId;
|
| }
|
| -
|
| - if (this._styleSheetIdForResource(resource))
|
| - innerCallback.call(this);
|
| - else
|
| - this._loadStyleSheetHeaders(innerCallback.bind(this));
|
| },
|
|
|
| /**
|
| * @param {CSSAgent.StyleSheetId} styleSheetId
|
| - * @param {function(?string)} callback
|
| + * @return {?string}
|
| */
|
| - requestResourceURLForStyleSheetId: function(styleSheetId, callback)
|
| + resourceURLForStyleSheetId: function(styleSheetId)
|
| {
|
| - function innerCallback()
|
| - {
|
| - var header = this._styleSheetIdToHeader[styleSheetId];
|
| - if (!header) {
|
| - callback(null);
|
| - return;
|
| - }
|
| + var header = this._styleSheetIdToHeader[styleSheetId];
|
| + if (!header)
|
| + return null;
|
|
|
| - var frame = WebInspector.resourceTreeModel.frameForId(header.frameId);
|
| - if (!frame) {
|
| - callback(null);
|
| - return;
|
| - }
|
| + var frame = WebInspector.resourceTreeModel.frameForId(header.frameId);
|
| + if (!frame)
|
| + return null;
|
|
|
| - var styleSheetURL = header.origin === "inspector" ? this._viaInspectorResourceURL(header.sourceURL) : header.sourceURL;
|
| - callback(styleSheetURL);
|
| - }
|
| -
|
| - if (this._styleSheetIdToHeader[styleSheetId])
|
| - innerCallback.call(this);
|
| - else
|
| - this._loadStyleSheetHeaders(innerCallback.bind(this));
|
| + var styleSheetURL = header.origin === "inspector" ? this._viaInspectorResourceURL(header.sourceURL) : header.sourceURL;
|
| + return styleSheetURL;
|
| },
|
|
|
| /**
|
| * @param {WebInspector.Resource} resource
|
| - * @return {CSSAgent.StyleSheetId}
|
| + * @return {CSSAgent.StyleSheetId|undefined}
|
| */
|
| - _styleSheetIdForResource: function(resource)
|
| + styleSheetIdForResource: function(resource)
|
| {
|
| return this._frameAndURLToStyleSheetId[resource.frameId + ":" + resource.url];
|
| },
|
|
|
| /**
|
| - * @param {function(?string)} callback
|
| - */
|
| - _loadStyleSheetHeaders: function(callback)
|
| - {
|
| - /**
|
| - * @param {?string} error
|
| - * @param {Array.<CSSAgent.CSSStyleSheetHeader>} infos
|
| - */
|
| - function didGetAllStyleSheets(error, infos)
|
| - {
|
| - if (error) {
|
| - callback(error);
|
| - return;
|
| - }
|
| -
|
| - for (var i = 0; i < infos.length; ++i) {
|
| - var info = infos[i];
|
| - if (info.origin === "inspector") {
|
| - this._getOrCreateInspectorResource(info);
|
| - continue;
|
| - }
|
| - this._frameAndURLToStyleSheetId[info.frameId + ":" + info.sourceURL] = info.styleSheetId;
|
| - this._styleSheetIdToHeader[info.styleSheetId] = info;
|
| - }
|
| - callback(null);
|
| - }
|
| - CSSAgent.getAllStyleSheets(didGetAllStyleSheets.bind(this));
|
| - },
|
| -
|
| - /**
|
| - * @param {CSSAgent.StyleSheetId} styleSheetId
|
| - * @param {function(?WebInspector.Resource)} callback
|
| + * @param {!CSSAgent.CSSStyleSheetHeader} header
|
| + * @return {string}
|
| */
|
| - _requestViaInspectorResource: function(styleSheetId, callback)
|
| + _headerKey: function(header)
|
| {
|
| - var header = this._styleSheetIdToHeader[styleSheetId];
|
| - if (header) {
|
| - callback(this._getOrCreateInspectorResource(header));
|
| - return;
|
| - }
|
| -
|
| - function headersLoaded()
|
| - {
|
| - var header = this._styleSheetIdToHeader[styleSheetId];
|
| - if (header)
|
| - callback(this._getOrCreateInspectorResource(header));
|
| - else
|
| - callback(null);
|
| - }
|
| - this._loadStyleSheetHeaders(headersLoaded.bind(this));
|
| + return header.frameId + ":" + (header.origin === "inspector" ? this._viaInspectorResourceURL(header.sourceURL) : header.sourceURL);
|
| },
|
|
|
| /**
|
| * @param {CSSAgent.CSSStyleSheetHeader} header
|
| - * @return {?WebInspector.Resource}
|
| */
|
| - _getOrCreateInspectorResource: function(header)
|
| + _createInspectorResource: function(header)
|
| {
|
| var frame = WebInspector.resourceTreeModel.frameForId(header.frameId);
|
| if (!frame)
|
| - return null;
|
| + return;
|
|
|
| var viaInspectorURL = this._viaInspectorResourceURL(header.sourceURL);
|
| - var inspectorResource = frame.resourceForURL(viaInspectorURL);
|
| - if (inspectorResource)
|
| - return inspectorResource;
|
| + console.assert(!frame.resourceForURL(viaInspectorURL));
|
|
|
| var resource = frame.resourceForURL(header.sourceURL);
|
| if (!resource)
|
| - return null;
|
| + return;
|
| +
|
| + this._frameAndURLToStyleSheetId[this._headerKey(header)] = header.styleSheetId;
|
| + var inspectorResource = new WebInspector.Resource(null, viaInspectorURL, resource.documentURL, resource.frameId, resource.loaderId, WebInspector.resourceTypes.Stylesheet, "text/css", true);
|
|
|
| - this._frameAndURLToStyleSheetId[header.frameId + ":" + viaInspectorURL] = header.styleSheetId;
|
| - this._styleSheetIdToHeader[header.styleSheetId] = header;
|
| - inspectorResource = new WebInspector.Resource(null, viaInspectorURL, resource.documentURL, resource.frameId, resource.loaderId, WebInspector.resourceTypes.Stylesheet, "text/css", true);
|
| /**
|
| * @param {function(?string, boolean, string)} callback
|
| */
|
| @@ -1401,7 +1367,23 @@ WebInspector.CSSStyleModelResourceBinding.prototype = {
|
| }
|
| inspectorResource.requestContent = overrideRequestContent;
|
| frame.addResource(inspectorResource);
|
| - return inspectorResource;
|
| + },
|
| +
|
| + /**
|
| + * @param {CSSAgent.StyleSheetId} styleSheetId
|
| + * @return {?WebInspector.Resource}
|
| + */
|
| + _inspectorResource: function(styleSheetId)
|
| + {
|
| + var header = this._styleSheetIdToHeader[styleSheetId];
|
| + if (!header)
|
| + return null;
|
| + var frame = WebInspector.resourceTreeModel.frameForId(header.frameId);
|
| + if (!frame)
|
| + return null;
|
| +
|
| + var viaInspectorURL = this._viaInspectorResourceURL(header.sourceURL);
|
| + return frame.resourceForURL(viaInspectorURL);
|
| },
|
|
|
| /**
|
| @@ -1421,7 +1403,9 @@ WebInspector.CSSStyleModelResourceBinding.prototype = {
|
| _reset: function()
|
| {
|
| // Main frame navigation - clear history.
|
| + /** @type {!Object.<string, !CSSAgent.StyleSheetId>} */
|
| this._frameAndURLToStyleSheetId = {};
|
| + /** @type {!Object.<CSSAgent.StyleSheetId, !CSSAgent.CSSStyleSheetHeader>} */
|
| this._styleSheetIdToHeader = {};
|
| }
|
| }
|
| @@ -1451,6 +1435,22 @@ WebInspector.CSSDispatcher.prototype = {
|
| },
|
|
|
| /**
|
| + * @param {CSSAgent.CSSStyleSheetHeader} header
|
| + */
|
| + styleSheetAdded: function(header)
|
| + {
|
| + this._cssModel._styleSheetAdded(header);
|
| + },
|
| +
|
| + /**
|
| + * @param {CSSAgent.StyleSheetId} id
|
| + */
|
| + styleSheetRemoved: function(id)
|
| + {
|
| + this._cssModel._styleSheetRemoved(id);
|
| + },
|
| +
|
| + /**
|
| * @param {CSSAgent.NamedFlow} namedFlowPayload
|
| */
|
| namedFlowCreated: function(namedFlowPayload)
|
|
|