1
0
Fork 0
mirror of https://github.com/gorhill/uMatrix.git synced 2024-06-13 15:54:54 +12:00

code review

This commit is contained in:
gorhill 2015-05-09 17:14:22 -04:00
parent ea1b442e13
commit 57de4fdf14
5 changed files with 54 additions and 137 deletions

View file

@ -54,7 +54,6 @@ const contentObserver = {
ACCEPT: Ci.nsIContentPolicy.ACCEPT,
MAIN_FRAME: Ci.nsIContentPolicy.TYPE_DOCUMENT,
contentBaseURI: 'chrome://' + hostName + '/content/js/',
cpMessageName: hostName + ':shouldLoad',
uniqueSandboxId: 1,
get componentRegistrar() {
@ -110,65 +109,8 @@ const contentObserver = {
);
},
getFrameId: function(win) {
return win
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils)
.outerWindowID;
},
// https://bugzil.la/612921
shouldLoad: function(type, location, origin, context) {
/*
if ( !context ) {
return this.ACCEPT;
}
if ( !location.schemeIs('http') && !location.schemeIs('https') ) {
return this.ACCEPT;
}
if ( type === this.MAIN_FRAME ) {
context = context.contentWindow || context;
} else if ( type === 7 ) { // SUB_DOCUMENT
context = context.contentWindow;
} else {
context = (context.ownerDocument || context).defaultView;
}
// The context for the toolbar popup is an iframe element here,
// so check context.top instead of context
if ( !context.top || !context.location ) {
return this.ACCEPT;
}
let isTopLevel = context === context.top;
let parentFrameId;
if ( isTopLevel ) {
parentFrameId = -1;
} else if ( context.parent === context.top ) {
parentFrameId = 0;
} else {
parentFrameId = this.getFrameId(context.parent);
}
let messageManager = getMessageManager(context);
let details = {
frameId: isTopLevel ? 0 : this.getFrameId(context),
parentFrameId: parentFrameId,
type: type,
url: location.spec
};
if ( typeof messageManager.sendRpcMessage === 'function' ) {
// https://bugzil.la/1092216
messageManager.sendRpcMessage(this.cpMessageName, details);
} else {
// Compatibility for older versions
messageManager.sendSyncMessage(this.cpMessageName, details);
}
*/
return this.ACCEPT;
},
@ -241,12 +183,14 @@ const contentObserver = {
observe: function(doc) {
let win = doc.defaultView;
if ( !win ) {
return;
}
let loc = win.location;
if ( !loc ) {
return;
}
if ( loc.protocol !== 'http:' && loc.protocol !== 'https:' && loc.protocol !== 'file:' ) {
if ( loc.protocol === 'chrome:' && loc.host === hostName ) {

View file

@ -1143,23 +1143,62 @@ var httpObserver = {
},
channelDataFromChannel: function(channel) {
if ( !(channel instanceof Ci.nsIWritablePropertyBag) ) {
return null;
}
try {
return channel.getProperty(this.REQDATAKEY);
} catch (ex) {
if ( channel instanceof Ci.nsIWritablePropertyBag ) {
try {
return channel.getProperty(this.REQDATAKEY);
} catch (ex) {
}
}
return null;
},
// https://github.com/gorhill/uMatrix/issues/165
// https://developer.mozilla.org/en-US/Firefox/Releases/3.5/Updating_extensions#Getting_a_load_context_from_a_request
// Not sure `umatrix:shouldLoad` is still needed, uMatrix does not
// care about embedded frames topography.
tabIdFromChannel: function(channel) {
var aWindow;
if ( channel.notificationCallbacks ) {
try {
aWindow = channel
.notificationCallbacks
.getInterface(Components.interfaces.nsILoadContext)
.associatedWindow;
} catch (ex) {
}
}
try {
if ( !aWindow && channel.loadGroup && channel.loadGroup.notificationCallbacks ) {
aWindow = channel
.loadGroup
.notificationCallbacks
.getInterface(Components.interfaces.nsILoadContext)
.associatedWindow;
}
if ( aWindow ) {
return vAPI.tabs.getTabId(aWindow
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShell)
.rootTreeItem
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow)
.gBrowser
.getBrowserForContentWindow(aWindow)
);
}
} catch (ex) {
}
return vAPI.noTabId;
},
observe: function(channel, topic) {
if ( channel instanceof Ci.nsIHttpChannel === false ) {
return;
}
var URI = channel.URI;
var channelData;
var channelData, tabId, rawtype;
if (
topic === 'http-on-examine-response' ||
@ -1216,51 +1255,8 @@ var httpObserver = {
}
// http-on-opening-request
// https://github.com/gorhill/uMatrix/issues/165
// https://developer.mozilla.org/en-US/Firefox/Releases/3.5/Updating_extensions#Getting_a_load_context_from_a_request
// Not sure `umatrix:shouldLoad` is still needed, uMatrix does not
// care about embedded frames topography.
var tabId = vAPI.noTabId;
var aWindow;
if ( channel.notificationCallbacks ) {
try {
aWindow = channel
.notificationCallbacks
.getInterface(Components.interfaces.nsILoadContext)
.associatedWindow;
} catch (ex) {
}
}
if ( !aWindow && channel.loadGroup && channel.loadGroup.notificationCallbacks ) {
try {
aWindow = channel
.loadGroup.notificationCallbacks
.getInterface(Components.interfaces.nsILoadContext)
.associatedWindow;
} catch (ex) {
}
}
if ( aWindow ) {
try {
tabId = vAPI.tabs.getTabId(aWindow
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShell)
.rootTreeItem
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow)
.gBrowser
.getBrowserForContentWindow(aWindow)
);
} catch (ex) {
}
}
var rawtype = channel.loadInfo && channel.loadInfo.contentPolicyType || 1;
tabId = this.tabIdFromChannel(channel);
rawtype = channel.loadInfo && channel.loadInfo.contentPolicyType || 1;
if ( this.handleRequest(channel, URI, tabId, rawtype) === true ) {
return;
@ -1323,14 +1319,6 @@ vAPI.net.registerListeners = function() {
new Set(this.onBeforeSendHeaders.types) :
null;
var shouldLoadListenerMessageName = location.host + ':shouldLoad';
var shouldLoadListener = function(e) { };
vAPI.messaging.globalMessageManager.addMessageListener(
shouldLoadListenerMessageName,
shouldLoadListener
);
var locationChangedListenerMessageName = location.host + ':locationChanged';
var locationChangedListener = function(e) {
var details = e.data;
@ -1351,11 +1339,7 @@ vAPI.net.registerListeners = function() {
// https://github.com/chrisaljoudi/uBlock/issues/105
// Allow any kind of pages
vAPI.tabs.onNavigation({
frameId: 0,
tabId: tabId,
url: details.url,
});
vAPI.tabs.onNavigation({ frameId: 0, tabId: tabId, url: details.url });
};
vAPI.messaging.globalMessageManager.addMessageListener(
@ -1366,11 +1350,6 @@ vAPI.net.registerListeners = function() {
httpObserver.register();
cleanupTasks.push(function() {
vAPI.messaging.globalMessageManager.removeMessageListener(
shouldLoadListenerMessageName,
shouldLoadListener
);
vAPI.messaging.globalMessageManager.removeMessageListener(
locationChangedListenerMessageName,
locationChangedListener

View file

@ -45,12 +45,6 @@ if ( !vAPI ) {
return;
}
// https://github.com/chrisaljoudi/uBlock/issues/587
// Pointless to execute without the start script having done its job.
if ( !vAPI.contentscriptStartInjected ) {
return;
}
// https://github.com/chrisaljoudi/uBlock/issues/456
// Already injected?
if ( vAPI.contentscriptEndInjected ) {

View file

@ -35,7 +35,7 @@
// https://github.com/chrisaljoudi/uBlock/issues/464
if ( document instanceof HTMLDocument === false ) {
//console.debug('contentscript-start.js > not a HTLMDocument');
return false;
return;
}
// This can happen

View file

@ -36,7 +36,7 @@ var trJunkyard = [];
var tdJunkyard = [];
var firstVarDataCol = 2; // currently, column 2 (0-based index)
var lastVarDataIndex = 3; // currently, d0-d3
var maxEntries = 5000;
var maxEntries = 1000;
var noTabId = '';
var allTabIds = {};