@@ -234,9 +234,9 @@ var getStats = function(tabId, tabTitle) {
234234 r . firewallRules = getFirewallRules ( tabContext . rootHostname , r . hostnameDict ) ;
235235 r . canElementPicker = tabContext . rootHostname . indexOf ( '.' ) !== - 1 ;
236236 r . canRequestLog = canRequestLog ;
237- r . noPopups = µb . hnSwitches . evaluateZ ( 'noPopups ' , tabContext . rootHostname ) ;
238- r . noStrictBlocking = µb . hnSwitches . evaluateZ ( 'noStrictBlocking ' , tabContext . rootHostname ) ;
239- r . noCosmeticFiltering = µb . hnSwitches . evaluateZ ( 'noCosmeticFiltering ' , tabContext . rootHostname ) ;
237+ r . noPopups = µb . hnSwitches . evaluateZ ( 'no-popups ' , tabContext . rootHostname ) ;
238+ r . noStrictBlocking = µb . hnSwitches . evaluateZ ( 'no-strict-blocking ' , tabContext . rootHostname ) ;
239+ r . noCosmeticFiltering = µb . hnSwitches . evaluateZ ( 'no-cosmetic-filtering ' , tabContext . rootHostname ) ;
240240 } else {
241241 r . hostnameDict = { } ;
242242 r . firewallRules = getFirewallRules ( ) ;
@@ -832,10 +832,44 @@ var µb = µBlock;
832832
833833/******************************************************************************/
834834
835- var getFirewallRules = function ( ) {
835+ var getRules = function ( ) {
836836 return {
837837 permanentRules : µb . permanentFirewall . toString ( ) ,
838- sessionRules : µb . sessionFirewall . toString ( )
838+ sessionRules : µb . sessionFirewall . toString ( ) ,
839+ hnSwitches : µb . hnSwitches . toString ( )
840+ } ;
841+ } ;
842+
843+ // Untangle rules and switches.
844+ var untangle = function ( s ) {
845+ var textEnd = s . length ;
846+ var lineBeg = 0 , lineEnd ;
847+ var line ;
848+ var rules = [ ] ;
849+ var switches = [ ] ;
850+
851+ while ( lineBeg < textEnd ) {
852+ lineEnd = s . indexOf ( '\n' , lineBeg ) ;
853+ if ( lineEnd < 0 ) {
854+ lineEnd = s . indexOf ( '\r' , lineBeg ) ;
855+ if ( lineEnd < 0 ) {
856+ lineEnd = textEnd ;
857+ }
858+ }
859+ line = s . slice ( lineBeg , lineEnd ) . trim ( ) ;
860+ lineBeg = lineEnd + 1 ;
861+
862+ // Switches always contain a ':'
863+ if ( line . indexOf ( ':' ) === - 1 ) {
864+ rules . push ( line ) ;
865+ } else {
866+ switches . push ( line ) ;
867+ }
868+ }
869+
870+ return {
871+ rules : rules . join ( '\n' ) ,
872+ switches : switches . join ( '\n' )
839873 } ;
840874} ;
841875
@@ -844,34 +878,40 @@ var getFirewallRules = function() {
844878var onMessage = function ( request , sender , callback ) {
845879 // Async
846880 switch ( request . what ) {
847- default :
848- break ;
881+ default :
882+ break ;
849883 }
850884
851885 // Sync
886+ var r ;
852887 var response ;
853888
854889 switch ( request . what ) {
855- case 'getFirewallRules' :
856- response = getFirewallRules ( ) ;
857- break ;
858-
859- case 'setSessionFirewallRules' :
860- // https://github.com/chrisaljoudi/uBlock/issues/772
861- µb . cosmeticFilteringEngine . removeFromSelectorCache ( '*' ) ;
862-
863- µb . sessionFirewall . fromString ( request . rules ) ;
864- response = getFirewallRules ( ) ;
865- break ;
866-
867- case 'setPermanentFirewallRules' :
868- µb . permanentFirewall . fromString ( request . rules ) ;
869- µb . savePermanentFirewallRules ( ) ;
870- response = getFirewallRules ( ) ;
871- break ;
872-
873- default :
874- return vAPI . messaging . UNHANDLED ;
890+ case 'getFirewallRules' :
891+ response = getRules ( ) ;
892+ break ;
893+
894+ case 'setSessionFirewallRules' :
895+ // https://github.com/chrisaljoudi/uBlock/issues/772
896+ µb . cosmeticFilteringEngine . removeFromSelectorCache ( '*' ) ;
897+ r = untangle ( request . rules ) ;
898+ µb . sessionFirewall . fromString ( r . rules ) ;
899+ µb . hnSwitches . fromString ( r . switches ) ;
900+ µb . saveHostnameSwitches ( ) ;
901+ response = getRules ( ) ;
902+ break ;
903+
904+ case 'setPermanentFirewallRules' :
905+ r = untangle ( request . rules ) ;
906+ µb . permanentFirewall . fromString ( r . rules ) ;
907+ µb . savePermanentFirewallRules ( ) ;
908+ µb . hnSwitches . fromString ( r . switches ) ;
909+ µb . saveHostnameSwitches ( ) ;
910+ response = getRules ( ) ;
911+ break ;
912+
913+ default :
914+ return vAPI . messaging . UNHANDLED ;
875915 }
876916
877917 callback ( response ) ;
0 commit comments