Self-contained QA harness for the WebView + Location + Notification permission coordinator. No external resources.
⚠️ This page is not running in a secure context (window.isSecureContext = false). getUserMedia, geolocation, and Notifications may be unavailable or behave differently. Load this file via HTTPS or via a WebView configuration that treats it as a secure origin.
⚠️ One or more required Web APIs are missing on this page (see log for details). Related buttons are disabled.
Expected Behavior
Only one Android runtime permission dialog should be active at any time.
Multiple WebView permission requests should be queued and processed FIFO.
Camera + microphone requested in a single WebView call should be handled as one combined Android permission request.
A location permission request should wait if a WebView (camera/mic) permission request is already active.
A WebView permission request should wait if location permission is already active.
Notification permission requests should not create an uncontrolled, overlapping Android permission dialog.
An empty Android grantResults array must never crash the app.
Cancelling an active WebView permission request (e.g. via reload) must not permanently block future permission requests.
After any request finishes, is denied, or is cancelled, the next queued request should eventually execute.
Live Queue / Concurrency Stats
0
TOTAL
0
PENDING
0
COMPLETED
0
SUCCESS
0
FAILED
0
MAX CONCURRENT
ACTIVE TEST
Idle
1–4. Single Permission Tests
Idle
getUserMedia({video:true}) — tracks are stopped immediately after success.
Idle
getUserMedia({audio:true}) — tracks are stopped immediately after success.
Idle
Single getUserMedia({video:true, audio:true}) call — Android should receive CAMERA + RECORD_AUDIO as one combined request.
Idle
navigator.geolocation.getCurrentPosition — shows lat/lon on success, exact error code/message on failure.
Idle
Notification.requestPermission() — must not overlap with an active WebView/location permission request on the Android side.
5–6. Combined / Coordinator Tests
Idle
Fires camera and geolocation requests back-to-back with no artificial delay, to verify the Android coordinator serializes them instead of overlapping dialogs.
Idle
Primary FIFO stress test — fires a combined camera+mic request and a location request nearly simultaneously.
7–8. Rapid / Stress Tests
Idle
Fires 5 separate getUserMedia({video:true}) calls in a tight loop, each tracked with its own request ID, to verify WebView PermissionRequest objects are queued correctly.
Idle
Fires camera, microphone, camera+microphone, and location almost simultaneously. Watch the log for strict one-at-a-time resolution.
9. Cancel / Reload Test
Tap Start Camera Request, then immediately tap Reload Page Now before answering the Android dialog (or before it appears).
This exercises onPermissionRequestCanceled() / cancelWebPermissionRequest().
The log below persists across reload (session-scoped) so you can confirm continuity — after reload, run Request Camera again from section 1
and verify it still succeeds/fails normally instead of hanging, which would indicate a permanently stuck queue.
10. Repeated Permission Test
Runs the camera request sequentially N times (awaiting each before starting the next) to check for consistent granted/denied behavior across repeats.
Execution Log
Test Scenario Checklist
Test Report
Full execution log, newest at bottom. Copy this and share with developers when reporting an issue.