From 136fb7652c35bf3bc0ef8803c7ec8a3926b7aecc Mon Sep 17 00:00:00 2001 From: Guzmazow Date: Fri, 19 Sep 2025 20:35:23 +0300 Subject: [PATCH] Improve spoofing of `X-Requested-With` header to support newer WebView versions (mihonapp/mihon#2491) Co-authored-by: Cuong-Tran (cherry picked from commit 065147472e8e683c47d11f3e00386aba2a7c1bac) --- CHANGELOG.md | 3 +++ app/src/main/java/eu/kanade/tachiyomi/App.kt | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e8b5fd44..753419b01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co ### Changed - Delegate Suwayomi tracker authentication to extension ([@cpiber](https://github.com/cpiber)) ([#2476](https://github.com/mihonapp/mihon/pull/2476)) +### Improved +- Spoofing of `X-Requested-With` header to support newer WebView versions ([@Guzmazow](https://github.com/Guzmazow)) ([#2491](https://github.com/mihonapp/mihon/pull/2491)) + ### Fixes - Fix height of description not being calculated correctly if images are present ([@Secozzi](https://github.com/Secozzi)) ([#2382](https://github.com/mihonapp/mihon/pull/2382)) - Fix migration progress not updating after manual search ([@Secozzi](https://github.com/Secozzi)) ([#2484](https://github.com/mihonapp/mihon/pull/2484)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index 2eb059ee0..94b5b0bf1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -303,9 +303,13 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor try { // Override the value passed as X-Requested-With in WebView requests val stackTrace = Looper.getMainLooper().thread.stackTrace + // KMK --> + val chromiumClasses = setOf("org.chromium.base.buildinfo", "org.chromium.base.apkinfo") + val chromiumMethods = setOf("getall", "getpackagename", "") + // KMK <-- val isChromiumCall = stackTrace.any { trace -> - trace.className.equals("org.chromium.base.BuildInfo", ignoreCase = true) && - setOf("getAll", "getPackageName", "").any { trace.methodName.equals(it, ignoreCase = true) } + trace.className.lowercase() in chromiumClasses && + trace.methodName.lowercase() in chromiumMethods } if (isChromiumCall) return WebViewUtil.spoofedPackageName(applicationContext)