04/19 Update extension: add item prompt exist until user clicks the button, fix All relevant tab content
This commit is contained in:
@@ -92,7 +92,9 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
|||||||
|
|
||||||
// Content script detected credentials on form submit → store for save-prompt.
|
// Content script detected credentials on form submit → store for save-prompt.
|
||||||
if (msg.type === "SAVE_CREDENTIALS") {
|
if (msg.type === "SAVE_CREDENTIALS") {
|
||||||
chrome.storage.session.set({ pending_save: msg.data });
|
// Store in local storage so the prompt survives service worker restarts
|
||||||
|
// and is guaranteed to be present when the user next opens the popup.
|
||||||
|
chrome.storage.local.set({ pending_save: msg.data });
|
||||||
sendResponse({ ok: true });
|
sendResponse({ ok: true });
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-13
@@ -438,16 +438,8 @@ function getTabItems() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_activeTab === "relevant") {
|
if (_activeTab === "relevant") {
|
||||||
// Show matching items first, then others (only if there are matches or no query)
|
// Show ONLY items that match the current domain, sorted by name.
|
||||||
const matches = items.filter(isMatch);
|
items = items.filter(isMatch).sort((a, b) => a.name.localeCompare(b.name));
|
||||||
const rest = items.filter((i) => !isMatch(i));
|
|
||||||
// If we have matches, show matches first; otherwise fall back to all
|
|
||||||
items = matches.length ? [...matches, ...rest] : items;
|
|
||||||
// Sort matched first by name, rest by name
|
|
||||||
items = [
|
|
||||||
...matches.sort((a, b) => a.name.localeCompare(b.name)),
|
|
||||||
...rest.sort((a, b) => a.name.localeCompare(b.name)),
|
|
||||||
];
|
|
||||||
} else if (_activeTab === "recents") {
|
} else if (_activeTab === "recents") {
|
||||||
items = [...items]
|
items = [...items]
|
||||||
.sort(
|
.sort(
|
||||||
@@ -470,6 +462,14 @@ function renderList() {
|
|||||||
|
|
||||||
if (!items.length) {
|
if (!items.length) {
|
||||||
listEl.innerHTML = "";
|
listEl.innerHTML = "";
|
||||||
|
if (_activeTab === "relevant") {
|
||||||
|
const host = currentHostname();
|
||||||
|
emptyEl.textContent = host
|
||||||
|
? `No saved passwords for ${host}.`
|
||||||
|
: "No items match this page.";
|
||||||
|
} else {
|
||||||
|
emptyEl.textContent = "No items found.";
|
||||||
|
}
|
||||||
emptyEl.classList.remove("hidden");
|
emptyEl.classList.remove("hidden");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -585,9 +585,12 @@ function initTabs() {
|
|||||||
* Show the save-prompt overlay. It is a blocking modal — no backdrop click,
|
* Show the save-prompt overlay. It is a blocking modal — no backdrop click,
|
||||||
* no ✕ button — so the user MUST click "Save" or "Not now".
|
* no ✕ button — so the user MUST click "Save" or "Not now".
|
||||||
* Called every time the popup opens while a pending_save is stored.
|
* Called every time the popup opens while a pending_save is stored.
|
||||||
|
*
|
||||||
|
* pending_save is stored in chrome.storage.local (not session) so it survives
|
||||||
|
* service worker restarts and is reliably present when the popup re-opens.
|
||||||
*/
|
*/
|
||||||
async function checkPendingSave() {
|
async function checkPendingSave() {
|
||||||
const { pending_save } = await chrome.storage.session.get("pending_save");
|
const { pending_save } = await chrome.storage.local.get("pending_save");
|
||||||
if (!pending_save) return;
|
if (!pending_save) return;
|
||||||
|
|
||||||
// Populate fields.
|
// Populate fields.
|
||||||
@@ -611,7 +614,7 @@ async function checkPendingSave() {
|
|||||||
pending_save.siteName,
|
pending_save.siteName,
|
||||||
);
|
);
|
||||||
await saveCredential(pending_save);
|
await saveCredential(pending_save);
|
||||||
await chrome.storage.session.remove("pending_save");
|
await chrome.storage.local.remove("pending_save");
|
||||||
};
|
};
|
||||||
$("btn-save-no").onclick = async () => {
|
$("btn-save-no").onclick = async () => {
|
||||||
$("save-prompt-overlay").classList.add("hidden");
|
$("save-prompt-overlay").classList.add("hidden");
|
||||||
@@ -619,7 +622,7 @@ async function checkPendingSave() {
|
|||||||
"[PassKeeper] User dismissed save prompt for",
|
"[PassKeeper] User dismissed save prompt for",
|
||||||
pending_save.siteName,
|
pending_save.siteName,
|
||||||
);
|
);
|
||||||
await chrome.storage.session.remove("pending_save");
|
await chrome.storage.local.remove("pending_save");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user