mirror of
https://github.com/anticensority/runet-censorship-bypass.git
synced 2024-11-30 13:23:44 +03:00
Less logs, no betterStack, get rid of API fixes, setTimeout each API CB
This commit is contained in:
parent
fda42ee307
commit
a460ed85d2
|
@ -35,17 +35,14 @@
|
|||
|
||||
},
|
||||
|
||||
checkChromeError(betterStack) {
|
||||
checkChromeError() {
|
||||
|
||||
// Chrome API calls your cb in a context different from the point of API
|
||||
// method invokation.
|
||||
const err = chrome.runtime.lastError || chrome.extension.lastError;
|
||||
let err = chrome.runtime.lastError || chrome.extension.lastError;
|
||||
if (err) {
|
||||
const args = ['API returned error:', err];
|
||||
if (betterStack) {
|
||||
args.push('\n' + betterStack);
|
||||
}
|
||||
console.warn(...args);
|
||||
err = new Error(err.message); // Add stack.
|
||||
console.warn('API returned error:', err);
|
||||
}
|
||||
return err;
|
||||
|
||||
|
@ -53,14 +50,13 @@
|
|||
|
||||
chromified(cb = self.mandatory(), ...replaceArgs) {
|
||||
|
||||
const stack = (new Error()).stack;
|
||||
// Take error first callback and convert it to chrome api callback.
|
||||
// Take error first callback and convert it to chrome API callback.
|
||||
return function(...args) {
|
||||
|
||||
if (replaceArgs.length) {
|
||||
args = replaceArgs;
|
||||
}
|
||||
const err = self.checkChromeError(stack);
|
||||
const err = self.checkChromeError();
|
||||
// setTimeout fixes error context.
|
||||
setTimeout( cb.bind(null, err, ...args), 0 );
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
{ // Private namespace
|
||||
|
||||
const chromified = window.utils.chromified;
|
||||
|
||||
function errorJsonReplacer(key, value) {
|
||||
|
||||
// fooWindow.ErrorEvent !== barWindow.ErrorEvent
|
||||
|
@ -63,7 +65,7 @@
|
|||
|
||||
state: window.utils.createStorage('handlers-'),
|
||||
|
||||
viewErrorVoid(type = window.utils.mandatory(), err) {
|
||||
viewError(type = window.utils.mandatory(), err) {
|
||||
|
||||
let errors = {};
|
||||
if (err) {
|
||||
|
@ -90,7 +92,7 @@
|
|||
|
||||
},
|
||||
|
||||
switchVoid(onOffStr, eventName) {
|
||||
switch(onOffStr, eventName) {
|
||||
|
||||
if (!['on', 'off'].includes(onOffStr)) {
|
||||
throw new TypeError('First argument bust be "on" or "off".');
|
||||
|
@ -136,7 +138,7 @@
|
|||
|
||||
idToError: {},
|
||||
|
||||
mayNotifyVoid(
|
||||
mayNotify(
|
||||
id, title, errOrMessage,
|
||||
{
|
||||
icon = 'default-128.png',
|
||||
|
@ -166,12 +168,12 @@
|
|||
|
||||
},
|
||||
|
||||
installListenersOnAsync(win, name, cb) {
|
||||
installListenersOn(win, name, cb) {
|
||||
|
||||
win.addEventListener('error', (errEvent) => {
|
||||
|
||||
console.warn(name + ':GLOBAL ERROR', errEvent);
|
||||
this.mayNotifyVoid('ext-error', 'Ошибка расширения', errEvent,
|
||||
this.mayNotify('ext-error', 'Ошибка расширения', errEvent,
|
||||
{icon: 'ext-error-128.png'});
|
||||
|
||||
});
|
||||
|
@ -186,7 +188,8 @@
|
|||
});
|
||||
|
||||
if (cb) {
|
||||
// setTimeout changes error context.
|
||||
// In most cases getBackgroundPage( (bg) => installListenersOn
|
||||
// Without setTimeout errors are swallowed, bug #357568
|
||||
setTimeout(cb, 0);
|
||||
}
|
||||
|
||||
|
@ -201,10 +204,10 @@
|
|||
|
||||
chrome.proxy.settings.get(
|
||||
{},
|
||||
(details) => handlers.isControllable(details)
|
||||
chromified((err, details) => handlers.isControllable(details))
|
||||
);
|
||||
|
||||
chrome.notifications.onClicked.addListener( function(notId) {
|
||||
chrome.notifications.onClicked.addListener( chromified( (_, notId) => {
|
||||
|
||||
chrome.notifications.clear(notId);
|
||||
if(notId === 'no-control') {
|
||||
|
@ -212,13 +215,13 @@
|
|||
window.utils.messages.searchSettingsForUrl('proxy')
|
||||
);
|
||||
}
|
||||
handlers.viewErrorVoid(notId);
|
||||
handlers.viewError(notId);
|
||||
|
||||
});
|
||||
}));
|
||||
|
||||
handlers.installListenersOnAsync(window, 'BG');
|
||||
handlers.installListenersOn(window, 'BG');
|
||||
|
||||
chrome.proxy.onProxyError.addListener((details) => {
|
||||
chrome.proxy.onProxyError.addListener( chromified( (_, details) => {
|
||||
|
||||
if (!handlers.ifControlled) {
|
||||
return;
|
||||
|
@ -231,19 +234,19 @@
|
|||
*/
|
||||
console.warn('PAC ERROR', details);
|
||||
// TOOD: add "view pac script at this line" button.
|
||||
handlers.mayNotifyVoid('pac-error', 'Ошибка PAC!',
|
||||
handlers.mayNotify('pac-error', 'Ошибка PAC!',
|
||||
details.error + '\n' + details.details,
|
||||
{icon: 'pac-error-128.png'}
|
||||
);
|
||||
|
||||
});
|
||||
}));
|
||||
|
||||
chrome.proxy.settings.onChange.addListener((details) => {
|
||||
chrome.proxy.settings.onChange.addListener( chromified((_, details) => {
|
||||
|
||||
console.log('Proxy settings changed.', details);
|
||||
const noCon = 'no-control';
|
||||
if ( !handlers.isControllable(details) ) {
|
||||
handlers.mayNotifyVoid(
|
||||
handlers.mayNotify(
|
||||
noCon,
|
||||
chrome.i18n.getMessage('noControl'),
|
||||
chrome.i18n.getMessage('which'),
|
||||
|
@ -253,6 +256,6 @@
|
|||
chrome.notifications.clear( noCon );
|
||||
}
|
||||
|
||||
});
|
||||
}));
|
||||
|
||||
}
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
|
||||
clarifyThen: function(message, cb = mandatory()) {
|
||||
|
||||
return (err, ...args) => cb( clarify(err, message), ...args );
|
||||
return (err, ...args) => cb( self.clarify(err, message), ...args );
|
||||
|
||||
},
|
||||
|
||||
|
|
|
@ -213,7 +213,6 @@
|
|||
console.log('Purging old IPs for', hostStr);
|
||||
for(const ip of Object.keys(privates._ipToHostObj)) {
|
||||
if (hostStr === privates._ipToHostObj[ip].host) {
|
||||
console.log('del', ip);
|
||||
delete privates._ipToHostObj[ip];
|
||||
}
|
||||
}
|
||||
|
@ -230,9 +229,7 @@
|
|||
// Object may be shared, string can't.
|
||||
const hostObj = _getHostObj(hostStr);
|
||||
for(const ip of ips) {
|
||||
console.log('IP', ip);
|
||||
privates._ipToHostObj[ip] = hostObj;
|
||||
console.log(privates._ipToHostObj[ip], privates._ipToHostObj);
|
||||
}
|
||||
}
|
||||
return cb(err, null, ...warns);
|
||||
|
|
|
@ -102,8 +102,7 @@
|
|||
constructor(mods = {}) {
|
||||
|
||||
const defaults = getDefaults();
|
||||
const ifAllDefaults =
|
||||
Object.keys(defaults)
|
||||
const ifAllDefaults = Object.keys(defaults)
|
||||
.every(
|
||||
(prop) => !(prop in mods)
|
||||
|| Boolean(defaults[prop]) === Boolean(mods[prop])
|
||||
|
@ -257,7 +256,7 @@
|
|||
|
||||
details
|
||||
? resolve(details)
|
||||
: chrome.proxy.settings.get({}, resolve)
|
||||
: chrome.proxy.settings.get({}, chromified( (_, res) => resolve(res)))
|
||||
|
||||
).then( (details) => {
|
||||
|
||||
|
@ -284,7 +283,7 @@
|
|||
|
||||
},
|
||||
|
||||
checkIncontinenceVoid(details) {
|
||||
checkIncontinence(details) {
|
||||
|
||||
if ( kitchenState(ifIncontinence) ) {
|
||||
this._tryNowAsync(details, () => {/* Swallow. */});
|
||||
|
@ -295,7 +294,7 @@
|
|||
|
||||
keepCookedNowAsync(pacMods = mandatory(), cb = throwIfError) {
|
||||
|
||||
console.log('Keep cooked now...', cb);
|
||||
console.log('Keep cooked now...', pacMods);
|
||||
if (typeof(pacMods) === 'function') {
|
||||
cb = pacMods;
|
||||
pacMods = this.getCurrentConfigs();
|
||||
|
@ -364,7 +363,11 @@
|
|||
|
||||
};
|
||||
|
||||
pacKitchen.checkIncontinenceVoid();
|
||||
chrome.proxy.settings.onChange.addListener( pacKitchen.checkIncontinenceVoid.bind(pacKitchen) );
|
||||
pacKitchen.checkIncontinence();
|
||||
chrome.proxy.settings.onChange.addListener(
|
||||
chromified(
|
||||
(_, details) => pacKitchen.checkIncontinence(details)
|
||||
)
|
||||
);
|
||||
|
||||
} // Private namespace ends.
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
const mandatory = window.utils.mandatory;
|
||||
const throwIfError = window.utils.throwIfError;
|
||||
const chromified = window.utils.chromified;
|
||||
const checkChromeError = window.utils.checkChromeError;
|
||||
|
||||
const clarifyThen = window.apis.errorsLib.clarifyThen;
|
||||
const Warning = window.apis.errorsLib.Warning;
|
||||
|
@ -60,13 +59,12 @@
|
|||
},
|
||||
};
|
||||
console.log('Setting chrome proxy settings...');
|
||||
chrome.proxy.settings.set( {value: config}, () => {
|
||||
chrome.proxy.settings.set( {value: config}, chromified((err) => {
|
||||
|
||||
const err = checkChromeError();
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
chrome.proxy.settings.get({}, (details) => {
|
||||
chrome.proxy.settings.get({}, chromified((_, details) => {
|
||||
|
||||
if ( !window.utils.areSettingsControlledFor( details ) ) {
|
||||
|
||||
|
@ -78,9 +76,9 @@
|
|||
}
|
||||
console.log('Successfuly set PAC in proxy settings..');
|
||||
cb();
|
||||
});
|
||||
}));
|
||||
|
||||
});
|
||||
}));
|
||||
|
||||
};
|
||||
|
||||
|
@ -397,16 +395,15 @@
|
|||
chrome.alarms.clearAll(
|
||||
() => chrome.proxy.settings.clear(
|
||||
{},
|
||||
() => {
|
||||
chromified((err) => {
|
||||
|
||||
const err = checkChromeError();
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
this.setCurrentPacProviderKey(null);
|
||||
this.pushToStorageAsync(cb);
|
||||
|
||||
}
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -415,9 +412,8 @@
|
|||
};
|
||||
|
||||
// ON EACH LAUNCH, STARTUP, RELOAD, UPDATE, ENABLE
|
||||
chrome.storage.local.get(null, (oldStorage) => {
|
||||
chrome.storage.local.get(null, chromified( (err, oldStorage) => {
|
||||
|
||||
const err = checkChromeError();
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
@ -431,7 +427,7 @@
|
|||
const antiCensorRu = window.apis.antiCensorRu;
|
||||
|
||||
chrome.alarms.onAlarm.addListener(
|
||||
(alarm) => {
|
||||
chromified((_, alarm) => {
|
||||
|
||||
if (alarm.name === antiCensorRu._periodicUpdateAlarmReason) {
|
||||
console.log(
|
||||
|
@ -441,7 +437,7 @@
|
|||
antiCensorRu.syncWithPacProviderAsync(() => {/* swallow */});
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
);
|
||||
console.log('Alarm listener installed. We won\'t miss any PAC update.');
|
||||
|
||||
|
@ -533,6 +529,6 @@
|
|||
* Add storage.lastPacUpdateStamp.
|
||||
**/
|
||||
|
||||
});
|
||||
}));
|
||||
|
||||
}
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
'use strict';
|
||||
|
||||
/* `setTimeout` changes context of execution from other window
|
||||
(e.g. popup) to background window, so we may catch errors
|
||||
in bg error handlers.
|
||||
More: https://bugs.chromium.org/p/chromium/issues/detail?id=357568
|
||||
setTimeout is applied to Async/Void methods
|
||||
only (name ends with Async/Void)
|
||||
*/
|
||||
// Fix error context of methods of all APIs.
|
||||
|
||||
for(const apiName of Object.keys(window.apis)) {
|
||||
const api = window.apis[apiName];
|
||||
for(const prop of Object.keys(api)) {
|
||||
const method = api[prop];
|
||||
if ( !(
|
||||
typeof(api[prop]) === 'function'
|
||||
&& ['Async', 'Void'].some( (suff) => method.name.endsWith(suff) )
|
||||
)
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
api[prop] = function(...args) {
|
||||
setTimeout(method.bind(this, ...args), 0);
|
||||
};
|
||||
}
|
||||
}
|
|
@ -31,7 +31,6 @@
|
|||
"14-ip-to-host-api.js",
|
||||
"15-pac-kitchen-api.js",
|
||||
"17-sync-pac-script-with-pac-provider-api.js",
|
||||
"20-api-fixes.js",
|
||||
"30-block-informer.js",
|
||||
"40-context-menus.js"
|
||||
]
|
||||
|
|
|
@ -10,7 +10,7 @@ document.getElementById('pac-mods').onchange = function() {
|
|||
};
|
||||
|
||||
chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
||||
backgroundPage.apis.errorHandlers.installListenersOnAsync(
|
||||
backgroundPage.apis.errorHandlers.installListenersOn(
|
||||
window, 'PUP', async() => {
|
||||
|
||||
const getStatus = () => document.querySelector('#status');
|
||||
|
@ -119,7 +119,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
|||
if (err) {
|
||||
getStatus().querySelector('.link-button').onclick = function() {
|
||||
|
||||
errorHandlers.viewErrorVoid('pup-ext-err', err);
|
||||
errorHandlers.viewError('pup-ext-err', err);
|
||||
return false;
|
||||
|
||||
};
|
||||
|
@ -144,7 +144,6 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
|||
|
||||
warns = warns.filter( (w) => w );
|
||||
if (err || warns.length) {
|
||||
backgroundPage.console.log('ERR', err, 'W', warns.length, 'w', warns);
|
||||
showErrors(err, ...warns);
|
||||
} else {
|
||||
setStatusTo(afterStatus);
|
||||
|
@ -479,7 +478,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
|||
conduct(
|
||||
'Применяем исключения...',
|
||||
(cb) => pacKitchen.keepCookedNowAsync(pacMods, cb),
|
||||
'Исключения применены.',
|
||||
'Исключения применены. Не забывайте о кэше!',
|
||||
() => {
|
||||
|
||||
excList.childNodes.forEach(
|
||||
|
@ -616,7 +615,7 @@ HTTPS 11.22.33.44:8080;">${conf.value || localStorage.getItem(uiRaw) || ''}</tex
|
|||
box.onclick = function() {
|
||||
|
||||
const id = this.id.replace('if-on-', '');
|
||||
return backgroundPage.apis.errorHandlers.switchVoid(
|
||||
return backgroundPage.apis.errorHandlers.switch(
|
||||
this.checked ? 'on' : 'off',
|
||||
id
|
||||
);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
||||
backgroundPage.apis.errorHandlers.installListenersOnAsync(
|
||||
backgroundPage.apis.errorHandlers.installListenersOn(
|
||||
window, 'TRBL', () => {
|
||||
|
||||
document.getElementById('reset-settings').onclick = () => {
|
||||
|
@ -12,7 +12,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
|||
};
|
||||
|
||||
document.getElementById('view-errors').onclick = () =>
|
||||
backgroundPage.apis.errorHandlers.viewErrorVoid('all');
|
||||
backgroundPage.apis.errorHandlers.viewError('all');
|
||||
|
||||
})
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue
Block a user