Raymond Hill 2018-12-16 10:51:25 -05:00
parent 8eb7794965
commit ee89f88265
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2
1 changed files with 29 additions and 12 deletions

View File

@ -30,7 +30,7 @@
// https://github.com/gorhill/uBlock/issues/2950 // https://github.com/gorhill/uBlock/issues/2950
// Firefox 56 does not normalize URLs to ASCII, uBO must do this itself. // Firefox 56 does not normalize URLs to ASCII, uBO must do this itself.
// https://bugzilla.mozilla.org/show_bug.cgi?id=945240 // https://bugzilla.mozilla.org/show_bug.cgi?id=945240
let evalMustPunycode = function() { const evalMustPunycode = function() {
return vAPI.webextFlavor.soup.has('firefox') && return vAPI.webextFlavor.soup.has('firefox') &&
vAPI.webextFlavor.major < 57; vAPI.webextFlavor.major < 57;
}; };
@ -39,16 +39,16 @@
// The real actual webextFlavor value may not be set in stone, so listen // The real actual webextFlavor value may not be set in stone, so listen
// for possible future changes. // for possible future changes.
window.addEventListener('webextFlavor', function() { window.addEventListener('webextFlavor', ( ) => {
mustPunycode = evalMustPunycode(); mustPunycode = evalMustPunycode();
}, { once: true }); }, { once: true });
let denormalizeTypes = function(aa) { const denormalizeTypes = function(aa) {
if ( aa.length === 0 ) { if ( aa.length === 0 ) {
return Array.from(vAPI.net.validTypes); return Array.from(vAPI.net.validTypes);
} }
let out = new Set(), const out = new Set();
i = aa.length; let i = aa.length;
while ( i-- ) { while ( i-- ) {
let type = aa[i]; let type = aa[i];
if ( vAPI.net.validTypes.has(type) ) { if ( vAPI.net.validTypes.has(type) ) {
@ -57,13 +57,16 @@
if ( type === 'image' && vAPI.net.validTypes.has('imageset') ) { if ( type === 'image' && vAPI.net.validTypes.has('imageset') ) {
out.add('imageset'); out.add('imageset');
} }
if ( type === 'sub_frame' ) {
out.add('object');
}
} }
return Array.from(out); return Array.from(out);
}; };
let punycode = self.punycode; const punycode = self.punycode;
let reAsciiHostname = /^https?:\/\/[0-9a-z_.:@-]+[/?#]/; const reAsciiHostname = /^https?:\/\/[0-9a-z_.:@-]+[/?#]/;
let parsedURL = new URL('about:blank'); const parsedURL = new URL('about:blank');
vAPI.net.normalizeDetails = function(details) { vAPI.net.normalizeDetails = function(details) {
if ( mustPunycode && !reAsciiHostname.test(details.url) ) { if ( mustPunycode && !reAsciiHostname.test(details.url) ) {
@ -74,7 +77,7 @@
); );
} }
let type = details.type; const type = details.type;
// https://github.com/gorhill/uBlock/issues/1493 // https://github.com/gorhill/uBlock/issues/1493
// Chromium 49+/WebExtensions support a new request type: `ping`, // Chromium 49+/WebExtensions support a new request type: `ping`,
@ -88,10 +91,24 @@
details.type = 'image'; details.type = 'image';
return; return;
} }
// https://github.com/uBlockOrigin/uBlock-issues/issues/345
// Re-categorize an embedded object as a `sub_frame` if its
// content type is that of a HTML document.
if ( type === 'object' && Array.isArray(details.responseHeaders) ) {
for ( const header of details.responseHeaders ) {
if ( header.name.toLowerCase() === 'content-type' ) {
if ( header.value.startsWith('text/html') ) {
details.type = 'sub_frame';
}
break;
}
}
}
}; };
vAPI.net.denormalizeFilters = function(filters) { vAPI.net.denormalizeFilters = function(filters) {
let urls = filters.urls || [ '<all_urls>' ]; const urls = filters.urls || [ '<all_urls>' ];
let types = filters.types; let types = filters.types;
if ( Array.isArray(types) ) { if ( Array.isArray(types) ) {
types = denormalizeTypes(types); types = denormalizeTypes(types);