{"record":{"id":"ddb7f22d76081fd8","repo":"microsoft/playwright","slug":"connecting-over-cdp-is-only-supported-in-chromium","errorCode":null,"errorMessage":"Connecting over CDP is only supported in Chromium and WebKit.","messagePattern":"Connecting over CDP is only supported in Chromium and WebKit\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/playwright-core/src/client/browserType.ts","lineNumber":151,"sourceCode":"      const browser = await connectToBrowser(this._playwright, { browserName: this.name(), ...params });\n      browser._connectToBrowserType(this, {}, undefined);\n      return browser;\n    });\n  }\n\n  async connectOverCDP(options: api.ConnectOverCDPOptions  & { wsEndpoint?: string }): Promise<api.Browser>;\n  async connectOverCDP(endpointURL: string, options?: api.ConnectOverCDPOptions): Promise<api.Browser>;\n  async connectOverCDP(transport: api.ConnectOverCDPTransport, options?: api.ConnectOverCDPOptions): Promise<api.Browser>;\n  async connectOverCDP(overloaded: (api.ConnectOverCDPOptions & { wsEndpoint?: string }) | string | api.ConnectOverCDPTransport, options?: api.ConnectOverCDPOptions): Promise<Browser> {\n    let endpointURL: string | undefined;\n    let transport: api.ConnectOverCDPTransport | undefined;\n    let params: api.ConnectOverCDPOptions;\n    if (typeof overloaded === 'string') {\n      endpointURL = overloaded;\n      params = options ?? {};\n    } else if (isConnectionTransport(overloaded)) {\n      if (this.name() !== 'chromium' && this.name() !== 'webkit')\n        throw new Error('Connecting over CDP is only supported in Chromium and WebKit.');\n      if (this._connection.isRemote())\n        throw new Error('Passing a ConnectionTransport to connectOverCDP is not supported when connecting remotely.');\n      transport = overloaded;\n      params = options ?? {};\n    } else {\n      endpointURL = 'endpointURL' in overloaded ? (overloaded as any).endpointURL : overloaded.wsEndpoint;\n      assert(endpointURL, 'Cannot connect over CDP without wsEndpoint.');\n      params = overloaded;\n    }\n    if (endpointURL && this.name() !== 'chromium' && this.name() !== 'webkit')\n      throw new Error('Connecting over CDP is only supported in Chromium and WebKit.');\n\n    const result = await this._channel.connectOverCDP({\n      endpointURL,\n      transport: transport as any,\n      headers: params.headers ? headersObjectToArray(params.headers) : undefined,\n      slowMo: params.slowMo,\n      isLocal: params.isLocal,","sourceCodeStart":133,"sourceCodeEnd":169,"githubUrl":"https://github.com/microsoft/playwright/blob/c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6/packages/playwright-core/src/client/browserType.ts#L133-L169","documentation":"Thrown inside connectOverCDP() when the first overload resolves to a ConnectionTransport (detected via isConnectionTransport: has send & close functions) but the BrowserType is not chromium or webkit. CDP transport connections are only implemented for those two engines; firefox is rejected.","triggerScenarios":"Calling `firefox.connectOverCDP({ send, close })` with a transport object. The branch `isConnectionTransport(overloaded)` is taken, then `this.name() !== 'chromium' && this.name() !== 'webkit'` is true for firefox.","commonSituations":"Generic code that picks a BrowserType dynamically and assumes CDP works for all; switching a transport-based integration from chromium to firefox without changing the connection method.","solutions":["Use chromium or webkit for CDP transport connections.","For firefox use the WS endpoint overload of connectOverCDP (only chromium/webkit still apply), or the standard connect() API.","Gate the call on browserType.name() before invoking."],"exampleFix":"// before\nawait firefox.connectOverCDP({ send, close });\n// after\nawait chromium.connectOverCDP({ send, close });","handlingStrategy":"type-guard","validationCode":"if (browserType.name() !== 'chromium' && browserType.name() !== 'webkit')\n  throw new Error('connectOverCDP with a transport requires chromium or webkit.');","typeGuard":"function supportsCdpTransport(bt: any): boolean {\n  const n = bt?.name?.();\n  return n === 'chromium' || n === 'webkit';\n}","tryCatchPattern":null,"preventionTips":["Gate CDP transport usage on browser name.","Use the WS endpoint overload where possible; it has the same engine restriction."],"tags":["cdp","connect","browser-support"],"backgroundTag":null,"analyzedSha":"c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6","analyzedAt":"2026-08-12T07:26:36.950Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}