summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_browsingData_formData.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_browsingData_formData.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_browsingData_formData.js175
1 files changed, 175 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_browsingData_formData.js b/browser/components/extensions/test/browser/browser_ext_browsingData_formData.js
new file mode 100644
index 0000000000..06d928b9b1
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_browsingData_formData.js
@@ -0,0 +1,175 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+ChromeUtils.defineESModuleGetters(this, {
+ FormHistory: "resource://gre/modules/FormHistory.sys.mjs",
+ PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",
+});
+
+const REFERENCE_DATE = Date.now();
+
+async function countEntries(fieldname, message, expected) {
+ let count = await FormHistory.count({ fieldname });
+ is(count, expected, message);
+}
+
+async function setupFormHistory() {
+ async function searchFirstEntry(terms, params) {
+ return (await FormHistory.search(terms, params))[0];
+ }
+
+ // Make sure we've got a clean DB to start with, then add the entries we'll be testing.
+ await FormHistory.update([
+ { op: "remove" },
+ {
+ op: "add",
+ fieldname: "reference",
+ value: "reference",
+ },
+ {
+ op: "add",
+ fieldname: "10secondsAgo",
+ value: "10s",
+ },
+ {
+ op: "add",
+ fieldname: "10minutesAgo",
+ value: "10m",
+ },
+ ]);
+
+ // Age the entries to the proper vintage.
+ let timestamp = PlacesUtils.toPRTime(REFERENCE_DATE);
+ let result = await searchFirstEntry(["guid"], { fieldname: "reference" });
+ await FormHistory.update({
+ op: "update",
+ firstUsed: timestamp,
+ guid: result.guid,
+ });
+
+ timestamp = PlacesUtils.toPRTime(REFERENCE_DATE - 10000);
+ result = await searchFirstEntry(["guid"], { fieldname: "10secondsAgo" });
+ await FormHistory.update({
+ op: "update",
+ firstUsed: timestamp,
+ guid: result.guid,
+ });
+
+ timestamp = PlacesUtils.toPRTime(REFERENCE_DATE - 10000 * 60);
+ result = await searchFirstEntry(["guid"], { fieldname: "10minutesAgo" });
+ await FormHistory.update({
+ op: "update",
+ firstUsed: timestamp,
+ guid: result.guid,
+ });
+
+ // Sanity check.
+ await countEntries(
+ "reference",
+ "Checking for 10minutes form history entry creation",
+ 1
+ );
+ await countEntries(
+ "10secondsAgo",
+ "Checking for 1hour form history entry creation",
+ 1
+ );
+ await countEntries(
+ "10minutesAgo",
+ "Checking for 1hour10minutes form history entry creation",
+ 1
+ );
+}
+
+add_task(async function testFormData() {
+ function background() {
+ browser.test.onMessage.addListener(async (msg, options) => {
+ if (msg == "removeFormData") {
+ await browser.browsingData.removeFormData(options);
+ } else {
+ await browser.browsingData.remove(options, { formData: true });
+ }
+ browser.test.sendMessage("formDataRemoved");
+ });
+ }
+
+ let extension = ExtensionTestUtils.loadExtension({
+ background,
+ manifest: {
+ permissions: ["browsingData"],
+ },
+ });
+
+ async function testRemovalMethod(method) {
+ // Clear form data with no since value.
+ await setupFormHistory();
+ extension.sendMessage(method, {});
+ await extension.awaitMessage("formDataRemoved");
+
+ await countEntries(
+ "reference",
+ "reference form entry should be deleted.",
+ 0
+ );
+ await countEntries(
+ "10secondsAgo",
+ "10secondsAgo form entry should be deleted.",
+ 0
+ );
+ await countEntries(
+ "10minutesAgo",
+ "10minutesAgo form entry should be deleted.",
+ 0
+ );
+
+ // Clear form data with recent since value.
+ await setupFormHistory();
+ extension.sendMessage(method, { since: REFERENCE_DATE });
+ await extension.awaitMessage("formDataRemoved");
+
+ await countEntries(
+ "reference",
+ "reference form entry should be deleted.",
+ 0
+ );
+ await countEntries(
+ "10secondsAgo",
+ "10secondsAgo form entry should still exist.",
+ 1
+ );
+ await countEntries(
+ "10minutesAgo",
+ "10minutesAgo form entry should still exist.",
+ 1
+ );
+
+ // Clear form data with old since value.
+ await setupFormHistory();
+ extension.sendMessage(method, { since: REFERENCE_DATE - 1000000 });
+ await extension.awaitMessage("formDataRemoved");
+
+ await countEntries(
+ "reference",
+ "reference form entry should be deleted.",
+ 0
+ );
+ await countEntries(
+ "10secondsAgo",
+ "10secondsAgo form entry should be deleted.",
+ 0
+ );
+ await countEntries(
+ "10minutesAgo",
+ "10minutesAgo form entry should be deleted.",
+ 0
+ );
+ }
+
+ await extension.startup();
+
+ await testRemovalMethod("removeFormData");
+ await testRemovalMethod("remove");
+
+ await extension.unload();
+});