summaryrefslogtreecommitdiffstats
path: root/toolkit/components/places/tests/unit/test_hash.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /toolkit/components/places/tests/unit/test_hash.js
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/places/tests/unit/test_hash.js')
-rw-r--r--toolkit/components/places/tests/unit/test_hash.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/toolkit/components/places/tests/unit/test_hash.js b/toolkit/components/places/tests/unit/test_hash.js
new file mode 100644
index 0000000000..fa9cffbdd4
--- /dev/null
+++ b/toolkit/components/places/tests/unit/test_hash.js
@@ -0,0 +1,50 @@
+/* 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");
+ });
+ }
+});