mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-21 17:37:01 +01:00
Replace setInterval with chrome alarms for MetaMetrics FinalizeEventFragment (#16003)
This commit is contained in:
parent
46d970e362
commit
29c2b136b8
@ -18,6 +18,9 @@ import {
|
||||
TRAITS,
|
||||
} from '../../../shared/constants/metametrics';
|
||||
import { SECOND } from '../../../shared/constants/time';
|
||||
import { isManifestV3 } from '../../../shared/modules/mv3.utils';
|
||||
import { METAMETRICS_FINALIZE_EVENT_FRAGMENT_ALARM } from '../../../shared/constants/alarms';
|
||||
import { checkAlarmExists } from '../lib/util';
|
||||
|
||||
const EXTENSION_UNINSTALL_URL = 'https://metamask.io/uninstalled';
|
||||
|
||||
@ -144,16 +147,49 @@ export default class MetaMetricsController {
|
||||
// within the fragment's timeout window. When creating a new event fragment
|
||||
// a timeout can be specified that will cause an abandoned event to be
|
||||
// tracked if the event isn't progressed within that amount of time.
|
||||
setInterval(() => {
|
||||
Object.values(this.store.getState().fragments).forEach((fragment) => {
|
||||
if (
|
||||
fragment.timeout &&
|
||||
Date.now() - fragment.lastUpdated / 1000 > fragment.timeout
|
||||
) {
|
||||
this.finalizeEventFragment(fragment.id, { abandoned: true });
|
||||
if (isManifestV3) {
|
||||
/* eslint-disable no-undef */
|
||||
chrome.alarms.getAll((alarms) => {
|
||||
const hasAlarm = checkAlarmExists(
|
||||
alarms,
|
||||
METAMETRICS_FINALIZE_EVENT_FRAGMENT_ALARM,
|
||||
);
|
||||
|
||||
if (!hasAlarm) {
|
||||
chrome.alarms.create(METAMETRICS_FINALIZE_EVENT_FRAGMENT_ALARM, {
|
||||
delayInMinutes: 1,
|
||||
periodInMinutes: 1,
|
||||
});
|
||||
}
|
||||
});
|
||||
}, SECOND * 30);
|
||||
chrome.alarms.onAlarm.addListener(() => {
|
||||
chrome.alarms.getAll((alarms) => {
|
||||
const hasAlarm = checkAlarmExists(
|
||||
alarms,
|
||||
METAMETRICS_FINALIZE_EVENT_FRAGMENT_ALARM,
|
||||
);
|
||||
|
||||
if (hasAlarm) {
|
||||
this.finalizeAbandonedFragments();
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
setInterval(() => {
|
||||
this.finalizeAbandonedFragments();
|
||||
}, SECOND * 30);
|
||||
}
|
||||
}
|
||||
|
||||
finalizeAbandonedFragments() {
|
||||
Object.values(this.store.getState().fragments).forEach((fragment) => {
|
||||
if (
|
||||
fragment.timeout &&
|
||||
Date.now() - fragment.lastUpdated / 1000 > fragment.timeout
|
||||
) {
|
||||
this.finalizeEventFragment(fragment.id, { abandoned: true });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
generateMetaMetricsId() {
|
||||
|
@ -152,6 +152,17 @@ function getChainType(chainId) {
|
||||
return 'custom';
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the alarmname exists in the list
|
||||
*
|
||||
* @param {Array} alarmList
|
||||
* @param alarmName
|
||||
* @returns
|
||||
*/
|
||||
function checkAlarmExists(alarmList, alarmName) {
|
||||
return alarmList.some((alarm) => alarm.name === alarmName);
|
||||
}
|
||||
|
||||
export {
|
||||
getPlatform,
|
||||
getEnvironmentType,
|
||||
@ -161,4 +172,5 @@ export {
|
||||
addHexPrefix,
|
||||
bnToHex,
|
||||
getChainType,
|
||||
checkAlarmExists,
|
||||
};
|
||||
|
@ -1 +1,3 @@
|
||||
export const AUTO_LOCK_TIMEOUT_ALARM = 'AUTO_LOCK_TIMEOUT_ALARM';
|
||||
export const METAMETRICS_FINALIZE_EVENT_FRAGMENT_ALARM =
|
||||
'METAMETRICS_FINALIZE_EVENT_FRAGMENT_ALARM';
|
||||
|
Loading…
Reference in New Issue
Block a user