in src/js/popup/popup.js [1159:1250]
getReasonToShowSurvey: async () => {
let reasonToShow = null;
const firstSeen = await popup.panel.survey.utils.useFirstSeen();
const { premium } = await browser.storage.local.get("premium");
const { profileID } = await browser.storage.local.get("profileID");
const dismiss = popup.panel.survey.dismiss;
const free1DayDismissal = await dismiss.free1DayDismissal(
profileID
);
const free7DaysDismissal = await dismiss.free7DaysDismissal(
profileID
);
const free30DaysDismissal = await dismiss.free30DaysDismissal(
profileID
);
const free90DaysDismissal = await dismiss.free90DaysDismissal(
profileID
);
const premium7DaysDismissal = await dismiss.premium7DaysDismissal(
profileID
);
const premium30DaysDismissal = await dismiss.premium30DaysDismissal(
profileID
);
const premium90DaysDismissal = await dismiss.premium90DaysDismissal(
profileID
);
const { date_subscribed } = await browser.storage.local.get(
"date_subscribed"
);
let isDismissed;
if (premium && (date_subscribed || firstSeen instanceof Date)) {
// There are two reasons why someone might not have a subscription date set:
// - They subscribed before we started tracking that.
// - They have Premium because they have a Mozilla email address.
// In the latter case, their first visit date is effectively their
// subscription date. In the former case, they will have had Premium for
// a while, so they can be shown the survey too. Their first visit will
// have been a while ago, so we'll just use that as a proxy for the
// subscription date:
const subscriptionDate = date_subscribed
? new Date(date_subscribed)
: firstSeen;
const daysSinceSubscription =
(Date.now() - subscriptionDate.getTime()) / 1000 / 60 / 60 / 24;
if (daysSinceSubscription >= 90) {
isDismissed = await premium90DaysDismissal.isDismissed();
if (!isDismissed) {
reasonToShow = "premium90days";
}
} else if (daysSinceSubscription >= 30) {
isDismissed = await premium30DaysDismissal.isDismissed();
if (!isDismissed) {
reasonToShow = "premium30days";
}
} else if (daysSinceSubscription >= 7) {
isDismissed = await premium7DaysDismissal.isDismissed();
if (!isDismissed) {
reasonToShow = "premium7days";
}
}
} else if (!premium && firstSeen instanceof Date) {
const daysSinceFirstSeen =
(Date.now() - firstSeen.getTime()) / 1000 / 60 / 60 / 24;
if (daysSinceFirstSeen >= 90) {
isDismissed = await free90DaysDismissal.isDismissed();
if (!isDismissed) {
reasonToShow = "free90days";
}
} else if (daysSinceFirstSeen >= 30) {
isDismissed = await free30DaysDismissal.isDismissed();
if (!isDismissed) {
reasonToShow = "free30days";
}
} else if (daysSinceFirstSeen >= 7) {
isDismissed = await free7DaysDismissal.isDismissed();
if (!isDismissed) {
reasonToShow = "free7days";
}
} else if (daysSinceFirstSeen > 1) {
isDismissed = await free1DayDismissal.isDismissed();
if (!isDismissed) {
reasonToShow = "free1day";
}
}
}
return reasonToShow;
},