fix: a page whose origin has no host is never told an address by accountsChanged (closes #564)
The background judges each tab by its URL's origin, the only one it can see, so a page its server sandboxes, whose own origin is null, was still sent the new active address on an address switch although all its requests are refused. The background now names the origin it judged by on each accountsChanged event, and the content script passes the address to the page only when the page's own window.origin is that origin, an empty list otherwise. An event naming no origin also reaches the page as an empty list. chainChanged is unchanged. The README's SiteApproval section says the same. Judgement call: covered by a unit test that sets window.origin; no browser-suite test. Model: opus-5-5
This commit was merged in pull request #570.
This commit is contained in:
@@ -1308,6 +1308,12 @@ async function broadcastAccountsChanged() {
|
||||
return;
|
||||
}
|
||||
for (const tab of tabs) {
|
||||
// The tab's URL is all the background knows of the page in it, and a
|
||||
// page at a site's URL may have another origin: a page its server
|
||||
// sandboxes with a Content-Security-Policy has the origin "null". So
|
||||
// the event names the origin it was judged by, and the content script
|
||||
// passes the address on only to a page whose own origin is that one
|
||||
// (src/content/index.js).
|
||||
const origin = tab.url ? new URL(tab.url).origin : "";
|
||||
const hasPermission =
|
||||
activeAddress &&
|
||||
@@ -1319,6 +1325,7 @@ async function broadcastAccountsChanged() {
|
||||
type: "AUTISTMASK_EVENT",
|
||||
eventName: "accountsChanged",
|
||||
data: hasPermission ? [activeAddress] : [],
|
||||
origin,
|
||||
}).catch(() => {});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user