mirror of
https://github.com/bitwarden/browser
synced 2026-02-26 09:33:22 +00:00
normalize origin for comparison (#19212)
This commit is contained in:
@@ -17,6 +17,21 @@ describe("urlOriginsMatch", () => {
|
||||
"chrome-extension://abc123/popup.html",
|
||||
"chrome-extension://abc123/bg.js",
|
||||
],
|
||||
[
|
||||
"safari extension GUID uppercase in suspect",
|
||||
"safari-web-extension://d8726ae3-f81f-4d3a-85a0-64c2cb453e39/",
|
||||
"safari-web-extension://D8726AE3-F81F-4D3A-85A0-64C2CB453E39/",
|
||||
],
|
||||
[
|
||||
"safari extension GUID uppercase in canonical",
|
||||
"safari-web-extension://D8726AE3-F81F-4D3A-85A0-64C2CB453E39/",
|
||||
"safari-web-extension://d8726ae3-f81f-4d3a-85a0-64c2cb453e39/",
|
||||
],
|
||||
[
|
||||
"safari extension GUID uppercase on both sides",
|
||||
"safari-web-extension://D8726AE3-F81F-4D3A-85A0-64C2CB453E39/popup.html",
|
||||
"safari-web-extension://D8726AE3-F81F-4D3A-85A0-64C2CB453E39/bg.js",
|
||||
],
|
||||
])("returns true when %s", (_, canonical, suspect) => {
|
||||
expect(urlOriginsMatch(canonical as string | URL, suspect as string | URL)).toBe(true);
|
||||
});
|
||||
@@ -31,6 +46,11 @@ describe("urlOriginsMatch", () => {
|
||||
"https://sub.example.com",
|
||||
],
|
||||
["non-special scheme hosts differ", "chrome-extension://abc123/", "chrome-extension://xyz789/"],
|
||||
[
|
||||
"safari extension GUIDs differ (mixed case)",
|
||||
"safari-web-extension://D8726AE3-F81F-4D3A-85A0-64C2CB453E39/",
|
||||
"safari-web-extension://AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE/",
|
||||
],
|
||||
])("returns false when %s", (_, canonical, suspect) => {
|
||||
expect(urlOriginsMatch(canonical, suspect)).toBe(false);
|
||||
});
|
||||
|
||||
@@ -45,9 +45,14 @@ export function urlOriginsMatch(canonical: string | URL, suspect: string | URL):
|
||||
const canonicalOrigin = effectiveOrigin(canonicalUrl);
|
||||
const suspectOrigin = effectiveOrigin(suspectUrl);
|
||||
|
||||
if (!canonicalOrigin || !suspectOrigin) {
|
||||
// Safari sends the extension GUID in uppercase while the canonical URL is lowercase,
|
||||
// Normalize both to lowercase and trim trailing slashes to avoid browser specific issues.
|
||||
const normalizedCanonicalOrigin = canonicalOrigin?.replace(/\/$/, "").toLowerCase();
|
||||
const normalizedSuspectOrigin = suspectOrigin?.replace(/\/$/, "").toLowerCase();
|
||||
|
||||
if (!normalizedCanonicalOrigin || !normalizedSuspectOrigin) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return canonicalOrigin === suspectOrigin;
|
||||
return normalizedCanonicalOrigin === normalizedSuspectOrigin;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user