-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontent.js
More file actions
83 lines (69 loc) · 1.86 KB
/
content.js
File metadata and controls
83 lines (69 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
(() => {
if (globalThis.__emailParserRunner?.active) {
return;
}
const runnerState = {
active: true,
scanner: null,
timeoutId: null,
cleanup: null
};
globalThis.__emailParserRunner = runnerState;
const hardStopTimeoutMs = 21000;
function failSafeSendEmpty() {
try {
chrome.runtime.sendMessage({ action: "saveEmailsForTab", emails: [], done: true }, () => {
void chrome.runtime.lastError;
});
} catch {
// ignored intentionally
}
}
function cleanupRunner() {
if (runnerState.timeoutId) {
clearTimeout(runnerState.timeoutId);
}
if (runnerState.cleanup) {
runnerState.cleanup();
}
runnerState.active = false;
delete globalThis.__emailParserRunner;
}
function handleStopRequest(message, sender, sendResponse) {
if (message?.action !== "stopScanning") {
return;
}
runnerState.scanner?.requestStop();
sendResponse?.({ ok: true });
}
async function run() {
try {
if (!globalThis.EmailParserUtils || !globalThis.EmailScannerFactory) {
failSafeSendEmpty();
cleanupRunner();
return;
}
const scanner = globalThis.EmailScannerFactory.createEmailScanner({
utils: globalThis.EmailParserUtils,
runtime: chrome.runtime,
location: window.location,
document,
domParser: new DOMParser()
});
runnerState.scanner = scanner;
chrome.runtime.onMessage.addListener(handleStopRequest);
runnerState.cleanup = () => chrome.runtime.onMessage.removeListener(handleStopRequest);
runnerState.timeoutId = setTimeout(() => {
if (runnerState.active) {
scanner.requestStop();
}
}, hardStopTimeoutMs);
await scanner.execute();
} catch {
failSafeSendEmpty();
} finally {
cleanupRunner();
}
}
run();
})();