puppeteer/puppeteer · warning · UnsupportedOperation

allowWithoutSanitization is not supported by WebDriver BiDi

Error message

allowWithoutSanitization is not supported by WebDriver BiDi

What it means

PermissionDescriptor.allowWithoutSanitization (used by the clipboard-sanitized-write permission) has no representation in WebDriver BiDi's permission model, so setPermission() throws UnsupportedOperation up front rather than silently dropping the flag.

Source

Thrown at packages/puppeteer-core/src/bidi/BrowserContext.ts:324

    );
  }

  override async setPermission(
    origin: string | '*',
    ...permissions: Array<{
      permission: PermissionDescriptor;
      state: PermissionState;
    }>
  ): Promise<void> {
    if (origin === '*') {
      throw new UnsupportedOperation(
        'Origin (*) is not supported by WebDriver BiDi',
      );
    }
    await Promise.all(
      permissions.map(permission => {
        if (permission.permission.allowWithoutSanitization) {
          throw new UnsupportedOperation(
            'allowWithoutSanitization is not supported by WebDriver BiDi',
          );
        }
        if (permission.permission.panTiltZoom) {
          throw new UnsupportedOperation(
            'panTiltZoom is not supported by WebDriver BiDi',
          );
        }
        if (permission.permission.userVisibleOnly) {
          throw new UnsupportedOperation(
            'userVisibleOnly is not supported by WebDriver BiDi',
          );
        }
        return this.userContext.setPermissions(
          origin,
          {
            name: permission.permission.name,
          },

View on GitHub (pinned to d484e21c17)

Solutions

  1. Drop allowWithoutSanitization from the descriptor (use plain 'clipboard-write' / 'clipboard-read' instead).
  2. If the sanitized-write behaviour is required, use a CDP-backed browser instead of pure BiDi.

Example fix

// before
await context.setPermission(origin, { permission: { name: 'clipboard-write', allowWithoutSanitization: true }, state: 'granted' });
// after
await context.setPermission(origin, { permission: { name: 'clipboard-write' }, state: 'granted' });
Defensive patterns

Strategy: validation

Validate before calling

for (const p of permissions) { if (p.permission.allowWithoutSanitization) throw new Error('allowWithoutSanitization unsupported under BiDi'); }

Type guard

const isBiDiSafeDescriptor = (d: PermissionDescriptor) => !d.allowWithoutSanitization && !d.panTiltZoom && !d.userVisibleOnly;

Prevention

When it happens

Trigger: Calling setPermission() with a descriptor whose allowWithoutSanitization is true (clipboard-sanitized-write use case).

Common situations: Migrating clipboard-write code that relied on the sanitized-write capability from CDP to BiDi; copying PermissionDescriptor shapes from the web platform.

Related errors


AI-assisted analysis of puppeteer/puppeteer@d484e21c17 (2026-08-12). Data as JSON: /api/errors/57732540e7fd2cc4. Report an issue: GitHub.