mirror of
https://github.com/gorhill/uBlock.git
synced 2026-03-11 09:04:36 +00:00
URL handling changes
This commit is contained in:
parent
3930be428d
commit
089af13e32
7 changed files with 71 additions and 41 deletions
|
|
@ -156,6 +156,12 @@ vAPI.canExecuteContentScript = function() {
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
vAPI.getUrlNormalizer = function() {
|
||||||
|
return document.createElement('a');
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
3
platform/firefox/bootstrap.js
vendored
3
platform/firefox/bootstrap.js
vendored
|
|
@ -26,6 +26,9 @@
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
// Accessing the context of the background page from Console (e.g., about:addons):
|
||||||
|
// var win = Services.appShell.hiddenDOMWindow.document.querySelector('iframe[src*=ublock]').contentWindow;
|
||||||
|
|
||||||
let bgProcess;
|
let bgProcess;
|
||||||
const hostName = 'ublock';
|
const hostName = 'ublock';
|
||||||
const restartListener = {
|
const restartListener = {
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@ const contentObserver = {
|
||||||
|
|
||||||
let openerURL;
|
let openerURL;
|
||||||
|
|
||||||
if ( location.scheme !== 'http' && location.scheme !== 'https' ) {
|
if ( !location.schemeIs('http') && !location.schemeIs('https') ) {
|
||||||
if ( type !== this.MAIN_FRAME ) {
|
if ( type !== this.MAIN_FRAME ) {
|
||||||
return this.ACCEPT;
|
return this.ACCEPT;
|
||||||
}
|
}
|
||||||
|
|
@ -132,7 +132,7 @@ const contentObserver = {
|
||||||
|
|
||||||
let isPopup = location.spec === 'about:blank' && openerURL;
|
let isPopup = location.spec === 'about:blank' && openerURL;
|
||||||
|
|
||||||
if ( location.scheme !== 'data' && !isPopup ) {
|
if ( !location.schemeIs('data') && !isPopup ) {
|
||||||
return this.ACCEPT;
|
return this.ACCEPT;
|
||||||
}
|
}
|
||||||
} else if ( type === this.MAIN_FRAME ) {
|
} else if ( type === this.MAIN_FRAME ) {
|
||||||
|
|
@ -145,8 +145,8 @@ const contentObserver = {
|
||||||
context = (context.ownerDocument || context).defaultView;
|
context = (context.ownerDocument || context).defaultView;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The context for the popups is an iframe element here,
|
// The context for the toolbar popup is an iframe element here,
|
||||||
// so check context.top instead
|
// so check context.top instead of context
|
||||||
if ( context.top && context.location ) {
|
if ( context.top && context.location ) {
|
||||||
// https://bugzil.la/1092216
|
// https://bugzil.la/1092216
|
||||||
getMessageManager(context).sendRpcMessage(this.cpMessageName, {
|
getMessageManager(context).sendRpcMessage(this.cpMessageName, {
|
||||||
|
|
@ -192,6 +192,10 @@ const contentObserver = {
|
||||||
}
|
}
|
||||||
|
|
||||||
sandbox._sandboxId_ = sandboxId;
|
sandbox._sandboxId_ = sandboxId;
|
||||||
|
sandbox._urlNormalizer_ = function(url, baseURI) {
|
||||||
|
baseURI = Services.io.newURI(baseURI, null, null);
|
||||||
|
return Services.io.newURI(url, null, baseURI).asciiSpec;
|
||||||
|
};
|
||||||
sandbox.sendAsyncMessage = messager.sendAsyncMessage;
|
sandbox.sendAsyncMessage = messager.sendAsyncMessage;
|
||||||
sandbox.addMessageListener = function(callback) {
|
sandbox.addMessageListener = function(callback) {
|
||||||
if ( this._messageListener_ ) {
|
if ( this._messageListener_ ) {
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@
|
||||||
Home: https://github.com/gorhill/uBlock
|
Home: https://github.com/gorhill/uBlock
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* global punycode */
|
||||||
|
|
||||||
// For background page
|
// For background page
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
@ -308,7 +310,7 @@ var tabsProgressListener = {
|
||||||
tabId: tabId,
|
tabId: tabId,
|
||||||
url: browser.currentURI.asciiSpec
|
url: browser.currentURI.asciiSpec
|
||||||
});
|
});
|
||||||
} else if ( location.scheme === 'http' || location.scheme === 'https' ) {
|
} else if ( location.schemeIs('http') || location.schemeIs('https') ) {
|
||||||
vAPI.tabs.onNavigation({
|
vAPI.tabs.onNavigation({
|
||||||
frameId: 0,
|
frameId: 0,
|
||||||
tabId: tabId,
|
tabId: tabId,
|
||||||
|
|
@ -352,7 +354,7 @@ vAPI.tabs.registerListeners = function() {
|
||||||
for ( var tab of win.gBrowser.tabs ) {
|
for ( var tab of win.gBrowser.tabs ) {
|
||||||
var URI = tab.linkedBrowser.currentURI;
|
var URI = tab.linkedBrowser.currentURI;
|
||||||
|
|
||||||
if ( URI.scheme === 'chrome' && URI.host === location.host ) {
|
if ( URI.schemeIs('chrome') && URI.host === location.host ) {
|
||||||
win.gBrowser.removeTab(tab);
|
win.gBrowser.removeTab(tab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -489,15 +491,14 @@ vAPI.tabs.open = function(details) {
|
||||||
var tab, tabs;
|
var tab, tabs;
|
||||||
|
|
||||||
if ( details.select ) {
|
if ( details.select ) {
|
||||||
var rgxHash = /#.*/;
|
var URI = Services.io.newURI(details.url, null, null);
|
||||||
// this is questionable
|
|
||||||
var url = details.url.replace(rgxHash, '');
|
|
||||||
tabs = this.getAll();
|
tabs = this.getAll();
|
||||||
|
|
||||||
for ( tab of tabs ) {
|
for ( tab of tabs ) {
|
||||||
var browser = tab.linkedBrowser;
|
var browser = tab.linkedBrowser;
|
||||||
|
|
||||||
if ( browser.currentURI.asciiSpec.replace(rgxHash, '') === url ) {
|
// Or simply .equals if we care about the fragment
|
||||||
|
if ( URI.equalsExceptRef(browser.currentURI) ) {
|
||||||
browser.ownerDocument.defaultView.gBrowser.selectedTab = tab;
|
browser.ownerDocument.defaultView.gBrowser.selectedTab = tab;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -857,7 +858,7 @@ var httpObserver = {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( URI.scheme !== 'http' && URI.scheme !== 'https' ) {
|
if ( !URI.schemeIs('http') && !URI.schemeIs('https') ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -978,8 +979,8 @@ var httpObserver = {
|
||||||
for ( var tab of vAPI.tabs.getAll() ) {
|
for ( var tab of vAPI.tabs.getAll() ) {
|
||||||
var tabURI = tab.linkedBrowser.currentURI;
|
var tabURI = tab.linkedBrowser.currentURI;
|
||||||
|
|
||||||
// Not the best approach
|
// Probably isn't the best method to identify the source tab
|
||||||
if ( tabURI.asciiSpec === this.lastRequest.openerURL ) {
|
if ( tabURI.spec === this.lastRequest.openerURL ) {
|
||||||
sourceTabId = vAPI.tabs.getTabId(tab);
|
sourceTabId = vAPI.tabs.getTabId(tab);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -1016,9 +1017,9 @@ var httpObserver = {
|
||||||
return;
|
return;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
var scheme = newChannel.URI.scheme;
|
var URI = newChannel.URI;
|
||||||
|
|
||||||
if ( scheme !== 'http' && scheme !== 'https' ) {
|
if ( !URI.schemeIs('http') && !URI.schemeIs('https') ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1029,7 +1030,7 @@ var httpObserver = {
|
||||||
var channelData = oldChannel.getProperty(location.host + 'reqdata');
|
var channelData = oldChannel.getProperty(location.host + 'reqdata');
|
||||||
var [type, tabId, sourceTabId] = channelData;
|
var [type, tabId, sourceTabId] = channelData;
|
||||||
|
|
||||||
if ( this.handlePopup(newChannel.URI, tabId, sourceTabId) ) {
|
if ( this.handlePopup(URI, tabId, sourceTabId) ) {
|
||||||
result = this.ABORT;
|
result = this.ABORT;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -1324,8 +1325,9 @@ vAPI.contextMenu.displayMenuItem = function(e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var menuitem = doc.getElementById(vAPI.contextMenu.menuItemId);
|
var menuitem = doc.getElementById(vAPI.contextMenu.menuItemId);
|
||||||
|
var currentURI = gContextMenu.browser.currentURI;
|
||||||
|
|
||||||
if ( /^https?$/.test(gContextMenu.browser.currentURI.scheme) === false) {
|
if ( !currentURI.schemeIs('http') && !currentURI.schemeIs('https') ) {
|
||||||
menuitem.hidden = true;
|
menuitem.hidden = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -1462,6 +1464,25 @@ vAPI.onLoadAllCompleted = function() {};
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
// Likelihood is that we do not have to punycode: given punycode overhead,
|
||||||
|
// it's faster to check and skip than do it unconditionally all the time.
|
||||||
|
|
||||||
|
var punycodeHostname = punycode.toASCII;
|
||||||
|
var isNotASCII = /[^\x21-\x7F]/;
|
||||||
|
|
||||||
|
vAPI.punycodeHostname = function(hostname) {
|
||||||
|
return isNotASCII.test(hostname) ? punycodeHostname(hostname) : hostname;
|
||||||
|
};
|
||||||
|
|
||||||
|
vAPI.punycodeURL = function(url) {
|
||||||
|
if ( isNotASCII.test(url) ) {
|
||||||
|
return Services.io.newURI(url, null, null).asciiSpec;
|
||||||
|
}
|
||||||
|
return url;
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
// clean up when the extension is disabled
|
// clean up when the extension is disabled
|
||||||
|
|
||||||
window.addEventListener('unload', function() {
|
window.addEventListener('unload', function() {
|
||||||
|
|
@ -1478,29 +1499,6 @@ window.addEventListener('unload', function() {
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
// Likelihood is that we do not have to punycode: given punycode overhead,
|
|
||||||
// it's faster to check and skip than do it unconditionally all the time.
|
|
||||||
|
|
||||||
var punycodeHostname = punycode.toASCII;
|
|
||||||
var isNotASCII = /[^\x21-\x7F]/;
|
|
||||||
|
|
||||||
vAPI.punycodeHostname = function(hostname) {
|
|
||||||
return isNotASCII.test(hostname) ? punycodeHostname(hostname) : hostname;
|
|
||||||
};
|
|
||||||
|
|
||||||
var cachedURL = self.URL;
|
|
||||||
|
|
||||||
vAPI.punycodeURL = function(url) {
|
|
||||||
if ( isNotASCII.test(url) === false ) {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
cachedURL.href = url;
|
|
||||||
cachedURL.hostname = punycodeHostname(cachedURL.hostname);
|
|
||||||
return urlNormalizer.href;
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
|
||||||
|
|
@ -174,6 +174,19 @@ vAPI.canExecuteContentScript = function() {
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
vAPI.getUrlNormalizer = function() {
|
||||||
|
return {
|
||||||
|
get href() {
|
||||||
|
return this._url || '';
|
||||||
|
},
|
||||||
|
set href(url) {
|
||||||
|
this._url = _urlNormalizer_(url, document.baseURI);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
})(this);
|
})(this);
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
|
||||||
|
|
@ -182,6 +182,12 @@ vAPI.canExecuteContentScript = function() {
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
vAPI.getUrlNormalizer = function() {
|
||||||
|
return document.createElement('a');
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
// This file can be included into extensin pages,
|
// This file can be included into extensin pages,
|
||||||
// but the following code should run only in content pages.
|
// but the following code should run only in content pages.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -896,7 +896,7 @@ var startPicker = function(details) {
|
||||||
divDialog.addEventListener('click', onDialogClicked);
|
divDialog.addEventListener('click', onDialogClicked);
|
||||||
taCandidate = divDialog.querySelector('textarea');
|
taCandidate = divDialog.querySelector('textarea');
|
||||||
taCandidate.addEventListener('input', onCandidateChanged);
|
taCandidate.addEventListener('input', onCandidateChanged);
|
||||||
urlNormalizer = document.createElement('a');
|
urlNormalizer = vAPI.getUrlNormalizer();
|
||||||
window.addEventListener('scroll', onScrolled, true);
|
window.addEventListener('scroll', onScrolled, true);
|
||||||
window.addEventListener('keydown', onKeyPressed, true);
|
window.addEventListener('keydown', onKeyPressed, true);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue