Fingerprint Pro Internals
Collector s214

Storage buckets

the storage buckets API and the buckets already present

Group: Storage · signal map · run it live

// s214 — sig_s214_storageBuckets
// module cm, stage2, codes 0 -1 -2 -3 -101
//
// measures
//   navigator.storageBuckets navigator.storageBuckets.delete navigator.storageBuckets.delete()
//   navigator.storageBuckets.open navigator.storageBuckets.open() DOMException
//   document.removeEventListener("visibilitychange") document.addEventListener("visibilitychange")
//   document.hidden TextEncoder clearTimeout() setTimeout()
// engine
//   Math.random() Math.ceil() Object.assign() TypeError ArrayBuffer Object.getOwnPropertyNames()
//   Object.getPrototypeOf() Promise.race()
// reported value
//   null value
// probes
//   "1" "96375" "error" "function" "number" "object"
// compares against
//   !== "function" !== "number" !== "object" <= 0 == "function" === "function"
// decides on
//   fn142: !((v957 = arg822.cancel) == null)
//   fn157: v1032 = undefined, !v1034
//   fn157: v1033-- <= 0
//   fn157: !v1034
//   fn157: !(v1032 == null)
//   h_s214_storageBuckets: !storageBuckets || typeof storageBuckets !== "object" || typeof storageBuckets.open !== "function"
//   h_s214_storageBuckets: fn118(v120)
//   h_s214_storageBuckets: indexedDB === undefined || typeof indexedDB.open !== "function" || typeof v119.estimate !== "function"
//   h_s214_storageBuckets: usage === undefined || typeof usage !== "number"
//   h_s214_storageBuckets: typeof storageBuckets.delete === "function"
//   visibilitychange: !(v869 || v868)
//   visibilitychange: !v869 && v868
//   fn118: (arg732 instanceof DOMException || arg732 instanceof TypeError) && (v10.test(arg732.message) || v12.test(arg732.message) || v11.test(arg732.message) || v13.test…
//   readVaultedProp: typeof v316 == "function"
//
// 1 owned helper inlined below.
// shared with other collectors, see agent.clean.js:
//   asUint8Array:6496 crc32OfBytes:4943 fn118:6312 fn142:7227 fn157:8239 fn158:8266 fn31:1619
//   fn48:3370 readVaultedProp:1674 resolveNameByHash:7015 stringToBytes:7901 v10:3418 v11:3419
//   v12:3420 v13:3421 v14:3422 visibilitychange:6423

// agent.clean.js:597
async function h_s214_storageBuckets() {
  const storageBuckets = navigator.storageBuckets;
  if (
    !storageBuckets ||
    typeof storageBuckets !== "object" ||
    typeof storageBuckets.open !== "function"
  ) {
    return { s: -1, v: null };
  }
  const v118 = Math.random().toString().split(".")[1];
  let v119;
  try {
    v119 = await storageBuckets.open(v118);
  } catch (v120) {
    if (fn118(v120)) {
      return { s: -101, v: null };
    }
    throw v120;
  }
  const indexedDB = v119.indexedDB;
  if (
    indexedDB === undefined ||
    typeof indexedDB.open !== "function" ||
    typeof v119.estimate !== "function"
  ) {
    return { s: -1, v: null };
  }
  try {
    const v121 = await new Promise((arg70, arg71) => {
        try {
          const v122 = indexedDB.open("1");
          v122.onupgradeneeded = () => {
            v122.result.createObjectStore("s", { keyPath: "k" });
          };
          v122.onsuccess = async () => {
            v122.result.close();
            arg70(await v119.estimate());
          };
          v122.onerror = () => {
            arg71(readVaultedProp(v122, "error"));
          };
        } catch (v123) {
          arg71(v123);
        }
      }),
      usage = v121?.usage;
    if (usage === undefined || typeof usage !== "number") {
      return { s: -3, v: null };
    }
    return { s: 0, v: usage };
  } finally {
    if (typeof storageBuckets.delete === "function") {
      storageBuckets.delete(v118).catch(() => {});
    }
  }
}

// agent.clean.js:4302
function sig_s214_storageBuckets() {
  return fn142(fn157(400, 4, { s: -2, v: null }), h_s214_storageBuckets);
}