cdp-tunnel 3.3.1 → 3.3.2
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.
package/package.json
CHANGED
|
@@ -210,10 +210,11 @@ class PortPoolManager {
|
|
|
210
210
|
try { msg = JSON.parse(data.toString()); } catch { return; }
|
|
211
211
|
|
|
212
212
|
if (msg.id !== undefined) {
|
|
213
|
-
// createTarget
|
|
213
|
+
// createTarget 串行化 + 标记 pending
|
|
214
214
|
if (msg.method === 'Target.createTarget') {
|
|
215
215
|
while (session.createTargetLock) { await session.createTargetLock; }
|
|
216
216
|
session.createTargetLock = new Promise(r => { session._releaseCreateTarget = r; });
|
|
217
|
+
session.pendingCreate = true; // 标记:下一个 targetCreated 事件归属这个端口
|
|
217
218
|
}
|
|
218
219
|
|
|
219
220
|
// 合成输入命令:先 bringToFront + 等待,再发原命令
|
|
@@ -348,6 +349,19 @@ class PortPoolManager {
|
|
|
348
349
|
return true;
|
|
349
350
|
}
|
|
350
351
|
}
|
|
352
|
+
// 竞态处理:targetCreated 在 createTarget 响应之前到达
|
|
353
|
+
// 如果有 pendingCreate,把事件归属到对应端口
|
|
354
|
+
for (let pi = 0; pi < this.portSessions.length; pi++) {
|
|
355
|
+
const sess = this.portSessions[pi];
|
|
356
|
+
if (sess && sess.pendingCreate) {
|
|
357
|
+
sess.targetIds.add(targetId);
|
|
358
|
+
sess.targetUrls.set(targetId, 'about:blank');
|
|
359
|
+
this.targetToPort.set(targetId, pi);
|
|
360
|
+
sess.pendingCreate = false; // 消费掉
|
|
361
|
+
this._broadcastToPort(pi, msg);
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
351
365
|
}
|
|
352
366
|
|
|
353
367
|
// sessionId 路由(Network/Screencast/Input 等 session 事件)
|