Skip to content

Commit eae9e6f

Browse files
author
varjolintu
committed
Update popup content dynamically
1 parent 8b31246 commit eae9e6f

File tree

16 files changed

+318
-370
lines changed

16 files changed

+318
-370
lines changed

.eslintrc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@
120120
"importScripts": "readonly",
121121
"IMPROVED_DETECTION_PREDEFINED_SITELIST": "readonly",
122122
"initColorTheme": "readonly",
123+
"initializeHttpAuthLoginList": "readonly",
124+
"initializeLoginList": "readonly",
123125
"isEdge": "readonly",
124126
"isFirefox": "readonly",
125127
"keepass": "readonly",
@@ -162,9 +164,12 @@
162164
"ORANGE_BUTTON": "readonly",
163165
"page": "readonly",
164166
"Pixels": "readonly",
165-
"PublicKeyCredential": "readonly",
167+
"PopupIcon": "readonly",
168+
"PopupState": "readonly",
166169
"PREDEFINED_SITELIST": "readonly",
170+
"PublicKeyCredential": "readonly",
167171
"RED_BUTTON": "readonly",
172+
"removeAllChildren": "readonly",
168173
"retrieveColorScheme": "readonly",
169174
"sendMessage": "readonly",
170175
"showNotification": "readonly",

keepassxc-browser/background/browserAction.js

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
const browserActionWrapper = browser.action || browser.browserAction;
44
const browserAction = {};
55

6-
browserAction.show = async function(tab, popupData) {
6+
browserAction.updatePopupIcon = async function(tab, popupData) {
77
popupData ??= page.popupData;
88
page.popupData = popupData;
99

@@ -12,38 +12,33 @@ browserAction.show = async function(tab, popupData) {
1212
});
1313

1414
if (popupData.popup) {
15-
browserActionWrapper.setPopup({
16-
tabId: tab.id,
17-
popup: `popups/${popupData.popup}.html`
18-
});
19-
2015
let badgeText = '';
21-
if (popupData.popup === 'popup_login') {
16+
if (popupData.popup === PopupState.LOGIN) {
2217
badgeText = String(page.tabs[tab.id]?.loginList?.length);
23-
} else if (popupData.popup === 'popup_httpauth') {
18+
} else if (popupData.popup === PopupState.HTTP_AUTH) {
2419
badgeText = String(page.tabs[tab.id]?.loginList?.logins?.length);
2520
}
2621

2722
browserAction.setBadgeText(tab?.id, badgeText);
2823
}
2924
};
3025

31-
browserAction.showDefault = async function(tab) {
26+
browserAction.updatePopup = async function(tab) {
3227
const popupData = {
33-
iconType: 'normal',
34-
popup: 'popup'
28+
iconType: PopupIcon.NORMAL,
29+
popup: PopupState.DEFAULT
3530
};
3631

3732
const response = await keepass.isConfigured().catch((err) => {
3833
logError('Cannot show default popup: ' + err);
3934
});
4035

4136
if (!response && !keepass.isKeePassXCAvailable) {
42-
popupData.iconType = 'cross';
37+
popupData.iconType = PopupIcon.CROSS;
4338
} else if (!keepass.isAssociated() && !keepass.isDatabaseClosed) {
44-
popupData.iconType = 'bang';
39+
popupData.iconType = PopupIcon.BANG;
4540
} else if (keepass.isKeePassXCAvailable && keepass.isDatabaseClosed) {
46-
popupData.iconType = 'locked';
41+
popupData.iconType = PopupIcon.LOCKED;
4742
}
4843

4944
// Get the current tab if no tab given
@@ -52,13 +47,21 @@ browserAction.showDefault = async function(tab) {
5247
return;
5348
}
5449

50+
// Credentials are available
5551
if (page.tabs[tab.id]?.loginList.length > 0) {
56-
popupData.iconType = 'normal';
57-
popupData.popup = 'popup_login';
52+
popupData.iconType = PopupIcon.NORMAL;
53+
popupData.popup = PopupState.LOGIN;
5854
browserAction.setBadgeText(tab?.id, String(page.tabs[tab.id]?.loginList.length));
5955
}
6056

61-
await browserAction.show(tab, popupData);
57+
// HTTP Basic Auth credentials are available
58+
if (page.tabs[tab.id]?.loginList?.logins?.length > 0) {
59+
popupData.iconType = PopupIcon.NORMAL;
60+
popupData.popup = PopupState.HTTP_AUTH;
61+
browserAction.setBadgeText(tab?.id, String(page.tabs[tab.id]?.loginList?.logins?.length));
62+
}
63+
64+
await browserAction.updatePopupIcon(tab, popupData);
6265
};
6366

6467
browserAction.updateIcon = async function(tab, iconType) {
@@ -84,7 +87,7 @@ browserAction.setBadgeText = function(tabId, badgeText) {
8487
browserAction.generateIconName = async function(iconType) {
8588
let name = 'icon_';
8689
name += (await keepass.keePassXCUpdateAvailable()) ? 'new_' : '';
87-
name += (!iconType || iconType === 'normal') ? 'normal' : iconType;
90+
name += (!iconType || iconType === PopupIcon.NORMAL) ? PopupIcon.NORMAL : iconType;
8891

8992
let style = 'colored';
9093
if (page.settings.useMonochromeToolbarIcon) {

keepassxc-browser/background/client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ function onDisconnected() {
398398
keepass.databaseHash = '';
399399

400400
page.clearAllLogins();
401-
keepass.updatePopup('cross');
401+
keepass.updatePopup(PopupIcon.CROSS);
402402
keepass.updateDatabaseHashToContent();
403403
logError(`Failed to connect: ${(browser.runtime.lastError === null ? 'Unknown error' : browser.runtime.lastError.message)}`);
404404
}

keepassxc-browser/background/event.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ kpxcEvent.showStatus = async function(tab, configured, internalPoll) {
2121
}
2222

2323
if (!internalPoll) {
24-
browserAction.showDefault(tab);
24+
browserAction.updatePopup(tab);
2525
}
2626

2727
const errorMessage = page.tabs[tab.id]?.errorMessage ?? undefined;
@@ -30,14 +30,14 @@ kpxcEvent.showStatus = async function(tab, configured, internalPoll) {
3030

3131
return {
3232
associated: keepass.isAssociated(),
33-
3433
configured: configured,
3534
databaseClosed: keepass.isDatabaseClosed,
3635
encryptionKeyUnrecognized: keepass.isEncryptionKeyUnrecognized,
3736
error: errorMessage,
3837
iframeDetected: iframeDetected,
3938
identifier: keyId,
4039
keePassXCAvailable: keepass.isKeePassXCAvailable,
40+
popupData: page.popupData,
4141
showGettingStartedGuideAlert: page.settings.showGettingStartedGuideAlert,
4242
showTroubleshootingGuideAlert: page.settings.showTroubleshootingGuideAlert,
4343
usernameFieldDetected: usernameFieldDetected
@@ -154,12 +154,12 @@ kpxcEvent.onRemoveCredentialsFromTabInformation = async function(tab) {
154154

155155
kpxcEvent.onLoginPopup = async function(tab, logins) {
156156
const popupData = {
157-
iconType: 'normal',
158-
popup: 'popup_login'
157+
iconType: PopupIcon.NORMAL,
158+
popup: PopupState.LOGIN
159159
};
160160

161161
page.tabs[tab.id].loginList = logins;
162-
await browserAction.show(tab, popupData);
162+
await browserAction.updatePopupIcon(tab, popupData);
163163
};
164164

165165
kpxcEvent.initHttpAuth = async function() {
@@ -168,12 +168,12 @@ kpxcEvent.initHttpAuth = async function() {
168168

169169
kpxcEvent.onHTTPAuthPopup = async function(tab, data) {
170170
const popupData = {
171-
iconType: 'normal',
172-
popup: 'popup_httpauth'
171+
iconType: PopupIcon.NORMAL,
172+
popup: PopupState.HTTP_AUTH
173173
};
174174

175175
page.tabs[tab.id].loginList = data;
176-
await browserAction.show(tab, popupData);
176+
await browserAction.updatePopupIcon(tab, popupData);
177177
};
178178

179179
kpxcEvent.onUsernameFieldDetected = async function(tab, detected) {

keepassxc-browser/background/init.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
8080
}
8181

8282
if (changeInfo.status === 'complete') {
83-
browserAction.showDefault(tab);
83+
browserAction.updatePopup(tab);
8484
if (!page.tabs[tab.id]) {
8585
page.createTabEntry(tab.id);
8686
}

keepassxc-browser/background/keepass.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ keepass.updateCredentials = async function(tab, args = []) {
5555
const [ entryId, username, password, url, group, groupUuid ] = args;
5656
const taResponse = await keepass.testAssociation(tab);
5757
if (!taResponse) {
58-
browserAction.showDefault(tab);
58+
browserAction.updatePopup(tab);
5959
return [];
6060
}
6161

@@ -108,7 +108,7 @@ keepass.retrieveCredentials = async function(tab, args = []) {
108108
const [ url, submiturl, triggerUnlock = false, httpAuth = false ] = args;
109109
const taResponse = await keepass.testAssociation(tab, [ false, triggerUnlock ]);
110110
if (!taResponse) {
111-
browserAction.showDefault(tab);
111+
browserAction.updatePopup(tab);
112112
return [];
113113
}
114114

@@ -145,14 +145,14 @@ keepass.retrieveCredentials = async function(tab, args = []) {
145145

146146
if (entries.length === 0) {
147147
// Questionmark-icon is not triggered, so we have to trigger for the normal symbol
148-
browserAction.showDefault(tab);
148+
browserAction.updatePopup(tab);
149149
}
150150

151151
logDebug(`Found ${entries.length} entries for url ${url}`);
152152
return entries;
153153
}
154154

155-
browserAction.showDefault(tab);
155+
browserAction.updatePopup(tab);
156156
return [];
157157
} catch (err) {
158158
logError(`retrieveCredentials failed: ${err}`);
@@ -168,7 +168,7 @@ keepass.generatePassword = async function(tab) {
168168
try {
169169
const taResponse = await keepass.testAssociation(tab);
170170
if (!taResponse) {
171-
browserAction.showDefault(tab);
171+
browserAction.updatePopup(tab);
172172
return '';
173173
}
174174

@@ -235,7 +235,7 @@ keepass.associate = async function(tab) {
235235
keepass.associated.value = true;
236236
keepass.associated.hash = response.hash || 0;
237237

238-
browserAction.showDefault(tab);
238+
browserAction.updatePopup(tab);
239239
return AssociatedAction.NEW_ASSOCIATION;
240240
}
241241

@@ -468,7 +468,7 @@ keepass.getDatabaseGroups = async function(tab) {
468468
try {
469469
const taResponse = await keepass.testAssociation(tab, [ false ]);
470470
if (!taResponse) {
471-
browserAction.showDefault(tab);
471+
browserAction.updatePopup(tab);
472472
return [];
473473
}
474474

@@ -495,7 +495,7 @@ keepass.getDatabaseGroups = async function(tab) {
495495
return groups;
496496
}
497497

498-
browserAction.showDefault(tab);
498+
browserAction.updatePopup(tab);
499499
return [];
500500
} catch (err) {
501501
logError(`getDatabaseGroups failed: ${err}`);
@@ -508,7 +508,7 @@ keepass.createNewGroup = async function(tab, args = []) {
508508
const [ groupName ] = args;
509509
const taResponse = await keepass.testAssociation(tab, [ false ]);
510510
if (!taResponse) {
511-
browserAction.showDefault(tab);
511+
browserAction.updatePopup(tab);
512512
return [];
513513
}
514514

@@ -534,7 +534,7 @@ keepass.createNewGroup = async function(tab, args = []) {
534534
logError('getDatabaseGroups rejected');
535535
}
536536

537-
browserAction.showDefault(tab);
537+
browserAction.updatePopup(tab);
538538
return [];
539539
} catch (err) {
540540
logError(`createNewGroup failed: ${err}`);
@@ -602,7 +602,7 @@ keepass.passkeysRegister = async function(tab, args = []) {
602602
try {
603603
const taResponse = await keepass.testAssociation(tab, [ false ]);
604604
if (!taResponse || !keepass.isConnected || args.length < 2) {
605-
browserAction.showDefault(tab);
605+
browserAction.updatePopup(tab);
606606
return [];
607607
}
608608

@@ -625,7 +625,7 @@ keepass.passkeysRegister = async function(tab, args = []) {
625625
return response;
626626
}
627627

628-
browserAction.showDefault(tab);
628+
browserAction.updatePopup(tab);
629629
return [];
630630
} catch (err) {
631631
logError(`passkeysRegister failed: ${err}`);
@@ -637,7 +637,7 @@ keepass.passkeysGet = async function(tab, args = []) {
637637
try {
638638
const taResponse = await keepass.testAssociation(tab, [ false ]);
639639
if (!taResponse || !keepass.isConnected || args.length < 2) {
640-
browserAction.showDefault(tab);
640+
browserAction.updatePopup(tab);
641641
return [];
642642
}
643643

@@ -658,7 +658,7 @@ keepass.passkeysGet = async function(tab, args = []) {
658658
return response;
659659
}
660660

661-
browserAction.showDefault(tab);
661+
browserAction.updatePopup(tab);
662662
return [];
663663
} catch (err) {
664664
logError(`passkeysGet failed: ${err}`);
@@ -912,7 +912,7 @@ keepass.handleError = function(tab, errorCode, errorMessage = '') {
912912

913913
keepass.updatePopup = function() {
914914
if (page && page.tabs.length > 0) {
915-
browserAction.showDefault();
915+
browserAction.updatePopup();
916916
}
917917
};
918918

keepassxc-browser/background/page.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ page.submittedCredentials = {};
5353
page.tabs = [];
5454

5555
page.popupData = {
56-
iconType: 'normal',
57-
popup: 'popup'
56+
iconType: PopupIcon.NORMAL,
57+
popup: PopupState.DEFAULT
5858
};
5959

6060
page.initSettings = async function() {
@@ -92,7 +92,7 @@ page.initOpenedTabs = async function() {
9292
}
9393

9494
page.currentTabId = currentTab.id;
95-
browserAction.showDefault(currentTab);
95+
browserAction.updatePopup(currentTab);
9696
} catch (err) {
9797
logError('page.initOpenedTabs error: ' + err);
9898
return Promise.reject();
@@ -128,7 +128,7 @@ page.switchTab = async function(tab) {
128128
}
129129
}, page.settings.clearCredentialsTimeout * 1000);
130130

131-
browserAction.showDefault(tab);
131+
browserAction.updatePopup(tab);
132132
browser.tabs.sendMessage(tab.id, { action: 'activated_tab' }).catch((e) => {
133133
logError('Cannot send activated_tab message: ' + e.message);
134134
});
@@ -334,7 +334,7 @@ page.updateContextMenu = async function(tab, credentials) {
334334
};
335335

336336
page.updatePopup = function(tab) {
337-
browserAction.showDefault(tab);
337+
browserAction.updatePopup(tab);
338338
};
339339

340340
page.setAllowIframes = async function(tab, args = []) {

0 commit comments

Comments
 (0)