Skip to content

Commit f547c31

Browse files
committed
[Gtk4] Support self-signed certificate in webkit
Direct port of the same dialog to approve it or system property as on Gtk 3.
1 parent e1f8208 commit f547c31

4 files changed

Lines changed: 66 additions & 5 deletions

File tree

bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,6 +1549,30 @@ JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(webkit_1navigation_1policy_1decision_1g
15491549
}
15501550
#endif
15511551

1552+
#ifndef NO_webkit_1network_1session_1allow_1tls_1certificate_1for_1host
1553+
JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(webkit_1network_1session_1allow_1tls_1certificate_1for_1host)
1554+
(JNIEnv *env, jclass that, jlong arg0, jlong arg1, jbyteArray arg2)
1555+
{
1556+
jbyte *lparg2=NULL;
1557+
jlong rc = 0;
1558+
WebKitGTK_NATIVE_ENTER(env, that, webkit_1network_1session_1allow_1tls_1certificate_1for_1host_FUNC);
1559+
if (arg2) if ((lparg2 = (*env)->GetByteArrayElements(env, arg2, NULL)) == NULL) goto fail;
1560+
/*
1561+
rc = (jlong)webkit_network_session_allow_tls_certificate_for_host(arg0, arg1, lparg2);
1562+
*/
1563+
{
1564+
WebKitGTK_LOAD_FUNCTION(fp, webkit_network_session_allow_tls_certificate_for_host)
1565+
if (fp) {
1566+
rc = (jlong)((jlong (CALLING_CONVENTION*)(jlong, jlong, jbyte *))fp)(arg0, arg1, lparg2);
1567+
}
1568+
}
1569+
fail:
1570+
if (arg2 && lparg2) (*env)->ReleaseByteArrayElements(env, arg2, lparg2, 0);
1571+
WebKitGTK_NATIVE_EXIT(env, that, webkit_1network_1session_1allow_1tls_1certificate_1for_1host_FUNC);
1572+
return rc;
1573+
}
1574+
#endif
1575+
15521576
#ifndef NO_webkit_1network_1session_1get_1cookie_1manager
15531577
JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(webkit_1network_1session_1get_1cookie_1manager)
15541578
(JNIEnv *env, jclass that, jlong arg0)
@@ -1609,6 +1633,24 @@ JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(webkit_1network_1session_1get_1website_
16091633
}
16101634
#endif
16111635

1636+
#ifndef NO_webkit_1network_1session_1set_1tls_1errors_1policy
1637+
JNIEXPORT void JNICALL WebKitGTK_NATIVE(webkit_1network_1session_1set_1tls_1errors_1policy)
1638+
(JNIEnv *env, jclass that, jlong arg0, jint arg1)
1639+
{
1640+
WebKitGTK_NATIVE_ENTER(env, that, webkit_1network_1session_1set_1tls_1errors_1policy_FUNC);
1641+
/*
1642+
webkit_network_session_set_tls_errors_policy(arg0, arg1);
1643+
*/
1644+
{
1645+
WebKitGTK_LOAD_FUNCTION(fp, webkit_network_session_set_tls_errors_policy)
1646+
if (fp) {
1647+
((void (CALLING_CONVENTION*)(jlong, jint))fp)(arg0, arg1);
1648+
}
1649+
}
1650+
WebKitGTK_NATIVE_EXIT(env, that, webkit_1network_1session_1set_1tls_1errors_1policy_FUNC);
1651+
}
1652+
#endif
1653+
16121654
#ifndef NO_webkit_1policy_1decision_1download
16131655
JNIEXPORT void JNICALL WebKitGTK_NATIVE(webkit_1policy_1decision_1download)
16141656
(JNIEnv *env, jclass that, jlong arg0)

bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk_stats.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,11 @@ typedef enum {
9898
webkit_1navigation_1action_1get_1request_FUNC,
9999
webkit_1navigation_1policy_1decision_1get_1navigation_1action_FUNC,
100100
webkit_1navigation_1policy_1decision_1get_1request_FUNC,
101+
webkit_1network_1session_1allow_1tls_1certificate_1for_1host_FUNC,
101102
webkit_1network_1session_1get_1cookie_1manager_FUNC,
102103
webkit_1network_1session_1get_1default_FUNC,
103104
webkit_1network_1session_1get_1website_1data_1manager_FUNC,
105+
webkit_1network_1session_1set_1tls_1errors_1policy_FUNC,
104106
webkit_1policy_1decision_1download_FUNC,
105107
webkit_1policy_1decision_1ignore_FUNC,
106108
webkit_1response_1policy_1decision_1get_1request_FUNC,

bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -708,8 +708,13 @@ public void create (Composite parent, int style) {
708708
OS.g_object_ref(webView);
709709
}
710710
if (ignoreTls) {
711-
WebKitGTK.webkit_web_context_set_tls_errors_policy(WebKitGTK.webkit_web_view_get_context(webView),
712-
WebKitGTK.WEBKIT_TLS_ERRORS_POLICY_IGNORE);
711+
if (GTK.GTK4) {
712+
WebKitGTK.webkit_network_session_set_tls_errors_policy(WebKitGTK.webkit_network_session_get_default(),
713+
WebKitGTK.WEBKIT_TLS_ERRORS_POLICY_IGNORE);
714+
} else {
715+
WebKitGTK.webkit_web_context_set_tls_errors_policy(WebKitGTK.webkit_web_view_get_context(webView),
716+
WebKitGTK.WEBKIT_TLS_ERRORS_POLICY_IGNORE);
717+
}
713718
System.out.println("***WARNING: WebKitGTK is configured to ignore TLS errors via -Dorg.eclipse.swt.internal.webkitgtk.ignoretlserrors=true .");
714719
System.out.println("***WARNING: Please use for development purposes only!");
715720
}
@@ -2534,10 +2539,16 @@ long webkit_load_changed (long web_view, int status, long user_data) {
25342539
prompt.setMessage(message);
25352540
int result = prompt.open();
25362541
if (result == SWT.YES) {
2537-
long webkitcontext = WebKitGTK.webkit_web_view_get_context(web_view);
25382542
if (javaHost != null) {
25392543
byte [] host = Converter.javaStringToCString(javaHost);
2540-
WebKitGTK.webkit_web_context_allow_tls_certificate_for_host(webkitcontext, tlsErrorCertificate, host);
2544+
if (GTK.GTK4) {
2545+
WebKitGTK.webkit_network_session_allow_tls_certificate_for_host(
2546+
WebKitGTK.webkit_network_session_get_default(), tlsErrorCertificate, host);
2547+
} else {
2548+
long webkitcontext = WebKitGTK.webkit_web_view_get_context(web_view);
2549+
WebKitGTK.webkit_web_context_allow_tls_certificate_for_host(webkitcontext,
2550+
tlsErrorCertificate, host);
2551+
}
25412552
WebKitGTK.webkit_web_view_reload (web_view);
25422553
} else {
25432554
System.err.println("***ERROR: Unable to parse host from URI!");

bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/internal/webkit/WebKitGTK.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2000, 2025 IBM Corporation and others. All rights reserved.
2+
* Copyright (c) 2000, 2026 IBM Corporation and others. All rights reserved.
33
* The contents of this file are made available under the terms
44
* of the GNU Lesser General Public License (LGPL) Version 2.1 that
55
* accompanies this distribution (lgpl-v21.txt). The LGPL is also
@@ -370,6 +370,9 @@ public class WebKitGTK extends C {
370370
/** @method flags=dynamic */
371371
public static final native long webkit_web_context_get_default();
372372

373+
/** @method flags=dynamic */
374+
public static final native long webkit_network_session_allow_tls_certificate_for_host(long session, long certificate, byte[] constGCharHost);
375+
373376
/** @method flags=dynamic */
374377
public static final native long webkit_network_session_get_default();
375378

@@ -379,6 +382,9 @@ public class WebKitGTK extends C {
379382
/** @method flags=dynamic */
380383
public static final native long webkit_network_session_get_website_data_manager(long session);
381384

385+
/** @method flags=dynamic */
386+
public static final native void webkit_network_session_set_tls_errors_policy(long session, int policy);
387+
382388
/** @method flags=dynamic */
383389
public static final native long webkit_web_context_get_cookie_manager(long context);
384390

0 commit comments

Comments
 (0)