Keep browser sign-ins across tabs and restarts (#2089)
* feat(desktop): share persistent browser data across tabs Keep browser sign-ins and site storage across tabs and app restarts, with a Settings action to clear the shared profile. * fix(settings): prevent duplicate browser data clears * fix(desktop): complete browser data cleanup Clear legacy per-tab profiles after upgrades and localize the browser data settings in every supported language. * fix(desktop): close browser profile cleanup races
This commit is contained in:
@@ -5,6 +5,34 @@ export interface BrowserNewTabRequestPayload {
|
||||
url: string;
|
||||
}
|
||||
|
||||
const MAX_PENDING_WINDOW_OPEN_REQUESTS_PER_GUEST = 20;
|
||||
|
||||
export class PendingBrowserWindowOpenRequests {
|
||||
private readonly urlsByWebContentsId = new Map<number, string[]>();
|
||||
|
||||
public add(webContentsId: number, url: string): void {
|
||||
if (!isAllowedBrowserWebviewUrl(url)) {
|
||||
return;
|
||||
}
|
||||
const urls = this.urlsByWebContentsId.get(webContentsId) ?? [];
|
||||
if (urls.length >= MAX_PENDING_WINDOW_OPEN_REQUESTS_PER_GUEST) {
|
||||
return;
|
||||
}
|
||||
urls.push(url);
|
||||
this.urlsByWebContentsId.set(webContentsId, urls);
|
||||
}
|
||||
|
||||
public take(webContentsId: number): string[] {
|
||||
const urls = this.urlsByWebContentsId.get(webContentsId) ?? [];
|
||||
this.urlsByWebContentsId.delete(webContentsId);
|
||||
return urls;
|
||||
}
|
||||
|
||||
public delete(webContentsId: number): void {
|
||||
this.urlsByWebContentsId.delete(webContentsId);
|
||||
}
|
||||
}
|
||||
|
||||
export function isAllowedBrowserWebviewUrl(value: string | undefined): boolean {
|
||||
if (!value) {
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user