84 lines
2.6 KiB
JavaScript
84 lines
2.6 KiB
JavaScript
(() => {
|
|
const REQUEST_TYPE = 'AB_TAB_GROUP_REQUEST';
|
|
const RESPONSE_TYPE = 'AB_TAB_GROUP_RESPONSE';
|
|
|
|
window.addEventListener('message', (event) => {
|
|
if (event.source !== window) {
|
|
return;
|
|
}
|
|
|
|
const data = event.data;
|
|
if (!data || data.type !== REQUEST_TYPE) {
|
|
return;
|
|
}
|
|
|
|
const request = {
|
|
type: REQUEST_TYPE,
|
|
nonce: data.nonce,
|
|
session: data.session,
|
|
groupTitle: data.groupTitle,
|
|
pluginId: data.pluginId,
|
|
allowedDomains: Array.isArray(data.allowedDomains) ? data.allowedDomains : undefined,
|
|
};
|
|
|
|
try {
|
|
chrome.runtime.sendMessage(request, (response) => {
|
|
const lastError = chrome.runtime.lastError;
|
|
if (lastError) {
|
|
window.postMessage(
|
|
{
|
|
type: RESPONSE_TYPE,
|
|
nonce: request.nonce,
|
|
ok: false,
|
|
error: lastError.message,
|
|
},
|
|
'*'
|
|
);
|
|
return;
|
|
}
|
|
|
|
const payload = response && typeof response === 'object' ? response : { ok: false };
|
|
|
|
window.postMessage(
|
|
{
|
|
type: RESPONSE_TYPE,
|
|
nonce: request.nonce,
|
|
ok: payload.ok === true,
|
|
extensionId:
|
|
typeof payload.extensionId === 'string' && payload.extensionId.length > 0
|
|
? payload.extensionId
|
|
: chrome.runtime.id,
|
|
groupId: typeof payload.groupId === 'number' ? payload.groupId : undefined,
|
|
windowId: typeof payload.windowId === 'number' ? payload.windowId : undefined,
|
|
color: typeof payload.color === 'string' ? payload.color : undefined,
|
|
collapsed: payload.collapsed === true,
|
|
policy:
|
|
payload.policy && typeof payload.policy === 'object'
|
|
? {
|
|
enforced: payload.policy.enforced === true,
|
|
blocked: payload.policy.blocked === true,
|
|
reason:
|
|
typeof payload.policy.reason === 'string' ? payload.policy.reason : undefined,
|
|
}
|
|
: undefined,
|
|
riskHints: Array.isArray(payload.riskHints) ? payload.riskHints : undefined,
|
|
error: typeof payload.error === 'string' ? payload.error : undefined,
|
|
},
|
|
'*'
|
|
);
|
|
});
|
|
} catch (error) {
|
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
window.postMessage(
|
|
{
|
|
type: RESPONSE_TYPE,
|
|
nonce: request.nonce,
|
|
ok: false,
|
|
error: errorMessage,
|
|
},
|
|
'*'
|
|
);
|
|
}
|
|
});
|
|
})();
|