Backed out changeset 89ba5f983e61 (bug 1525238) for dt failures at browser_changes_rule_selector.js and browser_inspector_highlighter-eyedropper-xul.js.

This commit is contained in:
Brindusan Cristian 2019-02-06 13:08:39 +02:00
parent d6292e3e7e
commit b2ca1f33d7
2 changed files with 8 additions and 16 deletions

View File

@ -45,8 +45,6 @@ function cloneState(state = {}) {
* @param {Object} ruleData * @param {Object} ruleData
* Information about a CSS rule: * Information about a CSS rule:
* { * {
* id: {String}
* Unique rule id.
* selector: {String} * selector: {String}
* CSS selector text * CSS selector text
* ancestors: {Array} * ancestors: {Array}
@ -68,6 +66,7 @@ function createRule(ruleData, rules) {
const ruleAncestry = [...ruleData.ancestors, { ...ruleData }]; const ruleAncestry = [...ruleData.ancestors, { ...ruleData }];
return ruleAncestry return ruleAncestry
// First, generate a unique identifier for each rule.
.map((rule, index) => { .map((rule, index) => {
// Ensure each rule has ancestors excluding itself (expand the flattened rule tree). // Ensure each rule has ancestors excluding itself (expand the flattened rule tree).
rule.ancestors = ruleAncestry.slice(0, index); rule.ancestors = ruleAncestry.slice(0, index);
@ -78,9 +77,7 @@ function createRule(ruleData, rules) {
`${rule.typeName} ${(rule.conditionText || rule.name || rule.keyText)}`; `${rule.typeName} ${(rule.conditionText || rule.name || rule.keyText)}`;
} }
// Bug 1525326: Remove getRuleHash() in Firefox 70. Until then, we fallback return getRuleHash(rule);
// to the custom hashing method if the server did not provide a rule with an id.
return rule.id || getRuleHash(rule);
}) })
// Then, create new entries in the rules collection and assign dependencies. // Then, create new entries in the rules collection and assign dependencies.
.map((ruleId, index, array) => { .map((ruleId, index, array) => {
@ -197,20 +194,19 @@ const reducers = {
change = { ...defaults, ...change }; change = { ...defaults, ...change };
state = cloneState(state); state = cloneState(state);
const { type, href, index, isFramed } = change.source;
const { selector, ancestors, ruleIndex, type: changeType } = change; const { selector, ancestors, ruleIndex, type: changeType } = change;
// Bug 1525326: remove getSourceHash() and getRuleHash() in Firefox 70 after we no const sourceId = getSourceHash(change.source);
// longer support old servers which do not implement the id for the rule and source. const ruleId = getRuleHash({ selector, ancestors, ruleIndex });
const sourceId = change.source.id || getSourceHash(change.source);
const ruleId = change.id || getRuleHash({ selector, ancestors, ruleIndex });
// Copy or create object identifying the source (styelsheet/element) for this change. // Copy or create object identifying the source (styelsheet/element) for this change.
const source = Object.assign({}, state[sourceId], change.source); const source = Object.assign({}, state[sourceId], { type, href, index, isFramed });
// Copy or create collection of all rules ever changed in this source. // Copy or create collection of all rules ever changed in this source.
const rules = Object.assign({}, source.rules); const rules = Object.assign({}, source.rules);
// Reference or create object identifying the rule for this change. // Refrence or create object identifying the rule for this change.
let rule = rules[ruleId]; let rule = rules[ruleId];
if (!rule) { if (!rule) {
rule = createRule(change, rules); rule = createRule({ selector, ancestors, ruleIndex }, rules);
if (changeType.startsWith("rule-")) { if (changeType.startsWith("rule-")) {
rule.changeType = changeType; rule.changeType = changeType;
} }

View File

@ -1085,12 +1085,10 @@ var StyleRuleActor = protocol.ActorClassWithSpec(styleRuleSpec, {
*/ */
get metadata() { get metadata() {
const data = {}; const data = {};
data.id = this.actorID;
// Collect information about the rule's ancestors (@media, @supports, @keyframes). // Collect information about the rule's ancestors (@media, @supports, @keyframes).
// Used to show context for this change in the UI and to match the rule for undo/redo. // Used to show context for this change in the UI and to match the rule for undo/redo.
data.ancestors = this.ancestorRules.map(rule => { data.ancestors = this.ancestorRules.map(rule => {
return { return {
id: rule.actorID,
// Rule type as number defined by CSSRule.type (ex: 4, 7, 12) // Rule type as number defined by CSSRule.type (ex: 4, 7, 12)
// @see https://developer.mozilla.org/en-US/docs/Web/API/CSSRule // @see https://developer.mozilla.org/en-US/docs/Web/API/CSSRule
type: rule.rawRule.type, type: rule.rawRule.type,
@ -1119,7 +1117,6 @@ var StyleRuleActor = protocol.ActorClassWithSpec(styleRuleSpec, {
// Used to differentiate between elements which match the same generated selector // Used to differentiate between elements which match the same generated selector
// but live in different documents (ex: host document and iframe). // but live in different documents (ex: host document and iframe).
href: this.rawNode.baseURI, href: this.rawNode.baseURI,
id: this.pageStyle.walker.getNode(this.rawNode).actorID,
// Element style attributes don't have a rule index; use the generated selector. // Element style attributes don't have a rule index; use the generated selector.
index: data.selector, index: data.selector,
// Whether the element lives in a different frame than the host document. // Whether the element lives in a different frame than the host document.
@ -1134,7 +1131,6 @@ var StyleRuleActor = protocol.ActorClassWithSpec(styleRuleSpec, {
// Inline stylesheets have a null href; Use window URL instead. // Inline stylesheets have a null href; Use window URL instead.
type: this.sheetActor.href ? "stylesheet" : "inline", type: this.sheetActor.href ? "stylesheet" : "inline",
href: this.sheetActor.href || this.sheetActor.window.location.toString(), href: this.sheetActor.href || this.sheetActor.window.location.toString(),
id: this.sheetActor.actorID,
index: this.sheetActor.styleSheetIndex, index: this.sheetActor.styleSheetIndex,
// Whether the stylesheet lives in a different frame than the host document. // Whether the stylesheet lives in a different frame than the host document.
isFramed: this.sheetActor.ownerWindow !== this.sheetActor.window, isFramed: this.sheetActor.ownerWindow !== this.sheetActor.window,