Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
const { ObliviousHTTP } = ChromeUtils.importESModule(
"resource://gre/modules/ObliviousHTTP.sys.mjs"
);
const { sinon } = ChromeUtils.importESModule(
);
/**
* Test host validation and configuration mapping.
*/
add_task(async function test_host_validation_and_mapping() {
const protocolHandler = new MozCachedOHTTPProtocolHandler();
// Test invalid host throws error in getOHTTPGatewayConfigAndRelayURI
await Assert.rejects(
protocolHandler.getOHTTPGatewayConfigAndRelayURI("invalid-host"),
/Unrecognized host for OHTTP config: invalid-host/,
"Should reject invalid host in getOHTTPConfig"
);
});
/**
* Test lazy preference loading and caching behavior.
*/
add_task(async function test_lazy_preference_loading() {
const protocolHandler = new MozCachedOHTTPProtocolHandler();
// Set up preferences for testing
Services.prefs.setCharPref(
"browser.newtabpage.activity-stream.discoverystream.ohttp.configURL",
gatewayConfigURL
);
Services.prefs.setCharPref(
"browser.newtabpage.activity-stream.discoverystream.ohttp.relayURL",
relayURL
);
// Stub ObliviousHTTP.getOHTTPConfig to avoid network requests
const stub = sinon
.stub(ObliviousHTTP, "getOHTTPConfig")
.resolves(new Uint8Array([1, 2, 3, 4]));
try {
// First call should load preferences lazily
const { ohttpGatewayConfig: config1 } =
await protocolHandler.getOHTTPGatewayConfigAndRelayURI("newtab-image");
Assert.ok(config1 instanceof Uint8Array, "Should return OHTTP config");
Assert.ok(
stub.calledWith(gatewayConfigURL),
"Should call ObliviousHTTP with correct config URL"
);
// Second call should use cached preferences
stub.resetHistory();
const { ohttpGatewayConfig: config2 } =
await protocolHandler.getOHTTPGatewayConfigAndRelayURI("newtab-image");
Assert.ok(
config2 instanceof Uint8Array,
"Should return OHTTP config on second call"
);
Assert.ok(
stub.calledWith(gatewayConfigURL),
"Should still call ObliviousHTTP with same config URL"
);
// Test relay URI loading
const { relayURI: relay1 } =
await protocolHandler.getOHTTPGatewayConfigAndRelayURI("newtab-image");
Assert.equal(relay1.spec, relayURL, "Should return correct relay URI");
} finally {
stub.restore();
Services.prefs.clearUserPref(
"browser.newtabpage.activity-stream.discoverystream.ohttp.configURL"
);
Services.prefs.clearUserPref(
"browser.newtabpage.activity-stream.discoverystream.ohttp.relayURL"
);
}
});