cdp-tunnel 3.3.6 → 3.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -504,6 +504,7 @@ var SpecialHandler = (function() {
504
504
  var targetId = params && params.targetId;
505
505
  if (targetId) {
506
506
  var tabId = state.getTabIdByTargetId(targetId);
507
+ Logger.info('[CloseTarget] targetId=' + targetId.slice(0,12) + ' tabId=' + tabId);
507
508
  if (tabId) {
508
509
  var closeClientId = state.getClientIdByTabId(tabId);
509
510
  return new Promise(function(resolve) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "CDP Bridge",
4
- "version": "3.3.6",
4
+ "version": "3.3.7",
5
5
  "description": "Chrome DevTools Protocol Bridge for Playwright/Puppeteer automation",
6
6
  "permissions": [
7
7
  "debugger",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cdp-tunnel",
3
- "version": "3.3.6",
3
+ "version": "3.3.7",
4
4
  "description": "Bridge Chrome's debugger API to WebSocket — control your existing browser with Playwright/Puppeteer via CDP",
5
5
  "main": "server/proxy-server.js",
6
6
  "bin": "./cli/index.js",
@@ -366,13 +366,11 @@ class PortPoolManager {
366
366
  }
367
367
  }
368
368
  // 竞态处理:targetCreated/attachedToTarget 在 createTarget 响应之前到达
369
- // targetToPort 还没记录。检查 pendingCreate。
370
- // 同时也对 attachedToTarget 放行(它的 targetId 和 targetCreated 一样)
369
+ // 只用 pendingCreate 精确匹配,不广播(广播会导致 sessionId 串)
371
370
  if (msg.method === 'Target.targetCreated' || msg.method === 'Target.attachedToTarget') {
372
371
  for (let pi = 0; pi < this.portSessions.length; pi++) {
373
372
  const sess = this.portSessions[pi];
374
373
  if (sess && sess.pendingCreate) {
375
- // 提前注册
376
374
  sess.targetIds.add(targetId);
377
375
  sess.targetUrls.set(targetId, 'about:blank');
378
376
  this.targetToPort.set(targetId, pi);
@@ -381,11 +379,8 @@ class PortPoolManager {
381
379
  return true;
382
380
  }
383
381
  }
384
- // 没有 pendingCreate——广播给所有端口(对齐直连 Chrome 的广播行为)
385
- // 这样即使竞态导致没匹配到,客户端也能收到事件
386
- for (let pi = 0; pi < this.portSessions.length; pi++) {
387
- this._broadcastToPort(pi, msg);
388
- }
382
+ // pendingCreate 没匹配到——记录但不广播(避免 sessionId 串)
383
+ // targetId 会在 createTarget 响应时注册
389
384
  return true;
390
385
  }
391
386
  }
@@ -397,25 +392,11 @@ class PortPoolManager {
397
392
  this._broadcastToPort(portIndex, msg);
398
393
  return true;
399
394
  }
400
- // 竞态兜底:sessionId 还没注册(attachToTarget 响应未到)
401
- // 但事件已经来了。广播给所有端口池 client,确保不丢。
402
- // 对齐直连 Chrome——所有 session 事件都广播给所有连接。
403
- for (let pi = 0; pi < this.portSessions.length; pi++) {
404
- if (this.portSessions[pi]) {
405
- this._broadcastToPort(pi, msg);
406
- }
407
- }
408
- return true;
395
+ // sessionId 未注册——交给主 proxy 处理(不吞掉)
409
396
  }
410
397
 
411
- // 兜底:有 method 但没有 targetId 也没有 sessionId 的事件
412
- // 也广播,确保不丢(如 Target.targetDestroyed 等)
413
- for (let pi = 0; pi < this.portSessions.length; pi++) {
414
- if (this.portSessions[pi]) {
415
- this._broadcastToPort(pi, msg);
416
- }
417
- }
418
- return true;
398
+ // 其他未匹配的事件——交给主 proxy
399
+ return false;
419
400
  }
420
401
 
421
402
  return false; // 不是端口池的消息