Bug 1610836 - Don't fail TRR_FIRST requests if the TRR service is not ready r=mayhemer

When it's first starting up, when mConfirmationState != CONFIRM_OK
the TRR service is not ready to use.
For TRR_FIRST requests we need to fallback to DNS while the service starts up.

Differential Revision: https://phabricator.services.mozilla.com/D61218

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Valentin Gosu 2020-01-31 14:03:10 +00:00
Родитель ab97c8e874
Коммит 773c572e19
2 изменённых файлов: 27 добавлений и 1 удалений

Просмотреть файл

@ -1453,9 +1453,12 @@ nsresult nsHostResolver::NameLookup(nsHostRecord* rec) {
rv = TrrLookup(rec); rv = TrrLookup(rec);
} }
bool serviceNotReady =
!gTRRService || !gTRRService->Enabled(effectiveRequestMode);
if (effectiveRequestMode == nsIRequest::TRR_DISABLED_MODE || if (effectiveRequestMode == nsIRequest::TRR_DISABLED_MODE ||
(effectiveRequestMode == nsIRequest::TRR_FIRST_MODE && (effectiveRequestMode == nsIRequest::TRR_FIRST_MODE &&
(rec->flags & RES_DISABLE_TRR) && NS_FAILED(rv))) { (rec->flags & RES_DISABLE_TRR || serviceNotReady) && NS_FAILED(rv))) {
if (!rec->IsAddrRecord()) { if (!rec->IsAddrRecord()) {
return rv; return rv;
} }

Просмотреть файл

@ -1377,3 +1377,26 @@ add_task(async function test_vpnDetection() {
"changed" "changed"
); );
}); });
// confirmationNS set without confirmed NS yet
// checks that we properly fall back to DNS is confirmation is not ready yet
add_task(async function test_resolve_not_confirmed() {
dns.clearCache(true);
Services.prefs.setIntPref("network.trr.mode", 2); // TRR-first
Services.prefs.clearUserPref("network.trr.useGET");
Services.prefs.clearUserPref("network.trr.disable-ECS");
Services.prefs.setCharPref(
"network.trr.uri",
`https://foo.example.com:${h2Port}/doh?responseIP=1::ffff`
);
Services.prefs.setCharPref(
"network.trr.confirmationNS",
"confirm.example.com"
);
let [, , inStatus] = await new DNSListener("example.org", undefined, false);
Assert.ok(
Components.isSuccessCode(inStatus),
`${inStatus} should be a success code`
);
});