Skip to content

Detect incompatible WebView engines before extension startup and provide inline recovery #68

Closed

Description

@moikdev

Found during #65 / PR #66's emulator-only production-readiness pass. Related to #7.

The exact candidate APK 409088cb9879507454598038ea4f7dd3bc54a40a0facee48c376f95152f9908e (implementation 944aca80afbddd042d937058d649b01aa92fcc6c) installs and launches on the API26 ARM64 Google APIs image revision3. Its WebView provider is com.google.android.webview version 58.0.3029.125.

A two-item React/List fixture never publishes its native rows. Device Chromium logs report Uncaught SyntaxError: Unexpected token . and Unexpected token { while evaluating the unchanged adapter/runtime. The runtime has optional chaining/null-coalescing and modern APIs, while the host evaluates assets before it has a reliable capability failure path. A dedicated diagnostic records the native UI error as ReferenceError: __tinycast is not defined, with no rendered fixture row. The List test’s row wait times out; that is distinct from an app watchdog timeout. The existing desktop-API watchdog is not established as the result of this particular reproduction. This is a runtime compatibility finding, separate from API26 test-helper failures involving capture/clipboard APIs.

Acceptance criteria:

  • Probe required parser syntax and runtime APIs before evaluating the unchanged vendored assets, using a probe that itself runs on legacy engines.
  • Reject an incompatible engine promptly, naming the actual provider/version and giving specific WebView/Chrome update guidance inside the palette. Preserve native Back/Close and caller state, and prevent extension dispatch while blocked.
  • Provide native recovery without forwarding extension-controlled intents or opening another app automatically.
  • Demonstrate the actual old-engine path on API26 and normal List/Grid execution on a modern engine; include real Android before/after/error screenshots and exact binary/provider identities.
  • Preserve all vendored assets/notices unchanged and obtain two independent sol6.1/high audits.
  • Keep actual Android8 extension execution partial until tested with an adequate updated provider or a maintained embedded engine. A readable rejection is not extension-execution parity, a security certification, or production clearance.

Original failed runs and Chromium logs remain retained. Host screenshot/capture failures and API assumptions do not become passes because the compatibility problem is now identified.

The diagnostic also recorded a successful UiAutomation screenshot and a successful shell screencap at the AVD’s physical1080×1920 viewport. Earlier forced2340px capture failures are retained separately; a geometry relationship is under investigation, not an established cause.

Activity

  1. moikdev commented on Nov 5, 2026

    @moikdev
    OwnerAuthor

    Next prioritized slice after verified PR #106 merge 8ff8f4d0: reproduce the actual old-engine boundary, then add a legacy-safe parser/API probe before unchanged runtime assets, native provider/version and update guidance with explicit recovery actions, and current-owner dispatch prevention while blocked. Use the existing owned API26 environment and dedicated modern test AVD, with guarded data/settings/evidence preservation. Actual Android8 execution, native input #69, broader providers/accessibility and production readiness remain partial; readable rejection will not earn execution-parity credit. A separate implementation branch will retain the merged #106 checkout/evidence frozen.

  2. moikdev commented on Nov 5, 2026

    @moikdev
    OwnerAuthor

    Implemented in PR #107, head b417d94a, pending hosted CI and both independent audits. Actual API26 image revision1 / WebView58 now rejects before asset evaluation, names its real provider and supports explicit native provider settings/Return at 100% and 200% text. The final runtime also passes modern List/Grid and affected selected-input, no-view, handoff and paste probes: 29 positives across nine whole cohorts, plus an identical-instrumentation old-app control that fails the intended missing-recovery assertion. Existing assets/notices and the original diagnostic are unchanged. Android8 execution parity, #69 and production clearance remain open; the report preserves failed attempts and separate recoveries.

  3. moikdev commented on Nov 5, 2026

    @moikdev
    OwnerAuthor

    PR #107 merged as c4ca362e7f3efccc59eacc4fdcaa7184fe0507c1 through the normal merge API with expected head 86f1af0cabdb498e18bbe625f1334a0dc734dc23. Root verified both expected parents and tree f77f2280ad3d5718293ea06148254da87c4ca45d, identical to the reviewed tree. Both fresh independent full-change gpt-6.1-sol/high audits cleared their scopes; conclusions are recorded in COMMENT review5779629264. Exact-head hosted Android run41962444788 and separate local/android58115208341 succeeded. #68 closed within detection/recovery scope; the PR watch is stopped. Current evidence remains29 candidate positives/nine cohorts/133 checks, separate old-app UI negative, four outer outcomes and separately scoped mutation calibration. This delivers native unsupported-engine recovery; Android8 extension execution, broader Store/platform/accessibility/OEM, #69/#71/#89 and signing/migration remain open.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions