From 5b86460178c6841e3932a87a41f8cd5765e40051 Mon Sep 17 00:00:00 2001 From: DatLag Date: Sun, 7 Jan 2024 17:00:10 +0100 Subject: [PATCH 1/2] bring back #12 --- webview/build.gradle.kts | 2 +- .../webview/web/CefRequestExt.kt | 29 +++++++++++++++++++ .../webview/web/WebView.desktop.kt | 3 ++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 webview/src/desktopMain/kotlin/com/multiplatform/webview/web/CefRequestExt.kt 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..679f691b --- /dev/null +++ b/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/CefRequestExt.kt @@ -0,0 +1,29 @@ +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..5cf3137f 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) ) } } From b81e7210bf59ad55060d25fd664d9fae5b7af70a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E9=93=AD=E6=9D=B0?= Date: Mon, 8 Jan 2024 10:29:40 +0800 Subject: [PATCH 2/2] feat:Ktlint format the code --- .../com/multiplatform/webview/web/CefRequestExt.kt | 12 +++++++----- .../com/multiplatform/webview/web/WebView.desktop.kt | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/CefRequestExt.kt b/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/CefRequestExt.kt index 679f691b..dbdf0ce6 100644 --- a/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/CefRequestExt.kt +++ b/webview/src/desktopMain/kotlin/com/multiplatform/webview/web/CefRequestExt.kt @@ -7,14 +7,16 @@ import org.cef.browser.CefFrame import org.cef.browser.CefRequestContext import org.cef.network.CefRequest -internal fun createModifiedRequestContext( - settings: WebSettings -): CefRequestContext { +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) + getGlobalDefaultHandler(browser, frame, request, isNavigation, isDownload, requestInitiator, disableDefaultHandling), ) { - override fun onBeforeResourceLoad(browser: CefBrowser?, frame: CefFrame?, request: CefRequest?): Boolean { + override fun onBeforeResourceLoad( + browser: CefBrowser?, + frame: CefFrame?, + request: CefRequest?, + ): Boolean { if (request != null) { settings.customUserAgentString?.let(request::setUserAgentString) } 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 5cf3137f..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 @@ -98,7 +98,7 @@ fun DesktopWebView( current.url, rendering, state.webSettings.desktopWebSettings.transparent, - createModifiedRequestContext(state.webSettings) + createModifiedRequestContext(state.webSettings), ) is WebContent.Data -> @@ -122,7 +122,7 @@ fun DesktopWebView( KCEFBrowser.BLANK_URI, rendering, state.webSettings.desktopWebSettings.transparent, - createModifiedRequestContext(state.webSettings) + createModifiedRequestContext(state.webSettings), ) } }