in src/background/background-init.ts [52:226]
async function initialize(): Promise<void> {
const userAgentParser = new UAParser(window.navigator.userAgent);
const browserAdapterFactory = new BrowserAdapterFactory(userAgentParser);
const browserAdapter = browserAdapterFactory.makeFromUserAgent();
// This only removes keys that are unused by current versions of the extension, so it's okay for it to race with everything else
const cleanKeysFromStoragePromise = cleanKeysFromStorage(
browserAdapter,
deprecatedStorageDataKeys,
);
const windowUtils = new WindowUtils();
const urlValidator = new UrlValidator(browserAdapter);
const indexedDBInstance: IndexedDBAPI = new IndexedDBUtil(getIndexedDBStore());
const indexedDBDataKeysToFetch = [
IndexedDBDataKeys.assessmentStore,
IndexedDBDataKeys.userConfiguration,
];
// These can run concurrently, both because they are read-only and because they use different types of underlying storage
const persistedDataPromise = getPersistedData(indexedDBInstance, indexedDBDataKeysToFetch);
const userDataPromise = browserAdapter.getUserData(storageDataKeys);
const persistedData = await persistedDataPromise;
const userData = await userDataPromise;
const assessmentsProvider = Assessments;
const telemetryDataFactory = new TelemetryDataFactory();
const logger = createDefaultLogger();
const telemetryLogger = new TelemetryLogger(logger);
const { installationData } = userData;
const applicationTelemetryDataFactory = getApplicationTelemetryDataFactory(
installationData,
browserAdapter,
browserAdapter,
title,
);
const consoleTelemetryClient = new ConsoleTelemetryClient(
applicationTelemetryDataFactory,
telemetryLogger,
);
const debugToolsTelemetryClient = new DebugToolsTelemetryClient(
browserAdapter,
applicationTelemetryDataFactory,
);
debugToolsTelemetryClient.initialize();
const telemetryClient = getTelemetryClient(applicationTelemetryDataFactory, AppInsights, [
consoleTelemetryClient,
debugToolsTelemetryClient,
]);
const usageLogger = new UsageLogger(browserAdapter, DateProvider.getCurrentDate, logger);
const telemetryEventHandler = new TelemetryEventHandler(telemetryClient);
const browserSpec = new NavigatorUtils(window.navigator, logger).getBrowserSpec();
const toolData = createToolData(
'axe-core',
AxeInfo.Default.version,
toolName,
browserAdapter.getVersion(),
browserSpec,
);
const globalContext = await GlobalContextFactory.createContext(
browserAdapter,
telemetryEventHandler,
userData,
assessmentsProvider,
telemetryDataFactory,
indexedDBInstance,
persistedData,
IssueFilingServiceProviderImpl,
toolData,
browserAdapter,
browserAdapter,
logger,
);
telemetryLogger.initialize(globalContext.featureFlagsController);
const telemetryStateListener = new TelemetryStateListener(
globalContext.stores.userConfigurationStore,
telemetryEventHandler,
);
telemetryStateListener.initialize();
const messageBroadcasterFactory = new BrowserMessageBroadcasterFactory(browserAdapter, logger);
const detailsViewController = new ExtensionDetailsViewController(browserAdapter);
const tabToContextMap: TabToContextMap = {};
const visualizationConfigurationFactory = new WebVisualizationConfigurationFactory();
const notificationCreator = new NotificationCreator(
browserAdapter,
visualizationConfigurationFactory,
logger,
);
const keyboardShortcutHandler = new KeyboardShortcutHandler(
tabToContextMap,
browserAdapter,
urlValidator,
notificationCreator,
visualizationConfigurationFactory,
telemetryDataFactory,
globalContext.stores.userConfigurationStore,
browserAdapter,
logger,
usageLogger,
);
keyboardShortcutHandler.initialize();
const messageDistributor = new MessageDistributor(
globalContext,
tabToContextMap,
browserAdapter,
logger,
);
messageDistributor.initialize();
const targetTabController = new TargetTabController(
browserAdapter,
visualizationConfigurationFactory,
);
const promiseFactory = createDefaultPromiseFactory();
const tabContextFactory = new TabContextFactory(
visualizationConfigurationFactory,
telemetryEventHandler,
targetTabController,
notificationCreator,
promiseFactory,
logger,
usageLogger,
windowUtils,
);
const targetPageController = new TargetPageController(
tabToContextMap,
messageBroadcasterFactory,
browserAdapter,
detailsViewController,
tabContextFactory,
logger,
);
await targetPageController.initialize();
const devToolsBackgroundListener = new DevToolsListener(tabToContextMap, browserAdapter);
devToolsBackgroundListener.initialize();
const postMessageContentRepository = new PostMessageContentRepository(
DateProvider.getCurrentDate,
);
const postMessageContentHandler = new PostMessageContentHandler(
postMessageContentRepository,
browserAdapter,
);
postMessageContentHandler.initialize();
window.insightsFeatureFlags = globalContext.featureFlagsController;
window.insightsUserConfiguration = globalContext.userConfigurationController;
await cleanKeysFromStoragePromise;
}