Skip to content

Commit 98770e9

Browse files
dgozmanpavelfeldman
authored andcommitted
browser(firefox): support BrowserContext.setExtraHTTPHeaders (#1111)
1 parent d9305a3 commit 98770e9

File tree

2 files changed

+60
-35
lines changed

2 files changed

+60
-35
lines changed

browser_patches/firefox/BUILD_NUMBER

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1030
1+
1031

browser_patches/firefox/patches/bootstrap.diff

+59-34
Original file line numberDiff line numberDiff line change
@@ -763,17 +763,19 @@ index 0000000000000000000000000000000000000000..862c680198bbb503a5f04c19bdb8fdf2
763763
+
764764
diff --git a/testing/juggler/NetworkObserver.js b/testing/juggler/NetworkObserver.js
765765
new file mode 100644
766-
index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e33da53803
766+
index 0000000000000000000000000000000000000000..8fe6a596bda3f58e6f93ba943fbbc0819bf0fc01
767767
--- /dev/null
768768
+++ b/testing/juggler/NetworkObserver.js
769-
@@ -0,0 +1,681 @@
769+
@@ -0,0 +1,689 @@
770770
+"use strict";
771771
+
772772
+const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm');
773773
+const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
774774
+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
775775
+const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
776776
+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');
777779
+
778780
+
779781
+const Cc = Components.classes;
@@ -992,11 +994,10 @@ index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e3
992994
+ new ResponseBodyListener(this, browser, httpChannel);
993995
+ return;
994996
+ }
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));
10001001
+ const requestId = this._requestId(httpChannel);
10011002
+ const isRedirect = this._redirectMap.has(requestId);
10021003
+ const interceptors = this._browserInterceptors.get(browser);
@@ -1022,6 +1023,13 @@ index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e3
10221023
+ }
10231024
+ }
10241025
+
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+
+
10251033
+ _onIntercepted(httpChannel, interceptor) {
10261034
+ const browser = this._getBrowserForChannel(httpChannel);
10271035
+ if (!browser) {
@@ -1450,10 +1458,10 @@ index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e3
14501458
+this.NetworkObserver = NetworkObserver;
14511459
diff --git a/testing/juggler/TargetRegistry.js b/testing/juggler/TargetRegistry.js
14521460
new file mode 100644
1453-
index 0000000000000000000000000000000000000000..6a128959f9128a87cd3d46a5d906028ff500f9e0
1461+
index 0000000000000000000000000000000000000000..4de911fc5bc9c93b961b0e70474ddbe10e4af8c6
14541462
--- /dev/null
14551463
+++ b/testing/juggler/TargetRegistry.js
1456-
@@ -0,0 +1,232 @@
1464+
@@ -0,0 +1,239 @@
14571465
+const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm');
14581466
+const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
14591467
+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
@@ -1554,6 +1562,16 @@ index 0000000000000000000000000000000000000000..6a128959f9128a87cd3d46a5d906028f
15541562
+ return this._targets.get(targetId);
15551563
+ }
15561564
+
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+
+
15571575
+ _createTargetForTab(tab) {
15581576
+ if (this._tabToTarget.has(tab))
15591577
+ throw new Error(`Internal error: two targets per tab`);
@@ -1570,10 +1588,7 @@ index 0000000000000000000000000000000000000000..6a128959f9128a87cd3d46a5d906028f
15701588
+ const browser = subject.ownerElement;
15711589
+ if (!browser)
15721590
+ 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);
15771592
+ if (!target)
15781593
+ return;
15791594
+ this.emit(TargetRegistry.Events.TargetCrashed, target.id());
@@ -4117,10 +4132,10 @@ index 0000000000000000000000000000000000000000..a2d3b79469566ca2edb7d864621f7085
41174132
+this.AccessibilityHandler = AccessibilityHandler;
41184133
diff --git a/testing/juggler/protocol/BrowserHandler.js b/testing/juggler/protocol/BrowserHandler.js
41194134
new file mode 100644
4120-
index 0000000000000000000000000000000000000000..6b42032e8f6d39025f455300d376084826a781cc
4135+
index 0000000000000000000000000000000000000000..af071300faeb8018ec2e956743d0a619886248b8
41214136
--- /dev/null
41224137
+++ b/testing/juggler/protocol/BrowserHandler.js
4123-
@@ -0,0 +1,73 @@
4138+
@@ -0,0 +1,77 @@
41244139
+"use strict";
41254140
+
41264141
+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
@@ -4166,6 +4181,10 @@ index 0000000000000000000000000000000000000000..6b42032e8f6d39025f455300d3760848
41664181
+ this._contextManager.browserContextForId(browserContextId).resetPermissions();
41674182
+ }
41684183
+
4184+
+ setExtraHTTPHeaders({browserContextId, headers}) {
4185+
+ this._contextManager.browserContextForId(browserContextId).options.extraHTTPHeaders = headers;
4186+
+ }
4187+
+
41694188
+ setCookies({browserContextId, cookies}) {
41704189
+ this._contextManager.browserContextForId(browserContextId).setCookies(cookies);
41714190
+ }
@@ -5060,10 +5079,10 @@ index 0000000000000000000000000000000000000000..78b6601b91d0b7fcda61114e6846aa07
50605079
+this.EXPORTED_SYMBOLS = ['t', 'checkScheme'];
50615080
diff --git a/testing/juggler/protocol/Protocol.js b/testing/juggler/protocol/Protocol.js
50625081
new file mode 100644
5063-
index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb84f517fcb
5082+
index 0000000000000000000000000000000000000000..b6da790c65f25363a5bb85d7525bf2185d884235
50645083
--- /dev/null
50655084
+++ b/testing/juggler/protocol/Protocol.js
5066-
@@ -0,0 +1,752 @@
5085+
@@ -0,0 +1,758 @@
50675086
+const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js');
50685087
+
50695088
+// Protocol-specific types.
@@ -5225,6 +5244,21 @@ index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb8
52255244
+ foundObject: t.Optional(t.Boolean),
52265245
+}
52275246
+
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+
+
52285262
+const Browser = {
52295263
+ targets: ['browser'],
52305264
+
@@ -5245,6 +5279,12 @@ index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb8
52455279
+ enabled: t.Boolean,
52465280
+ },
52475281
+ },
5282+
+ 'setExtraHTTPHeaders': {
5283+
+ params: {
5284+
+ browserContextId: t.Optional(t.String),
5285+
+ headers: t.Array(networkTypes.HTTPHeader),
5286+
+ },
5287+
+ },
52485288
+ 'grantPermissions': {
52495289
+ params: {
52505290
+ origin: t.String,
@@ -5343,21 +5383,6 @@ index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb8
53435383
+ },
53445384
+};
53455385
+
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-
+
53615386
+const Network = {
53625387
+ targets: ['page'],
53635388
+ types: networkTypes,
@@ -5861,7 +5886,7 @@ index 0000000000000000000000000000000000000000..089e66c617f114fcb32b3cea20abc6fb
58615886
+this.RuntimeHandler = RuntimeHandler;
58625887
diff --git a/testing/juggler/protocol/TargetHandler.js b/testing/juggler/protocol/TargetHandler.js
58635888
new file mode 100644
5864-
index 0000000000000000000000000000000000000000..4795a4ddecdd016d6efbcde35aa7321af17cd7dc
5889+
index 0000000000000000000000000000000000000000..c0bab449971de13f993ac9825ac13368f8d8e226
58655890
--- /dev/null
58665891
+++ b/testing/juggler/protocol/TargetHandler.js
58675892
@@ -0,0 +1,100 @@
@@ -5935,7 +5960,7 @@ index 0000000000000000000000000000000000000000..4795a4ddecdd016d6efbcde35aa7321a
59355960
+ if (browserContext.options.removeOnDetach)
59365961
+ browserContext.destroy();
59375962
+ }
5938-
+ this._createdBrowserContextOptions.clear();
5963+
+ this._createdBrowserContextIds.clear();
59395964
+ }
59405965
+
59415966
+ _onTargetCreated(targetInfo) {

0 commit comments

Comments
 (0)