handle document.cookie exceptions in sandboxed frames
This commit is contained in:
parent
5ba111dce9
commit
92fcb02a57
|
@ -59,7 +59,8 @@ self.INJECTED !== 1 && (() => {
|
||||||
if (STYLE_VIA_API) {
|
if (STYLE_VIA_API) {
|
||||||
await API.styleViaAPI({method: 'styleApply'});
|
await API.styleViaAPI({method: 'styleApply'});
|
||||||
} else {
|
} else {
|
||||||
const styles = chrome.app && getStylesViaXhr() ||
|
const blobId = chrome.app && getXhrBlobId();
|
||||||
|
const styles = blobId && getStylesViaXhr(blobId) ||
|
||||||
await API.getSectionsByUrl(getMatchUrl(), null, true);
|
await API.getSectionsByUrl(getMatchUrl(), null, true);
|
||||||
if (styles.disableAll) {
|
if (styles.disableAll) {
|
||||||
delete styles.disableAll;
|
delete styles.disableAll;
|
||||||
|
@ -69,24 +70,28 @@ self.INJECTED !== 1 && (() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getStylesViaXhr() {
|
function getXhrBlobId() {
|
||||||
if (new RegExp(`(^|\\s|;)${chrome.runtime.id}=\\s*([-\\w]+)\\s*(;|$)`).test(document.cookie)) {
|
try {
|
||||||
const data = RegExp.$2;
|
const {cookie} = document; // may throw in sandboxed frames
|
||||||
|
return new RegExp(`(^|\\s|;)${chrome.runtime.id}=\\s*([-\\w]+)\\s*(;|$)`).exec(cookie)[2];
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getStylesViaXhr(data) {
|
||||||
|
try {
|
||||||
const disableAll = data[0] === '1';
|
const disableAll = data[0] === '1';
|
||||||
const url = 'blob:' + chrome.runtime.getURL(data.slice(1));
|
const url = 'blob:' + chrome.runtime.getURL(data.slice(1));
|
||||||
document.cookie = `${chrome.runtime.id}=1; max-age=0`; // remove our cookie
|
document.cookie = `${chrome.runtime.id}=1; max-age=0`; // remove our cookie
|
||||||
let res;
|
let res;
|
||||||
try {
|
if (!disableAll) { // when disabled, will get the styles asynchronously, no rush
|
||||||
if (!disableAll) { // will get the styles asynchronously
|
const xhr = new XMLHttpRequest();
|
||||||
const xhr = new XMLHttpRequest();
|
xhr.open('GET', url, false); // synchronous
|
||||||
xhr.open('GET', url, false); // synchronous
|
xhr.send();
|
||||||
xhr.send();
|
res = JSON.parse(xhr.response);
|
||||||
res = JSON.parse(xhr.response);
|
}
|
||||||
}
|
URL.revokeObjectURL(url);
|
||||||
URL.revokeObjectURL(url);
|
|
||||||
} catch (e) {}
|
|
||||||
return res;
|
return res;
|
||||||
}
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getMatchUrl() {
|
function getMatchUrl() {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user