[PM-15065] Extension not loading when accessed via URL (#12160)

* add check for extension prefixes in the three major browsers.

- Firefox does not throw an error or receive the message. Adding checks for Safari and Chrome for safety if this functionality were to change.

* remove unneeded mock rejection

* move prefixes to dedicated array

* refactor protocol check to its own variable
This commit is contained in:
Nick Krantz 2024-11-26 21:24:31 -06:00 committed by GitHub
parent a95eaeb6f5
commit 1229d25fec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 3 deletions

View File

@ -241,6 +241,23 @@ describe("AutofillService", () => {
expect(tracker.emissions[0]).toEqual([]);
});
["moz-extension://", "chrome-extension://", "safari-web-extension://"].forEach(
(extensionPrefix) => {
it(`returns an empty array when the tab.url starts with ${extensionPrefix}`, async () => {
const tracker = subscribeTo(
autofillService.collectPageDetailsFromTab$({
...tab,
url: `${extensionPrefix}/3e42342/popup/index.html`,
}),
);
await tracker.pauseUntilReceived(1);
expect(tracker.emissions[0]).toEqual([]);
});
},
);
});
describe("loadAutofillScriptsOnInstall", () => {

View File

@ -130,9 +130,16 @@ export default class AutofillService implements AutofillServiceInterface {
pageDetailsFallback$.next([]);
});
// Empty/New tabs do not have a URL.
// In Safari, `tabSendMessage` doesn't throw an error for this case. Fallback to the empty array to handle.
if (!tab.url) {
// Fallback to empty array when:
// - In Safari, `tabSendMessage` doesn't throw an error for this case.
// - When opening the extension directly via the URL, `tabSendMessage` doesn't always respond nor throw an error in FireFox.
// Adding checks for the major 3 browsers here to be safe.
const urlHasBrowserProtocol = [
"moz-extension://",
"chrome-extension://",
"safari-web-extension://",
].some((protocol) => tab.url.startsWith(protocol));
if (!tab.url || urlHasBrowserProtocol) {
pageDetailsFallback$.next([]);
}