|
|
|
@ -38,6 +38,8 @@ var manifest = chrome.runtime.getManifest();
|
|
|
|
|
|
|
|
|
|
vAPI.chrome = true;
|
|
|
|
|
|
|
|
|
|
var noopFunc = function(){};
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
|
|
vAPI.app = {
|
|
|
|
@ -280,7 +282,7 @@ vAPI.messaging = {
|
|
|
|
|
ports: {},
|
|
|
|
|
listeners: {},
|
|
|
|
|
defaultHandler: null,
|
|
|
|
|
NOOPFUNC: function(){},
|
|
|
|
|
NOOPFUNC: noopFunc,
|
|
|
|
|
UNHANDLED: 'vAPI.messaging.notHandled'
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -382,25 +384,81 @@ vAPI.messaging.broadcast = function(message) {
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
|
|
vAPI.net = {
|
|
|
|
|
registerListeners: function() {
|
|
|
|
|
var listeners = [
|
|
|
|
|
'onBeforeRequest',
|
|
|
|
|
'onBeforeSendHeaders',
|
|
|
|
|
'onHeadersReceived'
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
for ( var i = 0; i < listeners.length; i++ ) {
|
|
|
|
|
chrome.webRequest[listeners[i]].addListener(
|
|
|
|
|
this[listeners[i]].callback,
|
|
|
|
|
{
|
|
|
|
|
'urls': this[listeners[i]].urls || ['<all_urls>'],
|
|
|
|
|
'types': this[listeners[i]].types || []
|
|
|
|
|
},
|
|
|
|
|
this[listeners[i]].extra
|
|
|
|
|
);
|
|
|
|
|
vAPI.net = {};
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
|
|
vAPI.net.registerListeners = function() {
|
|
|
|
|
var µb = µBlock;
|
|
|
|
|
var µburi = µb.URI;
|
|
|
|
|
|
|
|
|
|
var normalizeRequestDetails = function(details) {
|
|
|
|
|
µburi.set(details.url);
|
|
|
|
|
|
|
|
|
|
details.tabId = details.tabId.toString();
|
|
|
|
|
details.hostname = µburi.hostnameFromURI(details.url);
|
|
|
|
|
|
|
|
|
|
var type = details.type;
|
|
|
|
|
if ( type !== 'other' ) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var path = µburi.path;
|
|
|
|
|
var pos = path.lastIndexOf('.');
|
|
|
|
|
if ( pos === -1 ) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
var ext = path.slice(pos) + '.';
|
|
|
|
|
if ( '.eot.ttf.otf.svg.woff.woff2.'.indexOf(ext) !== -1 ) {
|
|
|
|
|
details.type = 'font';
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if ( '.ico.'.indexOf(ext) !== -1 ) {
|
|
|
|
|
details.type = 'image';
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// https://code.google.com/p/chromium/issues/detail?id=410382
|
|
|
|
|
if ( type === 'other' ) {
|
|
|
|
|
details.type = 'object';
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var onBeforeRequestClient = this.onBeforeRequest.callback;
|
|
|
|
|
var onBeforeRequest = function(details) {
|
|
|
|
|
normalizeRequestDetails(details);
|
|
|
|
|
return onBeforeRequestClient(details);
|
|
|
|
|
};
|
|
|
|
|
chrome.webRequest.onBeforeRequest.addListener(
|
|
|
|
|
onBeforeRequest,
|
|
|
|
|
{
|
|
|
|
|
'urls': this.onBeforeRequest.urls || ['<all_urls>'],
|
|
|
|
|
'types': this.onBeforeRequest.types || []
|
|
|
|
|
},
|
|
|
|
|
this.onBeforeRequest.extra
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
chrome.webRequest.onBeforeSendHeaders.addListener(
|
|
|
|
|
this.onBeforeSendHeaders.callback,
|
|
|
|
|
{
|
|
|
|
|
'urls': this.onBeforeSendHeaders.urls || ['<all_urls>'],
|
|
|
|
|
'types': this.onBeforeSendHeaders.types || []
|
|
|
|
|
},
|
|
|
|
|
this.onBeforeSendHeaders.extra
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
var onHeadersReceivedClient = this.onHeadersReceived.callback;
|
|
|
|
|
var onHeadersReceived = function(details) {
|
|
|
|
|
normalizeRequestDetails(details);
|
|
|
|
|
return onHeadersReceivedClient(details);
|
|
|
|
|
};
|
|
|
|
|
chrome.webRequest.onHeadersReceived.addListener(
|
|
|
|
|
onHeadersReceived,
|
|
|
|
|
{
|
|
|
|
|
'urls': this.onHeadersReceived.urls || ['<all_urls>'],
|
|
|
|
|
'types': this.onHeadersReceived.types || []
|
|
|
|
|
},
|
|
|
|
|
this.onHeadersReceived.extra
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|