Bug 813226 - Add ability to bypass policy acceptance; r=rnewman

This is needed to support background "always OK" data submission, such
as ADU pings.
This commit is contained in:
Gregory Szorc 2012-11-19 11:31:19 -08:00
Родитель 6d778b7eaf
Коммит e2ec35f022
3 изменённых файлов: 33 добавлений и 1 удалений

Просмотреть файл

@ -10,6 +10,7 @@ pref("healthreport.logging.consoleLevel", "Warn");
pref("healthreport.policy.currentDaySubmissionFailureCount", 0);
pref("healthreport.policy.dataSubmissionEnabled", true);
pref("healthreport.policy.dataSubmissionPolicyAccepted", false);
pref("healthreport.policy.dataSubmissionPolicyBypassAcceptance", false);
pref("healthreport.policy.dataSubmissionPolicyNotifiedTime", "0");
pref("healthreport.policy.dataSubmissionPolicyResponseType", "");
pref("healthreport.policy.dataSubmissionPolicyResponseTime", "0");

Просмотреть файл

@ -359,6 +359,16 @@ HealthReportPolicy.prototype = {
OLDEST_ALLOWED_YEAR);
},
/**
* Short circuit policy checking and always assume acceptance.
*
* This shuld never be set by the user. Instead, it is a per-application or
* per-deployment default pref.
*/
get dataSubmissionPolicyBypassAcceptance() {
return this._prefs.get("dataSubmissionPolicyBypassAcceptance", false);
},
/**
* When the user was notified that data submission could occur.
*
@ -754,7 +764,7 @@ HealthReportPolicy.prototype = {
}
// User has opted out of data submission.
if (!this.dataSubmissionPolicyAccepted) {
if (!this.dataSubmissionPolicyAccepted && !this.dataSubmissionPolicyBypassAcceptance) {
this._log.debug("Data submission has been disabled per user request.");
return;
}
@ -780,6 +790,10 @@ HealthReportPolicy.prototype = {
* @return bool Whether user has responded to data policy.
*/
ensureNotifyResponse: function ensureNotifyResponse(now) {
if (this.dataSubmissionPolicyBypassAcceptance) {
return true;
}
let notifyState = this.notifyState;
if (notifyState == this.STATE_NOTIFY_UNNOTIFIED) {

Просмотреть файл

@ -80,6 +80,10 @@ add_test(function test_prefs() {
do_check_false(prefs.get("dataSubmissionPolicyAccepted", true));
do_check_false(policy.dataSubmissionPolicyAccepted);
do_check_false(policy.dataSubmissionPolicyBypassAcceptance);
prefs.set("dataSubmissionPolicyBypassAcceptance", true);
do_check_true(policy.dataSubmissionPolicyBypassAcceptance);
policy.lastDataSubmissionRequestedDate = now;
do_check_eq(prefs.get("lastDataSubmissionRequestedTime"), nowT);
do_check_eq(policy.lastDataSubmissionRequestedDate.getTime(), nowT);
@ -154,6 +158,19 @@ add_test(function test_initial_submission_notification() {
run_next_test();
});
add_test(function test_bypass_acceptance() {
let [policy, prefs, listener] = getPolicy("bypass_acceptance");
prefs.set("dataSubmissionPolicyBypassAcceptance", true);
do_check_false(policy.dataSubmissionPolicyAccepted);
do_check_true(policy.dataSubmissionPolicyBypassAcceptance);
defineNow(policy, new Date(policy.nextDataSubmissionDate.getTime()));
policy.checkStateAndTrigger();
do_check_eq(listener.requestDataUploadCount, 1);
run_next_test();
});
add_test(function test_notification_implicit_acceptance() {
let [policy, prefs, listener] = getPolicy("notification_implicit_acceptance");