diff --git a/src/js/contentscript.js b/src/js/contentscript.js index 523997e19..f152625bd 100644 --- a/src/js/contentscript.js +++ b/src/js/contentscript.js @@ -803,6 +803,11 @@ var domCollapser = (function() { return; } } + // Some data: URI can be quite large: no point in taking into account + // the whole URI. + if ( src.lastIndexOf('data:', 0) === 0 ) { + src = src.slice(0, 255); + } var req = new PendingRequest(target, tagName, prop); newRequests.push(new BouncingRequest(req.id, tagName, src)); }; diff --git a/src/js/messaging.js b/src/js/messaging.js index 2b9096f1f..36e5cd1ac 100644 --- a/src/js/messaging.js +++ b/src/js/messaging.js @@ -471,7 +471,10 @@ var tagNameToRequestTypeMap = { /******************************************************************************/ -// Evaluate many requests +// Evaluate many requests. + +// https://github.com/gorhill/uBlock/issues/1782 +// Treat `data:` URIs as 1st-party resources. var filterRequests = function(pageStore, details) { var requests = details.requests; @@ -492,9 +495,14 @@ var filterRequests = function(pageStore, details) { var i = requests.length; while ( i-- ) { request = requests[i]; - context.requestURL = punycodeURL(request.url); + if ( request.url.startsWith('data:') ) { + context.requestURL = request.url; + context.requestHostname = context.pageHostname; + } else { + context.requestURL = punycodeURL(request.url); + context.requestHostname = hostnameFromURI(context.requestURL); + } context.requestType = tagNameToRequestTypeMap[request.tagName]; - context.requestHostname = hostnameFromURI(request.url); r = pageStore.filterRequest(context); if ( typeof r !== 'string' || r.charAt(1) !== 'b' ) { continue; diff --git a/src/js/static-net-filtering.js b/src/js/static-net-filtering.js index 3681754c2..bb4b1dba9 100644 --- a/src/js/static-net-filtering.js +++ b/src/js/static-net-filtering.js @@ -172,8 +172,8 @@ var atoi = function(s) { return cachedParseInt(s, 10); }; +// Be sure to not confuse 'example.com' with 'anotherexample.com' var isFirstParty = function(domain, hostname) { - // Be sure to not confuse 'example.com' with 'anotherexample.com' return hostname.endsWith(domain) && (hostname.length === domain.length || hostname.charAt(hostname.length - domain.length - 1) === '.');