50 lines
1.7 KiB
JavaScript
50 lines
1.7 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||
|
||
add_task(async function () {
|
||
// Check particular unicode urls with insertion and selection APIs to ensure
|
||
// url hashes match properly.
|
||
const URLS = [
|
||
"http://президент.президент/президент/",
|
||
"https://www.аррӏе.com/аррӏе/",
|
||
"http://名がドメイン/",
|
||
];
|
||
|
||
for (let url of URLS) {
|
||
await PlacesTestUtils.addVisits(url);
|
||
Assert.ok(await PlacesUtils.history.fetch(url), "Found the added visit");
|
||
await PlacesUtils.bookmarks.insert({
|
||
url,
|
||
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
|
||
});
|
||
Assert.ok(
|
||
await PlacesUtils.bookmarks.fetch({ url }),
|
||
"Found the added bookmark"
|
||
);
|
||
let db = await PlacesUtils.promiseDBConnection();
|
||
let rows = await db.execute(
|
||
"SELECT id FROM moz_places WHERE url_hash = hash(:url) AND url = :url",
|
||
{ url: new URL(url).href }
|
||
);
|
||
Assert.equal(rows.length, 1, "Matched the place from the database");
|
||
let id = rows[0].getResultByName("id");
|
||
|
||
// Now, suppose the urls has been inserted without proper parsing and retry.
|
||
// This should normally not happen through the API, but we have evidence
|
||
// it somehow happened.
|
||
await PlacesUtils.withConnectionWrapper("test_hash.js", async wdb => {
|
||
await wdb.execute(
|
||
`
|
||
UPDATE moz_places SET url_hash = hash(:url), url = :url
|
||
WHERE id = :id
|
||
`,
|
||
{ url, id }
|
||
);
|
||
rows = await wdb.execute(
|
||
"SELECT id FROM moz_places WHERE url_hash = hash(:url) AND url = :url",
|
||
{ url }
|
||
);
|
||
Assert.equal(rows.length, 1, "Matched the place from the database");
|
||
});
|
||
}
|
||
});
|