Fingerprint Pro Internals
Collector s23

Chromium feature vote

counts ClipboardItem, PerformanceEventTiming and RTCSctpTransport

Group: JavaScript engine · signal map · run it live

// s23 — sig_s23_clipboardItem
// module cm, stage2, codes 0 -1 -2 -3
//
// measures
//   window.ClipboardItem window.PerformanceEventTiming window.RTCSctpTransport
//   navigator.webkitPersistentStorage navigator.webkitTemporaryStorage window.BatteryManager
//   window.webkitMediaStream window.webkitResolveLocalFileSystemURL window.webkitSpeechGrammar
//   navigator.vendor window TextEncoder
// engine
//   ArrayBuffer Object.getOwnPropertyNames() Object.getPrototypeOf() Promise.race() Uint32Array
//   Uint8Array Promise undefined
// reported value
//   null value
// probes
//   "Google" "webkitRequestFileSystem"
// compares against
//   == "function" === 0 >= 2 >= 5 in "BatteryManager" in "ClipboardItem" in "PerformanceEventTiming"
//   in "RTCSctpTransport" in "webkitMediaStream" in "webkitPersistentStorage"
//   in "webkitResolveLocalFileSystemURL" in "webkitSpeechGrammar" in "webkitTemporaryStorage"
// decides on
//   fn11() && h_s23_clipboardItem()
//   v689 === null
//   v689 === undefined
//   fn11: fn9(["webkitPersistentStorage" in navigator, "webkitTemporaryStorage" in navigator, (navigator.vendor || "").indexOf("Google") === 0, "webkitResolveLocalFileSys…
//   h_s23_clipboardItem: fn36(["ClipboardItem" in window, "PerformanceEventTiming" in window, "RTCSctpTransport" in window]) >= 2
//   fn158: Date.now() < v1036
//   readVaultedProp: typeof v316 == "function"
//
// 2 owned helpers inlined below.
// shared with other collectors, see agent.clean.js:
//   asUint8Array:6496 crc32OfBytes:4943 fn11:419 fn158:8266 fn167:8899 fn36:1793 fn48:3370 fn9:252
//   readVaultedProp:1674 resolveNameByHash:7015 stringToBytes:7901

// agent.clean.js:4729
function h_s23_clipboardItem() {
  return (
    fn36([
      "ClipboardItem" in window,
      "PerformanceEventTiming" in window,
      "RTCSctpTransport" in window,
    ]) >= 2
  );
}

// agent.clean.js:4887
async function sig_s23_clipboardItem() {
  if (fn11() && h_s23_clipboardItem()) {
    return { s: -3, v: null };
  }
  const v689 = await Promise.race([fn167(100, null), h_s23_webkitRequestFileSystem()]);
  if (v689 === null) {
    return { s: -2, v: null };
  }
  if (v689 === undefined) {
    return { s: -1, v: null };
  }
  return { s: 0, v: v689 };
}

// agent.clean.js:7298
async function h_s23_webkitRequestFileSystem() {
  const v964 = readVaultedProp(window, "webkitRequestFileSystem");
  if (v964) {
    return new Promise((arg829) => {
      v964(
        0,
        1,
        () => arg829(true),
        () => arg829(false),
      );
    });
  }
}