OpenPWA device test lab (not indexed)

Device test lab

A 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.

context: (loading)

T1: a page with no manifest

/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.

T3: which icon did the Home Screen use?

Each 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.

This 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/.

T4: status bar and top blur variants

Every variant has numbered lines to scroll under the status bar and prints its own geometry. The first nine 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. The three theme-m* apps (step 18c) are also separate apps with grey M1/M2/M3 icons: they settle whether the status-bar strip takes the manifest theme_color or the page meta theme-color. M1 red = manifest wins, M1 green = meta wins; M2 red = meta is used when the manifest has no colour; M3 green = manifest is used when there is no meta.

VariantTop elementOpen
baselinenone fixed; header scrolls awayopen
fixedposition: fixed, 56 px, full width, top 0open
stickyposition: sticky, 56 px, full widthopen
safe-areafixed, viewport-fit=cover, padded by env(safe-area-inset-top)open
thresholdfixed bar with buttons for height, width and top offsetopen
white-topno header; white html/body, black text; theme-color #161616open
theme-redas white-top, but theme-color #d00000open
bg-greenno header; html/body #00a050 top to bottom; theme-color #161616open
dynamicblue header; buttons change theme-color to red, header to orange, remove header (logged)open
sbs-defaultnone fixed; status-bar-style: default (own app)open
sbs-blacknone fixed; status-bar-style: black (own app)open
sbs-black-translucentnone fixed; black-translucent + viewport-fit=cover (own app)open
theme-m118c, own app: manifest theme_color #d00000, page meta theme-color #00a050; white page, no headeropen
theme-m218c, own app: manifest without theme_color, page meta theme-color #d00000open
theme-m318c, own app: manifest theme_color #00a050, no meta theme-coloropen

T6: storage marker

Writes 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.

T7 and T8: notifications

The 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 cannot be tested here. Subscribe only shows that a subscription is created and prints the endpoint host.

Permission retest app: T7 Perm Test is a separate installable app (own manifest, scope /lab/device-tests/t7/perm/, own worker, yellow P7 icon) that has never been asked for permission. Add it to the Home Screen and use it to record whether Notification.requestPermission() shows a system prompt, with exact start and end times.

Worker exposure (what BCD's collector checks)

Notification event log (newest first)

(none yet)

Results panel (T5, T9, T10)

Display mode

Feature detects

Viewport and safe area

User agent

The JSON holds the push endpoint host only, never the endpoint or keys. Paste it into the checklist; nothing leaves the device otherwise.