diff --git a/webview/build.gradle.kts b/webview/build.gradle.kts index 0aa8371b..38e28533 100644 --- a/webview/build.gradle.kts +++ b/webview/build.gradle.kts @@ -66,7 +66,7 @@ kotlin { val desktopMain by getting { dependencies { implementation(compose.desktop.common) - api("dev.datlag:kcef:2023.10.13") + api("dev.datlag:kcef:2024.01.07.1") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:$coroutines") } } diff --git a/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/CefRequestExt.kt b/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/CefRequestExt.kt new file mode 100644 index 00000000..dbdf0ce6 --- /dev/null +++ b/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/CefRequestExt.kt @@ -0,0 +1,31 @@ +package com.multiplatform.webview.web + +import com.multiplatform.webview.setting.WebSettings +import dev.datlag.kcef.KCEFResourceRequestHandler +import org.cef.browser.CefBrowser +import org.cef.browser.CefFrame +import org.cef.browser.CefRequestContext +import org.cef.network.CefRequest + +internal fun createModifiedRequestContext(settings: WebSettings): CefRequestContext { + return CefRequestContext.createContext { browser, frame, request, isNavigation, isDownload, requestInitiator, disableDefaultHandling -> + object : KCEFResourceRequestHandler( + getGlobalDefaultHandler(browser, frame, request, isNavigation, isDownload, requestInitiator, disableDefaultHandling), + ) { + override fun onBeforeResourceLoad( + browser: CefBrowser?, + frame: CefFrame?, + request: CefRequest?, + ): Boolean { + if (request != null) { + settings.customUserAgentString?.let(request::setUserAgentString) + } + return super.onBeforeResourceLoad(browser, frame, request) + } + } + } +} + +internal fun CefRequest.setUserAgentString(userAgent: String) { + setHeaderByName("User-Agent", userAgent, true) +} diff --git a/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/WebView.desktop.kt b/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/WebView.desktop.kt index 366d9db9..ecdd26cd 100644 --- a/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/WebView.desktop.kt +++ b/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/WebView.desktop.kt @@ -82,6 +82,7 @@ fun DesktopWebView( client, state.webSettings.desktopWebSettings.offScreenRendering, state.webSettings.desktopWebSettings.transparent, + state.webSettings, fileContent, ) { val rendering = @@ -97,6 +98,7 @@ fun DesktopWebView( current.url, rendering, state.webSettings.desktopWebSettings.transparent, + createModifiedRequestContext(state.webSettings), ) is WebContent.Data -> @@ -120,6 +122,7 @@ fun DesktopWebView( KCEFBrowser.BLANK_URI, rendering, state.webSettings.desktopWebSettings.transparent, + createModifiedRequestContext(state.webSettings), ) } }