106 lines
2.8 KiB
JavaScript
106 lines
2.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/* eslint-disable @microsoft/sdl/no-insecure-url */
|
|
|
|
"use strict";
|
|
|
|
// This test checks that when a upgrade is happening through HTTPS-Only,
|
|
// only a history entry for the https url of the site is added visibly for
|
|
// the user, while the http version gets added as a hidden entry.
|
|
|
|
async function assertIsPlaceHidden(url, expectHidden) {
|
|
const hidden = await PlacesTestUtils.getDatabaseValue(
|
|
"moz_places",
|
|
"hidden",
|
|
{ url }
|
|
);
|
|
Assert.ok(hidden !== undefined, `We should have saved a visit to ${url}`);
|
|
Assert.equal(
|
|
hidden,
|
|
expectHidden ? 1 : 0,
|
|
`Check if the visit to ${url} is hidden`
|
|
);
|
|
}
|
|
|
|
async function assertVisitFromAndType(
|
|
url,
|
|
expectedFromVisitURL,
|
|
expectedVisitType
|
|
) {
|
|
const db = await PlacesUtils.promiseDBConnection();
|
|
const rows = await db.execute(
|
|
`SELECT v1.visit_type FROM moz_historyvisits v1
|
|
JOIN moz_places p1 ON p1.id = v1.place_id
|
|
WHERE p1.url = :url
|
|
AND from_visit IN
|
|
(SELECT v2.id FROM moz_historyvisits v2
|
|
JOIN moz_places p2 ON p2.id = v2.place_id
|
|
WHERE p2.url = :expectedFromVisitURL)
|
|
`,
|
|
{ url, expectedFromVisitURL }
|
|
);
|
|
Assert.equal(
|
|
rows.length,
|
|
1,
|
|
`There should be a single visit to ${url} with "from_visit" set to the visit id of ${expectedFromVisitURL}`
|
|
);
|
|
Assert.equal(
|
|
rows[0].getResultByName("visit_type"),
|
|
expectedVisitType,
|
|
`The visit to ${url} should have a visit type of ${expectedVisitType}`
|
|
);
|
|
}
|
|
|
|
function waitForVisitNotifications(urls) {
|
|
return Promise.all(
|
|
urls.map(url =>
|
|
PlacesTestUtils.waitForNotification("page-visited", events =>
|
|
events.some(e => e.url === url)
|
|
)
|
|
)
|
|
);
|
|
}
|
|
|
|
add_task(async function test_upgrade() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["dom.security.https_only_mode", true]],
|
|
});
|
|
|
|
await PlacesUtils.history.clear();
|
|
|
|
registerCleanupFunction(async function () {
|
|
await PlacesUtils.history.clear();
|
|
});
|
|
|
|
const visitPromise = waitForVisitNotifications([
|
|
"http://example.com/",
|
|
"https://example.com/",
|
|
]);
|
|
|
|
info("Opening http://example.com/");
|
|
await BrowserTestUtils.withNewTab(
|
|
{
|
|
gBrowser,
|
|
url: "http://example.com/",
|
|
waitForLoad: true,
|
|
},
|
|
async browser => {
|
|
Assert.equal(
|
|
browser.currentURI.scheme,
|
|
"https",
|
|
"We should have been upgraded"
|
|
);
|
|
info("Waiting for page visits to reach places database");
|
|
await visitPromise;
|
|
info("Checking places database");
|
|
await assertIsPlaceHidden("http://example.com/", true);
|
|
await assertIsPlaceHidden("https://example.com/", false);
|
|
await assertVisitFromAndType(
|
|
"https://example.com/",
|
|
"http://example.com/",
|
|
Ci.nsINavHistoryService.TRANSITION_REDIRECT_PERMANENT
|
|
);
|
|
}
|
|
);
|
|
});
|