Bug 1317579 - Don't send a sync ping for self-hosters. r?tcsc
MozReview-Commit-ID: 601nfXW0gT6
--- a/services/sync/modules/telemetry.js
+++ b/services/sync/modules/telemetry.js
@@ -496,22 +496,28 @@ class SyncTelemetryImpl {
shutdown() {
this.finish("shutdown");
for (let topic of TOPICS) {
Observers.remove(topic, this, this);
}
}
submit(record) {
+ if (Services.prefs.prefHasUserValue("identity.sync.tokenserver.uri")) {
+ log.trace(`Not sending telemetry ping for self-hosted Sync user`);
+ return false;
+ }
// We still call submit() with possibly illegal payloads so that tests can
// know that the ping was built. We don't end up submitting them, however.
if (record.syncs.length) {
log.trace(`submitting ${record.syncs.length} sync record(s) to telemetry`);
TelemetryController.submitExternalPing("sync", record);
+ return true;
}
+ return false;
}
onSyncStarted() {
if (this.current) {
log.warn("Observed weave:service:sync:start, but we're already recording a sync!");
// Just discard the old record, consistent with our handling of engines, above.
this.current = null;
--- a/services/sync/tests/unit/test_telemetry.js
+++ b/services/sync/tests/unit/test_telemetry.js
@@ -649,8 +649,40 @@ add_task(async function test_invalid_eve
badextra["name" + i] = "x";
}
await checkNotRecorded("object", "method", "value", badextra);
} finally {
Service.engineManager.unregister(engine);
await cleanAndGo(engine, server);
}
});
+
+add_task(async function test_no_ping_for_self_hosters() {
+ let telem = get_sync_test_telemetry();
+ let oldSubmit = telem.submit;
+
+ Service.engineManager.register(BogusEngine);
+ let engine = Service.engineManager.get("bogus");
+ engine.enabled = true;
+ let server = serverForUsers({"foo": "password"}, {
+ meta: {global: {engines: {bogus: {version: engine.version, syncID: engine.syncID}}}},
+ steam: {}
+ });
+
+ await SyncTestingInfrastructure(server);
+ try {
+ let submitPromise = new Promise(resolve => {
+ telem.submit = function() {
+ let result = oldSubmit.apply(this, arguments);
+ resolve(result);
+ };
+ });
+ Service.sync();
+ let pingSubmitted = await submitPromise;
+ // The Sync testing infrastructure already sets up a custom token server,
+ // so we don't need to do anything to simulate a self-hosted user.
+ ok(!pingSubmitted, "Should not submit ping with custom token server URL");
+ } finally {
+ telem.submit = oldSubmit;
+ Service.engineManager.unregister(engine);
+ await cleanAndGo(engine, server);
+ }
+});