Bug 1631487 - Query Experiment Manager for CFR cohort info r=k88hudson

Differential Revision: https://phabricator.services.mozilla.com/D71979
This commit is contained in:
Nan Jiang 2020-04-22 23:50:37 +00:00
parent 31574e8914
commit c94de28dad
2 changed files with 32 additions and 14 deletions

View File

@ -19,11 +19,6 @@ const { classifySite } = ChromeUtils.import(
"resource://activity-stream/lib/SiteClassifier.jsm"
);
ChromeUtils.defineModuleGetter(
this,
"ASRouterPreferences",
"resource://activity-stream/lib/ASRouterPreferences.jsm"
);
ChromeUtils.defineModuleGetter(
this,
"perfService",
@ -71,6 +66,7 @@ ChromeUtils.defineModuleGetter(
);
XPCOMUtils.defineLazyModuleGetters(this, {
ExperimentAPI: "resource://messaging-system/experiments/ExperimentAPI.jsm",
TelemetryEnvironment: "resource://gre/modules/TelemetryEnvironment.jsm",
TelemetrySession: "resource://gre/modules/TelemetrySession.jsm",
});
@ -311,13 +307,19 @@ this.TelemetryFeed = class TelemetryFeed {
}
/**
* Check if it is in the CFR experiment cohort. ASRouterPreferences lazily parses AS router pref.
* Check if it is in the CFR experiment cohort by querying against the
* experiment manager of Messaging System
*/
get isInCFRCohort() {
for (let provider of ASRouterPreferences.providers) {
if (provider.id === "cfr" && provider.enabled && provider.cohort) {
try {
const experimentData = ExperimentAPI.getExperiment({
group: "cfr",
});
if (experimentData && experimentData.slug) {
return true;
}
} catch (e) {
return false;
}
return false;
}

View File

@ -20,9 +20,6 @@ import injector from "inject!lib/TelemetryFeed.jsm";
const FAKE_UUID = "{foo-123-foo}";
const FAKE_ROUTER_MESSAGE_PROVIDER = [{ id: "cfr", enabled: true }];
const FAKE_ROUTER_MESSAGE_PROVIDER_COHORT = [
{ id: "cfr", enabled: true, cohort: "cohort_group" },
];
const FAKE_TELEMETRY_ID = "foo123";
describe("TelemetryFeed", () => {
@ -39,6 +36,7 @@ describe("TelemetryFeed", () => {
let fakeHomePageUrl;
let fakeHomePage;
let fakeExtensionSettingsStore;
let ExperimentAPI = { getExperiment: () => {} };
class PingCentre {
sendPing() {}
uninit() {}
@ -105,6 +103,7 @@ describe("TelemetryFeed", () => {
globals.set("ClientID", {
getClientID: sandbox.spy(async () => FAKE_TELEMETRY_ID),
});
globals.set("ExperimentAPI", ExperimentAPI);
sandbox
.stub(ASRouterPreferences, "providers")
.get(() => FAKE_ROUTER_MESSAGE_PROVIDER);
@ -832,9 +831,9 @@ describe("TelemetryFeed", () => {
return "release";
},
});
sandbox
.stub(ASRouterPreferences, "providers")
.get(() => FAKE_ROUTER_MESSAGE_PROVIDER_COHORT);
sandbox.stub(ExperimentAPI, "getExperiment").returns({
slug: "SOME-CFR-EXP",
});
const data = {
action: "cfr_user_event",
event: "IMPRESSION",
@ -1830,4 +1829,21 @@ describe("TelemetryFeed", () => {
assert.notCalled(instance.sendStructuredIngestionEvent);
});
});
describe("#isInCFRCohort", () => {
it("should return false if there is no CFR experiment registered", () => {
assert.ok(!instance.isInCFRCohort);
});
it("should return false if getExperiment throws", () => {
sandbox.stub(ExperimentAPI, "getExperiment").throws();
assert.ok(!instance.isInCFRCohort);
});
it("should return true if there is a CFR experiment registered", () => {
sandbox.stub(ExperimentAPI, "getExperiment").returns({
slug: "SOME-CFR-EXP",
});
assert.ok(instance.isInCFRCohort);
});
});
});