Implement clipboard permissions support feature

Co-authored-by: pavelfeldman <883973+pavelfeldman@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-08-01 18:56:45 +00:00
parent fc127d5895
commit ce81f556a5
7 changed files with 353 additions and 5 deletions

View File

@@ -113,7 +113,10 @@ class IsolatedContextFactory extends BaseContextFactory {
}
protected override async _doCreateContext(browser: playwright.Browser): Promise<playwright.BrowserContext> {
return browser.newContext(this.browserConfig.contextOptions);
const contextOptions = { ...this.browserConfig.contextOptions };
if (this.browserConfig.permissions)
contextOptions.permissions = this.browserConfig.permissions;
return browser.newContext(contextOptions);
}
}
@@ -127,7 +130,13 @@ class CdpContextFactory extends BaseContextFactory {
}
protected override async _doCreateContext(browser: playwright.Browser): Promise<playwright.BrowserContext> {
return this.browserConfig.isolated ? await browser.newContext() : browser.contexts()[0];
if (this.browserConfig.isolated) {
const contextOptions: playwright.BrowserContextOptions = {};
if (this.browserConfig.permissions)
contextOptions.permissions = this.browserConfig.permissions;
return browser.newContext(contextOptions);
}
return browser.contexts()[0];
}
}
@@ -145,7 +154,10 @@ class RemoteContextFactory extends BaseContextFactory {
}
protected override async _doCreateContext(browser: playwright.Browser): Promise<playwright.BrowserContext> {
return browser.newContext();
const contextOptions: playwright.BrowserContextOptions = {};
if (this.browserConfig.permissions)
contextOptions.permissions = this.browserConfig.permissions;
return browser.newContext(contextOptions);
}
}
@@ -168,12 +180,15 @@ class PersistentContextFactory implements BrowserContextFactory {
const browserType = playwright[this.browserConfig.browserName];
for (let i = 0; i < 5; i++) {
try {
const browserContext = await browserType.launchPersistentContext(userDataDir, {
const contextOptions = {
...this.browserConfig.launchOptions,
...this.browserConfig.contextOptions,
handleSIGINT: false,
handleSIGTERM: false,
});
};
if (this.browserConfig.permissions)
contextOptions.permissions = this.browserConfig.permissions;
const browserContext = await browserType.launchPersistentContext(userDataDir, contextOptions);
const close = () => this._closeBrowserContext(browserContext, userDataDir);
return { browserContext, close };
} catch (error: any) {