| Index: third_party/WebKit/Source/devtools/front_end/elements/StylesSidebarPane.js
 | 
| diff --git a/third_party/WebKit/Source/devtools/front_end/elements/StylesSidebarPane.js b/third_party/WebKit/Source/devtools/front_end/elements/StylesSidebarPane.js
 | 
| index 957b42ea22f232aadff6a7e23607e49ee10e04d6..4932473d5d9b8259f8c3104866ac279fcf31d2e2 100644
 | 
| --- a/third_party/WebKit/Source/devtools/front_end/elements/StylesSidebarPane.js
 | 
| +++ b/third_party/WebKit/Source/devtools/front_end/elements/StylesSidebarPane.js
 | 
| @@ -312,29 +312,25 @@ WebInspector.StylesSidebarPane.prototype = {
 | 
|      },
 | 
|  
 | 
|      /**
 | 
| -     * @return {!Promise.<?{matched: !WebInspector.SectionCascade, pseudo: !Map.<number, !WebInspector.SectionCascade>}>}
 | 
| +     * @return {!Promise.<?WebInspector.CSSStyleModel.MatchedStyleResult>}
 | 
|       */
 | 
|      fetchMatchedCascade: function()
 | 
|      {
 | 
|          var node = this.node();
 | 
|          if (!node)
 | 
| -            return Promise.resolve(/** @type {?{matched: !WebInspector.SectionCascade, pseudo: !Map.<number, !WebInspector.SectionCascade>}} */(null));
 | 
| +            return Promise.resolve(/** @type {?WebInspector.CSSStyleModel.MatchedStyleResult} */(null));
 | 
|          if (!this._matchedCascadePromise)
 | 
| -            this._matchedCascadePromise = this._matchedStylesForNode(node).then(buildMatchedCascades.bind(this, node));
 | 
| +            this._matchedCascadePromise = this._matchedStylesForNode(node).then(validateStyles.bind(this));
 | 
|          return this._matchedCascadePromise;
 | 
|  
 | 
|          /**
 | 
| -         * @param {!WebInspector.DOMNode} node
 | 
|           * @param {?WebInspector.CSSStyleModel.MatchedStyleResult} matchedStyles
 | 
| -         * @return {?{matched: !WebInspector.SectionCascade, pseudo: !Map.<number, !WebInspector.SectionCascade>}}
 | 
| +         * @return {?WebInspector.CSSStyleModel.MatchedStyleResult}
 | 
|           * @this {WebInspector.StylesSidebarPane}
 | 
|           */
 | 
| -        function buildMatchedCascades(node, matchedStyles)
 | 
| +        function validateStyles(matchedStyles)
 | 
|          {
 | 
| -            if (!matchedStyles || node !== this.node())
 | 
| -                return null;
 | 
| -
 | 
| -            return WebInspector.SectionCascade.fromMatchedStyles(matchedStyles);
 | 
| +            return matchedStyles && matchedStyles.node() === this.node() ? matchedStyles : null;
 | 
|          }
 | 
|      },
 | 
|  
 | 
| @@ -409,29 +405,29 @@ WebInspector.StylesSidebarPane.prototype = {
 | 
|      },
 | 
|  
 | 
|      /**
 | 
| -     * @param {?{matched: !WebInspector.SectionCascade, pseudo: !Map.<number, !WebInspector.SectionCascade>}} cascades
 | 
| +     * @param {?WebInspector.CSSStyleModel.MatchedStyleResult} matchedStyles
 | 
|       */
 | 
| -    _innerRebuildUpdate: function(cascades)
 | 
| +    _innerRebuildUpdate: function(matchedStyles)
 | 
|      {
 | 
|          this._linkifier.reset();
 | 
|          this._sectionsContainer.removeChildren();
 | 
|          this._sectionBlocks = [];
 | 
|  
 | 
|          var node = this.node();
 | 
| -        if (!cascades || !node)
 | 
| +        if (!matchedStyles || !node)
 | 
|              return;
 | 
|  
 | 
| -        this._sectionBlocks = this._rebuildSectionsForMatchedStyleRules(cascades.matched);
 | 
| +        this._sectionBlocks = this._rebuildSectionsForMatchedStyleRules(matchedStyles);
 | 
|          var pseudoTypes = [];
 | 
| -        var keys = new Set(cascades.pseudo.keys());
 | 
| +        var keys = new Set(matchedStyles.pseudoStyles().keys());
 | 
|          if (keys.delete(DOMAgent.PseudoType.Before))
 | 
|              pseudoTypes.push(DOMAgent.PseudoType.Before);
 | 
|          pseudoTypes = pseudoTypes.concat(keys.valuesArray().sort());
 | 
|          for (var pseudoType of pseudoTypes) {
 | 
|              var block = WebInspector.SectionBlock.createPseudoTypeBlock(pseudoType);
 | 
| -            var cascade = cascades.pseudo.get(pseudoType);
 | 
| -            for (var style of cascade.styles()) {
 | 
| -                var section = new WebInspector.StylePropertiesSection(this, cascade, style);
 | 
| +            var styles = /** @type {!Array<!WebInspector.CSSStyleDeclaration>} */(matchedStyles.pseudoStyles().get(pseudoType));
 | 
| +            for (var style of styles) {
 | 
| +                var section = new WebInspector.StylePropertiesSection(this, matchedStyles, style);
 | 
|                  block.sections.push(section);
 | 
|              }
 | 
|              this._sectionBlocks.push(block);
 | 
| @@ -461,22 +457,22 @@ WebInspector.StylesSidebarPane.prototype = {
 | 
|      },
 | 
|  
 | 
|      /**
 | 
| -     * @param {!WebInspector.SectionCascade} matchedCascade
 | 
| +     * @param {!WebInspector.CSSStyleModel.MatchedStyleResult} matchedStyles
 | 
|       * @return {!Array.<!WebInspector.SectionBlock>}
 | 
|       */
 | 
| -    _rebuildSectionsForMatchedStyleRules: function(matchedCascade)
 | 
| +    _rebuildSectionsForMatchedStyleRules: function(matchedStyles)
 | 
|      {
 | 
|          var blocks = [new WebInspector.SectionBlock(null)];
 | 
|          var lastParentNode = null;
 | 
| -        for (var style of matchedCascade.styles()) {
 | 
| -            var parentNode = matchedCascade.isInherited(style) ? matchedCascade.nodeForStyle(style) : null;
 | 
| +        for (var style of matchedStyles.nodeStyles()) {
 | 
| +            var parentNode = matchedStyles.isInherited(style) ? matchedStyles.nodeForStyle(style) : null;
 | 
|              if (parentNode && parentNode !== lastParentNode) {
 | 
|                  lastParentNode = parentNode;
 | 
|                  var block = WebInspector.SectionBlock.createInheritedNodeBlock(lastParentNode);
 | 
|                  blocks.push(block);
 | 
|              }
 | 
|  
 | 
| -            var section = new WebInspector.StylePropertiesSection(this, matchedCascade, style);
 | 
| +            var section = new WebInspector.StylePropertiesSection(this, matchedStyles, style);
 | 
|              blocks.peekLast().sections.push(section);
 | 
|          }
 | 
|          return blocks;
 | 
| @@ -533,7 +529,7 @@ WebInspector.StylesSidebarPane.prototype = {
 | 
|      {
 | 
|          this.expand();
 | 
|          var node = this.node();
 | 
| -        var blankSection = new WebInspector.BlankStylePropertiesSection(this, insertAfterSection._cascade, node ? WebInspector.DOMPresentationUtils.simpleSelector(node) : "", styleSheetId, ruleLocation, insertAfterSection._style);
 | 
| +        var blankSection = new WebInspector.BlankStylePropertiesSection(this, insertAfterSection._matchedStyles, node ? WebInspector.DOMPresentationUtils.simpleSelector(node) : "", styleSheetId, ruleLocation, insertAfterSection._style);
 | 
|  
 | 
|          this._sectionsContainer.insertBefore(blankSection.element, insertAfterSection.element.nextSibling);
 | 
|  
 | 
| @@ -755,14 +751,14 @@ WebInspector.SectionBlock.prototype = {
 | 
|  /**
 | 
|   * @constructor
 | 
|   * @param {!WebInspector.StylesSidebarPane} parentPane
 | 
| - * @param {!WebInspector.SectionCascade} cascade
 | 
| + * @param {!WebInspector.CSSStyleModel.MatchedStyleResult} matchedStyles
 | 
|   * @param {!WebInspector.CSSStyleDeclaration} style
 | 
|   */
 | 
| -WebInspector.StylePropertiesSection = function(parentPane, cascade, style)
 | 
| +WebInspector.StylePropertiesSection = function(parentPane, matchedStyles, style)
 | 
|  {
 | 
|      this._parentPane = parentPane;
 | 
|      this._style = style;
 | 
| -    this._cascade = cascade;
 | 
| +    this._matchedStyles = matchedStyles;
 | 
|      this.editable = !!(style.styleSheetId && style.range);
 | 
|  
 | 
|      var rule = style.parentRule;
 | 
| @@ -882,9 +878,9 @@ WebInspector.StylePropertiesSection.prototype = {
 | 
|       */
 | 
|      _selectorText: function()
 | 
|      {
 | 
| -        var node = this._cascade.nodeForStyle(this._style);
 | 
| +        var node = this._matchedStyles.nodeForStyle(this._style);
 | 
|          if (this._style.type === WebInspector.CSSStyleDeclaration.Type.Inline)
 | 
| -            return this._cascade.isInherited(this._style) ? WebInspector.UIString("Style Attribute") : "element.style";
 | 
| +            return this._matchedStyles.isInherited(this._style) ? WebInspector.UIString("Style Attribute") : "element.style";
 | 
|          if (this._style.type === WebInspector.CSSStyleDeclaration.Type.Attributes)
 | 
|              return node.nodeNameInCorrectCase() + "[" + WebInspector.UIString("Attributes Style") + "]";
 | 
|          return this._style.parentRule.selectorText();
 | 
| @@ -1102,7 +1098,7 @@ WebInspector.StylePropertiesSection.prototype = {
 | 
|       */
 | 
|      isPropertyInherited: function(propertyName)
 | 
|      {
 | 
| -        if (this._cascade.isInherited(this._style)) {
 | 
| +        if (this._matchedStyles.isInherited(this._style)) {
 | 
|              // While rendering inherited stylesheet, reverse meaning of this property.
 | 
|              // Render truly inherited properties with black, i.e. return them as non-inherited.
 | 
|              return !WebInspector.CSSMetadata.isPropertyInherited(propertyName);
 | 
| @@ -1161,7 +1157,7 @@ WebInspector.StylePropertiesSection.prototype = {
 | 
|          } else {
 | 
|              var child = this.propertiesTreeOutline.firstChild();
 | 
|              while (child) {
 | 
| -                var overloaded = this._cascade.propertyState(child.property) === WebInspector.SectionCascade.PropertyState.Overloaded;
 | 
| +                var overloaded = this._matchedStyles.propertyState(child.property) === WebInspector.CSSStyleModel.MatchedStyleResult.PropertyState.Overloaded;
 | 
|                  child.setOverloaded(overloaded);
 | 
|                  child = child.traverseNextTreeElement(false, null, true);
 | 
|              }
 | 
| @@ -1188,8 +1184,8 @@ WebInspector.StylePropertiesSection.prototype = {
 | 
|          for (var property of style.leadingProperties()) {
 | 
|              var isShorthand = !!WebInspector.CSSMetadata.cssPropertiesMetainfo.longhands(property.name);
 | 
|              var inherited = this.isPropertyInherited(property.name);
 | 
| -            var overloaded = this._cascade.propertyState(property) === WebInspector.SectionCascade.PropertyState.Overloaded;
 | 
| -            var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this._cascade, property, isShorthand, inherited, overloaded);
 | 
| +            var overloaded = this._matchedStyles.propertyState(property) === WebInspector.CSSStyleModel.MatchedStyleResult.PropertyState.Overloaded;
 | 
| +            var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this._matchedStyles, property, isShorthand, inherited, overloaded);
 | 
|              this.propertiesTreeOutline.appendChild(item);
 | 
|          }
 | 
|      },
 | 
| @@ -1217,9 +1213,9 @@ WebInspector.StylePropertiesSection.prototype = {
 | 
|          if (!rule)
 | 
|              return;
 | 
|  
 | 
| -        this._mediaListElement.classList.toggle("media-matches", this._cascade.mediaMatches(this._style));
 | 
| +        this._mediaListElement.classList.toggle("media-matches", this._matchedStyles.mediaMatches(this._style));
 | 
|  
 | 
| -        if (!this._cascade.hasMatchingSelectors(this._style))
 | 
| +        if (!this._matchedStyles.hasMatchingSelectors(this._style))
 | 
|              return;
 | 
|  
 | 
|          var selectors = rule.selectors;
 | 
| @@ -1287,7 +1283,7 @@ WebInspector.StylePropertiesSection.prototype = {
 | 
|      addNewBlankProperty: function(index)
 | 
|      {
 | 
|          var property = this._style.newBlankProperty(index);
 | 
| -        var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this._cascade, property, false, false, false);
 | 
| +        var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this._matchedStyles, property, false, false, false);
 | 
|          index = property.index;
 | 
|          this.propertiesTreeOutline.insertChild(item, index);
 | 
|          item.listItemElement.textContent = "";
 | 
| @@ -1557,7 +1553,7 @@ WebInspector.StylePropertiesSection.prototype = {
 | 
|                  var doesAffectSelectedNode = rule.matchingSelectors.length > 0;
 | 
|                  this.element.classList.toggle("no-affect", !doesAffectSelectedNode);
 | 
|  
 | 
| -                this._cascade.resetActiveProperties();
 | 
| +                this._matchedStyles.resetActiveProperties();
 | 
|                  var newSelectorRange = /** @type {!WebInspector.TextRange} */(rule.selectorRange());
 | 
|                  rule.style.sourceStyleSheetEdited(/** @type {string} */(rule.styleSheetId), oldSelectorRange, newSelectorRange);
 | 
|                  this._parentPane._styleSheetRuleEdited(rule, oldSelectorRange, newSelectorRange);
 | 
| @@ -1654,16 +1650,16 @@ WebInspector.StylePropertiesSection._linkifyRuleLocation = function(cssModel, li
 | 
|   * @constructor
 | 
|   * @extends {WebInspector.StylePropertiesSection}
 | 
|   * @param {!WebInspector.StylesSidebarPane} stylesPane
 | 
| - * @param {!WebInspector.SectionCascade} cascade
 | 
| + * @param {!WebInspector.CSSStyleModel.MatchedStyleResult} matchedStyles
 | 
|   * @param {string} defaultSelectorText
 | 
|   * @param {string} styleSheetId
 | 
|   * @param {!WebInspector.TextRange} ruleLocation
 | 
|   * @param {!WebInspector.CSSStyleDeclaration} insertAfterStyle
 | 
|   */
 | 
| -WebInspector.BlankStylePropertiesSection = function(stylesPane, cascade, defaultSelectorText, styleSheetId, ruleLocation, insertAfterStyle)
 | 
| +WebInspector.BlankStylePropertiesSection = function(stylesPane, matchedStyles, defaultSelectorText, styleSheetId, ruleLocation, insertAfterStyle)
 | 
|  {
 | 
|      var rule = WebInspector.CSSRule.createDummyRule(stylesPane._cssModel, defaultSelectorText);
 | 
| -    WebInspector.StylePropertiesSection.call(this, stylesPane, cascade, rule.style);
 | 
| +    WebInspector.StylePropertiesSection.call(this, stylesPane, matchedStyles, rule.style);
 | 
|      this._ruleLocation = ruleLocation;
 | 
|      this._styleSheetId = styleSheetId;
 | 
|      this._selectorRefElement.removeChildren();
 | 
| @@ -1789,18 +1785,18 @@ WebInspector.BlankStylePropertiesSection.prototype = {
 | 
|   * @constructor
 | 
|   * @extends {TreeElement}
 | 
|   * @param {!WebInspector.StylesSidebarPane} stylesPane
 | 
| - * @param {!WebInspector.SectionCascade} cascade
 | 
| + * @param {!WebInspector.CSSStyleModel.MatchedStyleResult} matchedStyles
 | 
|   * @param {!WebInspector.CSSProperty} property
 | 
|   * @param {boolean} isShorthand
 | 
|   * @param {boolean} inherited
 | 
|   * @param {boolean} overloaded
 | 
|   */
 | 
| -WebInspector.StylePropertyTreeElement = function(stylesPane, cascade, property, isShorthand, inherited, overloaded)
 | 
| +WebInspector.StylePropertyTreeElement = function(stylesPane, matchedStyles, property, isShorthand, inherited, overloaded)
 | 
|  {
 | 
|      // Pass an empty title, the title gets made later in onattach.
 | 
|      TreeElement.call(this, "", isShorthand);
 | 
|      this._style = property.ownerStyle;
 | 
| -    this._cascade = cascade;
 | 
| +    this._matchedStyles = matchedStyles;
 | 
|      this.property = property;
 | 
|      this._inherited = inherited;
 | 
|      this._overloaded = overloaded;
 | 
| @@ -2020,7 +2016,7 @@ WebInspector.StylePropertyTreeElement.prototype = {
 | 
|      _styleTextEdited: function(oldStyleRange)
 | 
|      {
 | 
|          var newStyleRange = /** @type {!WebInspector.TextRange} */ (this._style.range);
 | 
| -        this._cascade.resetActiveProperties();
 | 
| +        this._matchedStyles.resetActiveProperties();
 | 
|          if (this._style.parentRule)
 | 
|              this._parentPane._styleSheetRuleEdited(this._style.parentRule, oldStyleRange, newStyleRange);
 | 
|      },
 | 
| @@ -2074,10 +2070,10 @@ WebInspector.StylePropertyTreeElement.prototype = {
 | 
|              var section = this.section();
 | 
|              if (section) {
 | 
|                  inherited = section.isPropertyInherited(name);
 | 
| -                overloaded = this._cascade.propertyState(longhandProperties[i]) === WebInspector.SectionCascade.PropertyState.Overloaded;
 | 
| +                overloaded = this._matchedStyles.propertyState(longhandProperties[i]) === WebInspector.CSSStyleModel.MatchedStyleResult.PropertyState.Overloaded;
 | 
|              }
 | 
|  
 | 
| -            var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this._cascade, longhandProperties[i], false, inherited, overloaded);
 | 
| +            var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this._matchedStyles, longhandProperties[i], false, inherited, overloaded);
 | 
|              this.appendChild(item);
 | 
|          }
 | 
|      },
 | 
| 
 |