Skip to content
This repository has been archived by the owner on Dec 19, 2023. It is now read-only.

Commit

Permalink
Some fixes with messaging
Browse files Browse the repository at this point in the history
  • Loading branch information
Serega007RU committed Oct 5, 2023
1 parent f2e5ae7 commit 4bb2402
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 50 deletions.
74 changes: 39 additions & 35 deletions src/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,46 +55,50 @@ chrome.runtime.onMessage.addListener(function (
sender,
sendResponse
) {
(async () => {
if (type === 'KV_SET') {
if (label.tab_specific) {
label.key = `${sender.tab.id}_${label.key}`;
}
kvStorage[label.key] = label.value;
sendResponse({ status: 'success' });
} else if (type === 'KV_GET') {
if (label.tab_specific) {
label.key = `${sender.tab.id}_${label.key}`;
}
sendResponse({ status: 'success', value: kvStorage[label.key] });
} else if (type === 'HackTimer') {
if (label.name === 'setInterval') {
fakeIdToId[label.fakeId] = setInterval(function () {
triggerTimer(label.name, sender.tab.id, label.fakeId);
}, label.time);
} else if (label.name === 'clearInterval') {
clearInterval(fakeIdToId[label.fakeId]);
delete fakeIdToId[label.fakeId];
} else if (label.name === 'setTimeout') {
fakeIdToId[label.fakeId] = setTimeout(function () {
triggerTimer(label.name, sender.tab.id, label.fakeId);
delete fakeIdToId[label.fakeId];
}, label.time);
} else if (label.name === 'clearTimeout') {
clearTimeout(fakeIdToId[label.fakeId]);
if (type === 'KV_SET') {
if (label.tab_specific) {
label.key = `${sender.tab.id}_${label.key}`;
}
kvStorage[label.key] = label.value;
sendResponse({ status: 'success' });
} else if (type === 'KV_GET') {
if (label.tab_specific) {
label.key = `${sender.tab.id}_${label.key}`;
}
sendResponse({ status: 'success', value: kvStorage[label.key] });
} else if (type === 'HackTimer') {
if (label.name === 'setInterval') {
fakeIdToId[label.fakeId] = setInterval(function () {
triggerTimer(label.name, sender, label.fakeId);
}, label.time);
} else if (label.name === 'clearInterval') {
clearInterval(fakeIdToId[label.fakeId]);
delete fakeIdToId[label.fakeId];
} else if (label.name === 'setTimeout') {
fakeIdToId[label.fakeId] = setTimeout(function () {
triggerTimer(label.name, sender, label.fakeId);
delete fakeIdToId[label.fakeId];
}
}, label.time);
} else if (label.name === 'clearTimeout') {
clearTimeout(fakeIdToId[label.fakeId]);
delete fakeIdToId[label.fakeId];
}
})();
return true;
}
});

async function triggerTimer(name, tabId, fakeId) {
async function triggerTimer(name, sender, fakeId) {
try {
await chrome.tabs.sendMessage(tabId, {
type: 'HackTimer',
label: { fakeId },
});
await chrome.tabs.sendMessage(
sender.tab.id,
{
type: 'HackTimer',
label: { fakeId },
},
{
documentId: sender.documentId,
frameId: sender.frameId,
}
);
} catch (error) {
if (name === 'setInterval') clearInterval(fakeIdToId[fakeId]);
delete fakeIdToId[fakeId];
Expand Down
25 changes: 10 additions & 15 deletions src/hacktimer.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
let fakeIdToCallback = {},
lastFakeId = 0,
maxFakeId = 0x7fffffff; // 2 ^ 31 - 1, 31 bit, positive values of signed 32 bit integer
window.fakeIdToCallback = fakeIdToCallback;
let fakeIdToCallback = {};

function getFakeId() {
do {
if (lastFakeId === maxFakeId) {
lastFakeId = 0;
} else {
lastFakeId++;
}
} while (fakeIdToCallback.hasOwnProperty(lastFakeId));
return lastFakeId;
function uuidv4() {
return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) =>
(
c ^
(crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
).toString(16)
);
}

window.setInterval = function (callback, time /* , parameters */) {
let fakeId = getFakeId();
let fakeId = uuidv4();
fakeIdToCallback[fakeId] = {
callback: callback,
parameters: Array.prototype.slice.call(arguments, 2),
Expand Down Expand Up @@ -43,7 +38,7 @@ window.clearInterval = function (fakeId) {
}
};
window.setTimeout = function (callback, time /* , parameters */) {
let fakeId = getFakeId();
let fakeId = uuidv4();
fakeIdToCallback[fakeId] = {
callback: callback,
parameters: Array.prototype.slice.call(arguments, 2),
Expand Down

0 comments on commit 4bb2402

Please sign in to comment.