Commit f648e66f authored by Michael Kaply's avatar Michael Kaply
Browse files

Bug 1518663 - If policy extension download fails, try again. r=Felipe

Differential Revision: https://phabricator.services.mozilla.com/D25830

--HG--
extra : moz-landing-system : lando
parent 5d693629
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -552,6 +552,7 @@ var Policies = {
                onDownloadFailed: () => {
                  install.removeListener(listener);
                  log.error(`Download failed - ${location}`);
                  clearRunOnceModification("extensionsInstall");
                },
                onInstallFailed: () => {
                  install.removeListener(listener);
@@ -1143,6 +1144,16 @@ async function runOncePerModification(actionName, policyValue, callback) {
  return callback();
}

/**
 * clearRunOnceModification
 *
 * Helper function that clears a runOnce policy.
*/
function clearRunOnceModification(actionName) {
  let prefName = `browser.policies.runOncePerModification.${actionName}`;
  Services.prefs.clearUserPref(prefName);
}

let gChromeURLSBlocked = false;

// If any about page is blocked, we block the loading of all
+21 −0
Original line number Diff line number Diff line
@@ -92,6 +92,27 @@ add_task(async function test_addon_uninstall() {
  is(addon, null, "Addon should be uninstalled.");
});

add_task(async function test_addon_download_failure() {
  // Test that if the download fails, the runOnce pref
  // is cleared so that the dowbnload will happen again

  let installPromise = wait_for_addon_install();
  await setupPolicyEngineWithJson({
    "policies": {
      "Extensions": {
        "Install": [
          `${BASE_URL}/policytest_invalid.xpi`,
        ],
      },
    },
  });

  try {
    await installPromise;
  } catch (e) {}
  is(Services.prefs.prefHasUserValue("browser.policies.runOncePerModification.extensionsInstall"), false, "runOnce pref should be unset");
});

function wait_for_addon_install() {
  return new Promise((resolve, reject) => {
      AddonManager.addInstallListener({