@@ -763,17 +763,19 @@ index 0000000000000000000000000000000000000000..862c680198bbb503a5f04c19bdb8fdf2
763
763
+
764
764
diff --git a/testing/juggler/NetworkObserver.js b/testing/juggler/NetworkObserver.js
765
765
new file mode 100644
766
- index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e33da53803
766
+ index 0000000000000000000000000000000000000000..8fe6a596bda3f58e6f93ba943fbbc0819bf0fc01
767
767
--- /dev/null
768
768
+++ b/testing/juggler/NetworkObserver.js
769
- @@ -0,0 +1,681 @@
769
+ @@ -0,0 +1,689 @@
770
770
+ "use strict";
771
771
+
772
772
+ const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm');
773
773
+ const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
774
774
+ const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
775
775
+ const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
776
776
+ const {CommonUtils} = ChromeUtils.import("resource://services-common/utils.js");
777
+ + const {TargetRegistry} = ChromeUtils.import('chrome://juggler/content/TargetRegistry.js');
778
+ + const {BrowserContextManager} = ChromeUtils.import('chrome://juggler/content/BrowserContextManager.js');
777
779
+
778
780
+
779
781
+ const Cc = Components.classes;
@@ -992,11 +994,10 @@ index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e3
992
994
+ new ResponseBodyListener(this, browser, httpChannel);
993
995
+ return;
994
996
+ }
995
- + const extraHeaders = this._extraHTTPHeaders.get(browser);
996
- + if (extraHeaders) {
997
- + for (const header of extraHeaders)
998
- + httpChannel.setRequestHeader(header.name, header.value, false /* merge */);
999
- + }
997
+ + const browserContext = TargetRegistry.instance().browserContextForBrowser(browser);
998
+ + if (browserContext)
999
+ + this._appendExtraHTTPHeaders(httpChannel, browserContext.options.extraHTTPHeaders);
1000
+ + this._appendExtraHTTPHeaders(httpChannel, this._extraHTTPHeaders.get(browser));
1000
1001
+ const requestId = this._requestId(httpChannel);
1001
1002
+ const isRedirect = this._redirectMap.has(requestId);
1002
1003
+ const interceptors = this._browserInterceptors.get(browser);
@@ -1022,6 +1023,13 @@ index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e3
1022
1023
+ }
1023
1024
+ }
1024
1025
+
1026
+ + _appendExtraHTTPHeaders(httpChannel, headers) {
1027
+ + if (!headers)
1028
+ + return;
1029
+ + for (const header of headers)
1030
+ + httpChannel.setRequestHeader(header.name, header.value, false /* merge */);
1031
+ + }
1032
+ +
1025
1033
+ _onIntercepted(httpChannel, interceptor) {
1026
1034
+ const browser = this._getBrowserForChannel(httpChannel);
1027
1035
+ if (!browser) {
@@ -1450,10 +1458,10 @@ index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e3
1450
1458
+ this.NetworkObserver = NetworkObserver;
1451
1459
diff --git a/testing/juggler/TargetRegistry.js b/testing/juggler/TargetRegistry.js
1452
1460
new file mode 100644
1453
- index 0000000000000000000000000000000000000000..6a128959f9128a87cd3d46a5d906028ff500f9e0
1461
+ index 0000000000000000000000000000000000000000..4de911fc5bc9c93b961b0e70474ddbe10e4af8c6
1454
1462
--- /dev/null
1455
1463
+++ b/testing/juggler/TargetRegistry.js
1456
- @@ -0,0 +1,232 @@
1464
+ @@ -0,0 +1,239 @@
1457
1465
+ const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm');
1458
1466
+ const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
1459
1467
+ const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
@@ -1554,6 +1562,16 @@ index 0000000000000000000000000000000000000000..6a128959f9128a87cd3d46a5d906028f
1554
1562
+ return this._targets.get(targetId);
1555
1563
+ }
1556
1564
+
1565
+ + targetForBrowser(browser) {
1566
+ + const tab = this._mainWindow.gBrowser.getTabForBrowser(browser);
1567
+ + return tab ? this._tabToTarget.get(tab) : undefined;
1568
+ + }
1569
+ +
1570
+ + browserContextForBrowser(browser) {
1571
+ + const tab = this._mainWindow.gBrowser.getTabForBrowser(browser);
1572
+ + return tab ? this._contextManager.browserContextForUserContextId(tab.userContextId) : undefined;
1573
+ + }
1574
+ +
1557
1575
+ _createTargetForTab(tab) {
1558
1576
+ if (this._tabToTarget.has(tab))
1559
1577
+ throw new Error(`Internal error: two targets per tab`);
@@ -1570,10 +1588,7 @@ index 0000000000000000000000000000000000000000..6a128959f9128a87cd3d46a5d906028f
1570
1588
+ const browser = subject.ownerElement;
1571
1589
+ if (!browser)
1572
1590
+ return;
1573
- + const tab = this._mainWindow.gBrowser.getTabForBrowser(browser);
1574
- + if (!tab)
1575
- + return;
1576
- + const target = this._tabToTarget.get(tab);
1591
+ + const target = this.targetForBrowser(browser);
1577
1592
+ if (!target)
1578
1593
+ return;
1579
1594
+ this.emit(TargetRegistry.Events.TargetCrashed, target.id());
@@ -4117,10 +4132,10 @@ index 0000000000000000000000000000000000000000..a2d3b79469566ca2edb7d864621f7085
4117
4132
+ this.AccessibilityHandler = AccessibilityHandler;
4118
4133
diff --git a/testing/juggler/protocol/BrowserHandler.js b/testing/juggler/protocol/BrowserHandler.js
4119
4134
new file mode 100644
4120
- index 0000000000000000000000000000000000000000..6b42032e8f6d39025f455300d376084826a781cc
4135
+ index 0000000000000000000000000000000000000000..af071300faeb8018ec2e956743d0a619886248b8
4121
4136
--- /dev/null
4122
4137
+++ b/testing/juggler/protocol/BrowserHandler.js
4123
- @@ -0,0 +1,73 @@
4138
+ @@ -0,0 +1,77 @@
4124
4139
+ "use strict";
4125
4140
+
4126
4141
+ const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
@@ -4166,6 +4181,10 @@ index 0000000000000000000000000000000000000000..6b42032e8f6d39025f455300d3760848
4166
4181
+ this._contextManager.browserContextForId(browserContextId).resetPermissions();
4167
4182
+ }
4168
4183
+
4184
+ + setExtraHTTPHeaders({browserContextId, headers}) {
4185
+ + this._contextManager.browserContextForId(browserContextId).options.extraHTTPHeaders = headers;
4186
+ + }
4187
+ +
4169
4188
+ setCookies({browserContextId, cookies}) {
4170
4189
+ this._contextManager.browserContextForId(browserContextId).setCookies(cookies);
4171
4190
+ }
@@ -5060,10 +5079,10 @@ index 0000000000000000000000000000000000000000..78b6601b91d0b7fcda61114e6846aa07
5060
5079
+ this.EXPORTED_SYMBOLS = ['t', 'checkScheme'];
5061
5080
diff --git a/testing/juggler/protocol/Protocol.js b/testing/juggler/protocol/Protocol.js
5062
5081
new file mode 100644
5063
- index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb84f517fcb
5082
+ index 0000000000000000000000000000000000000000..b6da790c65f25363a5bb85d7525bf2185d884235
5064
5083
--- /dev/null
5065
5084
+++ b/testing/juggler/protocol/Protocol.js
5066
- @@ -0,0 +1,752 @@
5085
+ @@ -0,0 +1,758 @@
5067
5086
+ const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js');
5068
5087
+
5069
5088
+ // Protocol-specific types.
@@ -5225,6 +5244,21 @@ index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb8
5225
5244
+ foundObject: t.Optional(t.Boolean),
5226
5245
+ }
5227
5246
+
5247
+ + const networkTypes = {};
5248
+ +
5249
+ + networkTypes.HTTPHeader = {
5250
+ + name: t.String,
5251
+ + value: t.String,
5252
+ + };
5253
+ +
5254
+ + networkTypes.SecurityDetails = {
5255
+ + protocol: t.String,
5256
+ + subjectName: t.String,
5257
+ + issuer: t.String,
5258
+ + validFrom: t.Number,
5259
+ + validTo: t.Number,
5260
+ + };
5261
+ +
5228
5262
+ const Browser = {
5229
5263
+ targets: ['browser'],
5230
5264
+
@@ -5245,6 +5279,12 @@ index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb8
5245
5279
+ enabled: t.Boolean,
5246
5280
+ },
5247
5281
+ },
5282
+ + 'setExtraHTTPHeaders': {
5283
+ + params: {
5284
+ + browserContextId: t.Optional(t.String),
5285
+ + headers: t.Array(networkTypes.HTTPHeader),
5286
+ + },
5287
+ + },
5248
5288
+ 'grantPermissions': {
5249
5289
+ params: {
5250
5290
+ origin: t.String,
@@ -5343,21 +5383,6 @@ index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb8
5343
5383
+ },
5344
5384
+ };
5345
5385
+
5346
- + const networkTypes = {};
5347
- +
5348
- + networkTypes.HTTPHeader = {
5349
- + name: t.String,
5350
- + value: t.String,
5351
- + };
5352
- +
5353
- + networkTypes.SecurityDetails = {
5354
- + protocol: t.String,
5355
- + subjectName: t.String,
5356
- + issuer: t.String,
5357
- + validFrom: t.Number,
5358
- + validTo: t.Number,
5359
- + };
5360
- +
5361
5386
+ const Network = {
5362
5387
+ targets: ['page'],
5363
5388
+ types: networkTypes,
@@ -5861,7 +5886,7 @@ index 0000000000000000000000000000000000000000..089e66c617f114fcb32b3cea20abc6fb
5861
5886
+ this.RuntimeHandler = RuntimeHandler;
5862
5887
diff --git a/testing/juggler/protocol/TargetHandler.js b/testing/juggler/protocol/TargetHandler.js
5863
5888
new file mode 100644
5864
- index 0000000000000000000000000000000000000000..4795a4ddecdd016d6efbcde35aa7321af17cd7dc
5889
+ index 0000000000000000000000000000000000000000..c0bab449971de13f993ac9825ac13368f8d8e226
5865
5890
--- /dev/null
5866
5891
+++ b/testing/juggler/protocol/TargetHandler.js
5867
5892
@@ -0,0 +1,100 @@
@@ -5935,7 +5960,7 @@ index 0000000000000000000000000000000000000000..4795a4ddecdd016d6efbcde35aa7321a
5935
5960
+ if (browserContext.options.removeOnDetach)
5936
5961
+ browserContext.destroy();
5937
5962
+ }
5938
- + this._createdBrowserContextOptions .clear();
5963
+ + this._createdBrowserContextIds .clear();
5939
5964
+ }
5940
5965
+
5941
5966
+ _onTargetCreated(targetInfo) {
0 commit comments