mirror of
https://github.com/anticensority/runet-censorship-bypass.git
synced 2025-03-03 19:55:48 +03:00
Restyle, start transferring to async storage, manifest now generates mv3 and mv2 (not tested)
This commit is contained in:
parent
df8d1dfe0c
commit
991022b83c
|
@ -0,0 +1,5 @@
|
||||||
|
console.log('Shimming for mv3...');
|
||||||
|
|
||||||
|
if (!chrome.browserAction) {
|
||||||
|
chrome.browserAction = chrome.action;
|
||||||
|
}
|
|
@ -33,7 +33,7 @@ console.log('Extension started.');
|
||||||
|
|
||||||
throwIfError(err) {
|
throwIfError(err) {
|
||||||
|
|
||||||
if(err) {
|
if (err) {
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ console.log('Extension started.');
|
||||||
throw new TypeError('Property must be supplied.');
|
throw new TypeError('Property must be supplied.');
|
||||||
}
|
}
|
||||||
const lastProp = props.pop();
|
const lastProp = props.pop();
|
||||||
for( const prop of props ) {
|
for ( const prop of props ) {
|
||||||
if (!(prop in obj)) {
|
if (!(prop in obj)) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,7 @@ console.log('Extension started.');
|
||||||
|
|
||||||
assert(value) {
|
assert(value) {
|
||||||
|
|
||||||
if(!value) {
|
if (!value) {
|
||||||
console.assert(value);
|
console.assert(value);
|
||||||
throw new Error('Assert failed for:' + value);
|
throw new Error('Assert failed for:' + value);
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ console.log('Extension started.');
|
||||||
|
|
||||||
addRequestResponder(requestType, responder) {
|
addRequestResponder(requestType, responder) {
|
||||||
|
|
||||||
if( privates.requestToResponder[requestType] ) {
|
if ( privates.requestToResponder[requestType] ) {
|
||||||
throw new TypeError(`Request ${requestType} already has responder!`);
|
throw new TypeError(`Request ${requestType} already has responder!`);
|
||||||
}
|
}
|
||||||
privates.requestToResponder[requestType] = responder;
|
privates.requestToResponder[requestType] = responder;
|
||||||
|
@ -127,7 +127,7 @@ console.log('Extension started.');
|
||||||
const cb = args.slice(-1)[0];
|
const cb = args.slice(-1)[0];
|
||||||
self.assert(typeof(cb) === 'function');
|
self.assert(typeof(cb) === 'function');
|
||||||
const responder = privates.requestToResponder[requestType];
|
const responder = privates.requestToResponder[requestType];
|
||||||
if(responder) {
|
if (responder) {
|
||||||
responder(...args);
|
responder(...args);
|
||||||
} else {
|
} else {
|
||||||
cb();
|
cb();
|
||||||
|
@ -137,20 +137,21 @@ console.log('Extension started.');
|
||||||
|
|
||||||
createStorage(prefix) {
|
createStorage(prefix) {
|
||||||
|
|
||||||
return function state(key, value) {
|
return async function state(key, value) {
|
||||||
|
|
||||||
|
const storage = chrome.storage.local;
|
||||||
key = prefix + key;
|
key = prefix + key;
|
||||||
if (value === null) {
|
if (value === null) {
|
||||||
return globalThis.localStorage.removeItem(key);
|
return storage.remove(key);
|
||||||
}
|
}
|
||||||
if (value === undefined) {
|
if (value === undefined) {
|
||||||
const item = globalThis.localStorage.getItem(key);
|
const item = await storage.get(key);
|
||||||
return item && JSON.parse(item);
|
return item && JSON.parse(item);
|
||||||
}
|
}
|
||||||
if (value instanceof Date) {
|
if (value instanceof Date) {
|
||||||
throw new TypeError('Converting Date format to JSON is not supported.');
|
throw new TypeError('Converting Date format to JSON is not supported.');
|
||||||
}
|
}
|
||||||
globalThis.localStorage.setItem(key, JSON.stringify(value));
|
storage.set({[key]: JSON.stringify(value)});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -160,8 +161,8 @@ console.log('Extension started.');
|
||||||
get(key) {
|
get(key) {
|
||||||
return new Promise((resolve) => (
|
return new Promise((resolve) => (
|
||||||
chrome.storage.local.get(
|
chrome.storage.local.get(
|
||||||
key,
|
key,
|
||||||
globalThis.utils.getOrDie((storage) => resolve(key ? storage[key] : storage)),
|
globalThis.utils.getOrDie((storage) => resolve(key ? storage[key] : storage)),
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
},
|
},
|
||||||
|
@ -240,11 +241,11 @@ console.log('Extension started.');
|
||||||
|
|
||||||
let parts;
|
let parts;
|
||||||
parts = crededAddr.split('@');
|
parts = crededAddr.split('@');
|
||||||
let [creds, addr] = [parts.slice(0, -1).join('@'), parts[parts.length - 1]];
|
const [creds, addr] = [parts.slice(0, -1).join('@'), parts[parts.length - 1]];
|
||||||
|
|
||||||
const [hostname, port] = addr.split(':');
|
const [hostname, port] = addr.split(':');
|
||||||
|
|
||||||
parts = creds.split(':')
|
parts = creds.split(':');
|
||||||
const username = parts[0];
|
const username = parts[0];
|
||||||
const password = parts.slice(1).join(':');
|
const password = parts.slice(1).join(':');
|
||||||
|
|
||||||
|
@ -255,15 +256,15 @@ console.log('Extension started.');
|
||||||
hostname,
|
hostname,
|
||||||
port,
|
port,
|
||||||
creds,
|
creds,
|
||||||
}
|
};
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
openAndFocus(url) {
|
openAndFocus(url) {
|
||||||
|
|
||||||
chrome.tabs.create(
|
chrome.tabs.create(
|
||||||
{url: url},
|
{url: url},
|
||||||
(tab) => chrome.globalThiss.update(tab.globalThisId, {focused: true})
|
(tab) => chrome.globalThiss.update(tab.globalThisId, {focused: true}),
|
||||||
);
|
);
|
||||||
|
|
||||||
},
|
},
|
||||||
|
@ -271,10 +272,10 @@ console.log('Extension started.');
|
||||||
};
|
};
|
||||||
|
|
||||||
const max = 2**16;
|
const max = 2**16;
|
||||||
const versionToArray = (v) => [ ...v.split('.'), 0, 0, 0].slice(0,4);
|
const versionToArray = (v) => [...v.split('.'), 0, 0, 0].slice(0, 4);
|
||||||
const versionToInt = (v) => versionToArray(v)
|
const versionToInt = (v) => versionToArray(v)
|
||||||
.reverse()
|
.reverse()
|
||||||
.reduce((acc, vv, i) => acc + parseInt(vv)*(max**i), 0);
|
.reduce((acc, vv, i) => acc + parseInt(vv)*(max**i), 0);
|
||||||
|
|
||||||
const compareVersions = (a, b) => versionToInt(a) - versionToInt(b);
|
const compareVersions = (a, b) => versionToInt(a) - versionToInt(b);
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import './00---mv3-shim.mjs';
|
||||||
import './00-init-apis.mjs';
|
import './00-init-apis.mjs';
|
||||||
${scripts_0x}
|
${scripts_0x}
|
||||||
import './11-error-handlers-api.mjs';
|
import './11-error-handlers-api.mjs';
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"manifest_version": 2,
|
"manifest_version": ${manifestVersion},
|
||||||
|
|
||||||
"name": "__MSG_extName__",
|
"name": "__MSG_extName__",
|
||||||
"default_locale": "ru",
|
"default_locale": "ru",
|
||||||
|
@ -21,6 +21,9 @@
|
||||||
, "notifications"
|
, "notifications"
|
||||||
${extraPermissions}
|
${extraPermissions}
|
||||||
],
|
],
|
||||||
|
|
||||||
|
${hostPermissions}
|
||||||
|
|
||||||
"minimum_chrome_version": "55.0.0.0",
|
"minimum_chrome_version": "55.0.0.0",
|
||||||
"browser_specific_settings": {
|
"browser_specific_settings": {
|
||||||
"gecko": {
|
"gecko": {
|
||||||
|
@ -36,18 +39,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"background": {
|
${background},
|
||||||
${persistent}
|
|
||||||
"page": "./bg.html"
|
|
||||||
},
|
|
||||||
|
|
||||||
"browser_action": {
|
"${action}": {
|
||||||
"default_title": "Этот сайт благословлён | Версия ${version + versionSuffix}",
|
"default_title": "Этот сайт благословлён | Версия ${version + versionSuffix}",
|
||||||
"default_popup": "/pages/options/index.html"
|
"default_popup": "/pages/options/index.html"
|
||||||
},
|
},
|
||||||
"options_ui": {
|
"options_ui": {
|
||||||
"page": "/pages/options/index.html",
|
"page": "/pages/options/index.html"
|
||||||
"chrome_style": false
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,55 +1,53 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
{
|
const chromified = globalThis.utils.chromified;
|
||||||
const chromified = globalThis.utils.chromified;
|
|
||||||
|
|
||||||
const lastErrors = [];
|
const lastErrors = [];
|
||||||
const lastErrorsLength = 20;
|
const lastErrorsLength = 20;
|
||||||
|
|
||||||
const IF_COLL_KEY = 'err-to-exc-if-coll';
|
const state = await globalThis.utils.createstate('err-to-exc');
|
||||||
|
const IF_COLL_KEY = 'if-coll';
|
||||||
|
|
||||||
const privates = {
|
|
||||||
ifCollecting: globalThis.localStorage[IF_COLL_KEY] || false,
|
|
||||||
};
|
|
||||||
|
|
||||||
const that = globalThis.apis.lastNetErrors = {
|
const privates = {
|
||||||
get ifCollecting() {
|
ifCollecting: (await state.get(IF_COLL_KEY)) || false,
|
||||||
|
};
|
||||||
|
|
||||||
return privates.ifCollecting;
|
const that = globalThis.apis.lastNetErrors = {
|
||||||
|
get ifCollecting() {
|
||||||
|
|
||||||
},
|
return privates.ifCollecting;
|
||||||
|
|
||||||
set ifCollecting(newValue) {
|
},
|
||||||
|
|
||||||
privates.ifCollecting = globalThis.localStorage[IF_COLL_KEY] = newValue;
|
set ifCollecting(newValue) {
|
||||||
|
|
||||||
},
|
privates.ifCollecting = newValue;
|
||||||
get: () => lastErrors,
|
state.set(IF_COLL_KEY, newValue);
|
||||||
|
|
||||||
|
},
|
||||||
|
get: () => lastErrors,
|
||||||
|
};
|
||||||
|
|
||||||
|
chrome.webRequest.onErrorOccurred.addListener(chromified((err/*Ignored*/, details) => {
|
||||||
|
|
||||||
|
if (!that.ifCollecting || [
|
||||||
|
'net::ERR_BLOCKED_BY_CLIENT',
|
||||||
|
'net::ERR_ABORTED',
|
||||||
|
'net::ERR_CACHE_MISS',
|
||||||
|
'net::ERR_INSUFFICIENT_RESOURCES',
|
||||||
|
].includes(details.error) ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const last = lastErrors[0];
|
||||||
|
if (last && details.error === last.error && details.url === last.url) {
|
||||||
|
// Dup.
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
chrome.webRequest.onErrorOccurred.addListener(chromified((err/*Ignored*/, details) => {
|
lastErrors.unshift(details);
|
||||||
|
if (lastErrors.length > lastErrorsLength) {
|
||||||
|
lastErrors.pop();
|
||||||
|
}
|
||||||
|
|
||||||
if (!that.ifCollecting || [
|
}), {urls: ['<all_urls>']},
|
||||||
'net::ERR_BLOCKED_BY_CLIENT',
|
);
|
||||||
'net::ERR_ABORTED',
|
|
||||||
'net::ERR_CACHE_MISS',
|
|
||||||
'net::ERR_INSUFFICIENT_RESOURCES',
|
|
||||||
].includes(details.error) ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const last = lastErrors[0];
|
|
||||||
if (last && details.error === last.error && details.url === last.url) {
|
|
||||||
// Dup.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
lastErrors.unshift(details);
|
|
||||||
if (lastErrors.length > lastErrorsLength) {
|
|
||||||
lastErrors.pop();
|
|
||||||
}
|
|
||||||
|
|
||||||
}),
|
|
||||||
{urls: ['<all_urls>']}
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -19,11 +19,21 @@ const contexts = {};
|
||||||
const extraPermissions = ', "webRequest", "webRequestBlocking", "webNavigation"';
|
const extraPermissions = ', "webRequest", "webRequestBlocking", "webNavigation"';
|
||||||
|
|
||||||
contexts.full = Object.assign({}, commonContext, {
|
contexts.full = Object.assign({}, commonContext, {
|
||||||
|
manifestVersion: '3',
|
||||||
versionSuffix: '',
|
versionSuffix: '',
|
||||||
nameSuffixEn: '',
|
nameSuffixEn: '',
|
||||||
nameSuffixRu: '',
|
nameSuffixRu: '',
|
||||||
|
hostPermissions: `"host_permissions": [
|
||||||
|
"*://*/*"
|
||||||
|
],`,
|
||||||
extraPermissions,
|
extraPermissions,
|
||||||
persistent: '',
|
action: 'action',
|
||||||
|
background: `
|
||||||
|
"background": {
|
||||||
|
"service_worker": "./index.mjs",
|
||||||
|
"type": "module"
|
||||||
|
}
|
||||||
|
`,
|
||||||
scripts_0x: '',
|
scripts_0x: '',
|
||||||
scripts_2x: "import './20-ip-to-host-api.mjs';",
|
scripts_2x: "import './20-ip-to-host-api.mjs';",
|
||||||
scripts_8x: `
|
scripts_8x: `
|
||||||
|
@ -34,11 +44,19 @@ contexts.full = Object.assign({}, commonContext, {
|
||||||
});
|
});
|
||||||
|
|
||||||
contexts.mini = Object.assign({}, commonContext, {
|
contexts.mini = Object.assign({}, commonContext, {
|
||||||
|
manifestVersion: '2',
|
||||||
versionSuffix: '-mini',
|
versionSuffix: '-mini',
|
||||||
nameSuffixEn: ' MINI',
|
nameSuffixEn: ' MINI',
|
||||||
nameSuffixRu: ' МИНИ',
|
nameSuffixRu: ' МИНИ',
|
||||||
extraPermissions: '',
|
extraPermissions: '',
|
||||||
persistent: '"persistent": false,',
|
hostPermissions: '',
|
||||||
|
action: 'browser_action',
|
||||||
|
background: `
|
||||||
|
"background": {
|
||||||
|
"persistent": false,
|
||||||
|
"page": "./bg.html"
|
||||||
|
}
|
||||||
|
`,
|
||||||
scripts_0x: '',
|
scripts_0x: '',
|
||||||
scripts_2x: "import '20-for-mini-only.mjs';",
|
scripts_2x: "import '20-for-mini-only.mjs';",
|
||||||
scripts_8x: '',
|
scripts_8x: '',
|
||||||
|
|
Loading…
Reference in New Issue
Block a user