Skip to content

Commit 6df3085

Browse files
authored
Merge pull request #207 from csfloat/feature/alarms-optional
Makes Alarms Permission Optional
2 parents c5f5a24 + fe51fca commit 6df3085

File tree

7 files changed

+47
-19
lines changed

7 files changed

+47
-19
lines changed

manifest.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
"service_worker": "src/background.js",
4444
"type": "module"
4545
},
46-
"permissions": ["storage", "scripting", "alarms"],
46+
"permissions": ["storage", "scripting"],
47+
"optional_permissions": ["alarms"],
4748
"host_permissions": [
4849
"*://*.steamcommunity.com/market/listings/730/*",
4950
"*://*.steamcommunity.com/id/*/inventory*",

src/background.ts

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {Handle} from './lib/bridge/server';
22
import {InternalResponseBundle} from './lib/bridge/types';
33
import MessageSender = chrome.runtime.MessageSender;
4-
import {PING_CSFLOAT_TRADE_STATUS_ALARM_NAME, pingTradeStatus} from './lib/alarms/csfloat_trade_pings';
4+
import {alarmListener, registerTradeAlarmIfPossible} from './lib/alarms/setup';
55

66
function unifiedHandler(request: any, sender: MessageSender, sendResponse: (response?: any) => void) {
77
Handle(request, sender)
@@ -41,21 +41,13 @@ chrome.runtime.onMessageExternal.addListener((request, sender, sendResponse) =>
4141
return true;
4242
});
4343

44-
chrome.alarms.onAlarm.addListener(async (alarm) => {
45-
if (alarm.name === PING_CSFLOAT_TRADE_STATUS_ALARM_NAME) {
46-
await pingTradeStatus();
47-
}
48-
});
44+
if (chrome.alarms) {
45+
// Install at the root level to make sure events wake up the service worker
46+
chrome.alarms.onAlarm.addListener(alarmListener);
47+
}
4948

5049
async function checkAlarmState() {
51-
const alarm = await chrome.alarms.get(PING_CSFLOAT_TRADE_STATUS_ALARM_NAME);
52-
53-
if (!alarm) {
54-
await chrome.alarms.create(PING_CSFLOAT_TRADE_STATUS_ALARM_NAME, {
55-
periodInMinutes: 5,
56-
delayInMinutes: 1,
57-
});
58-
}
50+
await registerTradeAlarmIfPossible();
5951
}
6052

6153
checkAlarmState();

src/lib/alarms/setup.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import {PING_CSFLOAT_TRADE_STATUS_ALARM_NAME, pingTradeStatus} from './csfloat_trade_pings';
2+
import {HasPermissions} from '../bridge/handlers/has_permissions';
3+
4+
export async function alarmListener(alarm: chrome.alarms.Alarm) {
5+
if (alarm.name === PING_CSFLOAT_TRADE_STATUS_ALARM_NAME) {
6+
await pingTradeStatus();
7+
}
8+
}
9+
10+
async function registerAlarmListenerIfPossible() {
11+
if (chrome.alarms) {
12+
chrome.alarms.onAlarm.addListener(alarmListener);
13+
}
14+
}
15+
16+
export async function registerTradeAlarmIfPossible() {
17+
const hasPermissions = await HasPermissions.handleRequest({permissions: ['alarms'], origins: []}, {});
18+
if (!hasPermissions.granted) {
19+
return;
20+
}
21+
22+
await registerAlarmListenerIfPossible();
23+
24+
const alarm = await chrome.alarms.get(PING_CSFLOAT_TRADE_STATUS_ALARM_NAME);
25+
26+
if (!alarm) {
27+
await chrome.alarms.create(PING_CSFLOAT_TRADE_STATUS_ALARM_NAME, {
28+
periodInMinutes: 5,
29+
delayInMinutes: 1,
30+
});
31+
}
32+
}

src/lib/bridge/handlers/ping_setup_extension.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {SimpleHandler} from './main';
22
import {RequestType} from './types';
33
import {environment} from '../../../environment';
4+
import {registerTradeAlarmIfPossible} from '../../alarms/setup';
45

56
export interface PingSetupExtensionRequest {}
67

@@ -9,6 +10,8 @@ export interface PingSetupExtensionResponse {}
910
export const PingSetupExtension = new SimpleHandler<PingSetupExtensionRequest, PingSetupExtensionResponse>(
1011
RequestType.PING_SETUP_EXTENSION,
1112
async (req) => {
13+
await registerTradeAlarmIfPossible();
14+
1215
const resp = await fetch(`${environment.csfloat_base_api_url}/v1/me/extension/setup`, {
1316
credentials: 'include',
1417
method: 'POST',

src/lib/components/trade_offer/auto_fill.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export class AutoFill extends FloatElement {
6161

6262
try {
6363
const hasPermissions = await ClientSend(HasPermissions, {
64-
permissions: [],
64+
permissions: ['alarms'],
6565
origins: ['*://*.steampowered.com/*'],
6666
});
6767
this.hasPermissions = hasPermissions.granted;

src/lib/components/trade_offers/better_tracking.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export class BetterTrackingWidget extends FloatElement {
5656
try {
5757
// Used for api.steampowered.com requests, all tokens stay on the users' device
5858
const hasPermissions = await ClientSend(HasPermissions, {
59-
permissions: [],
59+
permissions: ['alarms'],
6060
origins: ['*://*.steampowered.com/*'],
6161
});
6262

@@ -90,7 +90,7 @@ export class BetterTrackingWidget extends FloatElement {
9090
/>
9191
</div>
9292
<span class="item-name">Setup Offer Tracking on CSFloat</span>
93-
<div class="sale-info">Verify trades faster while preserving your privacy.</div>
93+
<div class="sale-info">Verify trades while preserving your privacy.</div>
9494
</div>
9595
<csfloat-steam-button id="csfloat-enable-enhanced" .text="${'Enable'}"></csfloat-steam-button>
9696
</div>

src/lib/page_scripts/trade_offers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ if (!inPageContext()) {
2424
chrome.runtime.sendMessage(
2525
{
2626
message: 'requestPermissions',
27-
permissions: [],
27+
permissions: ['alarms'],
2828
origins: ['*://*.steampowered.com/*'],
2929
},
3030
(granted) => {

0 commit comments

Comments
 (0)