-
-
- Тип: ext-error -
- - - - - -
diff --git a/extensions/chromium/minimalistic-pac-setter/extension/11-api-error-handlers.js b/extensions/chromium/minimalistic-pac-setter/extension/11-api-error-handlers.js
index fdd9fcf..e1e2bf0 100644
--- a/extensions/chromium/minimalistic-pac-setter/extension/11-api-error-handlers.js
+++ b/extensions/chromium/minimalistic-pac-setter/extension/11-api-error-handlers.js
@@ -57,7 +57,7 @@
isNotControlled(details) {
- this.ifNotControlled = window.utils.areSettingsNotControlledFor( details );
+ this.ifNotControlled = window.utils.areSettingsNotControlledFor(details);
if (this.ifNotControlled) {
chrome.browserAction.disable();
} else {
@@ -134,13 +134,22 @@
(details) => handlers.isNotControlled(details)
);
+ const openAndFocus = (url) => {
+
+ chrome.tabs.create(
+ {active: true, url: url},
+ (tab) => chrome.windows.update(tab.windowId, {focused: true})
+ );
+
+ };
+
chrome.notifications.onClicked.addListener( function(notId) {
chrome.notifications.clear(notId);
if(notId === 'no-control') {
- return chrome.tabs.create({active: true, url: 'chrome://settings/#proxy'});
+ return openAndFocus('chrome://settings/#proxy');
}
- chrome.tabs.create({active: true, url: './pages/view-error/index.html#' + notId});
+ openAndFocus('./pages/view-error/index.html#' + notId);
});
@@ -151,9 +160,18 @@
if (handlers.ifNoControl) {
return;
}
+ /*
+ Example:
+ details: "line: 7: Uncaught Error: This is error, man.",
+ error: "net::ERR_PAC_SCRIPT_FAILED",
+ fatal: false,
+ */
console.warn('PAC ERROR', details);
- handlers.mayNotify('pac-error', 'Ошибка PAC!', details,
- 'pac-error-128.png' );
+ // TOOD: add "view pac script at this line" button.
+ handlers.mayNotify('pac-error', 'Ошибка PAC!',
+ details.error + '\n' + details.details,
+ 'pac-error-128.png'
+ );
});
@@ -163,7 +181,8 @@
const noCon = 'no-control';
if ( handlers.isNotControlled(details) ) {
console.log(details);
- handlers.mayNotify(noCon, 'Прокси контролирует другое расширение', details,
+ handlers.mayNotify(noCon, 'Другое расширение контролирует прокси',
+ 'Какое?',
'no-control-128.png');
} else {
chrome.notifications.clear( noCon );
diff --git a/extensions/chromium/minimalistic-pac-setter/extension/12-api-sync-pac-script-with-pac-provider.js b/extensions/chromium/minimalistic-pac-setter/extension/12-api-sync-pac-script-with-pac-provider.js
index f914863..7a0b741 100644
--- a/extensions/chromium/minimalistic-pac-setter/extension/12-api-sync-pac-script-with-pac-provider.js
+++ b/extensions/chromium/minimalistic-pac-setter/extension/12-api-sync-pac-script-with-pac-provider.js
@@ -16,6 +16,71 @@
*/
{ // Private namespace starts.
+ function mandatory() {
+
+ throw new TypeError('Missing required argument. ' +
+ 'Be explicit if you swallow errors.');
+
+ }
+
+ function throwIfError(err) {
+
+ if(err) {
+ throw err;
+ }
+
+ }
+
+ function asyncLogGroup(...args) {
+
+ const cb = args.pop();
+ if(!(cb && typeof(cb) === 'function')) {
+ throw new TypeError('cb must be a function, but got: ' + cb);
+ }
+ console.group(...args);
+ return function(...cbArgs) {
+
+ console.groupEnd();
+ console.log('Group finished.');
+ cb(...cbArgs);
+
+ };
+
+ }
+
+ function checkChromeError(betterStack) {
+
+ // Chrome API calls your cb in a context different from the point of API
+ // method invokation.
+ const err = chrome.runtime.lastError || chrome.extension.lastError || null;
+ if (err) {
+ const args = ['API returned error:', err];
+ if (betterStack) {
+ args.push('\n' + betterStack);
+ }
+ console.warn(...args);
+ }
+ return err;
+
+ }
+
+ function chromified(cb = mandatory(), ...replaceArgs) {
+
+ const stack = (new Error()).stack;
+ // Take error first callback and convert it to chrome api callback.
+ return function(...args) {
+
+ if (replaceArgs.length) {
+ args = replaceArgs;
+ }
+ const err = checkChromeError(stack);
+ // setTimeout fixes error context.
+ setTimeout( cb.bind(null, err, ...args), 0 );
+
+ };
+
+ }
+
window.apis.antiCensorRu = {
version: chrome.runtime.getManifest().version,
@@ -99,7 +164,7 @@
_periodicUpdateAlarmReason: 'Периодичное обновление PAC-скрипта Антизапрет',
- pushToStorageAsync(cb) {
+ pushToStorageAsync(cb = throwIfError) {
console.log('Pushing to storage...');
@@ -123,29 +188,10 @@
},
- /*
- pullFromStorage(cb) {
+ syncWithPacProviderAsync(
+ key = this.currentPacProvierKey, cb = throwIfError) {
- chrome.storage.local.get(null, (storage) => {
-
- const err = checkChromeError();
- if (!err) {
- console.log('Pulled from storage:', storage);
- for(const key of Object.keys(storage)) {
- this[key] = storage[key];
- }
- }
-
- console.log('Synced with storage, any callback?', !!cb);
- cb && cb(err, storage);
-
- });
- },
- */
-
- syncWithPacProviderAsync(key, cb) {
-
- if( !key || typeof(key) === 'function' ) {
+ if( typeof(key) === 'function' ) {
cb = key;
key = this.currentPacProviderKey;
}
@@ -239,7 +285,7 @@
},
- installPacAsync(key, cb) {
+ installPacAsync(key, cb = throwIfError) {
console.log('Installing PAC...');
if (!key) {
@@ -253,7 +299,7 @@
},
- clearPacAsync(cb) {
+ clearPacAsync(cb = throwIfError) {
cb = asyncLogGroup('Cearing alarms and PAC...', cb);
chrome.alarms.clearAll(
@@ -279,7 +325,11 @@
// ON EACH LAUNCH, STARTUP, RELOAD, UPDATE, ENABLE
chrome.storage.local.get(null, (oldStorage) => {
- checkChromeError();
+ const err = checkChromeError();
+ if (err) {
+ throw err;
+ }
+
/*
Event handlers that ALWAYS work (even if installation is not done
or failed).
@@ -296,7 +346,7 @@
'Periodic PAC update triggered:',
new Date().toLocaleString('ru-RU')
);
- antiCensorRu.syncWithPacProviderAsync(/* Swallows errors. */);
+ antiCensorRu.syncWithPacProviderAsync(() => {/* swallow */});
}
}
@@ -358,7 +408,7 @@
// UPDATE & MIGRATION
console.log('Extension updated.');
if (!ifAlarmTriggered) {
- antiCensorRu.pushToStorageAsync(/* Swallows errors. */);
+ antiCensorRu.pushToStorageAsync();
}
/*
@@ -374,55 +424,7 @@
});
- function asyncLogGroup(...args) {
-
- const cb = args.pop() || (() => {});
- console.group(...args);
- return function(...cbArgs) {
-
- console.groupEnd();
- console.log('Group finished.');
- cb(...cbArgs);
-
- };
-
- }
-
- function checkChromeError(betterStack) {
-
- // Chrome API calls your cb in a context different from the point of API
- // method invokation.
- const err = chrome.runtime.lastError || chrome.extension.lastError || null;
- if (err) {
- const args = ['API returned error:', err];
- if (betterStack) {
- args.push('\n' + betterStack);
- }
- console.warn(...args);
- }
- return err;
-
- }
-
- function chromified(cb, ...replaceArgs) {
-
- const stack = (new Error()).stack;
- // Take error first callback and convert it to chrome api callback.
- return function(...args) {
-
- if (replaceArgs.length) {
- args = replaceArgs;
- }
- const err = checkChromeError(stack);
- if (cb) {
- setTimeout( cb.bind(null, err, ...args), 0 );
- }
-
- };
-
- }
-
- function setPac(pacData, cb) {
+ function setPac(pacData, cb = throwIfError) {
const config = {
mode: 'pac_script',
@@ -452,15 +454,14 @@
}
- function httpGet(url, cb) {
+ function httpGet(url, cb = mandatory()) {
const start = Date.now();
fetch(url).then(
(res) => {
const textCb =
- (err) => cb && res.text()
- .then( (text) => cb(err, text), cb );
+ (err) => res.text().then( (text) => cb(err, text), cb );
const status = res.status;
if ( !( status >= 200 && status < 300 || status === 304 ) ) {
res.clarification = {
@@ -477,14 +478,14 @@
err.clarification = {
message: 'Что-то не так с сетью, проверьте соединение.',
};
- cb && cb(err);
+ cb(err);
}
);
}
- function getIpsFor(host, cb) {
+ function getIpsFor(host, cb = mandatory()) {
const types = [1, 28];
const promises = types.map(
@@ -546,7 +547,7 @@
}
- function updatePacProxyIps(provider, cb) {
+ function updatePacProxyIps(provider, cb = throwIfError) {
cb = asyncLogGroup(
'Getting IP for '+ provider.proxyHosts.join(', ') + '...',
@@ -585,7 +586,7 @@
}
- function setPacScriptFromProvider(provider, cb) {
+ function setPacScriptFromProvider(provider, cb = throwIfError) {
cb = asyncLogGroup(
'Getting pac script from provider...', provider.pacUrl,
diff --git a/extensions/chromium/minimalistic-pac-setter/extension/40-context-menus.js b/extensions/chromium/minimalistic-pac-setter/extension/40-context-menus.js
index d7e1fd2..222bce4 100644
--- a/extensions/chromium/minimalistic-pac-setter/extension/40-context-menus.js
+++ b/extensions/chromium/minimalistic-pac-setter/extension/40-context-menus.js
@@ -26,13 +26,13 @@
);
createMenuLinkEntry(
- 'Открыть веб прокси (не наш)',
- (tab) => 'https://kproxy.com'
+ 'Через Google Translate',
+ (tab) => 'https://translate.google.com/translate?hl=&sl=en&tl=ru&anno=2&sandbox=1&u=' + tab.url
);
createMenuLinkEntry(
'Другие варианты разблокировки',
- (tab) => 'https://rebrand.ly/unblock#' + tab.url
+ (tab) => 'https://rebrand.ly/ac-unblock#' + tab.url
);
createMenuLinkEntry(
diff --git a/extensions/chromium/minimalistic-pac-setter/extension/pages/choose-pac-provider/index.js b/extensions/chromium/minimalistic-pac-setter/extension/pages/choose-pac-provider/index.js
index 6a94245..ae93aba 100755
--- a/extensions/chromium/minimalistic-pac-setter/extension/pages/choose-pac-provider/index.js
+++ b/extensions/chromium/minimalistic-pac-setter/extension/pages/choose-pac-provider/index.js
@@ -89,16 +89,20 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
${message}
- [Ещё подробнее]`
+
+ [Ещё подробнее]
+ `
);
getStatus().querySelector('.link-button').onclick = function() {
const div = document.createElement('div');
div.innerHTML = `
- Более подробную информацию можно узнать из логов фоновой страницы:
-
- chrome://extensions ›
- Это расширение › Отладка страниц: фоновая страница › Console (DevTools)
+ Более подробную информацию можно узнать из логов фоновой страницы:
+
+
+ chrome://extensions › Это расширение › Отладка страниц: фоновая
+ страница › Console (DevTools)
Ещё: ` + JSON.stringify({err: err, stack: err.stack});
getStatus().replaceChild(div, this);
@@ -137,7 +141,8 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
const _firstChild = ul.firstChild;
for( const providerKey of Object.keys(antiCensorRu.pacProviders).sort() ) {
const li = document.createElement('li');
- li.innerHTML = `
+ li.innerHTML = `
+
[обновить]`;
@@ -159,7 +164,9 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
for(const radio of radios) {
radio.onclick = function(event) {
- if (event.target.id === (antiCensorRu.currentPacProviderKey || 'none')) {
+ if (
+ event.target.id === (antiCensorRu.currentPacProviderKey || 'none')
+ ) {
return false;
}
const pacKey = event.target.id;
@@ -194,7 +201,10 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
box.onclick = function() {
const id = this.id.replace('if-on-', '');
- backgroundPage.apis.errorHandlers.switch(this.checked ? 'on' : 'off', id);
+ backgroundPage.apis.errorHandlers.switch(
+ this.checked ? 'on' : 'off',
+ id
+ );
};
conpanel.appendChild(li);
diff --git a/extensions/chromium/minimalistic-pac-setter/extension/pages/view-error/index.html b/extensions/chromium/minimalistic-pac-setter/extension/pages/view-error/index.html
index 8344142..c75679e 100644
--- a/extensions/chromium/minimalistic-pac-setter/extension/pages/view-error/index.html
+++ b/extensions/chromium/minimalistic-pac-setter/extension/pages/view-error/index.html
@@ -7,15 +7,13 @@
margin: 0;
padding: 0;
width: 100%;
- height: 100%;
+ min-height: 100%;
}
html {
background: black url('./err.jpg') repeat;
background-position: left;
color: white;
- }
- body {
- background: linear-gradient(to bottom, black 45em, transparent);
+ padding-bottom: 10em;
}
header {
padding-top: 1em;
@@ -52,21 +50,28 @@