diff --git a/src/js/pagestore.js b/src/js/pagestore.js index c24c8aee5..c01fd96a7 100644 --- a/src/js/pagestore.js +++ b/src/js/pagestore.js @@ -448,26 +448,27 @@ var pageStoreJunkyardMax = 10; /******************************************************************************/ -var PageStore = function(tabId, pageURL) { - this.init(tabId, pageURL); +var PageStore = function(tabId, rawURL, pageURL) { + this.init(tabId, rawURL, pageURL); }; /******************************************************************************/ -PageStore.factory = function(tabId, pageURL) { +PageStore.factory = function(tabId, rawURL, pageURL) { var entry = pageStoreJunkyard.pop(); if ( entry === undefined ) { - entry = new PageStore(tabId, pageURL); + entry = new PageStore(tabId, rawURL, pageURL); } else { - entry.init(tabId, pageURL); + entry.init(tabId, rawURL, pageURL); } return entry; }; /******************************************************************************/ -PageStore.prototype.init = function(tabId, pageURL) { +PageStore.prototype.init = function(tabId, rawURL, pageURL) { this.tabId = tabId; + this.rawURL = rawURL; this.pageURL = pageURL; this.pageHostname = µb.URI.hostnameFromURI(pageURL); @@ -507,7 +508,7 @@ PageStore.prototype.init = function(tabId, pageURL) { /******************************************************************************/ -PageStore.prototype.reuse = function(pageURL, context) { +PageStore.prototype.reuse = function(rawURL, pageURL, context) { // We can't do this: when force refreshing a page, the page store data // needs to be reset //if ( pageURL === this.pageURL ) { @@ -520,6 +521,7 @@ PageStore.prototype.reuse = function(pageURL, context) { // video thumbnail would not work, because the frame hierarchy structure // was flushed from memory, while not really being flushed on the page. if ( context === 'tabUpdated' ) { + this.rawURL = rawURL; this.pageURL = pageURL; this.pageHostname = µb.URI.hostnameFromURI(pageURL); this.pageDomain = µb.URI.domainFromHostname(this.pageHostname) || this.pageHostname; @@ -535,7 +537,7 @@ PageStore.prototype.reuse = function(pageURL, context) { // A new page is completely reloaded from scratch, reset all. this.disposeFrameStores(); this.netFilteringCache = this.netFilteringCache.dispose(); - this.init(this.tabId, pageURL); + this.init(this.tabId, rawURL, pageURL); return this; }; @@ -548,7 +550,7 @@ PageStore.prototype.dispose = function() { // need to release the memory taken by these, which can amount to // sizeable enough chunks (especially requests, through the request URL // used as a key). - this.pageURL = + this.rawURL = this.pageURL = this.pageHostname = this.pageDomain = this.rootHostname = this.rootDomain = this.requestURL = this.requestHostname = this.requestType = ''; @@ -594,8 +596,13 @@ PageStore.prototype.setFrame = function(frameId, frameURL) { /******************************************************************************/ PageStore.prototype.getNetFilteringSwitch = function() { + // https://github.com/gorhill/uBlock/issues/1078 + // Use both the raw and normalized URLs. if ( this.netFilteringReadTime < µb.netWhitelistModifyTime ) { this.netFiltering = µb.getNetFilteringSwitch(this.pageURL); + if ( this.netFiltering && this.rawURL !== this.pageURL ) { + this.netFiltering = µb.getNetFilteringSwitch(this.rawURL); + } this.netFilteringReadTime = Date.now(); } return this.netFiltering; diff --git a/src/js/tab.js b/src/js/tab.js index ccf2a5d8c..f9f5f3b8e 100644 --- a/src/js/tab.js +++ b/src/js/tab.js @@ -198,7 +198,7 @@ vAPI.tabs.registerListeners(); // Tab is not bound if ( !pageStore ) { - return this.pageStores[tabId] = this.PageStore.factory(tabId, normalURL); + return this.pageStores[tabId] = this.PageStore.factory(tabId, pageURL, normalURL); } // https://github.com/gorhill/uBlock/issues/516 @@ -210,7 +210,7 @@ vAPI.tabs.registerListeners(); // Rebind according to context. We rebind even if the URL did not change, // as maybe the tab was force-reloaded, in which case the page stats must // be all reset. - pageStore.reuse(normalURL, context); + pageStore.reuse(pageURL, normalURL, context); return pageStore; }; @@ -248,6 +248,7 @@ vAPI.tabs.registerListeners(); µb.pageStores[vAPI.noTabId] = µb.PageStore.factory( vAPI.noTabId, + '', µb.normalizePageURL(vAPI.noTabId) ); diff --git a/src/js/ublock.js b/src/js/ublock.js index 909b9f964..0cc7e2882 100644 --- a/src/js/ublock.js +++ b/src/js/ublock.js @@ -66,18 +66,16 @@ var matchWhitelistDirective = function(url, hostname, directive) { µBlock.getNetFilteringSwitch = function(url) { var netWhitelist = this.netWhitelist; - var buckets, i; - var pos = url.indexOf('#'); - var targetURL = pos !== -1 ? url.slice(0, pos) : url; - var targetHostname = this.URI.hostnameFromURI(targetURL); + var buckets, i, pos; + var targetHostname = this.URI.hostnameFromURI(url); var key = targetHostname; for (;;) { if ( netWhitelist.hasOwnProperty(key) ) { buckets = netWhitelist[key]; i = buckets.length; while ( i-- ) { - if ( matchWhitelistDirective(targetURL, targetHostname, buckets[i]) ) { - // console.log('"%s" matche url "%s"', buckets[i], targetURL); + if ( matchWhitelistDirective(url, targetHostname, buckets[i]) ) { + // console.log('"%s" matche url "%s"', buckets[i], url); return false; } } @@ -286,7 +284,6 @@ var matchWhitelistDirective = function(url, hostname, directive) { /******************************************************************************/ µBlock.toggleFirewallRule = function(details) { - var changed = false; if ( details.action !== 0 ) { this.sessionFirewall.setCellZ(details.srcHostname, details.desHostname, details.requestType, details.action); } else {