@@ -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