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

Quelle  test_storagePressure.js   Sprache: unbekannt

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


/**
 * This test is mainly to verify that the storage pressure event is fired when
 * the eviction process is not able to free some space when a quota client
 * attempts to write over the global limit or when the global limit is reduced
 * below the global usage.
 */


const { TestUtils } = ChromeUtils.importESModule(
  "resource://testing-common/TestUtils.sys.mjs"
);

loadScript("dom/quota/test/common/file.js");

async function awaitStoragePressure() {
  const [subject] = await TestUtils.topicObserved(
    "QuotaManager::StoragePressure"
  );
  const usage = subject.QueryInterface(Ci.nsISupportsPRUint64).data;
  return usage;
}

async function testSteps() {
  const globalLimitKB = 2;

  const principal = getPrincipal("https://example.com");

  info("Setting limits");

  setGlobalLimit(globalLimitKB);

  info("Initializing");

  let request = init();
  await requestFinished(request);

  info("Initializing temporary storage");

  request = initTemporaryStorage();
  await requestFinished(request);

  info("Persisting and filling an origin");

  // We need to persist the origin first to omit the group limit checks.
  // Otherwise, we would have to fill five separate origins.
  request = persist(principal);
  await requestFinished(request);

  let database = getSimpleDatabase(principal);

  request = database.open("data");
  await requestFinished(request);

  try {
    request = database.write(getBuffer(globalLimitKB * 1024));
    await requestFinished(request);

    ok(true"Should not have thrown");
  } catch (ex) {
    ok(false"Should not have thrown");
  }

  info("Testing storage pressure by writing over the global limit");

  info("Storing one more byte to get the storage pressure event while writing");

  let promiseStoragePressure = awaitStoragePressure();

  try {
    request = database.write(getBuffer(1));
    await requestFinished(request);

    ok(false"Should have thrown");
  } catch (e) {
    ok(true"Should have thrown");
    Assert.strictEqual(
      e.resultCode,
      NS_ERROR_FILE_NO_DEVICE_SPACE,
      "Threw right result code"
    );
  }

  info("Checking the storage pressure event");

  let usage = await promiseStoragePressure;
  Assert.equal(usage, globalLimitKB * 1024"Got correct usage");

  info("Testing storage pressure by reducing the global limit");

  info(
    "Reducing the global limit to get the storage pressuse event while the" +
      " temporary storage is being initialized"
  );

  setGlobalLimit(globalLimitKB - 1);

  request = reset();
  await requestFinished(request);

  info("Initializing");

  request = init();
  await requestFinished(request);

  promiseStoragePressure = awaitStoragePressure();

  info("Initializing temporary storage");

  request = initTemporaryStorage();
  await requestFinished(request);

  info("Checking the storage pressure event");

  usage = await promiseStoragePressure;
  Assert.equal(usage, globalLimitKB * 1024"Got correct usage");

  info("Resetting limits");

  resetGlobalLimit();

  request = reset();
  await requestFinished(request);
}

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

[zur Elbe Produktseite wechseln0.106QuellennavigatorsAnalyse erneut starten2026-06-05]