Implement clipboard permissions support feature
Co-authored-by: pavelfeldman <883973+pavelfeldman@users.noreply.github.com>
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -39,6 +39,7 @@ export type CLIOptions = {
|
||||
imageResponses?: 'allow' | 'omit';
|
||||
sandbox?: boolean;
|
||||
outputDir?: string;
|
||||
permissions?: string[];
|
||||
port?: number;
|
||||
proxyBypass?: string;
|
||||
proxyServer?: string;
|
||||
@@ -177,6 +178,7 @@ export function configFromCLIOptions(cliOptions: CLIOptions): Config {
|
||||
browserName,
|
||||
isolated: cliOptions.isolated,
|
||||
userDataDir: cliOptions.userDataDir,
|
||||
permissions: cliOptions.permissions,
|
||||
launchOptions,
|
||||
contextOptions,
|
||||
cdpEndpoint: cliOptions.cdpEndpoint,
|
||||
@@ -218,6 +220,7 @@ function configFromEnv(): Config {
|
||||
options.imageResponses = 'omit';
|
||||
options.sandbox = envToBoolean(process.env.PLAYWRIGHT_MCP_SANDBOX);
|
||||
options.outputDir = envToString(process.env.PLAYWRIGHT_MCP_OUTPUT_DIR);
|
||||
options.permissions = commaSeparatedList(process.env.PLAYWRIGHT_MCP_PERMISSIONS);
|
||||
options.port = envToNumber(process.env.PLAYWRIGHT_MCP_PORT);
|
||||
options.proxyBypass = envToString(process.env.PLAYWRIGHT_MCP_PROXY_BYPASS);
|
||||
options.proxyServer = envToString(process.env.PLAYWRIGHT_MCP_PROXY_SERVER);
|
||||
|
||||
@@ -46,6 +46,7 @@ program
|
||||
.option('--image-responses <mode>', 'whether to send image responses to the client. Can be "allow" or "omit", Defaults to "allow".')
|
||||
.option('--no-sandbox', 'disable the sandbox for all process types that are normally sandboxed.')
|
||||
.option('--output-dir <path>', 'path to the directory for output files.')
|
||||
.option('--permissions <permissions>', 'comma-separated list of permissions to grant, for example "clipboard-read,clipboard-write"', commaSeparatedList)
|
||||
.option('--port <port>', 'port to listen on for SSE transport.')
|
||||
.option('--proxy-bypass <bypass>', 'comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com"')
|
||||
.option('--proxy-server <proxy>', 'specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"')
|
||||
|
||||
Reference in New Issue
Block a user