Skip to content

Release 2.15.3#739

Open
itmindbox wants to merge 46 commits into
masterfrom
release/2.15.3
Open

Release 2.15.3#739
itmindbox wants to merge 46 commits into
masterfrom
release/2.15.3

Conversation

@itmindbox

Copy link
Copy Markdown
Contributor

Updates the release version to 2.15.3. Automated PR: merge release/2.15.3 into master

enotniy and others added 30 commits May 18, 2026 17:54
MOBILE-78: Add MindboxLifecycleInitializer
Merge 'master' into 'develop' after release
MOBILE-52: Add timeout for in-app image loading
…p_cross

MOBILE-52: Fix snackbar cross and cross margins
…kbar_animation

MOBILE-52: Fix snackbar animation
…e_timeout_error

MOBILE-52: Fix Inapp.ShowFailure on image timeout
dependabot Bot and others added 16 commits June 22, 2026 10:00
Bumps the github-actions group with 3 updates: [actions/checkout](https://github.com/actions/checkout), [actions/setup-java](https://github.com/actions/setup-java) and [mikepenz/action-junit-report](https://github.com/mikepenz/action-junit-report).


Updates `actions/checkout` from 6.0.3 to 7.0.0
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@df4cb1c...9c091bb)

Updates `actions/setup-java` from 5.2.0 to 5.3.0
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](actions/setup-java@be666c2...ad2b381)

Updates `mikepenz/action-junit-report` from 6.4.1 to 6.4.2
- [Release notes](https://github.com/mikepenz/action-junit-report/releases)
- [Commits](mikepenz/action-junit-report@3a81627...d9f48fc)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/setup-java
  dependency-version: 5.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: mikepenz/action-junit-report
  dependency-version: 6.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-version: 5.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
MOBILE-0000: Bump kmp submodule (drain evaluate callbacks before destroy)

MOBILE-0000: Cover the stranded-preconnect release and cap budget with tests

MOBILE-0000: Release the stranded preconnect WebView and honest-cap the settle poll

A no-layers config landing while the init prewarm was suspended latched the
verdict but the resumed prewarm bare-returned after the fetch: the preconnect
load had already created a WebView and no settle poll would ever free it. The
verdict is now re-checked before the preconnect load and the post-fetch path
releases.

Also: null probes are charged the probe timeout so the settle cap is a real
wall-clock bound; ready-check give-up defers to the init timer instead of
closing; teardown-race evaluate misses no longer feed telemetry; GatewayManager
is injected lazily (Volley was constructed on the main thread during SDK init);
learned-hosts merge is synchronized; kmp submodule bump (destroy fix, prewarm
navigation pinning, httpsOrigin charset).

MOBILE-0000: Cover the settle-poll guards, one-shot survival and hard cap

MOBILE-0000: Harden the prewarm service and show holder after the audit

- the settle poll checks the terminal-preempt latch before it is stored
  and on every tick — a real show could otherwise inherit a 30s zombie
  poll in the slot onRealShowWillStart() just cleared;
- a no-layers config latches: an init prewarm still suspended in the
  content fetch can no longer resurrect a WebView the config retired;
- the one-shot is consumed only by attempts that reach the engine, so a
  transient configuration read failure cannot block a later valid warm;
- the poll budget is counted in ticks, not wall clock (same 30s, fully
  virtual-time testable);
- onClose detaches the event listener and startReadyCheck refuses a
  torn-down holder — a late onPageFinished queued on the main looper
  produced a spurious presentation failure and a second close;
- controller.destroy() is called once, not twice;
- checkEvaluateJavaScript tracks a failed outgoing call but no longer
  force-closes the in-app — that is the caller's policy, and one
  transient miss used to tear down a healthy show.

MOBILE-0000: Cover the network-idle settle release

MOBILE-0000: Release the prewarm WebView by network idle, not a blind timer

The hidden instance lived a fixed 30s after the content page load; a
Resource Timing poll (stable entry count + 2s quiet window) releases it
as soon as the page has settled — ~3s in practice. The 30s stays as a
hard cap: entries appear only on completion, so a transfer slower than
the quiet window can still be cut, same worst case as the cap.

MOBILE-0000: Cover the WebView readiness probe retry

MOBILE-0000: Retry the WebView readiness probe before closing the in-app

onPageFinished can fire before the page's module scripts have evaluated
(slow device, cold cache), and the single-shot bridge check then closed a
healthy in-app. The probe now polls briefly (WebViewReadyChecker, mirrors
the iOS fix); the outgoing-message verification stays single-shot — that
path talks to a page that already proved itself ready.

MOBILE-0000: Update prewarm service tests for the stub-less engine

MOBILE-0000: Drop the legacy prewarm stub bridge

Bumps kmp-common: the engine loads the content page without the stub JavascriptInterface;
old pages degrade to a plain page warm until the web prewarm mode is deployed.

MOBILE-0000: Update prewarm service tests for the params contract

MOBILE-0000: Load the prewarm content page with official prewarm params

A web runtime that knows the contract boots tracker-only from the document URL params;
older runtimes ignore them and keep using the engine's legacy stub bridge. Bumps
kmp-common with prewarmContentBaseUrl and the stub-call logging.

MOBILE-0000: Preempt prewarm terminally + thread-safe settle job

Real-show preemption now calls engine.abort() (synchronous latch closes the race where an already-posted prewarm load recreated the WebView mid-show and, with the settle job cancelled, kept it alive forever). settleJob becomes an AtomicReference. Bump kmp-common.

MOBILE-0000: Gate prewarm light parse by sdkVersion like the real pipeline

The endpoint config carries webview-typed form variants for newer SDK versions; without the version gate the head-start parse logs a JsonParseException per such in-app on every launch.

MOBILE-0000: Wire production WebView prewarm service into SDK lifecycle

InAppWebViewPrewarmService: stage 1 at init (head start from cached config, light layer parse), stage 2 after each config parse in MobileConfigRepositoryImpl (release when no webview in-apps), preemption from WebViewInAppViewHolder before a real show, learned-hosts capture at bridge close feeding next launch's preconnect. Everything derived from config + API domain; no hardcoded hosts. Bump kmp-common with cache/prewarm primitives.

MOBILE-0000: Prewarm WebView at SDK init + bump kmp-common

Call MindboxWebViewLab.prewarm() from Mindbox.initialize() to warm the renderer process/connections early. Bump kmp-common-sdk submodule to the prototype branch carrying the cache+preconnect prototype. Throwaway measurement scaffolding.
* MOBILE-197: Send data-only payload in WebView sync onError

Drop both wrappers: the {type, data} envelope from toJson and the
{"error": ...} double serialization in sendErrorResponse. The payload
format is shared with iOS: string httpStatusCode, no transport
statusCode. toJson() is unchanged - public API used by wrapper SDKs.

* MOBILE-197: Pin iOS-format sync error payloads in executor tests

* MOBILE-197: Pin why sync error payload avoids gson.toJson

The injected gson has htmlSafe enabled and would emit \u003c-style
escapes, diverging from iOS JSONEncoder output.
Bumps the github-actions group with 1 update: [actions/setup-java](https://github.com/actions/setup-java).


Updates `actions/setup-java` from 5.5.0 to 5.6.0
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](actions/setup-java@0f481fc...03ad4de)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-version: 5.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants