Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(335)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/sdk/CSSStyleModel.js

Issue 1430123003: DevTools: kill WebInspector.SectionCascade class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new-rule-out-of-cascade
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/elements/module.json ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 * @param {!Array.<!CSSAgent.PseudoElementMatches>=} pseudoPayload 133 * @param {!Array.<!CSSAgent.PseudoElementMatches>=} pseudoPayload
134 * @param {!Array.<!CSSAgent.InheritedStyleEntry>=} inheritedPayload 134 * @param {!Array.<!CSSAgent.InheritedStyleEntry>=} inheritedPayload
135 * @return {?WebInspector.CSSStyleModel.MatchedStyleResult} 135 * @return {?WebInspector.CSSStyleModel.MatchedStyleResult}
136 * @this {WebInspector.CSSStyleModel} 136 * @this {WebInspector.CSSStyleModel}
137 */ 137 */
138 function callback(error, inlinePayload, attributesPayload, matchedPayloa d, pseudoPayload, inheritedPayload) 138 function callback(error, inlinePayload, attributesPayload, matchedPayloa d, pseudoPayload, inheritedPayload)
139 { 139 {
140 if (error) 140 if (error)
141 return null; 141 return null;
142 142
143 return new WebInspector.CSSStyleModel.MatchedStyleResult(this, nodeI d, inlinePayload, attributesPayload, matchedPayload, pseudoPayload, inheritedPay load); 143 var node = this._domModel.nodeForId(nodeId);
144 if (!node)
145 return null;
146
147 return new WebInspector.CSSStyleModel.MatchedStyleResult(this, node, inlinePayload, attributesPayload, matchedPayload, pseudoPayload, inheritedPaylo ad);
144 } 148 }
145 149
146 return this._agent.getMatchedStylesForNode(nodeId, callback.bind(this)); 150 return this._agent.getMatchedStylesForNode(nodeId, callback.bind(this));
147 }, 151 },
148 152
149 /** 153 /**
150 * @param {!DOMAgent.NodeId} nodeId 154 * @param {!DOMAgent.NodeId} nodeId
151 * @return {!Promise.<?Map.<string, string>>} 155 * @return {!Promise.<?Map.<string, string>>}
152 */ 156 */
153 computedStylePromise: function(nodeId) 157 computedStylePromise: function(nodeId)
(...skipping 1885 matching lines...) Expand 10 before | Expand all | Expand 10 after
2039 * @return {!WebInspector.CSSStyleModel} 2043 * @return {!WebInspector.CSSStyleModel}
2040 */ 2044 */
2041 WebInspector.CSSStyleModel.fromNode = function(node) 2045 WebInspector.CSSStyleModel.fromNode = function(node)
2042 { 2046 {
2043 return /** @type {!WebInspector.CSSStyleModel} */ (WebInspector.CSSStyleMode l.fromTarget(node.target())); 2047 return /** @type {!WebInspector.CSSStyleModel} */ (WebInspector.CSSStyleMode l.fromTarget(node.target()));
2044 } 2048 }
2045 2049
2046 /** 2050 /**
2047 * @constructor 2051 * @constructor
2048 * @param {!WebInspector.CSSStyleModel} cssModel 2052 * @param {!WebInspector.CSSStyleModel} cssModel
2049 * @param {!DOMAgent.NodeId} nodeId 2053 * @param {!WebInspector.DOMNode} node
2050 * @param {?CSSAgent.CSSStyle=} inlinePayload 2054 * @param {?CSSAgent.CSSStyle=} inlinePayload
2051 * @param {?CSSAgent.CSSStyle=} attributesPayload 2055 * @param {?CSSAgent.CSSStyle=} attributesPayload
2052 * @param {!Array.<!CSSAgent.RuleMatch>=} matchedPayload 2056 * @param {!Array.<!CSSAgent.RuleMatch>=} matchedPayload
2053 * @param {!Array.<!CSSAgent.PseudoElementMatches>=} pseudoPayload 2057 * @param {!Array.<!CSSAgent.PseudoElementMatches>=} pseudoPayload
2054 * @param {!Array.<!CSSAgent.InheritedStyleEntry>=} inheritedPayload 2058 * @param {!Array.<!CSSAgent.InheritedStyleEntry>=} inheritedPayload
2055 */ 2059 */
2056 WebInspector.CSSStyleModel.MatchedStyleResult = function(cssModel, nodeId, inlin ePayload, attributesPayload, matchedPayload, pseudoPayload, inheritedPayload) 2060 WebInspector.CSSStyleModel.MatchedStyleResult = function(cssModel, node, inlineP ayload, attributesPayload, matchedPayload, pseudoPayload, inheritedPayload)
2057 { 2061 {
2058 this._cssModel = cssModel; 2062 this._cssModel = cssModel;
2059 this._node = this._cssModel._domModel.nodeForId(nodeId); 2063 this._node = node;
2060
2061 this._nodeStyles = []; 2064 this._nodeStyles = [];
2062 this._nodeForStyle = new Map(); 2065 this._nodeForStyle = new Map();
2063 this._inheritedStyles = new Set(); 2066 this._inheritedStyles = new Set();
2064 2067
2065 /** 2068 /**
2066 * @this {WebInspector.CSSStyleModel.MatchedStyleResult} 2069 * @this {WebInspector.CSSStyleModel.MatchedStyleResult}
2067 */ 2070 */
2068 function addAttributesStyle() 2071 function addAttributesStyle()
2069 { 2072 {
2070 if (!attributesPayload) 2073 if (!attributesPayload)
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
2130 var pseudoStyles = []; 2133 var pseudoStyles = [];
2131 var rules = WebInspector.CSSStyleModel.parseRuleMatchArrayPayload(cs sModel, entryPayload.matches); 2134 var rules = WebInspector.CSSStyleModel.parseRuleMatchArrayPayload(cs sModel, entryPayload.matches);
2132 for (var j = rules.length - 1; j >= 0; --j) { 2135 for (var j = rules.length - 1; j >= 0; --j) {
2133 var pseudoRule = rules[j]; 2136 var pseudoRule = rules[j];
2134 pseudoStyles.push(pseudoRule.style); 2137 pseudoStyles.push(pseudoRule.style);
2135 this._nodeForStyle.set(pseudoRule.style, pseudoElement); 2138 this._nodeForStyle.set(pseudoRule.style, pseudoElement);
2136 } 2139 }
2137 this._pseudoStyles.set(entryPayload.pseudoType, pseudoStyles); 2140 this._pseudoStyles.set(entryPayload.pseudoType, pseudoStyles);
2138 } 2141 }
2139 } 2142 }
2143
2144 this.resetActiveProperties();
2140 } 2145 }
2141 2146
2142 WebInspector.CSSStyleModel.MatchedStyleResult.prototype = { 2147 WebInspector.CSSStyleModel.MatchedStyleResult.prototype = {
2143 /** 2148 /**
2149 * @return {!WebInspector.DOMNode}
2150 */
2151 node: function()
2152 {
2153 return this._node;
2154 },
2155
2156 /**
2157 * @param {!WebInspector.CSSStyleDeclaration} style
2158 * @return {boolean}
2159 */
2160 hasMatchingSelectors: function(style)
2161 {
2162 return style.parentRule ? style.parentRule.matchingSelectors && style.pa rentRule.matchingSelectors.length > 0 && this.mediaMatches(style) : true;
dgozman 2015/11/09 20:36:42 I'm surprised that CSSRule has matchingSelectors p
lushnikov 2015/11/09 21:42:57 Yes, I'm on my way there.
2163 },
2164
2165 /**
2166 * @param {!WebInspector.CSSStyleDeclaration} style
2167 * @return {boolean}
2168 */
2169 mediaMatches: function(style)
dgozman 2015/11/09 20:36:42 This method should be a part of CSSRule.
lushnikov 2015/11/09 21:42:57 Rule does not have any medias, MatchedStyles objec
dgozman 2015/11/09 21:48:29 But you get media from parentRule. Isn't that a CS
lushnikov 2015/11/09 21:54:01 This is a CSSRule, but it will not contain medias
dgozman 2015/11/09 22:03:36 Thanks for explanation.
lushnikov 2015/11/09 22:11:12 Well, it is used for both rendering in SSP and com
2170 {
2171 var media = style.parentRule ? style.parentRule.media : [];
2172 for (var i = 0; media && i < media.length; ++i) {
2173 if (!media[i].active())
2174 return false;
2175 }
2176 return true;
2177 },
2178
2179 /**
2144 * @return {!Array<!WebInspector.CSSStyleDeclaration>} 2180 * @return {!Array<!WebInspector.CSSStyleDeclaration>}
2145 */ 2181 */
2146 nodeStyles: function() 2182 nodeStyles: function()
2147 { 2183 {
2148 return this._nodeStyles; 2184 return this._nodeStyles;
2149 }, 2185 },
2150 2186
2151 /** 2187 /**
2152 * @return {!Map.<!DOMAgent.PseudoType, !Array<!WebInspector.CSSStyleDeclara tion>>} 2188 * @return {!Map.<!DOMAgent.PseudoType, !Array<!WebInspector.CSSStyleDeclara tion>>}
2153 */ 2189 */
(...skipping 27 matching lines...) Expand all
2181 return this._nodeForStyle.get(style) || null; 2217 return this._nodeForStyle.get(style) || null;
2182 }, 2218 },
2183 2219
2184 /** 2220 /**
2185 * @param {!WebInspector.CSSStyleDeclaration} style 2221 * @param {!WebInspector.CSSStyleDeclaration} style
2186 * @return {boolean} 2222 * @return {boolean}
2187 */ 2223 */
2188 isInherited: function(style) 2224 isInherited: function(style)
2189 { 2225 {
2190 return this._inheritedStyles.has(style); 2226 return this._inheritedStyles.has(style);
2227 },
2228
2229 /**
2230 * @param {!WebInspector.CSSProperty} property
2231 * @return {?WebInspector.CSSStyleModel.MatchedStyleResult.PropertyState}
2232 */
2233 propertyState: function(property)
2234 {
2235 if (this._propertiesState.size === 0) {
dgozman 2015/11/09 20:36:42 Could it be that size is zero even after calculati
lushnikov 2015/11/09 21:42:57 You might recreate this situation if you'd like: y
2236 this._computeActiveProperties(this._nodeStyles, this._propertiesStat e);
2237 for (var pseudoElementStyles of this._pseudoStyles.valuesArray())
2238 this._computeActiveProperties(pseudoElementStyles, this._propert iesState);
2239 }
2240 return this._propertiesState.get(property) || null;
2241 },
2242
2243 resetActiveProperties: function()
2244 {
2245 /** @type {!Map<!WebInspector.CSSProperty, !WebInspector.CSSStyleModel.M atchedStyleResult.PropertyState>} */
2246 this._propertiesState = new Map();
dgozman 2015/11/09 20:36:42 .clear()
lushnikov 2015/11/09 21:42:57 The resetActiveProperties() is used in the constru
2247 },
2248
2249 /**
2250 * @param {!Array<!WebInspector.CSSStyleDeclaration>} styles
2251 * @param {!Map<!WebInspector.CSSProperty, !WebInspector.CSSStyleModel.Match edStyleResult.PropertyState>} result
2252 */
2253 _computeActiveProperties: function(styles, result)
2254 {
2255 /** @type {!Set.<string>} */
2256 var foundImportantProperties = new Set();
2257 /** @type {!Map.<string, !Map<string, !WebInspector.CSSProperty>>} */
2258 var propertyToEffectiveRule = new Map();
2259 /** @type {!Map.<string, !WebInspector.DOMNode>} */
2260 var inheritedPropertyToNode = new Map();
2261 /** @type {!Set<string>} */
2262 var allUsedProperties = new Set();
2263 for (var i = 0; i < styles.length; ++i) {
2264 var style = styles[i];
2265 if (!this.hasMatchingSelectors(style))
2266 continue;
2267
2268 /** @type {!Map<string, !WebInspector.CSSProperty>} */
2269 var styleActiveProperties = new Map();
2270 var allProperties = style.allProperties;
2271 for (var j = 0; j < allProperties.length; ++j) {
2272 var property = allProperties[j];
2273
2274 // Do not pick non-inherited properties from inherited styles.
2275 var inherited = this.isInherited(style);
2276 if (inherited && !WebInspector.CSSMetadata.isPropertyInherited(p roperty.name))
2277 continue;
2278
2279 if (!property.activeInStyle()) {
2280 result.set(property, WebInspector.CSSStyleModel.MatchedStyle Result.PropertyState.Overloaded);
2281 continue;
2282 }
2283
2284 var canonicalName = WebInspector.CSSMetadata.canonicalPropertyNa me(property.name);
2285 if (foundImportantProperties.has(canonicalName)) {
2286 result.set(property, WebInspector.CSSStyleModel.MatchedStyle Result.PropertyState.Overloaded);
2287 continue;
2288 }
2289
2290 if (!property.important && allUsedProperties.has(canonicalName)) {
2291 result.set(property, WebInspector.CSSStyleModel.MatchedStyle Result.PropertyState.Overloaded);
2292 continue;
2293 }
2294
2295 var isKnownProperty = propertyToEffectiveRule.has(canonicalName) ;
2296 var inheritedFromNode = inherited ? this.nodeForStyle(style) : n ull;
2297 if (!isKnownProperty && inheritedFromNode && !inheritedPropertyT oNode.has(canonicalName))
2298 inheritedPropertyToNode.set(canonicalName, inheritedFromNode );
2299
2300 if (property.important) {
2301 if (inherited && isKnownProperty && inheritedFromNode !== in heritedPropertyToNode.get(canonicalName)) {
2302 result.set(property, WebInspector.CSSStyleModel.MatchedS tyleResult.PropertyState.Overloaded);
2303 continue;
2304 }
2305
2306 foundImportantProperties.add(canonicalName);
2307 if (isKnownProperty) {
2308 var overloaded = /** @type {!WebInspector.CSSProperty} * /(propertyToEffectiveRule.get(canonicalName).get(canonicalName));
2309 result.set(overloaded, WebInspector.CSSStyleModel.Matche dStyleResult.PropertyState.Overloaded);
2310 propertyToEffectiveRule.get(canonicalName).delete(canoni calName);
2311 }
2312 }
2313
2314 styleActiveProperties.set(canonicalName, property);
2315 allUsedProperties.add(canonicalName);
2316 propertyToEffectiveRule.set(canonicalName, styleActiveProperties );
2317 result.set(property, WebInspector.CSSStyleModel.MatchedStyleResu lt.PropertyState.Active);
2318 }
2319
2320 // If every longhand of the shorthand is not active, then the shorth and is not active too.
2321 for (var property of style.leadingProperties()) {
2322 var canonicalName = WebInspector.CSSMetadata.canonicalPropertyNa me(property.name);
2323 if (!styleActiveProperties.has(canonicalName))
2324 continue;
2325 var longhands = style.longhandProperties(property.name);
2326 if (!longhands.length)
2327 continue;
2328 var notUsed = true;
2329 for (var longhand of longhands) {
2330 var longhandCanonicalName = WebInspector.CSSMetadata.canonic alPropertyName(longhand.name);
2331 notUsed = notUsed && !styleActiveProperties.has(longhandCano nicalName);
2332 }
2333 if (!notUsed)
2334 continue;
2335 styleActiveProperties.delete(canonicalName);
2336 allUsedProperties.delete(canonicalName);
2337 result.set(property, WebInspector.CSSStyleModel.MatchedStyleResu lt.PropertyState.Overloaded);
2338 }
2339 }
2191 } 2340 }
2192 } 2341 }
2193 2342
2343 /** @enum {string} */
2344 WebInspector.CSSStyleModel.MatchedStyleResult.PropertyState = {
2345 Active: "Active",
2346 Overloaded: "Overloaded"
2347 }
2348
2194 /** 2349 /**
2195 * @constructor 2350 * @constructor
2196 * @param {?WebInspector.CSSStyleDeclaration} inlineStyle 2351 * @param {?WebInspector.CSSStyleDeclaration} inlineStyle
2197 * @param {?WebInspector.CSSStyleDeclaration} attributesStyle 2352 * @param {?WebInspector.CSSStyleDeclaration} attributesStyle
2198 */ 2353 */
2199 WebInspector.CSSStyleModel.InlineStyleResult = function(inlineStyle, attributesS tyle) 2354 WebInspector.CSSStyleModel.InlineStyleResult = function(inlineStyle, attributesS tyle)
2200 { 2355 {
2201 this.inlineStyle = inlineStyle; 2356 this.inlineStyle = inlineStyle;
2202 this.attributesStyle = attributesStyle; 2357 this.attributesStyle = attributesStyle;
2203 } 2358 }
2204 2359
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/elements/module.json ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698