{"record":{"id":"e204add699778aba","repo":"microsoft/playwright","slug":"cdp-connections-are-only-supported-by-chromium","errorCode":null,"errorMessage":"CDP connections are only supported by Chromium","messagePattern":"CDP connections are only supported by Chromium","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/playwright-core/src/server/browserType.ts","lineNumber":288,"sourceCode":"        const log = helper.formatBrowserLogs(browserLogsCollector.recentLogs());\n        const updatedLog = this.doRewriteStartupLog(log);\n        throw new Error(`Failed to launch the browser process.\\nBrowser logs:\\n${updatedLog}`);\n      }\n      if (!this.supportsPipeTransport(options)) {\n        transport = await WebSocketTransport.connect(progress, wsEndpoint!);\n      } else {\n        const stdio = launchedProcess.stdio as unknown as [NodeJS.ReadableStream, NodeJS.WritableStream, NodeJS.WritableStream, NodeJS.WritableStream, NodeJS.ReadableStream];\n        transport = new PipeTransport(stdio[3], stdio[4]);\n      }\n      return { browserProcess, artifactsDir: prepared.artifactsDir, userDataDir: prepared.userDataDir, transport, wsEndpoint };\n    } catch (error) {\n      await progress.race(closeOrKill(DEFAULT_PLAYWRIGHT_TIMEOUT).catch(() => {}));\n      throw error;\n    }\n  }\n\n  async connectOverCDP(progress: Progress, params: channels.BrowserTypeConnectOverCDPParams): Promise<Browser> {\n    throw new Error('CDP connections are only supported by Chromium');\n  }\n\n  async connectToWorker(progress: Progress, endpoint: string): Promise<Worker> {\n    throw new Error('CDP connections are only supported by Chromium');\n  }\n\n  async launchWithSeleniumHub(progress: Progress, hubUrl: string, options: types.LaunchOptions): Promise<Browser> {\n    throw new Error('Connecting to SELENIUM_REMOTE_URL is only supported by Chromium');\n  }\n\n  private _validateLaunchOptions(options: types.LaunchOptions): types.LaunchOptions {\n    let { headless = true, downloadsPath, proxy } = options;\n    if (debugMode() === 'inspector')\n      headless = false;\n    if (downloadsPath && !path.isAbsolute(downloadsPath))\n      downloadsPath = path.join(process.cwd(), downloadsPath);\n    if (options.socksProxyPort)\n      proxy = { server: `socks5://127.0.0.1:${options.socksProxyPort}` };","sourceCodeStart":270,"sourceCodeEnd":306,"githubUrl":"https://github.com/microsoft/playwright/blob/c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6/packages/playwright-core/src/server/browserType.ts#L270-L306","documentation":"connectOverCDP is a method on the abstract BrowserType base class whose default implementation throws this error. Only the Chromium subclass overrides it; Firefox and WebKit inherit the throwing stub, so calling chromium-only CDP attachment on those browser types is rejected.","triggerScenarios":"await firefox.connectOverCDP(endpoint) or await webkit.connectOverCDP(endpoint) — only chromiumBrowserType overrides connectOverCDP.","commonSituations":"Generic code that picks a browserType by config and unconditionally calls connectOverCDP. Copy-pasting a Chromium CDP snippet and pointing it at firefox/webkit.","solutions":["Use chromium.connectOverCDP(endpoint) — CDP is a Chromium DevTools protocol.","If you need a non-Chromium browser, use launch()/connect() over the Playwright WebSocket server instead of CDP.","Branch on browserType: only call connectOverCDP when the type is chromium."],"exampleFix":"// before\nconst b = await firefox.connectOverCDP('http://localhost:9222');\n// after\nconst b = await chromium.connectOverCDP('http://localhost:9222');","handlingStrategy":"type-guard","validationCode":"function canConnectOverCDP(browserType: { name: string }): boolean {\n  return browserType.name === 'chromium';\n}","typeGuard":"function isChromium(bt: any): boolean {\n  return bt?.name === 'chromium' || bt === chromium;\n}","tryCatchPattern":null,"preventionTips":["Gate connectOverCDP on the browser type being chromium.","Keep CDP-dependent code in a chromium-only module."],"tags":["cdp","connect","chromium-only","browser-type"],"backgroundTag":null,"analyzedSha":"c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6","analyzedAt":"2026-08-12T07:26:36.950Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}