cdp-tunnel 2.7.9 → 2.8.0
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/extension-new/background.js +234 -130
- package/extension-new/cdp/handler/forward.js +9 -7
- package/extension-new/cdp/handler/local.js +60 -39
- package/extension-new/cdp/handler/special.js +145 -119
- package/extension-new/cdp/index.js +16 -7
- package/extension-new/cdp/response.js +12 -4
- package/extension-new/config-page-preview.html +174 -57
- package/extension-new/config-page.js +169 -70
- package/extension-new/core/connection-manager.js +120 -0
- package/extension-new/core/connection-state.js +355 -0
- package/extension-new/core/debugger.js +65 -52
- package/extension-new/core/state.js +87 -438
- package/extension-new/core/websocket.js +345 -279
- package/extension-new/features/screencast.js +42 -20
- package/extension-new/manifest.json +3 -2
- package/extension-new/utils/config.js +83 -2
- package/extension-new/utils/helpers.js +5 -4
- package/package.json +1 -1
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
var LocalHandler = (function() {
|
|
2
|
+
function _getState(ctx) {
|
|
3
|
+
return ctx._state;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
function _getConnectionTag(ctx) {
|
|
7
|
+
var wm = ctx._wsManager;
|
|
8
|
+
return (wm && wm.config && wm.config.tag) || null;
|
|
9
|
+
}
|
|
10
|
+
|
|
2
11
|
function browserGetVersion() {
|
|
3
12
|
var userAgent = navigator.userAgent || '';
|
|
4
13
|
var match = userAgent.match(/Chrome\/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/);
|
|
@@ -29,14 +38,17 @@ var LocalHandler = (function() {
|
|
|
29
38
|
};
|
|
30
39
|
}
|
|
31
40
|
|
|
32
|
-
function targetSetDiscoverTargets(
|
|
33
|
-
|
|
34
|
-
|
|
41
|
+
function targetSetDiscoverTargets(context) {
|
|
42
|
+
var state = _getState(context);
|
|
43
|
+
var params = context.params;
|
|
44
|
+
var wsManager = context._wsManager;
|
|
45
|
+
state.setDiscoverTargets(!!(params && params.discover));
|
|
46
|
+
|
|
35
47
|
if (params && params.discover) {
|
|
36
48
|
return getTargetInfos().then(function(targets) {
|
|
37
49
|
targets.forEach(function(targetInfo) {
|
|
38
|
-
|
|
39
|
-
EventBuilder.send('Target.targetCreated', { targetInfo: targetInfo });
|
|
50
|
+
state.addEmittedTarget(targetInfo.targetId);
|
|
51
|
+
EventBuilder.send('Target.targetCreated', { targetInfo: targetInfo }, null, wsManager);
|
|
40
52
|
});
|
|
41
53
|
return {};
|
|
42
54
|
});
|
|
@@ -65,19 +77,23 @@ var LocalHandler = (function() {
|
|
|
65
77
|
});
|
|
66
78
|
}
|
|
67
79
|
|
|
68
|
-
function targetCreateBrowserContext() {
|
|
80
|
+
function targetCreateBrowserContext(context) {
|
|
81
|
+
var state = _getState(context);
|
|
69
82
|
var browserContextId = 'context-' + Date.now() + '-' + Math.random().toString(36).slice(2, 9);
|
|
70
|
-
|
|
83
|
+
state.addBrowserContext(browserContextId);
|
|
71
84
|
return { browserContextId: browserContextId };
|
|
72
85
|
}
|
|
73
86
|
|
|
74
|
-
function targetGetBrowserContexts() {
|
|
75
|
-
|
|
87
|
+
function targetGetBrowserContexts(context) {
|
|
88
|
+
var state = _getState(context);
|
|
89
|
+
return { browserContextIds: state.getBrowserContexts() };
|
|
76
90
|
}
|
|
77
91
|
|
|
78
|
-
function targetDisposeBrowserContext(
|
|
92
|
+
function targetDisposeBrowserContext(context) {
|
|
93
|
+
var state = _getState(context);
|
|
94
|
+
var params = context.params;
|
|
79
95
|
if (params && params.browserContextId) {
|
|
80
|
-
|
|
96
|
+
state.removeBrowserContext(params.browserContextId);
|
|
81
97
|
}
|
|
82
98
|
return {};
|
|
83
99
|
}
|
|
@@ -136,10 +152,11 @@ var LocalHandler = (function() {
|
|
|
136
152
|
}
|
|
137
153
|
|
|
138
154
|
function tabUngroup(context) {
|
|
155
|
+
var state = _getState(context);
|
|
139
156
|
var clientId = context.clientId;
|
|
140
157
|
var groupId = null;
|
|
141
158
|
try {
|
|
142
|
-
groupId =
|
|
159
|
+
groupId = state.getGroupIdForClient(clientId);
|
|
143
160
|
} catch (e) {
|
|
144
161
|
Logger.error('[TabUngroup] Error getting groupId: ' + (e.message || e));
|
|
145
162
|
return Promise.resolve({ success: false, ungroupedCount: 0, error: e.message || String(e) });
|
|
@@ -165,7 +182,7 @@ var LocalHandler = (function() {
|
|
|
165
182
|
resolve({ success: false, ungroupedCount: 0, error: chrome.runtime.lastError.message });
|
|
166
183
|
return;
|
|
167
184
|
}
|
|
168
|
-
|
|
185
|
+
state.removeGroupForClient(clientId);
|
|
169
186
|
resolve({ success: true, ungroupedCount: tabIds.length });
|
|
170
187
|
});
|
|
171
188
|
});
|
|
@@ -173,20 +190,21 @@ var LocalHandler = (function() {
|
|
|
173
190
|
}
|
|
174
191
|
|
|
175
192
|
function tabGetGroupInfo(context) {
|
|
193
|
+
var state = _getState(context);
|
|
176
194
|
var clientId = context.clientId;
|
|
177
195
|
var cachedGroupId = null;
|
|
178
196
|
var baseName = null;
|
|
179
197
|
try {
|
|
180
|
-
cachedGroupId =
|
|
181
|
-
baseName = CDPUtils.getGroupBaseName(clientId);
|
|
198
|
+
cachedGroupId = state.getGroupIdForClient(clientId);
|
|
199
|
+
baseName = CDPUtils.getGroupBaseName(clientId, _getConnectionTag(context));
|
|
182
200
|
} catch (e) {
|
|
183
201
|
Logger.error('[TabGetGroupInfo] Error: ' + (e.message || e));
|
|
184
202
|
}
|
|
185
203
|
|
|
186
|
-
var attachedTabIds =
|
|
204
|
+
var attachedTabIds = state.getAttachedTabIds();
|
|
187
205
|
var matchedTabId = null;
|
|
188
206
|
for (var i = 0; i < attachedTabIds.length; i++) {
|
|
189
|
-
if (
|
|
207
|
+
if (state.getClientIdByTabId(attachedTabIds[i]) === clientId) {
|
|
190
208
|
matchedTabId = attachedTabIds[i];
|
|
191
209
|
break;
|
|
192
210
|
}
|
|
@@ -228,10 +246,11 @@ var LocalHandler = (function() {
|
|
|
228
246
|
}
|
|
229
247
|
|
|
230
248
|
function tabSimulateUserOpen(context) {
|
|
231
|
-
var
|
|
249
|
+
var state = _getState(context);
|
|
250
|
+
var attachedTabIds = state.getAttachedTabIds();
|
|
232
251
|
var openerTabId = null;
|
|
233
252
|
for (var i = 0; i < attachedTabIds.length; i++) {
|
|
234
|
-
if (
|
|
253
|
+
if (state.isCDPCreatedTab(attachedTabIds[i])) {
|
|
235
254
|
openerTabId = attachedTabIds[i];
|
|
236
255
|
break;
|
|
237
256
|
}
|
|
@@ -277,9 +296,11 @@ var LocalHandler = (function() {
|
|
|
277
296
|
});
|
|
278
297
|
}
|
|
279
298
|
|
|
280
|
-
function tabGetMuteStatus(
|
|
299
|
+
function tabGetMuteStatus(context) {
|
|
300
|
+
var state = _getState(context);
|
|
301
|
+
var params = context.params;
|
|
281
302
|
var cdpOnly = params && params.cdpOnly;
|
|
282
|
-
var attachedTabIds =
|
|
303
|
+
var attachedTabIds = state.getAttachedTabIds();
|
|
283
304
|
|
|
284
305
|
return new Promise(function(resolve) {
|
|
285
306
|
chrome.tabs.query({}, function(tabs) {
|
|
@@ -312,13 +333,12 @@ var LocalHandler = (function() {
|
|
|
312
333
|
|
|
313
334
|
function getTargetInfos() {
|
|
314
335
|
return chrome.debugger.getTargets().then(function(targets) {
|
|
315
|
-
|
|
316
|
-
const promises = targets.map(function(target) {
|
|
336
|
+
var promises = targets.map(function(target) {
|
|
317
337
|
if (target.tabId) {
|
|
318
338
|
return new Promise(function(resolve) {
|
|
319
339
|
chrome.tabs.get(target.tabId, function(tab) {
|
|
320
340
|
if (tab && tab.openerTabId) {
|
|
321
|
-
|
|
341
|
+
var openerMatch = targets.find(function(t) {
|
|
322
342
|
return String(t.tabId) === String(tab.openerTabId);
|
|
323
343
|
});
|
|
324
344
|
if (openerMatch) {
|
|
@@ -342,14 +362,12 @@ var LocalHandler = (function() {
|
|
|
342
362
|
return t.id === targetId || String(t.tabId) === String(targetId);
|
|
343
363
|
});
|
|
344
364
|
if (!match) return null;
|
|
345
|
-
|
|
346
|
-
// 获取 tab 信息以获取 openerTabId
|
|
365
|
+
|
|
347
366
|
var tabId = match.tabId;
|
|
348
367
|
if (tabId) {
|
|
349
368
|
return new Promise(function(resolve) {
|
|
350
369
|
chrome.tabs.get(tabId, function(tab) {
|
|
351
370
|
if (tab && tab.openerTabId) {
|
|
352
|
-
// 查找 opener 的 targetId
|
|
353
371
|
var openerMatch = targets.find(function(t) {
|
|
354
372
|
return String(t.tabId) === String(tab.openerTabId);
|
|
355
373
|
});
|
|
@@ -361,24 +379,28 @@ var LocalHandler = (function() {
|
|
|
361
379
|
});
|
|
362
380
|
});
|
|
363
381
|
}
|
|
364
|
-
|
|
382
|
+
|
|
365
383
|
return mapToTargetInfo(match);
|
|
366
384
|
});
|
|
367
385
|
}
|
|
368
386
|
|
|
369
387
|
function getFallbackTargetId() {
|
|
370
|
-
var
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
388
|
+
var entry = ConnectionManager.getPrimaryConnection();
|
|
389
|
+
var state = entry ? entry.state : null;
|
|
390
|
+
if (state) {
|
|
391
|
+
var currentTabId = state.getCurrentTabId();
|
|
392
|
+
if (currentTabId != null) {
|
|
393
|
+
return ensureTabExists(currentTabId).then(function(exists) {
|
|
394
|
+
if (exists) return String(currentTabId);
|
|
395
|
+
return getActiveTabId().then(function(activeId) {
|
|
396
|
+
if (activeId != null) return String(activeId);
|
|
397
|
+
return getTargetInfos().then(function(infos) {
|
|
398
|
+
var page = infos.find(function(t) { return t.type === 'page'; });
|
|
399
|
+
return page ? page.targetId : null;
|
|
400
|
+
});
|
|
379
401
|
});
|
|
380
402
|
});
|
|
381
|
-
}
|
|
403
|
+
}
|
|
382
404
|
}
|
|
383
405
|
return getActiveTabId().then(function(activeId) {
|
|
384
406
|
if (activeId != null) return String(activeId);
|
|
@@ -419,7 +441,6 @@ var LocalHandler = (function() {
|
|
|
419
441
|
canAccessOpener: false,
|
|
420
442
|
browserContextId: 'default'
|
|
421
443
|
};
|
|
422
|
-
// 添加 openerId(如果有)
|
|
423
444
|
if (target.openerId) {
|
|
424
445
|
info.openerId = target.openerId;
|
|
425
446
|
}
|