Skip to content

Commit

Permalink
[PM-15065] Extension not loading when accessed via URL (#12160)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
nick-livefront authored Nov 27, 2024
1 parent a95eaeb commit 1229d25
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
17 changes: 17 additions & 0 deletions apps/browser/src/autofill/services/autofill.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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", () => {
Expand Down
13 changes: 10 additions & 3 deletions apps/browser/src/autofill/services/autofill.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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([]);
}

Expand Down

0 comments on commit 1229d25

Please sign in to comment.