diff options
Diffstat (limited to 'netwerk/test')
27 files changed, 483 insertions, 18 deletions
diff --git a/netwerk/test/browser/browser.toml b/netwerk/test/browser/browser.toml index 9a470d8c59..002bd2769d 100644 --- a/netwerk/test/browser/browser.toml +++ b/netwerk/test/browser/browser.toml @@ -74,6 +74,10 @@ support-files = [ "file_link_header.sjs", ] +prefs = [ + "network.fetch.systemDefaultsToOmittingCredentials=false" +] + ["browser_103_assets.js"] ["browser_103_assets_extension.js"] diff --git a/netwerk/test/browser/browser_bug1629307.js b/netwerk/test/browser/browser_bug1629307.js index 03ea2476e2..1cab7bc101 100644 --- a/netwerk/test/browser/browser_bug1629307.js +++ b/netwerk/test/browser/browser_bug1629307.js @@ -24,7 +24,7 @@ add_task(async function () { PromptTestUtils.handleNextPrompt( window, { - modalType: Services.prefs.getIntPref("prompts.modalType.httpAuth"), + modalType: Ci.nsIPrompt.MODAL_TYPE_TAB, promptType: "promptUserAndPass", }, { buttonNumClick: 1 } @@ -59,7 +59,7 @@ add_task(async function () { PromptTestUtils.handleNextPrompt( window, { - modalType: Services.prefs.getIntPref("prompts.modalType.httpAuth"), + modalType: Ci.nsIPrompt.MODAL_TYPE_TAB, promptType: "promptUserAndPass", }, { buttonNumClick: 1 } diff --git a/netwerk/test/browser/browser_cookie_filtering_insecure.js b/netwerk/test/browser/browser_cookie_filtering_insecure.js index 679bfc5a56..4f46773675 100644 --- a/netwerk/test/browser/browser_cookie_filtering_insecure.js +++ b/netwerk/test/browser/browser_cookie_filtering_insecure.js @@ -4,6 +4,14 @@ */ "use strict"; +// performing http and https testing within this file, +// and we do not want https-first to interfere with that test +Services.prefs.setBoolPref("dom.security.https_first", false); + +registerCleanupFunction(function () { + Services.prefs.clearUserPref("dom.security.https_first"); +}); + const { HTTPS_EXAMPLE_ORG, HTTPS_EXAMPLE_COM, diff --git a/netwerk/test/browser/browser_cookie_filtering_subdomain.js b/netwerk/test/browser/browser_cookie_filtering_subdomain.js index 78fcdb07dd..4a27eea1e8 100644 --- a/netwerk/test/browser/browser_cookie_filtering_subdomain.js +++ b/netwerk/test/browser/browser_cookie_filtering_subdomain.js @@ -5,6 +5,14 @@ "use strict"; +// performing http and https testing within this file, +// and we do not want https-first to interfere with that test +Services.prefs.setBoolPref("dom.security.https_first", false); + +registerCleanupFunction(function () { + Services.prefs.clearUserPref("dom.security.https_first"); +}); + const { HTTPS_EXAMPLE_ORG, HTTPS_EXAMPLE_COM, diff --git a/netwerk/test/browser/browser_post_auth.js b/netwerk/test/browser/browser_post_auth.js index 24104f96d6..1168cdabb1 100644 --- a/netwerk/test/browser/browser_post_auth.js +++ b/netwerk/test/browser/browser_post_auth.js @@ -43,7 +43,7 @@ add_task(async function () { let promptPromise = PromptTestUtils.handleNextPrompt( tab.linkedBrowser, { - modalType: Services.prefs.getIntPref("prompts.modalType.httpAuth"), + modalType: Ci.nsIPrompt.MODAL_TYPE_TAB, promptType: "promptUserAndPass", }, { buttonNumClick: 0, loginInput: "user", passwordInput: "pass" } diff --git a/netwerk/test/gtest/TestIDNA.cpp b/netwerk/test/gtest/TestIDNA.cpp new file mode 100644 index 0000000000..544debbd43 --- /dev/null +++ b/netwerk/test/gtest/TestIDNA.cpp @@ -0,0 +1,77 @@ +#include "gtest/gtest.h" +#include "gtest/MozGTestBench.h" // For MOZ_GTEST_BENCH +#include "gtest/BlackBox.h" + +#include "nsNetUtil.h" + +#define TEST_COUNT 10000 + +class TestIDNA : public ::testing::Test { + protected: + void SetUp() override { + // Intentionally Assign and not AssignLiteral + // to simulate the usual heap case. + mPlainASCII.Assign("example.com"); + mLeadingDigitASCII.Assign("1test.example"); + mUnicodeMixed.Assign("مثال.example"); + mPunycodeMixed.Assign("xn--mgbh0fb.example"); + mUnicodeLTR.Assign("නම.උදාහරණ"); + mPunycodeLTR.Assign("xn--r0co.xn--ozc8dl2c3bxd"); + mUnicodeRTL.Assign("الاسم.مثال"); + mPunycodeRTL.Assign("xn--mgba0b1dh.xn--mgbh0fb"); + // Intentionally not assigning to mEmpty + } + + public: + nsCString mPlainASCII; + nsCString mLeadingDigitASCII; + nsCString mUnicodeMixed; + nsCString mPunycodeMixed; + nsCString mUnicodeLTR; + nsCString mPunycodeLTR; + nsCString mUnicodeRTL; + nsCString mPunycodeRTL; + nsCString mEmpty; // Extremely suspicious measurement! +}; + +#define IDNA_ITERATIONS 50000 + +#define IDNA_BENCH(name, func, src) \ + MOZ_GTEST_BENCH_F(TestIDNA, name, [this] { \ + for (int i = 0; i < IDNA_ITERATIONS; i++) { \ + nsCString dst; \ + func(*mozilla::BlackBox(&src), *mozilla::BlackBox(&dst)); \ + } \ + }); + +IDNA_BENCH(BenchToASCIIPlainASCII, NS_DomainToASCII, mPlainASCII); +IDNA_BENCH(BenchToASCIILeadingDigitASCII, NS_DomainToASCII, mLeadingDigitASCII); +IDNA_BENCH(BenchToASCIIUnicodeMixed, NS_DomainToASCII, mUnicodeMixed); +IDNA_BENCH(BenchToASCIIPunycodeMixed, NS_DomainToASCII, mPunycodeMixed); +IDNA_BENCH(BenchToASCIIUnicodeLTR, NS_DomainToASCII, mUnicodeLTR); +IDNA_BENCH(BenchToASCIIPunycodeLTR, NS_DomainToASCII, mPunycodeLTR); +IDNA_BENCH(BenchToASCIIUnicodeRTL, NS_DomainToASCII, mUnicodeRTL); +IDNA_BENCH(BenchToASCIIPunycodeRTL, NS_DomainToASCII, mPunycodeRTL); +IDNA_BENCH(BenchToASCIIEmpty, NS_DomainToASCII, mEmpty); + +IDNA_BENCH(BenchToDisplayPlainASCII, NS_DomainToDisplay, mPlainASCII); +IDNA_BENCH(BenchToDisplayLeadingDigitASCII, NS_DomainToDisplay, + mLeadingDigitASCII); +IDNA_BENCH(BenchToDisplayUnicodeMixed, NS_DomainToDisplay, mUnicodeMixed); +IDNA_BENCH(BenchToDisplayPunycodeMixed, NS_DomainToDisplay, mPunycodeMixed); +IDNA_BENCH(BenchToDisplayUnicodeLTR, NS_DomainToDisplay, mUnicodeLTR); +IDNA_BENCH(BenchToDisplayPunycodeLTR, NS_DomainToDisplay, mPunycodeLTR); +IDNA_BENCH(BenchToDisplayUnicodeRTL, NS_DomainToDisplay, mUnicodeRTL); +IDNA_BENCH(BenchToDisplayPunycodeRTL, NS_DomainToDisplay, mPunycodeRTL); +IDNA_BENCH(BenchToDisplayEmpty, NS_DomainToDisplay, mEmpty); + +IDNA_BENCH(BenchToUnicodePlainASCII, NS_DomainToUnicode, mPlainASCII); +IDNA_BENCH(BenchToUnicodeLeadingDigitASCII, NS_DomainToUnicode, + mLeadingDigitASCII); +IDNA_BENCH(BenchToUnicodeUnicodeMixed, NS_DomainToUnicode, mUnicodeMixed); +IDNA_BENCH(BenchToUnicodePunycodeMixed, NS_DomainToUnicode, mPunycodeMixed); +IDNA_BENCH(BenchToUnicodeUnicodeLTR, NS_DomainToUnicode, mUnicodeLTR); +IDNA_BENCH(BenchToUnicodePunycodeLTR, NS_DomainToUnicode, mPunycodeLTR); +IDNA_BENCH(BenchToUnicodeUnicodeRTL, NS_DomainToUnicode, mUnicodeRTL); +IDNA_BENCH(BenchToUnicodePunycodeRTL, NS_DomainToUnicode, mPunycodeRTL); +IDNA_BENCH(BenchToUnicodeEmpty, NS_DomainToUnicode, mEmpty); diff --git a/netwerk/test/gtest/TestStandardURL.cpp b/netwerk/test/gtest/TestStandardURL.cpp index 035c92fcc2..64a57ed7fb 100644 --- a/netwerk/test/gtest/TestStandardURL.cpp +++ b/netwerk/test/gtest/TestStandardURL.cpp @@ -14,6 +14,7 @@ #include "nsSerializationHelper.h" #include "mozilla/Base64.h" #include "nsEscape.h" +#include "nsURLHelper.h" using namespace mozilla; @@ -439,3 +440,30 @@ TEST(TestStandardURL, ParseIPv4Num) Test_ParseIPv4Number("0x10"_ns, 16, number, 255); ASSERT_EQ(number, (uint32_t)16); } + +TEST(TestStandardURL, CoalescePath) +{ + auto testCoalescing = [](const char* input, const char* expected) { + nsAutoCString buf(input); + net_CoalesceDirs(NET_COALESCE_NORMAL, buf.BeginWriting()); + ASSERT_EQ(nsCString(buf.get()), nsCString(expected)); + }; + + testCoalescing("/.", "/"); + testCoalescing("/..", "/"); + testCoalescing("/foo/foo1/.", "/foo/foo1/"); + testCoalescing("/foo/../foo1", "/foo1"); + testCoalescing("/foo/./foo1", "/foo/foo1"); + testCoalescing("/foo/foo1/..", "/foo/"); + + // Bug 1890346 + testCoalescing("/..?/..", "/?/.."); + + testCoalescing("/.?/..", "/?/.."); + testCoalescing("/./../?", "/?"); + testCoalescing("/.abc", "/.abc"); + testCoalescing("//", "//"); + testCoalescing("/../", "/"); + testCoalescing("/./", "/"); + testCoalescing("/.../", "/.../"); +} diff --git a/netwerk/test/gtest/moz.build b/netwerk/test/gtest/moz.build index 571c908707..8e0d66f4e2 100644 --- a/netwerk/test/gtest/moz.build +++ b/netwerk/test/gtest/moz.build @@ -17,6 +17,7 @@ UNIFIED_SOURCES += [ "TestHttpAuthUtils.cpp", "TestHttpChannel.cpp", "TestHttpResponseHead.cpp", + "TestIDNA.cpp", "TestInputStreamTransport.cpp", "TestIsValidIp.cpp", "TestLinkHeader.cpp", diff --git a/netwerk/test/http3server/Cargo.toml b/netwerk/test/http3server/Cargo.toml index 60ff22c530..4905760d3d 100644 --- a/netwerk/test/http3server/Cargo.toml +++ b/netwerk/test/http3server/Cargo.toml @@ -6,10 +6,10 @@ edition = "2018" license = "MPL-2.0" [dependencies] -neqo-transport = { tag = "v0.7.2", git = "https://github.com/mozilla/neqo" } -neqo-common = { tag = "v0.7.2", git = "https://github.com/mozilla/neqo" } -neqo-http3 = { tag = "v0.7.2", git = "https://github.com/mozilla/neqo" } -neqo-qpack = { tag = "v0.7.2", git = "https://github.com/mozilla/neqo" } +neqo-transport = { tag = "v0.7.5", git = "https://github.com/mozilla/neqo" } +neqo-common = { tag = "v0.7.5", git = "https://github.com/mozilla/neqo" } +neqo-http3 = { tag = "v0.7.5", git = "https://github.com/mozilla/neqo" } +neqo-qpack = { tag = "v0.7.5", git = "https://github.com/mozilla/neqo" } mio = "0.6.17" mio-extras = "2.0.5" log = "0.4.0" @@ -21,7 +21,7 @@ tokio = { version = "1", features = ["rt-multi-thread"] } mozilla-central-workspace-hack = { version = "0.1", features = ["http3server"], optional = true } [dependencies.neqo-crypto] -tag = "v0.7.2" +tag = "v0.7.5" git = "https://github.com/mozilla/neqo" default-features = false features = ["gecko"] diff --git a/netwerk/test/http3server/src/main.rs b/netwerk/test/http3server/src/main.rs index a308f56442..1543e3aeb3 100644 --- a/netwerk/test/http3server/src/main.rs +++ b/netwerk/test/http3server/src/main.rs @@ -1378,7 +1378,7 @@ fn main() -> Result<(), io::Error> { } }); - init_db(PathBuf::from(args[1].clone())); + init_db(PathBuf::from(args[1].clone())).unwrap(); let mut servers_runner = ServersRunner::new()?; servers_runner.init(); diff --git a/netwerk/test/mochitests/test_different_domain_in_hierarchy.html b/netwerk/test/mochitests/test_different_domain_in_hierarchy.html index 0ec6d35d4d..1a4abad676 100644 --- a/netwerk/test/mochitests/test_different_domain_in_hierarchy.html +++ b/netwerk/test/mochitests/test_different_domain_in_hierarchy.html @@ -5,7 +5,7 @@ <script src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> -<body onload="setupTest('https://example.org/tests/netwerk/test/mochitests/file_domain_hierarchy_inner.html', 4, 3)"> +<body onload="setupTest('https://example.org/tests/netwerk/test/mochitests/file_domain_hierarchy_inner.html', 3, 3)"> <p id="display"></p> <pre id="test"> <script class="testbody" type="text/javascript" src="file_testcommon.js"> diff --git a/netwerk/test/mochitests/test_rel_preconnect.html b/netwerk/test/mochitests/test_rel_preconnect.html index a0c3309954..fd3d0cf311 100644 --- a/netwerk/test/mochitests/test_rel_preconnect.html +++ b/netwerk/test/mochitests/test_rel_preconnect.html @@ -19,12 +19,15 @@ async function doTest() { await SpecialPowers.setBoolPref("network.http.debug-observations", true); + SimpleTest.registerCleanupFunction(async () => { + await SpecialPowers.setBoolPref("network.http.debug-observations", false); + }); + observer = SpecialPowers.wrapCallback(function() { remainder--; ok(true, "observed remainder = " + remainder); if (!remainder) { SpecialPowers.removeObserver(observer, "speculative-connect-request"); - SpecialPowers.setBoolPref("network.http.debug-observations", false); SimpleTest.finish(); } }); diff --git a/netwerk/test/unit/test_NetUtil.js b/netwerk/test/unit/test_NetUtil.js index 624e35f30e..211f60ac6a 100644 --- a/netwerk/test/unit/test_NetUtil.js +++ b/netwerk/test/unit/test_NetUtil.js @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /** - * This file tests the methods on NetUtil.jsm. + * This file tests the methods on NetUtil.sys.mjs. */ "use strict"; diff --git a/netwerk/test/unit/test_brotli_http.js b/netwerk/test/unit/test_brotli_http.js index 1207c95012..adf5915b76 100644 --- a/netwerk/test/unit/test_brotli_http.js +++ b/netwerk/test/unit/test_brotli_http.js @@ -100,7 +100,7 @@ add_task( }); equal( Services.prefs.getCharPref("network.http.accept-encoding.secure"), - "gzip, deflate, br" + "gzip, deflate, br, zstd" ); let { req, buff } = await new Promise(resolve => { let chan = NetUtil.newChannel({ diff --git a/netwerk/test/unit/test_bug526789.js b/netwerk/test/unit/test_bug526789.js index ec80249a3c..ba0714801f 100644 --- a/netwerk/test/unit/test_bug526789.js +++ b/netwerk/test/unit/test_bug526789.js @@ -239,6 +239,7 @@ add_task(async () => { await testTrailingDotCookie("http://foo.com/", "foo.com"); cm.removeAll(); + Services.prefs.clearUserPref("dom.security.https_first"); }); function getCookieCount() { @@ -285,5 +286,4 @@ async function testTrailingDotCookie(uriString, domain) { Assert.equal(cm.countCookiesFromHost(domain), 0); Assert.equal(cm.countCookiesFromHost(domain + "."), 0); cm.removeAll(); - Services.prefs.clearUserPref("dom.security.https_first"); } diff --git a/netwerk/test/unit/test_connection_coalescing.js b/netwerk/test/unit/test_connection_coalescing.js new file mode 100644 index 0000000000..a61098e73e --- /dev/null +++ b/netwerk/test/unit/test_connection_coalescing.js @@ -0,0 +1,194 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +const override = Cc["@mozilla.org/network/native-dns-override;1"].getService( + Ci.nsINativeDNSResolverOverride +); + +let certdb = Cc["@mozilla.org/security/x509certdb;1"].getService( + Ci.nsIX509CertDB +); +addCertFromFile(certdb, "http2-ca.pem", "CTu,u,u"); + +async function createServer() { + let server = new NodeHTTP2Server(); + await server.start(); + registerCleanupFunction(async () => { + await server.stop(); + }); + await server.registerPathHandler("/", (req, resp) => { + let content = `hello from ${req.authority} | ${req.socket.remotePort}`; + resp.writeHead(200, { + "Content-Type": "text/plain", + "Content-Length": `${content.length}`, + }); + resp.end(content); + }); + return server; +} + +let IP1 = "127.0.0.1"; +let IP2 = "127.0.0.2"; +if (AppConstants.platform == "macosx") { + // OSX doesn't use 127.0.0.2 as a local interface + IP2 = "::1"; +} else if (AppConstants.platform == "android") { + IP2 = "10.0.2.2"; +} + +async function openChan(uri) { + let chan = NetUtil.newChannel({ + uri, + loadUsingSystemPrincipal: true, + }).QueryInterface(Ci.nsIHttpChannel); + chan.loadFlags = Ci.nsIChannel.LOAD_INITIAL_DOCUMENT_URI; + + let { req, buffer } = await new Promise(resolve => { + function finish(r, b) { + resolve({ req: r, buffer: b }); + } + chan.asyncOpen(new ChannelListener(finish, null, CL_ALLOW_UNKNOWN_CL)); + }); + + return { + buffer, + port: buffer.split("|")[1], + addr: req.QueryInterface(Ci.nsIHttpChannelInternal).remoteAddress, + status: req.QueryInterface(Ci.nsIHttpChannel).responseStatus, + }; +} + +add_task(async function test_dontCoalesce() { + let server = await createServer(); + Services.prefs.setBoolPref("network.http.http2.aggressive_coalescing", false); + override.clearOverrides(); + Services.dns.clearCache(true); + + override.addIPOverride("foo.example.com", IP1); + override.addIPOverride("foo.example.com", IP2); + override.addIPOverride("alt1.example.com", IP2); + + let { addr: addr1 } = await openChan( + `https://foo.example.com:${server.port()}/` + ); + let { addr: addr2 } = await openChan( + `https://alt1.example.com:${server.port()}/` + ); + + Assert.notEqual(addr1, addr2); + await server.stop(); +}); + +add_task(async function test_doCoalesce() { + let server = await createServer(); + Services.prefs.setBoolPref("network.http.http2.aggressive_coalescing", false); + override.clearOverrides(); + Services.dns.clearCache(true); + + override.addIPOverride("foo.example.com", IP1); + override.addIPOverride("foo.example.com", IP2); + override.addIPOverride("alt2.example.com", IP1); + override.addIPOverride("alt2.example.com", IP2); + + let { port: port1, addr: addr1 } = await openChan( + `https://foo.example.com:${server.port()}/` + ); + let { port: port2, addr: addr2 } = await openChan( + `https://alt2.example.com:${server.port()}/` + ); + + Assert.equal(addr1, addr2); + Assert.equal(port1, port2); + await server.stop(); +}); + +add_task(async function test_doCoalesceAggresive() { + let server = await createServer(); + + Services.prefs.setBoolPref("network.http.http2.aggressive_coalescing", true); + override.clearOverrides(); + Services.dns.clearCache(true); + + override.addIPOverride("foo.example.com", IP1); + override.addIPOverride("foo.example.com", IP2); + override.addIPOverride("alt1.example.com", IP2); + + let { port: port1, addr: addr1 } = await openChan( + `https://foo.example.com:${server.port()}/` + ); + let { port: port2, addr: addr2 } = await openChan( + `https://alt1.example.com:${server.port()}/` + ); + + Assert.equal(addr1, addr2); + Assert.equal(port1, port2); + await server.stop(); +}); + +// On android because of the way networking is set up the +// localAddress is always ::ffff:127.0.0.1 so it can't be +// used to make a decision. +add_task( + { skip_if: () => AppConstants.platform == "android" }, + async function test_doCoalesceAggresive421() { + let server = await createServer(); + + await server.execute(`global.rightIP = "${IP2}"`); + + await server.registerPathHandler("/", (req, resp) => { + let content = `hello from ${req.authority} | ${req.socket.remotePort}`; + // Check that returning 421 when aggresively coalescing + // makes Firefox not coalesce the connections. + if ( + req.authority.startsWith("alt1.example.com") && + req.socket.localAddress != global.rightIP && + req.socket.localAddress != `::ffff:${global.rightIP}` + ) { + resp.writeHead(421, { + "Content-Type": "text/plain", + "Content-Length": `${content.length}`, + }); + resp.end(content); + return; + } + resp.writeHead(200, { + "Content-Type": "text/plain", + "Content-Length": `${content.length}`, + }); + resp.end(content); + }); + + Services.prefs.setBoolPref( + "network.http.http2.aggressive_coalescing", + true + ); + override.clearOverrides(); + Services.dns.clearCache(true); + + override.addIPOverride("foo.example.com", IP1); + override.addIPOverride("foo.example.com", IP2); + override.addIPOverride("alt1.example.com", IP2); + + let { + addr: addr1, + status: status1, + port: port1, + } = await openChan(`https://foo.example.com:${server.port()}/`); + Assert.equal(status1, 200); + Assert.equal(addr1, IP1); + let { + addr: addr2, + status: status2, + port: port2, + } = await openChan(`https://alt1.example.com:${server.port()}/`); + + Assert.equal(status2, 200); + Assert.equal(addr2, IP2); + Assert.notEqual(port1, port2); + await server.stop(); + } +); diff --git a/netwerk/test/unit/test_default_uri_bypass.js b/netwerk/test/unit/test_default_uri_bypass.js new file mode 100644 index 0000000000..d3ceac5d8c --- /dev/null +++ b/netwerk/test/unit/test_default_uri_bypass.js @@ -0,0 +1,67 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Test that default uri is bypassable by an unknown protocol that is + * present in the bypass list (and the pref is enabled) + */ +"use strict"; + +function inChildProcess() { + return Services.appinfo.processType != Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT; +} + +function run_test() { + // In-Parent-only process pref setup + if (!inChildProcess()) { + Services.prefs.setBoolPref("network.url.useDefaultURI", true); + Services.prefs.setBoolPref( + "network.url.some_schemes_bypass_defaultURI_fallback", + true + ); + + Services.prefs.setCharPref( + "network.url.simple_uri_schemes", + "simpleprotocol,otherproto" + ); + } + + // check valid url is fine + let uri = NetUtil.newURI("https://example.com/"); + Assert.equal(uri.spec, "https://example.com/"); // same + + // nsStandardURL removes second colon when nesting protocols + let uri1 = NetUtil.newURI("https://https://example.com/"); + Assert.equal(uri1.spec, "https://https//example.com/"); + + // defaultUri removes second colon + // no-bypass protocol uses defaultURI + let uri2 = NetUtil.newURI("nonsimpleprotocol://https://example.com"); + Assert.equal(uri2.spec, "nonsimpleprotocol://https//example.com"); + + // simpleURI keeps the second colon + // an unknown protocol in the bypass list will use simpleURI + // despite network.url.useDefaultURI being enabled + let same = "simpleprotocol://https://example.com"; + let uri3 = NetUtil.newURI(same); + Assert.equal(uri3.spec, same); // simple uri keeps second colon + + // setCharPref not accessible from child process + if (!inChildProcess()) { + // check that pref update removes simpleprotocol from bypass list + Services.prefs.setCharPref("network.url.simple_uri_schemes", "otherproto"); + let uri4 = NetUtil.newURI("simpleprotocol://https://example.com"); + Assert.equal(uri4.spec, "simpleprotocol://https//example.com"); // default uri removes second colon + + // check that spaces are parsed out + Services.prefs.setCharPref( + "network.url.simple_uri_schemes", + " simpleprotocol , otherproto " + ); + let uri5 = NetUtil.newURI("simpleprotocol://https://example.com"); + Assert.equal(uri5.spec, "simpleprotocol://https://example.com"); // simple uri keeps second colon + let uri6 = NetUtil.newURI("otherproto://https://example.com"); + Assert.equal(uri6.spec, "otherproto://https://example.com"); // simple uri keeps second colon + } +} diff --git a/netwerk/test/unit/test_dns_service.js b/netwerk/test/unit/test_dns_service.js index da404c1e7d..a4c167a6c3 100644 --- a/netwerk/test/unit/test_dns_service.js +++ b/netwerk/test/unit/test_dns_service.js @@ -121,3 +121,36 @@ add_task( } } ); + +add_task( + { + skip_if: () => + Services.appinfo.processType != Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT, + }, + async function test_sort_family() { + Services.prefs.setBoolPref("network.dns.preferIPv6", true); + overrideService.clearOverrides(); + overrideService.addIPOverride("example.com", "1.2.3.4"); + overrideService.addIPOverride("example.com", "3.4.5.6"); + overrideService.addIPOverride("example.com", "::1"); + overrideService.addIPOverride("example.com", "::2"); + + let listener = new Listener(); + Services.dns.asyncResolve( + "example.com", + Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT, + Ci.nsIDNSService.RESOLVE_CANONICAL_NAME, + null, // resolverInfo + listener, + mainThread, + defaultOriginAttributes + ); + + let [, inRecord] = await listener; + inRecord.QueryInterface(Ci.nsIDNSAddrRecord); + Assert.equal(inRecord.getNextAddrAsString(), "::1"); + Assert.equal(inRecord.getNextAddrAsString(), "::2"); + Assert.equal(inRecord.getNextAddrAsString(), "1.2.3.4"); + Assert.equal(inRecord.getNextAddrAsString(), "3.4.5.6"); + } +); diff --git a/netwerk/test/unit/test_http3_prio_disabled.js b/netwerk/test/unit/test_http3_prio_disabled.js index b73ca98709..44c7a20833 100644 --- a/netwerk/test/unit/test_http3_prio_disabled.js +++ b/netwerk/test/unit/test_http3_prio_disabled.js @@ -16,6 +16,7 @@ load("../unit/test_http3_prio_helpers.js"); if (!inChildProcess()) { registerCleanupFunction(async () => { Services.prefs.clearUserPref("network.http.http3.priority"); + Services.prefs.clearUserPref("network.http.priority_header.enabled"); http3_clear_prefs(); }); } @@ -75,7 +76,7 @@ async function test_http3_prio_disabled(incremental) { null ); await test_flag_priority( - "disabled (background)", + "disabled (tail)", Ci.nsIClassOfService.Tail, null, incremental, @@ -91,6 +92,7 @@ add_task(async function test_http3_prio_disabled_inc_true() { // wrapper handles when testing as content process for pref change if (!inChildProcess()) { Services.prefs.setBoolPref("network.http.http3.priority", false); + Services.prefs.setBoolPref("network.http.priority_header.enabled", false); } await test_http3_prio_disabled(true); }); @@ -101,6 +103,7 @@ add_task(async function test_http3_prio_disabled_inc_false() { // wrapper handles when testing as content process for pref change if (!inChildProcess()) { Services.prefs.setBoolPref("network.http.http3.priority", false); + Services.prefs.setBoolPref("network.http.priority_header.enabled", false); } await test_http3_prio_disabled(false); }); diff --git a/netwerk/test/unit/test_http3_prio_enabled.js b/netwerk/test/unit/test_http3_prio_enabled.js index 6dd30c590a..0dcb4aba6f 100644 --- a/netwerk/test/unit/test_http3_prio_enabled.js +++ b/netwerk/test/unit/test_http3_prio_enabled.js @@ -16,6 +16,7 @@ load("../unit/test_http3_prio_helpers.js"); if (!inChildProcess()) { registerCleanupFunction(async () => { Services.prefs.clearUserPref("network.http.http3.priority"); + Services.prefs.clearUserPref("network.http.priority_header.enabled"); http3_clear_prefs(); }); } @@ -82,7 +83,7 @@ async function test_http3_prio_enabled(incremental) { incremental ); await test_flag_priority( - "enabled (background)", + "enabled (tail)", Ci.nsIClassOfService.Tail, "u=6", incremental, @@ -95,6 +96,7 @@ add_task(async function test_http3_prio_enabled_incremental_true() { // wrapper handles when testing as content process for pref change if (!inChildProcess()) { Services.prefs.setBoolPref("network.http.http3.priority", true); + Services.prefs.setBoolPref("network.http.priority_header.enabled", true); } await test_http3_prio_enabled(true); }); @@ -103,6 +105,7 @@ add_task(async function test_http3_prio_enabled_incremental_false() { // wrapper handles when testing as content process for pref change if (!inChildProcess()) { Services.prefs.setBoolPref("network.http.http3.priority", true); + Services.prefs.setBoolPref("network.http.priority_header.enabled", true); } await test_http3_prio_enabled(false); }); diff --git a/netwerk/test/unit/test_multipart_set_cookie.js b/netwerk/test/unit/test_multipart_set_cookie.js index c8943cf3cc..e7ea715355 100644 --- a/netwerk/test/unit/test_multipart_set_cookie.js +++ b/netwerk/test/unit/test_multipart_set_cookie.js @@ -63,7 +63,7 @@ var multipartListener = { "nsIRequestObserver", ]), - onStartRequest(request) { + onStartRequest() { this._buffer = ""; }, @@ -76,7 +76,7 @@ var multipartListener = { } }, - onStopRequest(request, status) { + onStopRequest(request) { try { responseHandler(request, this._buffer); } catch (ex) { diff --git a/netwerk/test/unit/test_standardurl.js b/netwerk/test/unit/test_standardurl.js index cf3f736929..b44289f2e6 100644 --- a/netwerk/test/unit/test_standardurl.js +++ b/netwerk/test/unit/test_standardurl.js @@ -1051,3 +1051,13 @@ add_task(async function test_bug1648493() { equal(url.spec, "t://%C3%83%C2%A7:%C3%83%C2%AA@example.com/"); equal(url.username, "%C3%83%C2%A7"); }); + +add_task(async function test_bug1873976() { + let url = Services.io.newURI("file:."); + equal(url.spec, "file:///"); +}); + +add_task(async function test_bug1890346() { + let url = Services.io.newURI("file:..?/.."); + equal(url.spec, "file:///?/.."); +}); diff --git a/netwerk/test/unit/xpcshell.toml b/netwerk/test/unit/xpcshell.toml index fb3791963d..c86a1759e7 100644 --- a/netwerk/test/unit/xpcshell.toml +++ b/netwerk/test/unit/xpcshell.toml @@ -484,6 +484,7 @@ skip-if = ["os == 'linux' && bits == 64 && !debug"] #Bug 1553353 ["test_cookies_partition_counting.js"] ["test_cookies_privatebrowsing.js"] +skip-if = ["os == 'android' && fission"] # Bug 1888227 ["test_cookies_profile_close.js"] skip-if = ["os == 'android'"] # Bug 1700483 @@ -1275,3 +1276,7 @@ skip-if = [ ] ["test_xmlhttprequest.js"] + +["test_connection_coalescing.js"] + +["test_default_uri_bypass.js"] diff --git a/netwerk/test/unit_ipc/test_default_uri_bypass_wrap.js b/netwerk/test/unit_ipc/test_default_uri_bypass_wrap.js new file mode 100644 index 0000000000..82c8e730f8 --- /dev/null +++ b/netwerk/test/unit_ipc/test_default_uri_bypass_wrap.js @@ -0,0 +1,13 @@ +function run_test() { + Services.prefs.setBoolPref("network.url.useDefaultURI", true); + Services.prefs.setBoolPref( + "network.url.some_schemes_bypass_defaultURI_fallback", + true + ); + Services.prefs.setCharPref( + "network.url.simple_uri_schemes", + "simpleprotocol,otherproto" + ); + + run_test_in_child("../unit/test_default_uri_bypass.js"); +} diff --git a/netwerk/test/unit_ipc/test_http3_prio_disabled_wrap.js b/netwerk/test/unit_ipc/test_http3_prio_disabled_wrap.js index 38988cd450..8704484d13 100644 --- a/netwerk/test/unit_ipc/test_http3_prio_disabled_wrap.js +++ b/netwerk/test/unit_ipc/test_http3_prio_disabled_wrap.js @@ -4,6 +4,7 @@ registerCleanupFunction(async () => { Services.prefs.clearUserPref("network.http.http3.priority"); + Services.prefs.clearUserPref("network.http.priority_header.enabled"); http3_clear_prefs(); }); @@ -15,6 +16,7 @@ add_task(async function setup() { async function run_test() { // test priority urgency and incremental with priority disabled Services.prefs.setBoolPref("network.http.http3.priority", false); + Services.prefs.setBoolPref("network.http.priority_header.enabled", false); run_test_in_child("../unit/test_http3_prio_disabled.js"); run_next_test(); // only pumps next async task from this file } diff --git a/netwerk/test/unit_ipc/test_http3_prio_enabled_wrap.js b/netwerk/test/unit_ipc/test_http3_prio_enabled_wrap.js index dcff09fcba..664869f2f5 100644 --- a/netwerk/test/unit_ipc/test_http3_prio_enabled_wrap.js +++ b/netwerk/test/unit_ipc/test_http3_prio_enabled_wrap.js @@ -4,6 +4,7 @@ registerCleanupFunction(async () => { Services.prefs.clearUserPref("network.http.http3.priority"); + Services.prefs.clearUserPref("network.http.priority_header.enabled"); http3_clear_prefs(); }); @@ -15,6 +16,7 @@ add_task(async function setup() { async function run_test() { // test priority urgency and incremental with priority enabled Services.prefs.setBoolPref("network.http.http3.priority", true); + Services.prefs.setBoolPref("network.http.priority_header.enabled", true); run_test_in_child("../unit/test_http3_prio_enabled.js"); run_next_test(); // only pumps next async task from this file } diff --git a/netwerk/test/unit_ipc/xpcshell.toml b/netwerk/test/unit_ipc/xpcshell.toml index 24c84d745d..bc53e4ce74 100644 --- a/netwerk/test/unit_ipc/xpcshell.toml +++ b/netwerk/test/unit_ipc/xpcshell.toml @@ -70,6 +70,7 @@ support-files = [ "!/netwerk/test/unit/test_http3_prio_helpers.js", "!/netwerk/test/unit/http2-ca.pem", "!/netwerk/test/unit/test_orb_empty_header.js", + "!/netwerk/test/unit/test_default_uri_bypass.js", "child_is_proxy_used.js", "child_cookie_header.js", "child_dns_by_type_resolve.js", @@ -239,3 +240,6 @@ skip-if = ["os == 'android'"] ["test_xmlhttprequest_wrap.js"] prefs = ["network.allow_raw_sockets_in_content_processes=true"] + +["test_default_uri_bypass_wrap.js"] +prefs = ["network.allow_raw_sockets_in_content_processes=true"] |