browser(firefox): support BrowserContext.setExtraHTTPHeaders (#1111)

This commit is contained in:
Dmitry Gozman 2020-02-25 17:24:06 -08:00 committed by GitHub
parent de635349c1
commit facf2c24fd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 60 additions and 35 deletions

View file

@ -1 +1 @@
1030 1031

View file

@ -763,10 +763,10 @@ index 0000000000000000000000000000000000000000..862c680198bbb503a5f04c19bdb8fdf2
+ +
diff --git a/testing/juggler/NetworkObserver.js b/testing/juggler/NetworkObserver.js diff --git a/testing/juggler/NetworkObserver.js b/testing/juggler/NetworkObserver.js
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e33da53803 index 0000000000000000000000000000000000000000..8fe6a596bda3f58e6f93ba943fbbc0819bf0fc01
--- /dev/null --- /dev/null
+++ b/testing/juggler/NetworkObserver.js +++ b/testing/juggler/NetworkObserver.js
@@ -0,0 +1,681 @@ @@ -0,0 +1,689 @@
+"use strict"; +"use strict";
+ +
+const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm'); +const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm');
@ -774,6 +774,8 @@ index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e3
+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
+const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm'); +const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
+const {CommonUtils} = ChromeUtils.import("resource://services-common/utils.js"); +const {CommonUtils} = ChromeUtils.import("resource://services-common/utils.js");
+const {TargetRegistry} = ChromeUtils.import('chrome://juggler/content/TargetRegistry.js');
+const {BrowserContextManager} = ChromeUtils.import('chrome://juggler/content/BrowserContextManager.js');
+ +
+ +
+const Cc = Components.classes; +const Cc = Components.classes;
@ -992,11 +994,10 @@ index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e3
+ new ResponseBodyListener(this, browser, httpChannel); + new ResponseBodyListener(this, browser, httpChannel);
+ return; + return;
+ } + }
+ const extraHeaders = this._extraHTTPHeaders.get(browser); + const browserContext = TargetRegistry.instance().browserContextForBrowser(browser);
+ if (extraHeaders) { + if (browserContext)
+ for (const header of extraHeaders) + this._appendExtraHTTPHeaders(httpChannel, browserContext.options.extraHTTPHeaders);
+ httpChannel.setRequestHeader(header.name, header.value, false /* merge */); + this._appendExtraHTTPHeaders(httpChannel, this._extraHTTPHeaders.get(browser));
+ }
+ const requestId = this._requestId(httpChannel); + const requestId = this._requestId(httpChannel);
+ const isRedirect = this._redirectMap.has(requestId); + const isRedirect = this._redirectMap.has(requestId);
+ const interceptors = this._browserInterceptors.get(browser); + const interceptors = this._browserInterceptors.get(browser);
@ -1022,6 +1023,13 @@ index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e3
+ } + }
+ } + }
+ +
+ _appendExtraHTTPHeaders(httpChannel, headers) {
+ if (!headers)
+ return;
+ for (const header of headers)
+ httpChannel.setRequestHeader(header.name, header.value, false /* merge */);
+ }
+
+ _onIntercepted(httpChannel, interceptor) { + _onIntercepted(httpChannel, interceptor) {
+ const browser = this._getBrowserForChannel(httpChannel); + const browser = this._getBrowserForChannel(httpChannel);
+ if (!browser) { + if (!browser) {
@ -1450,10 +1458,10 @@ index 0000000000000000000000000000000000000000..66f61d432f9ad2f50931b780ec5ea0e3
+this.NetworkObserver = NetworkObserver; +this.NetworkObserver = NetworkObserver;
diff --git a/testing/juggler/TargetRegistry.js b/testing/juggler/TargetRegistry.js diff --git a/testing/juggler/TargetRegistry.js b/testing/juggler/TargetRegistry.js
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..6a128959f9128a87cd3d46a5d906028ff500f9e0 index 0000000000000000000000000000000000000000..4de911fc5bc9c93b961b0e70474ddbe10e4af8c6
--- /dev/null --- /dev/null
+++ b/testing/juggler/TargetRegistry.js +++ b/testing/juggler/TargetRegistry.js
@@ -0,0 +1,232 @@ @@ -0,0 +1,239 @@
+const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm'); +const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm');
+const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js'); +const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
@ -1554,6 +1562,16 @@ index 0000000000000000000000000000000000000000..6a128959f9128a87cd3d46a5d906028f
+ return this._targets.get(targetId); + return this._targets.get(targetId);
+ } + }
+ +
+ targetForBrowser(browser) {
+ const tab = this._mainWindow.gBrowser.getTabForBrowser(browser);
+ return tab ? this._tabToTarget.get(tab) : undefined;
+ }
+
+ browserContextForBrowser(browser) {
+ const tab = this._mainWindow.gBrowser.getTabForBrowser(browser);
+ return tab ? this._contextManager.browserContextForUserContextId(tab.userContextId) : undefined;
+ }
+
+ _createTargetForTab(tab) { + _createTargetForTab(tab) {
+ if (this._tabToTarget.has(tab)) + if (this._tabToTarget.has(tab))
+ throw new Error(`Internal error: two targets per tab`); + throw new Error(`Internal error: two targets per tab`);
@ -1570,10 +1588,7 @@ index 0000000000000000000000000000000000000000..6a128959f9128a87cd3d46a5d906028f
+ const browser = subject.ownerElement; + const browser = subject.ownerElement;
+ if (!browser) + if (!browser)
+ return; + return;
+ const tab = this._mainWindow.gBrowser.getTabForBrowser(browser); + const target = this.targetForBrowser(browser);
+ if (!tab)
+ return;
+ const target = this._tabToTarget.get(tab);
+ if (!target) + if (!target)
+ return; + return;
+ this.emit(TargetRegistry.Events.TargetCrashed, target.id()); + this.emit(TargetRegistry.Events.TargetCrashed, target.id());
@ -4117,10 +4132,10 @@ index 0000000000000000000000000000000000000000..a2d3b79469566ca2edb7d864621f7085
+this.AccessibilityHandler = AccessibilityHandler; +this.AccessibilityHandler = AccessibilityHandler;
diff --git a/testing/juggler/protocol/BrowserHandler.js b/testing/juggler/protocol/BrowserHandler.js diff --git a/testing/juggler/protocol/BrowserHandler.js b/testing/juggler/protocol/BrowserHandler.js
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..6b42032e8f6d39025f455300d376084826a781cc index 0000000000000000000000000000000000000000..af071300faeb8018ec2e956743d0a619886248b8
--- /dev/null --- /dev/null
+++ b/testing/juggler/protocol/BrowserHandler.js +++ b/testing/juggler/protocol/BrowserHandler.js
@@ -0,0 +1,73 @@ @@ -0,0 +1,77 @@
+"use strict"; +"use strict";
+ +
+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
@ -4166,6 +4181,10 @@ index 0000000000000000000000000000000000000000..6b42032e8f6d39025f455300d3760848
+ this._contextManager.browserContextForId(browserContextId).resetPermissions(); + this._contextManager.browserContextForId(browserContextId).resetPermissions();
+ } + }
+ +
+ setExtraHTTPHeaders({browserContextId, headers}) {
+ this._contextManager.browserContextForId(browserContextId).options.extraHTTPHeaders = headers;
+ }
+
+ setCookies({browserContextId, cookies}) { + setCookies({browserContextId, cookies}) {
+ this._contextManager.browserContextForId(browserContextId).setCookies(cookies); + this._contextManager.browserContextForId(browserContextId).setCookies(cookies);
+ } + }
@ -5060,10 +5079,10 @@ index 0000000000000000000000000000000000000000..78b6601b91d0b7fcda61114e6846aa07
+this.EXPORTED_SYMBOLS = ['t', 'checkScheme']; +this.EXPORTED_SYMBOLS = ['t', 'checkScheme'];
diff --git a/testing/juggler/protocol/Protocol.js b/testing/juggler/protocol/Protocol.js diff --git a/testing/juggler/protocol/Protocol.js b/testing/juggler/protocol/Protocol.js
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb84f517fcb index 0000000000000000000000000000000000000000..b6da790c65f25363a5bb85d7525bf2185d884235
--- /dev/null --- /dev/null
+++ b/testing/juggler/protocol/Protocol.js +++ b/testing/juggler/protocol/Protocol.js
@@ -0,0 +1,752 @@ @@ -0,0 +1,758 @@
+const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js'); +const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js');
+ +
+// Protocol-specific types. +// Protocol-specific types.
@ -5225,6 +5244,21 @@ index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb8
+ foundObject: t.Optional(t.Boolean), + foundObject: t.Optional(t.Boolean),
+} +}
+ +
+const networkTypes = {};
+
+networkTypes.HTTPHeader = {
+ name: t.String,
+ value: t.String,
+};
+
+networkTypes.SecurityDetails = {
+ protocol: t.String,
+ subjectName: t.String,
+ issuer: t.String,
+ validFrom: t.Number,
+ validTo: t.Number,
+};
+
+const Browser = { +const Browser = {
+ targets: ['browser'], + targets: ['browser'],
+ +
@ -5245,6 +5279,12 @@ index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb8
+ enabled: t.Boolean, + enabled: t.Boolean,
+ }, + },
+ }, + },
+ 'setExtraHTTPHeaders': {
+ params: {
+ browserContextId: t.Optional(t.String),
+ headers: t.Array(networkTypes.HTTPHeader),
+ },
+ },
+ 'grantPermissions': { + 'grantPermissions': {
+ params: { + params: {
+ origin: t.String, + origin: t.String,
@ -5343,21 +5383,6 @@ index 0000000000000000000000000000000000000000..6751bfaa84655952f4a51e3dd4353eb8
+ }, + },
+}; +};
+ +
+const networkTypes = {};
+
+networkTypes.HTTPHeader = {
+ name: t.String,
+ value: t.String,
+};
+
+networkTypes.SecurityDetails = {
+ protocol: t.String,
+ subjectName: t.String,
+ issuer: t.String,
+ validFrom: t.Number,
+ validTo: t.Number,
+};
+
+const Network = { +const Network = {
+ targets: ['page'], + targets: ['page'],
+ types: networkTypes, + types: networkTypes,
@ -5861,7 +5886,7 @@ index 0000000000000000000000000000000000000000..089e66c617f114fcb32b3cea20abc6fb
+this.RuntimeHandler = RuntimeHandler; +this.RuntimeHandler = RuntimeHandler;
diff --git a/testing/juggler/protocol/TargetHandler.js b/testing/juggler/protocol/TargetHandler.js diff --git a/testing/juggler/protocol/TargetHandler.js b/testing/juggler/protocol/TargetHandler.js
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..4795a4ddecdd016d6efbcde35aa7321af17cd7dc index 0000000000000000000000000000000000000000..c0bab449971de13f993ac9825ac13368f8d8e226
--- /dev/null --- /dev/null
+++ b/testing/juggler/protocol/TargetHandler.js +++ b/testing/juggler/protocol/TargetHandler.js
@@ -0,0 +1,100 @@ @@ -0,0 +1,100 @@
@ -5935,7 +5960,7 @@ index 0000000000000000000000000000000000000000..4795a4ddecdd016d6efbcde35aa7321a
+ if (browserContext.options.removeOnDetach) + if (browserContext.options.removeOnDetach)
+ browserContext.destroy(); + browserContext.destroy();
+ } + }
+ this._createdBrowserContextOptions.clear(); + this._createdBrowserContextIds.clear();
+ } + }
+ +
+ _onTargetCreated(targetInfo) { + _onTargetCreated(targetInfo) {