fix(reuse): clear cookies and local storage when reusing context (#16175)
This commit is contained in:
parent
52aa869f12
commit
d5bc5ee6f7
|
|
@ -233,7 +233,6 @@ test.describe('Editing', () => {
|
||||||
await todoItems.nth(1).locator('.edit').fill('');
|
await todoItems.nth(1).locator('.edit').fill('');
|
||||||
await todoItems.nth(1).locator('.edit').press('Enter');
|
await todoItems.nth(1).locator('.edit').press('Enter');
|
||||||
|
|
||||||
await page.pause();
|
|
||||||
await expect(todoItems).toHaveText([
|
await expect(todoItems).toHaveText([
|
||||||
TODO_ITEMS[0],
|
TODO_ITEMS[0],
|
||||||
TODO_ITEMS[2],
|
TODO_ITEMS[2],
|
||||||
|
|
|
||||||
|
|
@ -170,6 +170,9 @@ export abstract class BrowserContext extends SdkObject {
|
||||||
|
|
||||||
// Unless I do this early, setting extra http headers below does not respond.
|
// Unless I do this early, setting extra http headers below does not respond.
|
||||||
await page?._frameManager.closeOpenDialogs();
|
await page?._frameManager.closeOpenDialogs();
|
||||||
|
// This should be before the navigation to about:blank so that we could save on
|
||||||
|
// a navigation as we clear local storage.
|
||||||
|
await this._clearLocalStorage();
|
||||||
await page?.mainFrame().goto(metadata, 'about:blank', { timeout: 0 });
|
await page?.mainFrame().goto(metadata, 'about:blank', { timeout: 0 });
|
||||||
await this._removeExposedBindings();
|
await this._removeExposedBindings();
|
||||||
await this._removeInitScripts();
|
await this._removeInitScripts();
|
||||||
|
|
@ -181,6 +184,7 @@ export abstract class BrowserContext extends SdkObject {
|
||||||
await this.setExtraHTTPHeaders(this._options.extraHTTPHeaders || []);
|
await this.setExtraHTTPHeaders(this._options.extraHTTPHeaders || []);
|
||||||
await this.setGeolocation(this._options.geolocation);
|
await this.setGeolocation(this._options.geolocation);
|
||||||
await this.setOffline(!!this._options.offline);
|
await this.setOffline(!!this._options.offline);
|
||||||
|
await this.clearCookies();
|
||||||
|
|
||||||
await page?.resetForReuse(metadata);
|
await page?.resetForReuse(metadata);
|
||||||
}
|
}
|
||||||
|
|
@ -457,6 +461,32 @@ export abstract class BrowserContext extends SdkObject {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _clearLocalStorage() {
|
||||||
|
if (!this._origins.size)
|
||||||
|
return;
|
||||||
|
let page = this.pages()[0];
|
||||||
|
const originArray = [...this._origins];
|
||||||
|
|
||||||
|
// Fast path.
|
||||||
|
if (page && originArray.length === 1 && page.mainFrame().url().startsWith(originArray[0])) {
|
||||||
|
await page.mainFrame().evaluateExpression(`localStorage.clear()`, false, undefined, 'utility');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Slow path.
|
||||||
|
const internalMetadata = serverSideCallMetadata();
|
||||||
|
page = page || await this.newPage(internalMetadata);
|
||||||
|
await page._setServerRequestInterceptor(handler => {
|
||||||
|
handler.fulfill({ body: '<html></html>' }).catch(() => {});
|
||||||
|
});
|
||||||
|
for (const origin of this._origins) {
|
||||||
|
const frame = page.mainFrame();
|
||||||
|
await frame.goto(internalMetadata, origin);
|
||||||
|
await frame.evaluateExpression(`localStorage.clear()`, false, undefined, 'utility');
|
||||||
|
}
|
||||||
|
await page._setServerRequestInterceptor(undefined);
|
||||||
|
}
|
||||||
|
|
||||||
isSettingStorageState(): boolean {
|
isSettingStorageState(): boolean {
|
||||||
return this._settingStorageState;
|
return this._settingStorageState;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue