{
  "collectedAt": "2026-10-20T07:14:17.214Z",
  "href": "https://openpwa.net/lab/device-tests/#t6",
  "title": "Device test lab — OpenPWA",
  "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
  "platform": "iPhone",
  "vendor": "Apple Computer, Inc.",
  "language": "zh-CN",
  "languages": [
    "zh-CN"
  ],
  "maxTouchPoints": 5,
  "hardwareConcurrency": 4,
  "deviceMemory": "undefined",
  "navigator.standalone": false,
  "displayModes": {
    "browser": true,
    "minimal-ui": false,
    "standalone": false,
    "fullscreen": false,
    "window-controls-overlay": false,
    "picture-in-picture": false,
    "application": false
  },
  "features": {
    "'serviceWorker' in navigator": true,
    "serviceWorker.controller": true,
    "serviceWorkerRegistrations": [
      {
        "scope": "https://openpwa.net/demo/",
        "active": true,
        "state": "activated"
      },
      {
        "scope": "https://openpwa.net/lab/device-tests/",
        "active": true,
        "state": "activated"
      }
    ],
    "'PushManager' in window": false,
    "'pushManager' in window": true,
    "typeof window.pushManager?.subscribe": "function",
    "typeof window.pushManager?.permissionState": "function",
    "typeof window.pushManager?.getSubscription": "function",
    "PushManager.supportedContentEncodings": "n/a",
    "'Notification' in window": false,
    "Notification.permission": "n/a",
    "typeof Notification.requestPermission": "undefined",
    "'setAppBadge' in navigator": false,
    "'clearAppBadge' in navigator": false,
    "'install' in navigator": false,
    "typeof navigator.install": "undefined",
    "'BeforeInstallPromptEvent' in window": false,
    "'onbeforeinstallprompt' in window": false,
    "'onappinstalled' in window": false,
    "'getInstalledRelatedApps' in navigator": false,
    "'share' in navigator": true,
    "'canShare' in navigator": true,
    "canShare({url})": true,
    "canShare({files:[txt]})": true,
    "'launchQueue' in window": false,
    "'showOpenFilePicker' in window": false,
    "'showSaveFilePicker' in window": false,
    "'showDirectoryPicker' in window": false,
    "typeof navigator.storage?.getDirectory (OPFS)": "function",
    "'storage' in navigator": true,
    "storage.estimate()": {
      "quota": 41231686042,
      "usage": 86592
    },
    "storage.persisted()": false,
    "typeof navigator.storage?.persist": "function",
    "'cookieStore' in window": true,
    "'CookieStore' in window": true,
    "'BroadcastChannel' in window": true,
    "'wakeLock' in navigator": true,
    "'contacts' in navigator": false,
    "'getBattery' in navigator": false,
    "'vibrate' in navigator": false,
    "'bluetooth' in navigator": false,
    "'usb' in navigator": false,
    "'serial' in navigator": false,
    "'hid' in navigator": false,
    "'NDEFReader' in window": false,
    "'PaymentRequest' in window": true,
    "'PublicKeyCredential' in window": true,
    "'IdentityCredential' in window": false,
    "'DigitalCredential' in window": false,
    "'credentials' in navigator": true,
    "'clipboard' in navigator": true,
    "'mediaSession' in navigator": true,
    "'periodicSync' in ServiceWorkerRegistration.prototype": false,
    "'sync' in ServiceWorkerRegistration.prototype": false,
    "'navigationPreload' in ServiceWorkerRegistration.prototype": true,
    "'windowControlsOverlay' in navigator": false,
    "'documentPictureInPicture' in window": false,
    "'ViewTransition' in window": true,
    "'startViewTransition' in document": true,
    "'navigation' in window": false,
    "'scheduler' in window": false,
    "'userActivation' in navigator": true,
    "'virtualKeyboard' in navigator": false,
    "'screen.orientation.lock'": "undefined",
    "'requestFullscreen' in documentElement": false,
    "'webkitRequestFullscreen' in documentElement": false,
    "'xr' in navigator": false
  },
  "css": {
    "env(safe-area-inset-top)": true,
    "env(titlebar-area-height)": true,
    "env(viewport-segment-width 0 0)": false,
    "height: 100dvh": true,
    "@supports selector(:has(a))": true,
    "color: oklch()": true,
    "safeAreaInsetsComputed": {
      "top": "0px",
      "right": "0px",
      "bottom": "0px",
      "left": "0px"
    }
  },
  "viewportSegments": {
    "window.viewport": "undefined",
    "window.viewport?.segments": "n/a",
    "(horizontal-viewport-segments: 1)": false,
    "(horizontal-viewport-segments: 2)": false,
    "(vertical-viewport-segments: 1)": false,
    "(vertical-viewport-segments: 2)": false,
    "getWindowSegments": "undefined"
  },
  "screen": {
    "width": 402,
    "height": 874,
    "availWidth": 402,
    "availHeight": 874,
    "colorDepth": 24,
    "orientation": "portrait-primary",
    "angle": 0
  },
  "devicePixelRatio": 3,
  "innerWidth": 402,
  "innerHeight": 678,
  "outerWidth": 402,
  "outerHeight": 874,
  "documentElementClient": {
    "w": 402,
    "h": 678
  },
  "visualViewport": {
    "width": 402,
    "height": 678,
    "scale": 1,
    "offsetTop": 0,
    "offsetLeft": 0,
    "pageTop": 2091
  },
  "mediaQueries": {
    "(prefers-color-scheme: dark)": false,
    "(prefers-reduced-motion: reduce)": false,
    "(prefers-contrast: more)": false,
    "(dynamic-range: high)": true,
    "(color-gamut: p3)": true,
    "(hover: hover)": false,
    "(pointer: coarse)": true,
    "(orientation: portrait)": true
  },
  "declarations": {
    "manifest": "/lab/device-tests/manifest.webmanifest",
    "appleTouchIcon": [
      "/lab/device-tests/icons/ati-180.png"
    ],
    "icons": [
      "/lab/device-tests/icons/favicon-96.png"
    ],
    "themeColor": "#161616",
    "appleCapable": "yes",
    "appleStatusBarStyle": null,
    "appleTitle": "PWA Lab",
    "viewportMeta": "width=device-width, initial-scale=1"
  },
  "pageText": "OpenPWA device test lab (not indexed)\nDevice test lab\n\nA test harness for the openpwa.net device checklist. It has its own manifest, scope (/lab/device-tests/) and service worker, separate from /demo/. Nothing on this page is sent anywhere: no analytics, no third-party requests, no server.\n\ncontext: browser tab (display-mode: browser; navigator.standalone: false)\n\nT1: a page with no manifest\n/lab/device-tests/t1/no-manifest/ declares nothing an installer reads: no manifest, no apple-touch-icon, no web-app-capable meta, no service worker. Add that page to the Home Screen from Safari (not this one, which has a manifest), open it from the icon and screenshot it. It prints navigator.standalone, every display-mode query and location.href in large type, so Web Inspector is not needed.\n\nT3: which icon did the Home Screen use?\nEach declared icon is a different colour with its size printed on it. Add this page to the Home Screen and read the label off the icon.\n\n180 red: apple-touch-icon\n192 blue: manifest, purpose any\n512 green: manifest, purpose any\nM192 purple: manifest, maskable\nM512 teal: manifest, maskable\nFAV grey: rel=icon\nThis page declares the apple-touch-icon (180) and four manifest icons. A page screenshot or a letter tile means none was used. Second app, manifest icons only (no apple-touch-icon): /lab/device-tests/t3/manifest-only/.\n\nT4: status bar and top blur variants\nEvery variant has numbered lines to scroll under the status bar and prints its own geometry. The first five open inside this app when you tap them from the installed lab (same scope). The three status-bar-style variants are separate apps: add each one to the Home Screen from Safari, because the meta tag is read when the app is added or launched.\n\nVariant\tTop element\tOpen\nbaseline\tnone fixed; header scrolls away\topen\nfixed\tposition: fixed, 56 px, full width, top 0\topen\nsticky\tposition: sticky, 56 px, full width\topen\nsafe-area\tfixed, viewport-fit=cover, padded by env(safe-area-inset-top)\topen\nthreshold\tfixed bar with buttons for height, width and top offset\topen\nsbs-default\tnone fixed; status-bar-style: default (own app)\topen\nsbs-black\tnone fixed; status-bar-style: black (own app)\topen\nsbs-black-translucent\tnone fixed; black-translucent + viewport-fit=cover (own app)\topen\nT6: storage marker\nWrites one value to localStorage, IndexedDB and a cookie (path /lab/device-tests/). The value starts with TAB or APP for where it was written. Write it in Safari, then add to the Home Screen and read it in the app.\n\nWrite marker here\nClear marker here\nlocalStorage\nTAB-2026-10-20T07:13:46Z\nindexedDB\nTAB-2026-10-20T07:13:46Z\ncookie\nTAB-2026-10-20T07:13:46Z\nT7 and T8: notifications\nThe lab service worker has a notificationclick handler registered twice, with addEventListener and with the onnotificationclick property. Each path writes its own record (IndexedDB, and posted to this page), so the log below shows which one ran and what the tap opened. There is no push server: real push delivery canno",
  "localStorageDump": {
    "openpwa-lab-marker": "TAB-2026-10-20T07:13:46Z",
    "starlight-theme": "",
    "openpwa-demo-lang": "zh"
  },
  "documentCookieNames": [
    "openpwa_lab_marker"
  ],
  "labJsonTextarea": "{\n  \"collectedAt\": \"2026-10-20T07:13:46.800Z\",\n  \"page\": \"https://openpwa.net/lab/device-tests/#t6\",\n  \"referrer\": null,\n  \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n  \"context\": \"browser tab (display-mode: browser; navigator.standalone: false)\",\n  \"navigator.standalone\": false,\n  \"displayModes\": {\n    \"browser\": true,\n    \"minimal-ui\": false,\n    \"standalone\": false,\n    \"fullscreen\": false,\n    \"window-controls-overlay\": false,\n    \"picture-in-picture\": false\n  },\n  \"viewport\": {\n    \"innerWidth\": 402,\n    \"innerHeight\": 678,\n    \"screen\": \"402x874\",\n    \"devicePixelRatio\": 3,\n    \"orientation\": \"portrait-primary\",\n    \"safeAreaInsets\": {\n      \"top\": \"0px\",\n      \"right\": \"0px\",\n      \"bottom\": \"0px\",\n      \"left\": \"0px\"\n    }\n  },\n  \"declarations\": {\n    \"manifest\": \"/lab/device-tests/manifest.webmanifest\",\n    \"appleTouchIcon\": \"/lab/device-tests/icons/ati-180.png\",\n    \"themeColor\": \"#161616\",\n    \"appleStatusBarStyle\": null,\n    \"appleTitle\": \"PWA Lab\",\n    \"viewportMeta\": \"width=device-width, initial-scale=1\"\n  },\n  \"featureDetects\": {\n    \"'serviceWorker' in navigator\": true,\n    \"'Notification' in window\": false,\n    \"Notification.permission\": \"n/a\",\n    \"'PushManager' in window\": false,\n    \"'pushManager' in window (Declarative Web Push)\": true,\n    \"typeof window.pushManager?.subscribe\": \"function\",\n    \"typeof window.pushManager?.permissionState\": \"function\",\n    \"'install' in navigator\": false,\n    \"typeof navigator.install\": \"undefined\",\n    \"'BeforeInstallPromptEvent' in window\": false,\n    \"'onbeforeinstallprompt' in window\": false,\n    \"'getInstalledRelatedApps' in navigator\": false,\n    \"'setAppBadge' in navigator\": false,\n    \"'share' in navigator\": true,\n    \"'storage' in navigator\": true\n  },\n  \"serviceWorker\": {\n    \"registration\": {\n      \"ok\": true,\n      \"detail\": \"registered, scope https://openpwa.net/lab/device-tests/\"\n    },\n    \"controlled\": true,\n    \"exposure\": {\n      \"swVersion\": \"lab-sw-v2\",\n      \"capturedAt\": \"worker start, before any handler property is assigned\",\n      \"'onnotificationclick' in self\": false,\n      \"typeof self.onnotificationclick\": \"undefined\",\n      \"'onnotificationclose' in self\": false,\n      \"'onpush' in self\": false,\n      \"'onpushsubscriptionchange' in self\": false,\n      \"'Notification' in self\": false,\n      \"'showNotification' in registration\": false,\n      \"'pushManager' in registration\": false,\n      \"typeof clients.openWindow\": \"function\",\n      \"scope\": \"https://openpwa.net/lab/device-tests/\"\n    }\n  },\n  \"push\": {\n    \"subscribed\": false,\n    \"endpointHost\": null\n  },\n  \"storageMarker\": {\n    \"localStorage\": \"TAB-2026-10-20T07:13:46Z\",\n    \"indexedDB\": \"TAB-2026-10-20T07:13:46Z\",\n    \"cookie\": \"TAB-2026-10-20T07:13:46Z\"\n  },\n  \"lastEventLocalStorage\": null,\n  \"recentEventsIndexedDB\": []\n}",
  "labNotifyOut": "",
  "labEventsOut": "(none yet)",
  "labProbeOut": "swVersion\nlab-sw-v2\ncapturedAt\nworker start, before any handler property is assigned\n'onnotificationclick' in self\nfalse\ntypeof self.onnotificationclick\nundefined\n'onnotificationclose' in self\nfalse\n'onpush' in self\nfalse\n'onpushsubscriptionchange' in self\nfalse\n'Notification' in self\nfalse\n'showNotification' in registration\nfalse\n'pushManager' in registration\nfalse\ntypeof clients.openWindow\nfunction\nscope\nhttps://openpwa.net/lab/device-tests/\n",
  "variantProbe": null
}
