Skip to content

Commit d113847

Browse files
Hainishzoracon
authored andcommitted
DRY out loading of rulesets, make everything parsed through addFromJson (EFForg#17980)
1 parent 4ff00dc commit d113847

1 file changed

Lines changed: 60 additions & 64 deletions

File tree

chromium/background-scripts/rules.js

Lines changed: 60 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -226,18 +226,17 @@ RuleSets.prototype = {
226226
},
227227

228228
/**
229-
* Iterate through data XML and load rulesets
229+
* Convert XML to JS and load rulesets
230230
*/
231231
addFromXml: function(ruleXml, scope) {
232-
const scope_obj = getScope(scope);
233-
const rulesets = ruleXml.getElementsByTagName("ruleset");
234-
for (let ruleset of rulesets) {
235-
try {
236-
this.parseOneXmlRuleset(ruleset, scope_obj);
237-
} catch (e) {
238-
util.log(util.WARN, 'Error processing ruleset:' + e);
239-
}
232+
const rulesets_xml = ruleXml.getElementsByTagName("ruleset");
233+
234+
let rulesets = Array();
235+
for (let ruleset_xml of rulesets_xml) {
236+
rulesets.push(this.convertOneXmlToJs(ruleset_xml));
240237
}
238+
239+
this.addFromJson(rulesets, scope);
241240
},
242241

243242
addFromJson: function(ruleJson, scope) {
@@ -465,73 +464,70 @@ RuleSets.prototype = {
465464
},
466465

467466
/**
468-
* Does the loading of a ruleset.
467+
* Converts an XML ruleset to a JS ruleset for parsing
469468
* @param ruletag The whole <ruleset> tag to parse
470469
*/
471-
parseOneXmlRuleset: function(ruletag, scope) {
472-
var default_state = true;
473-
var note = "";
474-
var default_off = ruletag.getAttribute("default_off");
475-
if (default_off) {
476-
default_state = false;
477-
if (default_off === "user rule") {
478-
default_state = true;
479-
}
480-
note += default_off + "\n";
481-
}
470+
convertOneXmlToJs: function(ruletag) {
471+
try {
472+
let ruleset = {};
482473

483-
// If a ruleset declares a platform, and we don't match it, treat it as
484-
// off-by-default. In practice, this excludes "mixedcontent" rules.
485-
var platform = ruletag.getAttribute("platform");
486-
if (platform) {
487-
default_state = false;
488-
if (platform == "mixedcontent" && settings.enableMixedRulesets) {
489-
default_state = true;
474+
let default_off = ruletag.getAttribute("default_off");
475+
if (default_off) {
476+
ruleset["default_off"] = platform;
490477
}
491-
note += "Platform(s): " + platform + "\n";
492-
}
493478

494-
var rule_set = new RuleSet(ruletag.getAttribute("name"),
495-
default_state,
496-
scope,
497-
note.trim());
479+
let platform = ruletag.getAttribute("platform");
480+
if (platform) {
481+
ruleset["platform"] = platform;
482+
}
498483

499-
// Read user prefs
500-
if (rule_set.name in this.ruleActiveStates) {
501-
rule_set.active = (this.ruleActiveStates[rule_set.name] == "true");
502-
}
484+
let name = ruletag.getAttribute("name");
485+
if (name) {
486+
ruleset["name"] = name;
487+
}
503488

504-
var rules = ruletag.getElementsByTagName("rule");
505-
for (let rule of rules) {
506-
rule_set.rules.push(getRule(rule.getAttribute("from"),
507-
rule.getAttribute("to")));
508-
}
489+
let rules = Array();
490+
for (let rule of ruletag.getElementsByTagName("rule")) {
491+
rules.push({
492+
from: rule.getAttribute("from"),
493+
to: rule.getAttribute("to")
494+
});
495+
}
496+
if (rules.length > 0) {
497+
ruleset["rule"] = rules;
498+
}
509499

510-
var exclusions = Array();
511-
for (let exclusion of ruletag.getElementsByTagName("exclusion")) {
512-
exclusions.push(exclusion.getAttribute("pattern"));
513-
}
514-
if (exclusions.length > 0) {
515-
rule_set.exclusions = new RegExp(exclusions.join("|"));
516-
}
500+
let exclusions = Array();
501+
for (let exclusion of ruletag.getElementsByTagName("exclusion")) {
502+
exclusions.push(exclusion.getAttribute("pattern"));
503+
}
504+
if (exclusions.length > 0) {
505+
ruleset["exclusion"] = exclusions;
506+
}
517507

518-
var cookierules = ruletag.getElementsByTagName("securecookie");
519-
if (cookierules.length > 0) {
520-
rule_set.cookierules = [];
521-
for (let cookierule of cookierules) {
522-
rule_set.cookierules.push(
523-
new CookieRule(cookierule.getAttribute("host"),
524-
cookierule.getAttribute("name")));
508+
let cookierules = Array();
509+
for (let cookierule of ruletag.getElementsByTagName("securecookie")) {
510+
cookierules.push({
511+
host: cookierule.getAttribute("host"),
512+
name: cookierule.getAttribute("name")
513+
});
514+
}
515+
if (cookierules.length > 0) {
516+
ruleset["securecookie"] = cookierules;
525517
}
526-
}
527518

528-
var targets = ruletag.getElementsByTagName("target");
529-
for (let target of targets) {
530-
var host = target.getAttribute("host");
531-
if (!this.targets.has(host)) {
532-
this.targets.set(host, []);
519+
let targets = Array();
520+
for (let target of ruletag.getElementsByTagName("target")) {
521+
targets.push(target.getAttribute("host"));
533522
}
534-
this.targets.get(host).push(rule_set);
523+
if (targets.length > 0) {
524+
ruleset["target"] = targets;
525+
}
526+
527+
return ruleset;
528+
} catch (e) {
529+
util.log(util.WARN, 'Error converting ruleset to JS:' + e);
530+
return {};
535531
}
536532
},
537533

0 commit comments

Comments
 (0)