Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- Manifest: toolkit/components/passwordmgr/test/unit/xpcshell.toml
/**
* Test Services.logins.searchLogins with the `schemeUpgrades` property.
*/
/**
* Returns a list of new nsILoginInfo objects that are a subset of the test
* data, built to match the specified query.
*
* @param {Object} aQuery
* Each property and value of this object restricts the search to those
* entries from the test data that match the property exactly.
*/
function buildExpectedLogins(aQuery) {
return TestData.loginList().filter(entry =>
Object.keys(aQuery).every(name => {
if (name == "schemeUpgrades") {
return true;
}
if (["origin", "formActionOrigin"].includes(name)) {
return LoginHelper.isOriginMatching(entry[name], aQuery[name], {
schemeUpgrades: aQuery.schemeUpgrades,
});
}
return entry[name] === aQuery[name];
})
);
}
/**
* Tests the searchLogins function.
*
* @param {Object} aQuery
* Each property and value of this object is translated to an entry in
* the nsIPropertyBag parameter of searchLogins.
* @param {Number} aExpectedCount
* Number of logins from the test data that should be found. The actual
* list of logins is obtained using the buildExpectedLogins helper, and
* this value is just used to verify that modifications to the test data
* don't make the current test meaningless.
*/
function checkSearch(aQuery, aExpectedCount) {
info("Testing searchLogins for " + JSON.stringify(aQuery));
let expectedLogins = buildExpectedLogins(aQuery);
Assert.equal(expectedLogins.length, aExpectedCount);
let logins = Services.logins.searchLogins(newPropertyBag(aQuery));
LoginTestUtils.assertLoginListsEqual(logins, expectedLogins);
}
/**
* Prepare data for the following tests.
*/
add_setup(async () => {
await Services.logins.addLogins(TestData.loginList());
});
/**
* Tests searchLogins with the `schemeUpgrades` property
*/
add_task(function test_search_schemeUpgrades_origin() {
// Origin-only
checkSearch(
{
origin: HTTPS_ORIGIN,
},
1
);
checkSearch(
{
origin: HTTPS_ORIGIN,
schemeUpgrades: false,
},
1
);
checkSearch(
{
origin: HTTPS_ORIGIN,
schemeUpgrades: undefined,
},
1
);
checkSearch(
{
origin: HTTPS_ORIGIN,
schemeUpgrades: true,
},
2
);
});
/**
* Same as above but replacing origin with formActionOrigin.
*/
add_task(function test_search_schemeUpgrades_formActionOrigin() {
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
},
2
);
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
schemeUpgrades: false,
},
2
);
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
schemeUpgrades: undefined,
},
2
);
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
schemeUpgrades: true,
},
4
);
});
add_task(function test_search_schemeUpgrades_origin_formActionOrigin() {
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
origin: HTTPS_ORIGIN,
},
1
);
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
origin: HTTPS_ORIGIN,
schemeUpgrades: false,
},
1
);
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
origin: HTTPS_ORIGIN,
schemeUpgrades: undefined,
},
1
);
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
origin: HTTPS_ORIGIN,
schemeUpgrades: true,
},
2
);
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
origin: HTTPS_ORIGIN,
schemeUpgrades: true,
usernameField: "form_field_username",
},
2
);
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
origin: HTTPS_ORIGIN,
passwordField: "form_field_password",
schemeUpgrades: true,
usernameField: "form_field_username",
},
2
);
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
origin: HTTPS_ORIGIN,
httpRealm: null,
passwordField: "form_field_password",
schemeUpgrades: true,
usernameField: "form_field_username",
},
2
);
});
/**
* HTTP submitting to HTTPS
*/
add_task(function test_http_to_https() {
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
origin: HTTP3_ORIGIN,
httpRealm: null,
schemeUpgrades: false,
},
1
);
checkSearch(
{
formActionOrigin: HTTPS_ORIGIN,
origin: HTTP3_ORIGIN,
httpRealm: null,
schemeUpgrades: true,
},
2
);
});
/**
* schemeUpgrades shouldn't cause downgrades
*/
add_task(function test_search_schemeUpgrades_downgrade() {
checkSearch(
{
formActionOrigin: HTTP_ORIGIN,
origin: HTTP_ORIGIN,
},
1
);
info(
"The same number should be found with schemeUpgrades since we're searching for HTTP"
);
checkSearch(
{
formActionOrigin: HTTP_ORIGIN,
origin: HTTP_ORIGIN,
schemeUpgrades: true,
},
1
);
});