1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://gre/modules/Services.jsm");
Components.utils.import("resource://gre/modules/FormHistory.jsm");
var Ci = Components.interfaces;
var Cc = Components.classes;
var Cu = Components.utils;
const CURRENT_SCHEMA = 4;
const PR_HOURS = 60 * 60 * 1000000;
do_get_profile();
var dirSvc = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
// Send the profile-after-change notification to the form history component to ensure
// that it has been initialized.
var formHistoryStartup = Cc["@mozilla.org/satchel/form-history-startup;1"].
getService(Ci.nsIObserver);
formHistoryStartup.observe(null, "profile-after-change", null);
function getDBVersion(dbfile) {
var ss = Cc["@mozilla.org/storage/service;1"].
getService(Ci.mozIStorageService);
var dbConnection = ss.openDatabase(dbfile);
var version = dbConnection.schemaVersion;
dbConnection.close();
return version;
}
const isGUID = /[A-Za-z0-9\+\/]{16}/;
// Find form history entries.
function searchEntries(terms, params, iter) {
let results = [];
FormHistory.search(terms, params, { handleResult: result => results.push(result),
handleError: function (error) {
do_throw("Error occurred searching form history: " + error);
},
handleCompletion: function (reason) { if (!reason) iter.next(results); }
});
}
// Count the number of entries with the given name and value, and call then(number)
// when done. If name or value is null, then the value of that field does not matter.
function countEntries(name, value, then) {
var obj = {};
if (name !== null)
obj.fieldname = name;
if (value !== null)
obj.value = value;
let count = 0;
FormHistory.count(obj, { handleResult: result => count = result,
handleError: function (error) {
do_throw("Error occurred searching form history: " + error);
},
handleCompletion: function (reason) { if (!reason) then(count); }
});
}
// Perform a single form history update and call then() when done.
function updateEntry(op, name, value, then) {
var obj = { op: op };
if (name !== null)
obj.fieldname = name;
if (value !== null)
obj.value = value;
updateFormHistory(obj, then);
}
// Add a single form history entry with the current time and call then() when done.
function addEntry(name, value, then) {
let now = Date.now() * 1000;
updateFormHistory({ op: "add", fieldname: name, value: value, timesUsed: 1,
firstUsed: now, lastUsed: now }, then);
}
// Wrapper around FormHistory.update which handles errors. Calls then() when done.
function updateFormHistory(changes, then) {
FormHistory.update(changes, { handleError: function (error) {
do_throw("Error occurred updating form history: " + error);
},
handleCompletion: function (reason) { if (!reason) then(); },
});
}
/**
* Logs info to the console in the standard way (includes the filename).
*
* @param aMessage
* The message to log to the console.
*/
function do_log_info(aMessage) {
print("TEST-INFO | " + _TEST_FILE + " | " + aMessage);
}
|