summaryrefslogtreecommitdiffstats
path: root/toolkit/components/backgroundtasks/tests/BackgroundTask_targeting.sys.mjs
blob: a879265b446c82f94db36445e3ce7345fa8ed055 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

import { EXIT_CODE } from "resource://gre/modules/BackgroundTasksManager.sys.mjs";

const { ASRouterTargeting } = ChromeUtils.import(
  "resource://activity-stream/lib/ASRouterTargeting.jsm"
);

// Background tasks are "live" with a temporary profile that doesn't map common
// network preferences to https://mochi.test in the way that regular testing
// profiles do.  Therefore, certain targeting getters will fail due to non-local
// network connections.  Exclude these.
const EXCLUDED_NAMES = [
  "region", // Queries Mozilla Location Services.
  "needsUpdate", // Queries Balrog update server.
];

/**
 * Return 0 (success) if all targeting getters succeed, 11 (failure)
 * otherwise.
 */
export async function runBackgroundTask(commandLine) {
  let exitCode = EXIT_CODE.SUCCESS;

  // Can't use `ASRouterTargeting.getEnvironmentSnapshot`, since that
  // ignores errors, and this is testing that every getter succeeds.
  let target = ASRouterTargeting.Environment;
  let environment = {};
  for (let name of Object.keys(target)) {
    if (EXCLUDED_NAMES.includes(name)) {
      continue;
    }

    try {
      console.debug(`Fetching property ${name}`);
      environment[name] = await target[name];
    } catch (e) {
      exitCode = 11;
      console.error(`Caught exception for property ${name}:`, e);
    }
  }

  console.log(`ASRouterTargeting.Environment:`, environment);

  console.error(`runBackgroundTask: exiting with status ${exitCode}`);

  return exitCode;
}