Skip to content

Commit 5b44148

Browse files
committed
Incrementing version to 4.0
The MV3 migration contains so many moving parts it probably has a higher risk of rollback problems than normal, so despite the lack of visual fanfare it's probably worthy of a major version bump.
1 parent dc3a7c1 commit 5b44148

18 files changed

+37
-37
lines changed

_locales/en/messages.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -823,7 +823,7 @@
823823
"message": "Always save new entries here",
824824
"description": "Description of checkbox that when enabled will change a setting such that the user is not prompted where to save future entries they create."
825825
},
826-
"list_version_upgrade_3_12": {
826+
"list_version_upgrade_4_0": {
827827
"message": "Support for the latest web browsers (MV3);Faster connection to KeePass on some systems (requires KeePassRPC.plgx v2+);Lots of bug fixes and probably some new bugs introduced",
828828
"description": "Changes for the version number in the string key name. Multiple items MUST be separated by a semicolon (;). Do not use a semi-colon except as a list-item (new line) separator."
829829
},

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "kee-browser-addon",
33
"displayName": "Kee - Password Manager",
44
"description": "Kee adds private, secure and easy password management features which save time and keep your private data more secure.",
5-
"version": "3.12.0",
5+
"version": "4.0.0",
66
"type": "module",
77
"devDependencies": {
88
"@ffflorian/jszip-cli": "^3.6.3",

src/background/KF.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ class Kee {
465465
}
466466

467467
updateKeePassDatabases(newDatabases: Database[]) {
468-
//TODO:4: To improve performance we might need to determine if anything
468+
//TODO:5: To improve performance we might need to determine if anything
469469
// has actually changed before doing the dispatches and poking the
470470
// current tab frames to find entries
471471
let newDatabaseActiveIndex = -1;
@@ -508,7 +508,7 @@ class Kee {
508508

509509
private refreshFormStatus(action: Action) {
510510
this.tabStates.forEach((ts, tabId) => {
511-
//TODO:4: This should be equivalent but much faster than testing in the inner
511+
//TODO:5: This should be equivalent but much faster than testing in the inner
512512
// loop. Unless tabId does not equal port.sender.tab.id?
513513
//if (tabId !== this.foregroundTabId) return;
514514

src/common/ConfigManager.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ export class ConfigManager {
165165
if (nextPage) configString += nextPage;
166166
}
167167
if (configString) this.current = JSON.parse(configString);
168-
//TODO:4: Delete the old keefox prefixed data to save space
168+
//TODO:5: Delete the old keefox prefixed data to save space
169169
}
170170
}
171171
this.fixInvalidConfigData();

src/common/DefaultSiteConfig.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ defaultSiteConfig.pageRegex = new SiteConfigLookup();
55

66
defaultSiteConfig.pageRegex["^.*$"] = {
77
config: {
8-
/* TODO:4: ? In future we can give finer control of form rescanning behaviour from here
8+
/* TODO:5: ? In future we can give finer control of form rescanning behaviour from here
99
rescanDOMevents:
1010
[{
1111

src/common/IPCPiniaPlugin.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { Mutation } from "../store/Mutation";
66
export function IPCPiniaPlugin() {
77
return {
88
distributeAction: (mutation: Mutation) => {
9-
//TODO:4: Find a way to more efficiently distribute Pinia Patch objects / Vue3 Proxy objects without this additional JSON mapping / manipulation
9+
//TODO:5: Find a way to more efficiently distribute Pinia Patch objects / Vue3 Proxy objects without this additional JSON mapping / manipulation
1010
const json = JSON.stringify(mutation);
1111
KeeLog.debug("New non-background mutation/action going to be distributed.");
1212
Port.postMessage({ mutation: JSON.parse(json) } as AddonMessage);

src/common/model/Entry.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export class Entry {
4646

4747
// How relevant this entry is to the current form in
4848
// the browser - transient (not stored in KeePass)
49-
//TODO:4 put all match data into a new object?
49+
//TODO:5 put all match data into a new object?
5050
relevanceScore: number;
5151
lowFieldMatchRatio: any;
5252
formIndex: number;

src/common/model/EntrySummary.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export class EntrySummary {
1414
uuid: string;
1515
dbFileName: string;
1616
relevanceScore: number;
17-
fullDetails?: Entry; //TODO:4: remove circular reference by maintaining independent Entry lookup by uuid?
17+
fullDetails?: Entry; //TODO:5: remove circular reference by maintaining independent Entry lookup by uuid?
1818
isPreferredMatch?: boolean;
1919

2020
constructor(e: Partial<EntrySummary>) {

src/common/model/Locator.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,5 @@ export class Locator {
2626
this.autocompleteValues = locator.autocompleteValues;
2727
}
2828

29-
//TODO:4: Things like MaxLength that can be used to both help identify the field and generate new values/passwords
29+
//TODO:5: Things like MaxLength that can be used to both help identify the field and generate new values/passwords
3030
}

src/page/formFilling.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ export class FormFilling {
169169
private calculateFieldMatchScore(
170170
matchedField: MatchedField,
171171
dataField: Field,
172-
_currentPage, //TODO:4: remove param
172+
_currentPage, //TODO:5: remove param
173173
config: FieldMatchScoreConfig,
174174
isVisible?: boolean
175175
) {
@@ -359,7 +359,7 @@ export class FormFilling {
359359
domElement.value = value;
360360
}
361361

362-
//TODO:4: Investigate and document why we're not using data attributes to store this string in the DOM
362+
//TODO:5: Investigate and document why we're not using data attributes to store this string in the DOM
363363
(domElement as any).keeInitialDetectedValue = value;
364364

365365
domElement.dispatchEvent(
@@ -437,7 +437,7 @@ export class FormFilling {
437437
}
438438

439439
private initMatchResult(behaviour: FindMatchesBehaviour) {
440-
//TODO:4: #6 create new object might cause issues with multi-page or submit behaviour? if not, this would be neater:
440+
//TODO:5: #6 create new object might cause issues with multi-page or submit behaviour? if not, this would be neater:
441441
// matchResult = new MatchResult();
442442
this.matchResult.UUID = "";
443443
this.matchResult.entries = [];
@@ -683,7 +683,7 @@ export class FormFilling {
683683
offsetParent: true, // This tricks element visibility checks into treating this as visible to the user
684684
addEventListener: function () {
685685
return;
686-
}, //TODO:4: hook up to the submit function to simulate real form submission
686+
}, //TODO:5: hook up to the submit function to simulate real form submission
687687
removeEventListener: function () {
688688
return;
689689
}
@@ -728,7 +728,7 @@ export class FormFilling {
728728
// form and entry combination. We could be more efficient for the common case of 1 form
729729
// by avoiding the clone then but keeping the same behaviour gives us a higher chance
730730
// of noticing bugs.
731-
matchResult.entries[i] = JSON.parse(crString); //TODO:4: faster clone? https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/The_structured_clone_algorithm ?
731+
matchResult.entries[i] = JSON.parse(crString); //TODO:5: faster clone? https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/The_structured_clone_algorithm ?
732732

733733
// Nothing to do if we have no matching entries available.
734734
if (matchResult.entries[i].length == 0) continue;
@@ -1013,7 +1013,7 @@ export class FormFilling {
10131013
}
10141014

10151015
if (matchingLogin != null) {
1016-
//TODO:4: #6 multi-page
1016+
//TODO:5: #6 multi-page
10171017
// // record / update the info attached to this tab regarding
10181018
// // the number of pages of forms we want to fill in
10191019
// // NB: we do this even if we know this is a single form
@@ -1034,7 +1034,7 @@ export class FormFilling {
10341034
// }
10351035

10361036
// // If the user manually requested this to be filled in or the current page is unknown
1037-
// if (!automated)//TODO:4: #6 multi-page || tabState.currentPage <= 0)
1037+
// if (!automated)//TODO:5: #6 multi-page || tabState.currentPage <= 0)
10381038
// {
10391039
// let maximumPageCount = 1;
10401040
// for (let i = 0; i < matchingLogin.passwords.length; i++)
@@ -1049,7 +1049,7 @@ export class FormFilling {
10491049
// if (otherField.formFieldPage > maximumPageCount)
10501050
// maximumPageCount = otherField.formFieldPage;
10511051
// }
1052-
// //TODO:4: #6: multi-page
1052+
// //TODO:5: #6: multi-page
10531053
// // // always assume page 1 (very rare cases will go wrong - see github KeeFox #411 for relevant enhancement request)
10541054
// // // Possible regression since v1.4: We used to ignore currentPage entirely for the first
10551055
// // // page of a submission, now we might try to give preference to page 1 fields (though total
@@ -1142,7 +1142,7 @@ export class FormFilling {
11421142

11431143
// If this form fill is the non-final page of a multi-page login process we record the
11441144
// UUID and dbFilename. We also enable auto-submit in some circumstances
1145-
//TODO:4: #6: multi-page
1145+
//TODO:5: #6: multi-page
11461146
// if (matchResult.UUID != undefined && matchResult.UUID != null && matchResult.UUID != "")
11471147
// {
11481148
// if (tabState.currentPage > 0 && tabState.currentPage < tabState.maximumPage)
@@ -1415,7 +1415,7 @@ export class FormFilling {
14151415
candidate.score += distanceFactor * distanceScore;
14161416
});
14171417

1418-
//TODO:4: more accurate searching of submit buttons, etc. to avoid password resets if possible
1418+
//TODO:5: more accurate searching of submit buttons, etc. to avoid password resets if possible
14191419
// maybe special cases for common HTML output patterns (e.g. javascript-only ASP.NET forms)
14201420

14211421
let maxScore = submitElements[0].score;
@@ -1435,7 +1435,7 @@ export class FormFilling {
14351435
semanticWhitelistCache,
14361436
semanticBlacklistCache
14371437
) {
1438-
//TODO:4: other languages
1438+
//TODO:5: other languages
14391439
const goodWords = [
14401440
"submit",
14411441
"login",
@@ -1580,7 +1580,7 @@ export class FormFilling {
15801580
form.submit();
15811581
}
15821582

1583-
//TODO:4: maybe something like this might be useful? Dunno why a click()
1583+
//TODO:5: maybe something like this might be useful? Dunno why a click()
15841584
// above wouldn't be sufficient but maybe some custom event raising might be handy...
15851585
/*
15861586
function simulateClick() {

src/page/formSaving.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export class FormSaving {
1818
private Logger: KeeLogger;
1919
private formUtils: FormUtils;
2020
private SubmitHandlerAttachments: SubmitHandlerAttachment[] = [];
21-
private matchResult: MatchResult; //TODO:4: May be overkill to have all this data available for saving
21+
private matchResult: MatchResult; //TODO:5: May be overkill to have all this data available for saving
2222

2323
constructor(private myPort: chrome.runtime.Port, logger: KeeLogger, formUtils: FormUtils) {
2424
this.Logger = logger;
@@ -53,7 +53,7 @@ export class FormSaving {
5353
// This won't always be called before all event handlers on the web page so on
5454
// some sites we will store invalid data (in cases where the login scripts
5555
// mangle the contents of the fields before submitting them).
56-
//TODO:4: Possibly could slightly reduce incidence of this problem by listening
56+
//TODO:5: Possibly could slightly reduce incidence of this problem by listening
5757
// to every click on the document body or tracking all input events but performance?
5858
private submitHandler(_e: Event, form: HTMLFormElement) {
5959
this.Logger.debug("submitHandler called");
@@ -107,7 +107,7 @@ export class FormSaving {
107107

108108
for (let i = 0; i < passwords.length; i++) passwordFields.push(passwords[i]);
109109

110-
//TODO:4: try to distinguish between multi-password login/signup and typo. maybe: if username exists and matches existing password it is a typo, else multi-password
110+
//TODO:5: try to distinguish between multi-password login/signup and typo. maybe: if username exists and matches existing password it is a typo, else multi-password
111111
//return;
112112
} // it's probably a password change form, but may be a sign-up form
113113
else {
@@ -123,7 +123,7 @@ export class FormSaving {
123123
// if there are only two passwords we already know that they match
124124
if (passwords.length == 2) {
125125
passwordFields.push(passwords[0]);
126-
//TODO:4: it is also reasonably likely that this indicates a
126+
//TODO:5: it is also reasonably likely that this indicates a
127127
// sign-up form rather than a password change form. decide
128128
// which here and flag which one it is. for now, we just assume
129129
// it's a sign-up form becuase that is more useful for the user in many cases

src/page/formsUtils.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@ export class FormUtils {
188188
// Work out which DOM form element is most likely to be the username field.
189189
// This information is only used to display the username to the user so an inaccurate
190190
// choice won't impact the form detection or filling behaviour.
191-
//TODO:4: Extend this to inspect more than just the name of the field. E.g. max length?
192-
//TODO:4: For form filling (not submitting) we might want to select based upon found data in KeePass?
191+
//TODO:5: Extend this to inspect more than just the name of the field. E.g. max length?
192+
//TODO:5: For form filling (not submitting) we might want to select based upon found data in KeePass?
193193
if (firstPossibleUsernameIndex != -1) usernameIndex = firstPossibleUsernameIndex;
194194
else if (firstPasswordIndex > 0) usernameIndex = firstPasswordIndex - 1;
195195
this.Logger.debug("usernameIndex: " + usernameIndex);

src/panels/main.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ async function start() {
8787
store.$patch(m.initialState);
8888
vueApp.mount("#main");
8989

90-
//TODO:4: Could be done earlier to speed up initial rendering?
90+
//TODO:5: Could be done earlier to speed up initial rendering?
9191
Port.postMessage({
9292
action: Action.GetPasswordProfiles
9393
});

src/panels/mainLegacy.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ function updateFrameState(newState: FrameState) {
1616
}
1717

1818
function closePanel() {
19-
//TODO:4: Might want more fine-grained closing in future
19+
//TODO:5: Might want more fine-grained closing in future
2020
Port.postMessage({ action: Action.CloseAllPanels });
2121
}
2222

src/popup/components/Save1stParty.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ export default {
226226
...originalField,
227227
value: change.value
228228
});
229-
//TODO:4: faster deep clone
229+
//TODO:5: faster deep clone
230230
const newFields = JSON.parse(
231231
JSON.stringify(updatedSaveState.newEntry.fields)
232232
) as Field[];

src/release-notes/update-notes.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="utf-8">
55
<link href="/assets/styles/bootstrap.min.css" type="text/css" rel="stylesheet">
66
<link rel="stylesheet" href="/assets/styles/release-notes.css"/>
7-
<title>Kee 3.12</title>
7+
<title>Kee 4.0</title>
88
<link rel="icon" href="/assets/images/64.png"/>
99
<style>
1010
.showIfBeta {
@@ -19,11 +19,11 @@
1919
<body class="container" style="max-width: 900px;">
2020
<div id="i18n_root" style="align-items: stretch;">
2121

22-
<h1 style="font-size: 42px; text-align: center;"><img src="/assets/images/64.png" style="margin-bottom: 4px; margin-right: 10px;" /><span data-i18n="welcome_to_kee"></span> 3.12</h1>
22+
<h1 style="font-size: 42px; text-align: center;"><img src="/assets/images/64.png" style="margin-bottom: 4px; margin-right: 10px;" /><span data-i18n="welcome_to_kee"></span> 4.0</h1>
2323
<div id="mainContent">
2424
<div id="updateNotesContent">
2525

26-
<h2 style="margin-left:15px"><span data-i18n="version_upgrade_heading_changes"></span> 3.12</h2>
26+
<h2 style="margin-left:15px"><span data-i18n="version_upgrade_heading_changes"></span> 4.0</h2>
2727

2828
<p data-i18n="list_version_upgrade_3_12"></p>
2929

src/typedefs/kee.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type {Kee} from "../background/KF";
22

33
declare global {
44
interface Window {
5-
//TODO:4: See if it is possible to manage the persistent
5+
//TODO:5: See if it is possible to manage the persistent
66
// external connection, cross-process messaging and our
77
// in-memory caches without a global var in MV3
88
kee: Kee;

0 commit comments

Comments
 (0)