-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackground.js
More file actions
72 lines (68 loc) · 2.4 KB
/
Copy pathbackground.js
File metadata and controls
72 lines (68 loc) · 2.4 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
// background message router
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (!message || !message.type) return;
if (message.type === 'summarize') {
sendResponse({ ok: false, error: 'summarizer-unavailable-in-bg' });
return;
}
if (message.type === 'fetchPage') {
(async () => {
try {
const resp = await fetch(message.url, { credentials: 'omit' });
if (!resp.ok) {
sendResponse({ ok: false, error: `fetch-failed:${resp.status}` });
return;
}
const html = await resp.text();
sendResponse({ ok: true, html });
} catch (err) {
sendResponse({ ok: false, error: err && err.message ? err.message : String(err) });
}
})();
return true; // async
}
if (message.type === 'injectBridge') {
try {
const tabId = sender.tab && sender.tab.id;
if (!tabId) {
sendResponse({ ok: false, error: 'no-tab-id' });
return;
}
chrome.scripting.executeScript(
{ target: { tabId }, files: ['summarizer-bridge.js'], world: 'MAIN' },
(results) => {
if (chrome.runtime.lastError) {
sendResponse({ ok: false, error: chrome.runtime.lastError.message || 'inject-failed' });
return;
}
sendResponse({ ok: true });
}
);
} catch (err) {
sendResponse({ ok: false, error: err && err.message ? err.message : String(err) });
}
return true;
}
if (message.type === 'setIconTheme') {
try {
const theme = message.theme === 'dark' ? 'dark' : 'light';
const getIconPath = (prefix, size) => `icons/${prefix}-${size}.png`;
const iconPaths = {
16: getIconPath(theme === 'dark' ? 'nutshell-dark' : 'nutshell', 16),
32: getIconPath(theme === 'dark' ? 'nutshell-dark' : 'nutshell', 32),
48: getIconPath(theme === 'dark' ? 'nutshell-dark' : 'nutshell', 48),
128: getIconPath(theme === 'dark' ? 'nutshell-dark' : 'nutshell', 128),
};
chrome.action.setIcon({ path: iconPaths }, () => {
if (chrome.runtime.lastError) {
sendResponse({ ok: false, error: chrome.runtime.lastError.message || 'set-icon-failed' });
return;
}
sendResponse({ ok: true, theme });
});
} catch (err) {
sendResponse({ ok: false, error: err && err.message ? err.message : String(err) });
}
return true;
}
});