cdp-tunnel 3.3.6 → 3.3.8
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) {
|
package/package.json
CHANGED
|
@@ -192,7 +192,6 @@ class PortPoolManager {
|
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
// SW 冷启动 warmup:第一个 client 连接时创建一个临时 tab 再关闭
|
|
195
|
-
// 确保 chrome.debugger API 完全初始化,避免第一批并发请求失败
|
|
196
195
|
if (!session.warmedUp) {
|
|
197
196
|
session.warmedUp = true;
|
|
198
197
|
const warmupId = `pool${session.portIndex}_internal_warmup`;
|
|
@@ -203,8 +202,8 @@ class PortPoolManager {
|
|
|
203
202
|
__portIndex: session.portIndex,
|
|
204
203
|
__clientId: `pool_${session.port}`
|
|
205
204
|
}));
|
|
206
|
-
// 响应回来后在 handlePluginMessage
|
|
207
|
-
|
|
205
|
+
// warmup 响应回来后在 handlePluginMessage 里关闭这个 tab
|
|
206
|
+
session.pendingWarmupClose = true;
|
|
208
207
|
}
|
|
209
208
|
|
|
210
209
|
// 通知扩展有 client 连接(带端口号作为分组标识)
|
|
@@ -280,8 +279,23 @@ class PortPoolManager {
|
|
|
280
279
|
|
|
281
280
|
// 1. 响应消息:id 以 pool 开头(排除事件——事件有 method 字段)
|
|
282
281
|
if (msg.id && typeof msg.id === 'string' && msg.id.startsWith('pool') && !msg.method) {
|
|
283
|
-
//
|
|
282
|
+
// 内部命令响应
|
|
284
283
|
if (msg.id.includes('_internal')) {
|
|
284
|
+
// warmup createTarget 响应——关掉 warmup tab
|
|
285
|
+
const m = msg.id.match(/^pool(\d+)_/);
|
|
286
|
+
if (m && msg.id.includes('_warmup') && msg.result && msg.result.targetId) {
|
|
287
|
+
const pidx = parseInt(m[1]);
|
|
288
|
+
const sess = this.portSessions[pidx];
|
|
289
|
+
const warmupTid = msg.result.targetId;
|
|
290
|
+
const closeId = `pool${pidx}_internal_warmup_close_${Date.now()}`;
|
|
291
|
+
pluginWs.send(JSON.stringify({
|
|
292
|
+
id: closeId,
|
|
293
|
+
method: 'Target.closeTarget',
|
|
294
|
+
params: { targetId: warmupTid },
|
|
295
|
+
__portIndex: pidx,
|
|
296
|
+
__clientId: `pool_${sess.port}`
|
|
297
|
+
}));
|
|
298
|
+
}
|
|
285
299
|
return true;
|
|
286
300
|
}
|
|
287
301
|
const match = msg.id.match(/^pool(\d+)_(.+)$/);
|
|
@@ -366,13 +380,11 @@ class PortPoolManager {
|
|
|
366
380
|
}
|
|
367
381
|
}
|
|
368
382
|
// 竞态处理:targetCreated/attachedToTarget 在 createTarget 响应之前到达
|
|
369
|
-
//
|
|
370
|
-
// 同时也对 attachedToTarget 放行(它的 targetId 和 targetCreated 一样)
|
|
383
|
+
// 只用 pendingCreate 精确匹配,不广播(广播会导致 sessionId 串)
|
|
371
384
|
if (msg.method === 'Target.targetCreated' || msg.method === 'Target.attachedToTarget') {
|
|
372
385
|
for (let pi = 0; pi < this.portSessions.length; pi++) {
|
|
373
386
|
const sess = this.portSessions[pi];
|
|
374
387
|
if (sess && sess.pendingCreate) {
|
|
375
|
-
// 提前注册
|
|
376
388
|
sess.targetIds.add(targetId);
|
|
377
389
|
sess.targetUrls.set(targetId, 'about:blank');
|
|
378
390
|
this.targetToPort.set(targetId, pi);
|
|
@@ -381,11 +393,8 @@ class PortPoolManager {
|
|
|
381
393
|
return true;
|
|
382
394
|
}
|
|
383
395
|
}
|
|
384
|
-
//
|
|
385
|
-
//
|
|
386
|
-
for (let pi = 0; pi < this.portSessions.length; pi++) {
|
|
387
|
-
this._broadcastToPort(pi, msg);
|
|
388
|
-
}
|
|
396
|
+
// pendingCreate 没匹配到——记录但不广播(避免 sessionId 串)
|
|
397
|
+
// targetId 会在 createTarget 响应时注册
|
|
389
398
|
return true;
|
|
390
399
|
}
|
|
391
400
|
}
|
|
@@ -397,25 +406,11 @@ class PortPoolManager {
|
|
|
397
406
|
this._broadcastToPort(portIndex, msg);
|
|
398
407
|
return true;
|
|
399
408
|
}
|
|
400
|
-
//
|
|
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;
|
|
409
|
+
// sessionId 未注册——交给主 proxy 处理(不吞掉)
|
|
409
410
|
}
|
|
410
411
|
|
|
411
|
-
//
|
|
412
|
-
|
|
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;
|
|
412
|
+
// 其他未匹配的事件——交给主 proxy
|
|
413
|
+
return false;
|
|
419
414
|
}
|
|
420
415
|
|
|
421
416
|
return false; // 不是端口池的消息
|