This commit is contained in:
Simon Knott 2025-02-03 11:02:24 +01:00
parent cd7f3b6e65
commit e3cc3a7f62
No known key found for this signature in database
GPG key ID: 8CEDC00028084AEC

View file

@ -513,15 +513,19 @@ export abstract class BrowserContext extends SdkObject {
}; };
const originsToSave = new Set(this._origins); const originsToSave = new Set(this._origins);
function _collectStorageScript() {
return {
localStorage: Object.keys(localStorage).map(name => ({ name, value: localStorage.getItem(name) })),
};
}
// First try collecting storage stage from existing pages. // First try collecting storage stage from existing pages.
for (const page of this.pages()) { for (const page of this.pages()) {
const origin = page.mainFrame().origin(); const origin = page.mainFrame().origin();
if (!origin || !originsToSave.has(origin)) if (!origin || !originsToSave.has(origin))
continue; continue;
try { try {
const storage = await page.mainFrame().nonStallingEvaluateInExistingContext(`({ const storage = await page.mainFrame().nonStallingEvaluateInExistingContext(`(${_collectStorageScript.toString()})()`, 'utility');
localStorage: Object.keys(localStorage).map(name => ({ name, value: localStorage.getItem(name) })),
})`, 'utility');
if (storage.localStorage.length) if (storage.localStorage.length)
result.origins.push({ origin, localStorage: storage.localStorage } as channels.OriginStorage); result.origins.push({ origin, localStorage: storage.localStorage } as channels.OriginStorage);
originsToSave.delete(origin); originsToSave.delete(origin);
@ -539,15 +543,11 @@ export abstract class BrowserContext extends SdkObject {
return true; return true;
}); });
for (const origin of originsToSave) { for (const origin of originsToSave) {
const originStorage: channels.OriginStorage = { origin, localStorage: [] };
const frame = page.mainFrame(); const frame = page.mainFrame();
await frame.goto(internalMetadata, origin); await frame.goto(internalMetadata, origin);
const storage = await frame.evaluateExpression(`({ const storage = await frame.evaluateExpression(`(${_collectStorageScript.toString()})()`, { world: 'utility' });
localStorage: Object.keys(localStorage).map(name => ({ name, value: localStorage.getItem(name) })),
})`, { world: 'utility' });
originStorage.localStorage = storage.localStorage;
if (storage.localStorage.length) if (storage.localStorage.length)
result.origins.push(originStorage); result.origins.push({ origin, localStorage: storage.localStorage } as channels.OriginStorage);
} }
await page.close(internalMetadata); await page.close(internalMetadata);
} }