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
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
// A console listener so we can listen for a log message from nsSearchService.
function promiseTimezoneMessage() {
return new Promise(resolve => {
let listener = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIConsoleListener]),
observe : function (msg) {
if (msg.message.startsWith("getIsUS() fell back to a timezone check with the result=")) {
Services.console.unregisterListener(listener);
resolve(msg);
}
}
};
Services.console.registerListener(listener);
});
}
function run_test() {
installTestEngine();
// setup a console listener for the timezone fallback message.
let promiseTzMessage = promiseTimezoneMessage();
// Here we have malformed JSON
Services.prefs.setCharPref("browser.search.geoip.url", 'data:application/json,{"country_code"');
Services.search.init(() => {
ok(!Services.prefs.prefHasUserValue("browser.search.countryCode"), "should be no countryCode pref");
ok(!Services.prefs.prefHasUserValue("browser.search.region"), "should be no region pref");
ok(!Services.prefs.prefHasUserValue("browser.search.isUS"), "should never be an isUS pref");
// fetch the engines - this should force the timezone check, but still
// doesn't persist any prefs.
Services.search.getEngines();
ok(!Services.prefs.prefHasUserValue("browser.search.countryCode"), "should be no countryCode pref");
ok(!Services.prefs.prefHasUserValue("browser.search.region"), "should be no region pref");
ok(!Services.prefs.prefHasUserValue("browser.search.isUS"), "should never be an isUS pref");
// should have recorded SUCCESS_WITHOUT_DATA
checkCountryResultTelemetry(TELEMETRY_RESULT_ENUM.SUCCESS_WITHOUT_DATA);
// and false values for timeout and forced-sync-init.
for (let hid of ["SEARCH_SERVICE_COUNTRY_TIMEOUT",
"SEARCH_SERVICE_COUNTRY_FETCH_CAUSED_SYNC_INIT"]) {
let histogram = Services.telemetry.getHistogramById(hid);
let snapshot = histogram.snapshot();
deepEqual(snapshot.counts, [1, 0, 0]); // boolean probe so 3 buckets, expect 1 result for |0|.
}
// Check we saw the timezone fallback message.
promiseTzMessage.then(msg => {
print("Timezone message:", msg.message);
ok(msg.message.endsWith(isUSTimezone().toString()), "fell back to timezone and it matches our timezone");
do_test_finished();
run_next_test();
});
});
do_test_pending();
}
|