diff --git a/src/js/document-blocked.js b/src/js/document-blocked.js index f73bd7c4d..93e2808ca 100644 --- a/src/js/document-blocked.js +++ b/src/js/document-blocked.js @@ -73,6 +73,7 @@ var proceedPermanent = function() { what: 'toggleHostnameSwitch', name: 'noStrictBlocking', hostname: getTargetHostname(), + fromHostname: details.hn, state: true }, proceedToURL); }; diff --git a/src/js/ublock.js b/src/js/ublock.js index e497977e1..7cc9781d2 100644 --- a/src/js/ublock.js +++ b/src/js/ublock.js @@ -319,7 +319,32 @@ var matchWhitelistDirective = function(url, hostname, directive) { /******************************************************************************/ µBlock.toggleHostnameSwitch = function(details) { - if ( this.hnSwitches.toggleZ(details.name, details.hostname, details.state) ) { + var hostname = details.hostname; + var fromHostname = details.fromHostname || hostname; + var changed = false; + + var fromHostnames = []; + var pos; + for (;;) { + fromHostnames.push(fromHostname); + if ( fromHostname === hostname ) { + break; + } + pos = fromHostname.indexOf('.'); + if ( pos === -1 ) { + break; + } + fromHostname = fromHostname.slice(pos + 1); + } + + var i = fromHostnames.length; + while ( i-- ) { + if ( this.hnSwitches.toggleZ(details.name, fromHostnames[i], details.state) ) { + changed = true; + } + } + + if ( changed ) { this.saveHostnameSwitches(); }