Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/toolkit/mozapps/extensions/test/xpcshell/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 7 kB image not shown  

Quelle  test_seen.js   Sprache: JAVA

 
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 */


const ID = "addon@tests.mozilla.org";

let profileDir = gProfD.clone();
profileDir.append("extensions");

// By default disable add-ons from the profile and the system-wide scope
const SCOPES = AddonManager.SCOPE_PROFILE | AddonManager.SCOPE_SYSTEM;
Services.prefs.setIntPref("extensions.enabledScopes", SCOPES);
Services.prefs.setIntPref("extensions.autoDisableScopes", SCOPES);

createAppInfo("xpcshell@tests.mozilla.org""XPCShell""1""1.9.2");

const XPIS = {};

// Installing an add-on through the API should mark it as seen
add_task(async function () {
  await promiseStartupManager();

  for (let n of [1, 2]) {
    XPIS[n] = await createTempWebExtensionFile({
      manifest: {
        name: "Test",
        version: `${n}.0`,
        browser_specific_settings: { gecko: { id: ID } },
      },
    });
  }

  await promiseInstallFile(XPIS[1]);

  let addon = await promiseAddonByID(ID);
  Assert.equal(addon.version, "1.0");
  Assert.ok(!addon.foreignInstall);
  Assert.ok(addon.seen);

  await promiseRestartManager();

  addon = await promiseAddonByID(ID);
  Assert.ok(!addon.foreignInstall);
  Assert.ok(addon.seen);

  // Installing an update should retain that
  await promiseInstallFile(XPIS[2]);

  addon = await promiseAddonByID(ID);
  Assert.equal(addon.version, "2.0");
  Assert.ok(!addon.foreignInstall);
  Assert.ok(addon.seen);

  await promiseRestartManager();

  addon = await promiseAddonByID(ID);
  Assert.ok(!addon.foreignInstall);
  Assert.ok(addon.seen);

  await addon.uninstall();

  await promiseShutdownManager();
});

// Sideloading an add-on in the systemwide location should mark it as unseen
add_task(async function () {
  let savedStartupScanScopes = Services.prefs.getIntPref(
    "extensions.startupScanScopes"
  );
  Services.prefs.setIntPref("extensions.startupScanScopes", 0);
  Services.prefs.setIntPref(
    "extensions.sideloadScopes",
    AddonManager.SCOPE_ALL
  );

  let systemParentDir = gTmpD.clone();
  systemParentDir.append("systemwide-extensions");
  registerDirectory("XRESysSExtPD", systemParentDir.clone());
  registerCleanupFunction(() => {
    systemParentDir.remove(true);
  });

  let systemDir = systemParentDir.clone();
  systemDir.append(Services.appinfo.ID);

  let path = await manuallyInstall(XPIS[1], systemDir, ID);
  // Make sure the startup code will detect sideloaded updates
  setExtensionModifiedTime(path, Date.now() - 10000);

  await promiseStartupManager();
  await AddonManagerPrivate.getNewSideloads();

  let addon = await promiseAddonByID(ID);
  Assert.equal(addon.version, "1.0");
  Assert.ok(addon.foreignInstall);
  Assert.ok(!addon.seen);

  await promiseRestartManager();

  addon = await promiseAddonByID(ID);
  Assert.ok(addon.foreignInstall);
  Assert.ok(!addon.seen);

  await promiseShutdownManager();
  Services.obs.notifyObservers(path, "flush-cache-entry");
  path.remove(true);

  Services.prefs.setIntPref(
    "extensions.startupScanScopes",
    savedStartupScanScopes
  );
  Services.prefs.clearUserPref("extensions.sideloadScopes");
});

// Sideloading an add-on in the profile should mark it as unseen and it should
// remain unseen after an update is sideloaded.
add_task(async function () {
  let path = await manuallyInstall(XPIS[1], profileDir, ID);
  // Make sure the startup code will detect sideloaded updates
  setExtensionModifiedTime(path, Date.now() - 10000);

  await promiseStartupManager();

  let addon = await promiseAddonByID(ID);
  Assert.equal(addon.version, "1.0");
  Assert.ok(addon.foreignInstall);
  Assert.ok(!addon.seen);

  await promiseRestartManager();

  addon = await promiseAddonByID(ID);
  Assert.ok(addon.foreignInstall);
  Assert.ok(!addon.seen);

  await promiseShutdownManager();

  // Sideloading an update shouldn't change the state
  manuallyUninstall(profileDir, ID);
  await manuallyInstall(XPIS[2], profileDir, ID);
  setExtensionModifiedTime(path, Date.now());

  await promiseStartupManager();

  addon = await promiseAddonByID(ID);
  Assert.equal(addon.version, "2.0");
  Assert.ok(addon.foreignInstall);
  Assert.ok(!addon.seen);

  await addon.uninstall();
  await promiseShutdownManager();
});

// Sideloading an add-on in the profile should mark it as unseen and it should
// remain unseen after a regular update.
add_task(async function () {
  let path = await manuallyInstall(XPIS[1], profileDir, ID);
  // Make sure the startup code will detect sideloaded updates
  setExtensionModifiedTime(path, Date.now() - 10000);

  await promiseStartupManager();

  let addon = await promiseAddonByID(ID);
  Assert.equal(addon.version, "1.0");
  Assert.ok(addon.foreignInstall);
  Assert.ok(!addon.seen);

  await promiseRestartManager();

  addon = await promiseAddonByID(ID);
  Assert.ok(addon.foreignInstall);
  Assert.ok(!addon.seen);

  // Updating through the API shouldn't change the state
  let install = await promiseInstallFile(XPIS[2]);
  Assert.equal(install.state, AddonManager.STATE_INSTALLED);
  Assert.ok(
    !hasFlag(install.addon.pendingOperations, AddonManager.PENDING_INSTALL)
  );

  addon = install.addon;
  Assert.ok(addon.foreignInstall);
  Assert.ok(!addon.seen);

  await promiseRestartManager();

  addon = await promiseAddonByID(ID);
  Assert.equal(addon.version, "2.0");
  Assert.ok(addon.foreignInstall);
  Assert.ok(!addon.seen);

  await addon.uninstall();
  await promiseShutdownManager();
});

// After a sideloaded addon has been seen, sideloading an update should
// not reset it to unseen.
add_task(async function () {
  let path = await manuallyInstall(XPIS[1], profileDir, ID);
  // Make sure the startup code will detect sideloaded updates
  setExtensionModifiedTime(path, Date.now() - 10000);

  await promiseStartupManager();

  let addon = await promiseAddonByID(ID);
  Assert.equal(addon.version, "1.0");
  Assert.ok(addon.foreignInstall);
  Assert.ok(!addon.seen);
  addon.markAsSeen();
  Assert.ok(addon.seen);

  await promiseRestartManager();

  addon = await promiseAddonByID(ID);
  Assert.ok(addon.foreignInstall);
  Assert.ok(addon.seen);

  await promiseShutdownManager();

  // Sideloading an update shouldn't change the state
  manuallyUninstall(profileDir, ID);
  await manuallyInstall(XPIS[2], profileDir, ID);
  setExtensionModifiedTime(path, Date.now());

  await promiseStartupManager();

  addon = await promiseAddonByID(ID);
  Assert.equal(addon.version, "2.0");
  Assert.ok(addon.foreignInstall);
  Assert.ok(addon.seen);

  await addon.uninstall();
  await promiseShutdownManager();
});

// After a sideloaded addon has been seen, manually applying an update should
// not reset it to unseen.
add_task(async function () {
  let path = await manuallyInstall(XPIS[1], profileDir, ID);
  // Make sure the startup code will detect sideloaded updates
  setExtensionModifiedTime(path, Date.now() - 10000);

  await promiseStartupManager();

  let addon = await promiseAddonByID(ID);
  Assert.equal(addon.version, "1.0");
  Assert.ok(addon.foreignInstall);
  Assert.ok(!addon.seen);
  addon.markAsSeen();
  Assert.ok(addon.seen);

  await promiseRestartManager();

  addon = await promiseAddonByID(ID);
  Assert.ok(addon.foreignInstall);
  Assert.ok(addon.seen);

  // Updating through the API shouldn't change the state
  let install = await promiseInstallFile(XPIS[2]);
  Assert.equal(install.state, AddonManager.STATE_INSTALLED);
  Assert.ok(
    !hasFlag(install.addon.pendingOperations, AddonManager.PENDING_INSTALL)
  );

  addon = install.addon;
  Assert.ok(addon.foreignInstall);
  Assert.ok(addon.seen);

  await promiseRestartManager();

  addon = await promiseAddonByID(ID);
  Assert.equal(addon.version, "2.0");
  Assert.ok(addon.foreignInstall);
  Assert.ok(addon.seen);

  await addon.uninstall();
  await promiseShutdownManager();
});

Messung V0.5
C=93 H=97 G=94

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.