From cbc03acbea16353e3f1cc6068f16b9360387f820 Mon Sep 17 00:00:00 2001 From: Valentin Gosu Date: Wed, 2 Apr 2025 07:51:09 +0000 Subject: [PATCH] Bug 1955565 - Remove HTTP/2 pref and remove H2 push tests r=necko-reviewers,kershaw Differential Revision: https://phabricator.services.mozilla.com/D242512 --- modules/libpref/init/StaticPrefList.yaml | 5 - netwerk/protocol/http/Http2Session.cpp | 26 +- netwerk/test/unit/http2_test_common.js | 485 ------------------ netwerk/test/unit/test_dns_by_type_resolve.js | 36 -- netwerk/test/unit/test_http2.js | 130 ----- netwerk/test/unit/test_http2_with_proxy.js | 130 ----- netwerk/test/unit/test_origin.js | 95 +--- netwerk/test/unit/test_trr.js | 25 +- testing/xpcshell/moz-http2/moz-http2.js | 2 +- 9 files changed, 17 insertions(+), 917 deletions(-) diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 69c9fb36eb08..f4dab97a8631 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -14591,11 +14591,6 @@ value: 0 mirror: always -- name: network.http.http2.allow-push - type: RelaxedAtomicBool - value: false - mirror: always - # When true, Firefox will send a SETTINGS_MAX_CONCURRENT_STREAMS # parameter when push is disabled. Chrome doesn't send this, # so some servers misbehave when we do. See Bug 1919750. diff --git a/netwerk/protocol/http/Http2Session.cpp b/netwerk/protocol/http/Http2Session.cpp index 816f9faef5ae..a7201d0e44b5 100644 --- a/netwerk/protocol/http/Http2Session.cpp +++ b/netwerk/protocol/http/Http2Session.cpp @@ -999,25 +999,23 @@ void Http2Session::SendHello() { maxHpackBufferSize); numberOfEntries++; - if (!StaticPrefs::network_http_http2_allow_push()) { - // If we don't support push then set MAX_CONCURRENT to 0 and also - // set ENABLE_PUSH to 0 + // We don't support HTTP/2 Push. Set SETTINGS_TYPE_ENABLE_PUSH to 0 + NetworkEndian::writeUint16(packet + kFrameHeaderBytes + (6 * numberOfEntries), + SETTINGS_TYPE_ENABLE_PUSH); + // The value portion of the setting pair is already initialized to 0 + numberOfEntries++; + + // We might also want to set the SETTINGS_TYPE_MAX_CONCURRENT to 0 + // to indicate that we don't support any incoming push streams, + // but some websites panic when we do that, so we don't by default. + if (StaticPrefs::network_http_http2_send_push_max_concurrent_frame()) { NetworkEndian::writeUint16( packet + kFrameHeaderBytes + (6 * numberOfEntries), - SETTINGS_TYPE_ENABLE_PUSH); + SETTINGS_TYPE_MAX_CONCURRENT); // The value portion of the setting pair is already initialized to 0 numberOfEntries++; - - if (StaticPrefs::network_http_http2_send_push_max_concurrent_frame()) { - NetworkEndian::writeUint16( - packet + kFrameHeaderBytes + (6 * numberOfEntries), - SETTINGS_TYPE_MAX_CONCURRENT); - // The value portion of the setting pair is already initialized to 0 - numberOfEntries++; - } - - mWaitingForSettingsAck = true; } + mWaitingForSettingsAck = true; // Advertise the Push RWIN for the session, and on each new pull stream // send a window update diff --git a/netwerk/test/unit/http2_test_common.js b/netwerk/test/unit/http2_test_common.js index 71532cd1189d..0b6cf75ce8a5 100644 --- a/netwerk/test/unit/http2_test_common.js +++ b/netwerk/test/unit/http2_test_common.js @@ -159,35 +159,6 @@ Http2HeaderListener.prototype.onDataAvailable = function ( read_stream(stream, cnt); }; -var Http2PushListener = function (shouldBePushed) { - this.shouldBePushed = shouldBePushed; -}; - -Http2PushListener.prototype = new Http2CheckListener(); - -Http2PushListener.prototype.onDataAvailable = function ( - request, - stream, - off, - cnt -) { - this.onDataAvailableFired = true; - this.isHttp2Connection = checkIsHttp2(request); - if ( - request.originalURI.spec == - `https://localhost:${this.serverPort}/push.js` || - request.originalURI.spec == - `https://localhost:${this.serverPort}/push2.js` || - request.originalURI.spec == `https://localhost:${this.serverPort}/push5.js` - ) { - Assert.equal( - request.getResponseHeader("pushed"), - this.shouldBePushed ? "yes" : "no" - ); - } - read_stream(stream, cnt); -}; - const pushHdrTxt = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; const pullHdrTxt = pushHdrTxt.split("").reverse().join(""); @@ -198,78 +169,6 @@ function checkContinuedHeaders(getHeader, headerPrefix, headerText) { } } -var Http2ContinuedHeaderListener = function () {}; - -Http2ContinuedHeaderListener.prototype = new Http2CheckListener(); - -Http2ContinuedHeaderListener.prototype.onStopsLeft = 2; - -Http2ContinuedHeaderListener.prototype.QueryInterface = ChromeUtils.generateQI([ - "nsIHttpPushListener", - "nsIStreamListener", -]); - -Http2ContinuedHeaderListener.prototype.getInterface = function (aIID) { - return this.QueryInterface(aIID); -}; - -Http2ContinuedHeaderListener.prototype.onDataAvailable = function ( - request, - stream, - off, - cnt -) { - this.onDataAvailableFired = true; - this.isHttp2Connection = checkIsHttp2(request); - if ( - request.originalURI.spec == - `https://localhost:${this.serverPort}/continuedheaders` - ) { - // This is the original request, so the only one where we'll have continued response headers - checkContinuedHeaders( - request.getResponseHeader, - "X-Pull-Test-Header-", - pullHdrTxt - ); - } - read_stream(stream, cnt); -}; - -Http2ContinuedHeaderListener.prototype.onStopRequest = function ( - request, - status -) { - Assert.ok(this.onStartRequestFired); - Assert.ok(Components.isSuccessCode(status)); - Assert.ok(this.onDataAvailableFired); - Assert.ok(this.isHttp2Connection); - - --this.onStopsLeft; - if (this.onStopsLeft === 0) { - request.QueryInterface(Ci.nsIProxiedChannel); - var httpProxyConnectResponseCode = request.httpProxyConnectResponseCode; - this.finish({ httpProxyConnectResponseCode }); - } -}; - -Http2ContinuedHeaderListener.prototype.onPush = function ( - associatedChannel, - pushChannel -) { - Assert.equal( - associatedChannel.originalURI.spec, - "https://localhost:" + this.serverPort + "/continuedheaders" - ); - Assert.equal(pushChannel.getRequestHeader("x-pushed-request"), "true"); - checkContinuedHeaders( - pushChannel.getRequestHeader, - "X-Push-Test-Header-", - pushHdrTxt - ); - - pushChannel.asyncOpen(this); -}; - // Does the appropriate checks for a large GET response var Http2BigListener = function () {}; @@ -631,72 +530,6 @@ async function test_http2_cookie_crumbling(serverPort) { }); } -async function test_http2_push1(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push`); - chan.loadGroup = loadGroup; - return new Promise(resolve => { - var listener = new Http2PushListener(true); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - -async function test_http2_push2(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push.js`); - chan.loadGroup = loadGroup; - return new Promise(resolve => { - var listener = new Http2PushListener(true); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - -async function test_http2_push3(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push2`); - chan.loadGroup = loadGroup; - return new Promise(resolve => { - var listener = new Http2PushListener(true); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - -async function test_http2_push4(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push2.js`); - chan.loadGroup = loadGroup; - return new Promise(resolve => { - var listener = new Http2PushListener(true); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - -async function test_http2_push5(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push5`); - chan.loadGroup = loadGroup; - return new Promise(resolve => { - var listener = new Http2PushListener(true); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - -async function test_http2_push6(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push5.js`); - chan.loadGroup = loadGroup; - return new Promise(resolve => { - var listener = new Http2PushListener(true); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - // this is a basic test where the server sends a simple document with 2 header // blocks. bug 1027364 async function test_http2_doubleheader(serverPort) { @@ -916,120 +749,6 @@ async function test_http2_altsvc(httpserv, httpserv2, withProxy) { }); } -var Http2PushApiListener = function (finish, serverPort) { - this.finish = finish; - this.serverPort = serverPort; -}; - -Http2PushApiListener.prototype = { - checksPending: 9, // 4 onDataAvailable and 5 onStop - - getInterface(aIID) { - return this.QueryInterface(aIID); - }, - - QueryInterface: ChromeUtils.generateQI([ - "nsIHttpPushListener", - "nsIStreamListener", - ]), - - // nsIHttpPushListener - onPush: function onPush(associatedChannel, pushChannel) { - Assert.equal( - associatedChannel.originalURI.spec, - "https://localhost:" + this.serverPort + "/pushapi1" - ); - Assert.equal(pushChannel.getRequestHeader("x-pushed-request"), "true"); - - pushChannel.asyncOpen(this); - if ( - pushChannel.originalURI.spec == - "https://localhost:" + this.serverPort + "/pushapi1/2" - ) { - pushChannel.cancel(Cr.NS_ERROR_ABORT); - } else if ( - pushChannel.originalURI.spec == - "https://localhost:" + this.serverPort + "/pushapi1/3" - ) { - Assert.ok(pushChannel.getRequestHeader("Accept-Encoding").includes("br")); - } - }, - - // normal Channel listeners - onStartRequest: function pushAPIOnStart() {}, - - onDataAvailable: function pushAPIOnDataAvailable( - request, - stream, - offset, - cnt - ) { - Assert.notEqual( - request.originalURI.spec, - `https://localhost:${this.serverPort}/pushapi1/2` - ); - - var data = read_stream(stream, cnt); - - if ( - request.originalURI.spec == - `https://localhost:${this.serverPort}/pushapi1` - ) { - Assert.equal(data[0], "0"); - --this.checksPending; - } else if ( - request.originalURI.spec == - `https://localhost:${this.serverPort}/pushapi1/1` - ) { - Assert.equal(data[0], "1"); - --this.checksPending; // twice - } else if ( - request.originalURI.spec == - `https://localhost:${this.serverPort}/pushapi1/3` - ) { - Assert.equal(data[0], "3"); - --this.checksPending; - } else { - Assert.equal(true, false); - } - }, - - onStopRequest: function test_onStopR(request) { - if ( - request.originalURI.spec == - `https://localhost:${this.serverPort}/pushapi1/2` - ) { - Assert.equal(request.status, Cr.NS_ERROR_ABORT); - } else { - Assert.equal(request.status, Cr.NS_OK); - } - - --this.checksPending; // 5 times - one for each push plus the pull - if (!this.checksPending) { - request.QueryInterface(Ci.nsIProxiedChannel); - var httpProxyConnectResponseCode = request.httpProxyConnectResponseCode; - this.finish({ httpProxyConnectResponseCode }); - } - }, -}; - -// pushAPI testcase 1 expects -// 1 to pull /pushapi1 with 0 -// 2 to see /pushapi1/1 with 1 -// 3 to see /pushapi1/1 with 1 (again) -// 4 to see /pushapi1/2 that it will cancel -// 5 to see /pushapi1/3 with 3 with brotli - -async function test_http2_pushapi_1(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/pushapi1`); - chan.loadGroup = loadGroup; - return new Promise(resolve => { - var listener = new Http2PushApiListener(resolve, serverPort); - chan.notificationCallbacks = listener; - chan.asyncOpen(listener); - }); -} - var WrongSuiteListener = function () {}; WrongSuiteListener.prototype = new Http2CheckListener(); @@ -1131,20 +850,6 @@ async function test_http2_retry_rst(serverPort) { }); } -async function test_http2_continuations(loadGroup, serverPort) { - var chan = makeHTTPChannel( - `https://localhost:${serverPort}/continuedheaders` - ); - chan.loadGroup = loadGroup; - return new Promise(resolve => { - var listener = new Http2ContinuedHeaderListener(); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.notificationCallbacks = listener; - chan.asyncOpen(listener); - }); -} - async function test_http2_continuations_over_max_response_limit( loadGroup, serverPort @@ -1243,78 +948,6 @@ async function test_http2_empty_data(serverPort) { }); } -async function test_http2_push_firstparty1(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push`); - chan.loadGroup = loadGroup; - chan.loadInfo.originAttributes = { firstPartyDomain: "foo.com" }; - return new Promise(resolve => { - var listener = new Http2PushListener(true); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - -async function test_http2_push_firstparty2(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push.js`); - chan.loadGroup = loadGroup; - chan.loadInfo.originAttributes = { firstPartyDomain: "bar.com" }; - return new Promise(resolve => { - var listener = new Http2PushListener(false); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - -async function test_http2_push_firstparty3(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push.js`); - chan.loadGroup = loadGroup; - chan.loadInfo.originAttributes = { firstPartyDomain: "foo.com" }; - return new Promise(resolve => { - var listener = new Http2PushListener(true); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - -async function test_http2_push_userContext1(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push`); - chan.loadGroup = loadGroup; - chan.loadInfo.originAttributes = { userContextId: 1 }; - return new Promise(resolve => { - var listener = new Http2PushListener(true); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - -async function test_http2_push_userContext2(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push.js`); - chan.loadGroup = loadGroup; - chan.loadInfo.originAttributes = { userContextId: 2 }; - return new Promise(resolve => { - var listener = new Http2PushListener(false); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - -async function test_http2_push_userContext3(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/push.js`); - chan.loadGroup = loadGroup; - chan.loadInfo.originAttributes = { userContextId: 1 }; - return new Promise(resolve => { - var listener = new Http2PushListener(true); - listener.finish = resolve; - listener.serverPort = serverPort; - chan.asyncOpen(listener); - }); -} - async function test_http2_status_phrase(serverPort) { var chan = makeHTTPChannel(`https://localhost:${serverPort}/statusphrase`); return new Promise(resolve => { @@ -1393,121 +1026,3 @@ FromDiskCacheListener.prototype = { }); }, }; - -var Http2DiskCachePushListener = function () {}; -Http2DiskCachePushListener.prototype = new Http2CheckListener(); - -Http2DiskCachePushListener.onStopRequest = function (request, status) { - Assert.ok(this.onStartRequestFired); - Assert.ok(Components.isSuccessCode(status)); - Assert.ok(this.onDataAvailableFired); - Assert.ok(this.isHttp2Connection == this.shouldBeHttp2); - - // Now we need to open a channel to ensure we get data from the disk cache - // for the pushed item, instead of from the push cache. - var chan = makeHTTPChannel(`https://localhost:${this.serverPort}/diskcache`); - var listener = new FromDiskCacheListener( - this.finish, - this.loadGroup, - this.serverPort - ); - chan.loadGroup = this.loadGroup; - chan.asyncOpen(listener); -}; - -function continue_test_http2_disk_cache_push( - status, - entry, - finish, - loadGroup, - serverPort -) { - // TODO - store stuff in cache entry, then open an h2 channel that will push - // this, once that completes, open a channel for the cache entry we made and - // ensure it came from disk cache, not the push cache. - var outputStream = entry.openOutputStream(0, -1); - outputStream.write(DISK_CACHE_DATA, DISK_CACHE_DATA.length); - - // Now we open our URL that will push data for the URL above - var chan = makeHTTPChannel(`https://localhost:${serverPort}/pushindisk`); - var listener = new Http2DiskCachePushListener(); - listener.finish = finish; - listener.loadGroup = loadGroup; - listener.serverPort = serverPort; - chan.loadGroup = loadGroup; - chan.asyncOpen(listener); -} - -async function test_http2_disk_cache_push(loadGroup, serverPort) { - return new Promise(resolve => { - asyncOpenCacheEntry( - `https://localhost:${serverPort}/diskcache`, - "disk", - Ci.nsICacheStorage.OPEN_NORMALLY, - null, - function (status, entry) { - continue_test_http2_disk_cache_push( - status, - entry, - resolve, - loadGroup, - serverPort - ); - }, - false - ); - }); -} - -var Http2DoublepushListener = function () {}; -Http2DoublepushListener.prototype = new Http2CheckListener(); -Http2DoublepushListener.prototype.onStopRequest = function (request, status) { - Assert.ok(this.onStartRequestFired); - Assert.ok(Components.isSuccessCode(status)); - Assert.ok(this.onDataAvailableFired); - Assert.ok(this.isHttp2Connection == this.shouldBeHttp2); - - var chan = makeHTTPChannel( - `https://localhost:${this.serverPort}/doublypushed` - ); - var listener = new Http2DoublypushedListener(); - listener.finish = this.finish; - chan.loadGroup = this.loadGroup; - chan.asyncOpen(listener); -}; - -var Http2DoublypushedListener = function () {}; -Http2DoublypushedListener.prototype = new Http2CheckListener(); -Http2DoublypushedListener.prototype.readData = ""; -Http2DoublypushedListener.prototype.onDataAvailable = function ( - request, - stream, - off, - cnt -) { - this.onDataAvailableFired = true; - this.accum += cnt; - this.readData += read_stream(stream, cnt); -}; -Http2DoublypushedListener.prototype.onStopRequest = function (request, status) { - Assert.ok(this.onStartRequestFired); - Assert.ok(Components.isSuccessCode(status)); - Assert.ok(this.onDataAvailableFired); - Assert.equal(this.readData, "pushed"); - - request.QueryInterface(Ci.nsIProxiedChannel); - let httpProxyConnectResponseCode = request.httpProxyConnectResponseCode; - this.finish({ httpProxyConnectResponseCode }); -}; - -function test_http2_doublepush(loadGroup, serverPort) { - var chan = makeHTTPChannel(`https://localhost:${serverPort}/doublepush`); - return new Promise(resolve => { - var listener = new Http2DoublepushListener(); - listener.finish = resolve; - listener.loadGroup = loadGroup; - listener.serverPort = serverPort; - chan.loadGroup = loadGroup; - chan.asyncOpen(listener); - }); -} diff --git a/netwerk/test/unit/test_dns_by_type_resolve.js b/netwerk/test/unit/test_dns_by_type_resolve.js index 31c03a8fa278..cd01bbbe8cb9 100644 --- a/netwerk/test/unit/test_dns_by_type_resolve.js +++ b/netwerk/test/unit/test_dns_by_type_resolve.js @@ -26,11 +26,9 @@ add_setup(async function setup() { } Services.prefs.setIntPref("network.trr.mode", Ci.nsIDNSService.MODE_TRRFIRST); - Services.prefs.setBoolPref("network.http.http2.allow-push", true); }); let test_answer = "bXkgdm9pY2UgaXMgbXkgcGFzc3dvcmQ="; -let test_answer_addr = "127.0.0.1"; add_task(async function testTXTResolve() { // use the h2 server as DOH provider @@ -48,37 +46,3 @@ add_task(async function testTXTResolve() { .getRecordsAsOneString(); Assert.equal(answer, test_answer, "got correct answer"); }); - -// verify TXT record pushed on a A record request -add_task(async function testTXTRecordPushPart1() { - Services.prefs.setCharPref( - "network.trr.uri", - "https://foo.example.com:" + h2Port + "/txt-dns-push" - ); - let { inRecord } = await new TRRDNSListener("_esni_push.example.com", { - type: Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT, - expectedAnswer: "127.0.0.1", - }); - - inRecord.QueryInterface(Ci.nsIDNSAddrRecord); - let answer = inRecord.getNextAddrAsString(); - Assert.equal(answer, test_answer_addr, "got correct answer"); -}).skip("H2 push is disabled"); - -// verify the TXT pushed record -add_task(async function testTXTRecordPushPart2() { - // At this point the second host name should've been pushed and we can resolve it using - // cache only. Set back the URI to a path that fails. - Services.prefs.setCharPref( - "network.trr.uri", - "https://foo.example.com:" + h2Port + "/404" - ); - let { inRecord } = await new TRRDNSListener("_esni_push.example.com", { - type: Ci.nsIDNSService.RESOLVE_TYPE_TXT, - }); - - let answer = inRecord - .QueryInterface(Ci.nsIDNSTXTRecord) - .getRecordsAsOneString(); - Assert.equal(answer, test_answer, "got correct answer"); -}).skip("H2 push is disabled"); diff --git a/netwerk/test/unit/test_http2.js b/netwerk/test/unit/test_http2.js index 9730f5b1e7ac..69cbb10078d3 100644 --- a/netwerk/test/unit/test_http2.js +++ b/netwerk/test/unit/test_http2.js @@ -76,7 +76,6 @@ add_setup(async function setup() { addCertFromFile(certdb, "http2-ca.pem", "CTu,u,u"); Services.prefs.setBoolPref("network.http.http2.enabled", true); - Services.prefs.setBoolPref("network.http.http2.allow-push", true); Services.prefs.setBoolPref("network.http.altsvc.enabled", true); Services.prefs.setBoolPref("network.http.altsvc.oe", true); Services.prefs.setCharPref( @@ -116,7 +115,6 @@ add_setup(async function setup() { registerCleanupFunction(async () => { Services.prefs.clearUserPref("network.http.speculative-parallel-limit"); Services.prefs.clearUserPref("network.http.http2.enabled"); - Services.prefs.clearUserPref("network.http.http2.allow-push"); Services.prefs.clearUserPref("network.http.altsvc.enabled"); Services.prefs.clearUserPref("network.http.altsvc.oe"); Services.prefs.clearUserPref("network.dns.localDomains"); @@ -170,54 +168,6 @@ add_task(async function do_test_http2_nospdy() { Assert.equal(httpProxyConnectResponseCode, -1); }); -add_task(async function do_test_http2_push1() { - const { httpProxyConnectResponseCode } = await test_http2_push1( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_push2() { - const { httpProxyConnectResponseCode } = await test_http2_push2( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_push3() { - const { httpProxyConnectResponseCode } = await test_http2_push3( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_push4() { - const { httpProxyConnectResponseCode } = await test_http2_push4( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_push5() { - const { httpProxyConnectResponseCode } = await test_http2_push5( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_push6() { - const { httpProxyConnectResponseCode } = await test_http2_push6( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - add_task(async function do_test_http2_altsvc() { const { httpProxyConnectResponseCode } = await test_http2_altsvc( httpserv.identity.primaryPort, @@ -313,22 +263,6 @@ add_task(async function do_test_http2_patch() { Assert.equal(httpProxyConnectResponseCode, -1); }); -add_task(async function do_test_http2_pushapi_1() { - const { httpProxyConnectResponseCode } = await test_http2_pushapi_1( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_continuations() { - const { httpProxyConnectResponseCode } = await test_http2_continuations( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - add_task(async function do_test_http2_blocking_download() { const { httpProxyConnectResponseCode } = await test_http2_blocking_download(serverPort); @@ -367,22 +301,6 @@ add_task(async function do_test_http2_status_phrase() { Assert.equal(httpProxyConnectResponseCode, -1); }); -add_task(async function do_test_http2_doublepush() { - const { httpProxyConnectResponseCode } = await test_http2_doublepush( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_disk_cache_push() { - const { httpProxyConnectResponseCode } = await test_http2_disk_cache_push( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - add_task(async function do_test_http2_h11required_stream() { // Add new tests above here - best to add new tests before h1 // streams get too involved @@ -416,54 +334,6 @@ add_task(async function do_test_http2_wrongsuite_tls13() { Assert.equal(httpProxyConnectResponseCode, -1); }); -add_task(async function do_test_http2_push_firstparty1() { - const { httpProxyConnectResponseCode } = await test_http2_push_firstparty1( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_push_firstparty2() { - const { httpProxyConnectResponseCode } = await test_http2_push_firstparty2( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_push_firstparty3() { - const { httpProxyConnectResponseCode } = await test_http2_push_firstparty3( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_push_userContext1() { - const { httpProxyConnectResponseCode } = await test_http2_push_userContext1( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_push_userContext2() { - const { httpProxyConnectResponseCode } = await test_http2_push_userContext2( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - -add_task(async function do_test_http2_push_userContext3() { - const { httpProxyConnectResponseCode } = await test_http2_push_userContext3( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, -1); -}); - add_task(async function do_test_http2_continuations_over_max_response_limit() { const { httpProxyConnectResponseCode } = await test_http2_continuations_over_max_response_limit( diff --git a/netwerk/test/unit/test_http2_with_proxy.js b/netwerk/test/unit/test_http2_with_proxy.js index aad438d2942a..4c7a8022c0eb 100644 --- a/netwerk/test/unit/test_http2_with_proxy.js +++ b/netwerk/test/unit/test_http2_with_proxy.js @@ -38,7 +38,6 @@ add_setup(async function setup() { addCertFromFile(certdb, "proxy-ca.pem", "CTu,u,u"); Services.prefs.setBoolPref("network.http.http2.enabled", true); - Services.prefs.setBoolPref("network.http.http2.allow-push", true); Services.prefs.setBoolPref("network.http.altsvc.enabled", true); Services.prefs.setBoolPref("network.http.altsvc.oe", true); Services.prefs.setCharPref( @@ -66,7 +65,6 @@ add_setup(async function setup() { registerCleanupFunction(async () => { Services.prefs.clearUserPref("network.http.speculative-parallel-limit"); Services.prefs.clearUserPref("network.http.http2.enabled"); - Services.prefs.clearUserPref("network.http.http2.allow-push"); Services.prefs.clearUserPref("network.http.altsvc.enabled"); Services.prefs.clearUserPref("network.http.altsvc.oe"); Services.prefs.clearUserPref("network.dns.localDomains"); @@ -120,54 +118,6 @@ add_task(async function do_test_http2_nospdy() { Assert.equal(httpProxyConnectResponseCode, 200); }); -add_task(async function do_test_http2_push1() { - const { httpProxyConnectResponseCode } = await test_http2_push1( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - -add_task(async function do_test_http2_push2() { - const { httpProxyConnectResponseCode } = await test_http2_push2( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - -add_task(async function do_test_http2_push3() { - const { httpProxyConnectResponseCode } = await test_http2_push3( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - -add_task(async function do_test_http2_push4() { - const { httpProxyConnectResponseCode } = await test_http2_push4( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - -add_task(async function do_test_http2_push5() { - const { httpProxyConnectResponseCode } = await test_http2_push5( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - -add_task(async function do_test_http2_push6() { - const { httpProxyConnectResponseCode } = await test_http2_push6( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - add_task(async function do_test_http2_doubleheader() { const { httpProxyConnectResponseCode } = await test_http2_doubleheader(serverPort); @@ -254,22 +204,6 @@ add_task(async function do_test_http2_patch() { Assert.equal(httpProxyConnectResponseCode, 200); }); -add_task(async function do_test_http2_pushapi_1() { - const { httpProxyConnectResponseCode } = await test_http2_pushapi_1( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 0); -}); - -add_task(async function do_test_http2_continuations() { - const { httpProxyConnectResponseCode } = await test_http2_continuations( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 0); -}); - add_task(async function do_test_http2_blocking_download() { const { httpProxyConnectResponseCode } = await test_http2_blocking_download(serverPort); @@ -308,22 +242,6 @@ add_task(async function do_test_http2_status_phrase() { Assert.equal(httpProxyConnectResponseCode, 200); }); -add_task(async function do_test_http2_doublepush() { - const { httpProxyConnectResponseCode } = await test_http2_doublepush( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - -add_task(async function do_test_http2_disk_cache_push() { - const { httpProxyConnectResponseCode } = await test_http2_disk_cache_push( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - add_task(async function do_test_http2_h11required_stream() { // Add new tests above here - best to add new tests before h1 // streams get too involved @@ -367,54 +285,6 @@ add_task(async function do_test_http2_wrongsuite_tls13() { Assert.equal(httpProxyConnectResponseCode, 200); }); -add_task(async function do_test_http2_push_firstparty1() { - const { httpProxyConnectResponseCode } = await test_http2_push_firstparty1( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - -add_task(async function do_test_http2_push_firstparty2() { - const { httpProxyConnectResponseCode } = await test_http2_push_firstparty2( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - -add_task(async function do_test_http2_push_firstparty3() { - const { httpProxyConnectResponseCode } = await test_http2_push_firstparty3( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - -add_task(async function do_test_http2_push_userContext1() { - const { httpProxyConnectResponseCode } = await test_http2_push_userContext1( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - -add_task(async function do_test_http2_push_userContext2() { - const { httpProxyConnectResponseCode } = await test_http2_push_userContext2( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - -add_task(async function do_test_http2_push_userContext3() { - const { httpProxyConnectResponseCode } = await test_http2_push_userContext3( - loadGroup, - serverPort - ); - Assert.equal(httpProxyConnectResponseCode, 200); -}); - add_task(async function do_test_http2_continuations_over_max_response_limit() { const { httpProxyConnectResponseCode } = await test_http2_continuations_over_max_response_limit( diff --git a/netwerk/test/unit/test_origin.js b/netwerk/test/unit/test_origin.js index 06dc6f0d612e..a05f174f70ba 100644 --- a/netwerk/test/unit/test_origin.js +++ b/netwerk/test/unit/test_origin.js @@ -3,7 +3,6 @@ var h2Port; var prefs; var http2pref; -var loadGroup; function run_test() { h2Port = Services.env.get("MOZHTTP2_PORT"); @@ -15,7 +14,6 @@ function run_test() { prefs = Services.prefs; http2pref = prefs.getBoolPref("network.http.http2.enabled"); - Services.prefs.setBoolPref("network.http.http2.allow-push", true); prefs.setBoolPref("network.http.http2.enabled", true); prefs.setCharPref( @@ -221,100 +219,9 @@ function doTest10() { // but the cert is not valid for bar. so expect a failure dump("doTest10()\n"); origin = "https://bar.example.com:" + h2Port + "/origin-10"; - nextTest = doTest11; + nextTest = testsDone; nextPortExpectedToBeSame = false; forceFailListener = true; do_test_pending(); doTest(); } - -var Http2PushApiListener = function () {}; - -Http2PushApiListener.prototype = { - fooOK: false, - alt1OK: false, - - getInterface(aIID) { - return this.QueryInterface(aIID); - }, - - QueryInterface: ChromeUtils.generateQI([ - "nsIHttpPushListener", - "nsIStreamListener", - ]), - - // nsIHttpPushListener - onPush: function onPush(associatedChannel, pushChannel) { - dump( - "push api onpush " + - pushChannel.originalURI.spec + - " associated to " + - associatedChannel.originalURI.spec + - "\n" - ); - - Assert.equal( - associatedChannel.originalURI.spec, - "https://foo.example.com:" + h2Port + "/origin-11-a" - ); - Assert.equal(pushChannel.getRequestHeader("x-pushed-request"), "true"); - - if ( - pushChannel.originalURI.spec === - "https://foo.example.com:" + h2Port + "/origin-11-b" - ) { - this.fooOK = true; - } else if ( - pushChannel.originalURI.spec === - "https://alt1.example.com:" + h2Port + "/origin-11-e" - ) { - this.alt1OK = true; - } else { - // any push of bar or madeup should not end up in onPush() - Assert.equal(true, false); - } - pushChannel.cancel(Cr.NS_ERROR_ABORT); - }, - - // normal Channel listeners - onStartRequest: function pushAPIOnStart(request) { - dump("push api onstart " + request.originalURI.spec + "\n"); - }, - - onDataAvailable: function pushAPIOnDataAvailable( - request, - stream, - offset, - cnt - ) { - read_stream(stream, cnt); - }, - - onStopRequest: function test_onStopR(request) { - dump("push api onstop " + request.originalURI.spec + "\n"); - Assert.ok(this.fooOK); - Assert.ok(this.alt1OK); - nextTest(); - do_test_finished(); - }, -}; - -function doTest11() { - // we are connected with an SNI of foo from test6 - // but the origin set is alt1, alt2, bar - foo is implied - // and bar is not actually covered by the cert - // - // the server will push foo (b-OK), bar (c-NOT OK), madeup (d-NOT OK), alt1 (e-OK), - - dump("doTest11()\n"); - do_test_pending(); - loadGroup = Cc["@mozilla.org/network/load-group;1"].createInstance( - Ci.nsILoadGroup - ); - var chan = makeChan("https://foo.example.com:" + h2Port + "/origin-11-a"); - chan.loadGroup = loadGroup; - var listener = new Http2PushApiListener(); - nextTest = testsDone; - chan.notificationCallbacks = listener; - chan.asyncOpen(listener); -} diff --git a/netwerk/test/unit/test_trr.js b/netwerk/test/unit/test_trr.js index 0ae46f6985c9..fc8514b88651 100644 --- a/netwerk/test/unit/test_trr.js +++ b/netwerk/test/unit/test_trr.js @@ -8,7 +8,6 @@ SetParentalControlEnabled(false); function setup() { Services.prefs.setBoolPref("network.dns.get-ttl", false); - Services.prefs.setBoolPref("network.http.http2.allow-push", true); h2Port = trr_test_setup(); } @@ -135,22 +134,6 @@ add_task(async function test_trr_flags() { add_task(test_A_record); -add_task(async function test_push() { - info("Verify DOH push"); - Services.dns.clearCache(true); - info("Asking server to push us a record"); - setModeAndURI(3, "doh?responseIP=5.5.5.5&push=true"); - - await new TRRDNSListener("first.example.com", "5.5.5.5"); - - // At this point the second host name should've been pushed and we can resolve it using - // cache only. Set back the URI to a path that fails. - // Don't clear the cache, otherwise we lose the pushed record. - setModeAndURI(3, "404"); - - await new TRRDNSListener("push.example.org", "2018::2018"); -}).skip("H2 push is disabled"); - add_task(test_AAAA_records); add_task(test_RFC1918); @@ -935,19 +918,17 @@ add_task( setModeAndURI(Ci.nsIDNSService.MODE_TRRONLY, `doh`); Services.dns.clearCache(true); - var { setTimeout } = ChromeUtils.importESModule( - "resource://gre/modules/Timer.sys.mjs" - ); // Close the previous TRR connection. Services.obs.notifyObservers(null, "net:cancel-all-connections"); - // eslint-disable-next-line mozilla/no-arbitrary-setTimeout - await new Promise(r => setTimeout(r, 3000)); + await new Promise(r => do_timeout(3000, r)); Services.fog.testResetFOG(); // Disable IPv6, so we only send one TRR request. Services.prefs.setBoolPref("network.dns.disableIPv6", true); await new TRRDNSListener("timing.com", { expectedAnswer: "5.5.5.5" }); + await new Promise(r => do_timeout(100, r)); + let dnsStart = await Glean.networking.trrDnsStart.other.testGetValue(); let dnsEnd = await Glean.networking.trrDnsEnd.other.testGetValue(); let tcpConnection = diff --git a/testing/xpcshell/moz-http2/moz-http2.js b/testing/xpcshell/moz-http2/moz-http2.js index 1c5f53d706d0..637aa690242f 100644 --- a/testing/xpcshell/moz-http2/moz-http2.js +++ b/testing/xpcshell/moz-http2/moz-http2.js @@ -523,7 +523,7 @@ function handleRequest(req, res) { arg => { writeResponse(arg[0], arg[1]); }, - delay, + delay + 1, [response, buf] ); return;