Skip to content

Commit 88ba4be

Browse files
jonahgrahamakurtakov
authored andcommitted
[GTK4] Update to new API for cookies in GTK4
Cookies are attached to default session now instead of default context. The constant WEBKIT_WEBSITE_DATA_COOKIES changed values between GTK3 + GTK4 (technically between webkit2gtk 4 and webkitgtk 6)
1 parent eb62a59 commit 88ba4be

File tree

4 files changed

+70
-6
lines changed

4 files changed

+70
-6
lines changed

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,6 +1245,26 @@ JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(webkit_1navigation_1policy_1decision_1g
12451245
}
12461246
#endif
12471247

1248+
#ifndef NO_webkit_1network_1session_1get_1cookie_1manager
1249+
JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(webkit_1network_1session_1get_1cookie_1manager)
1250+
(JNIEnv *env, jclass that, jlong arg0)
1251+
{
1252+
jlong rc = 0;
1253+
WebKitGTK_NATIVE_ENTER(env, that, webkit_1network_1session_1get_1cookie_1manager_FUNC);
1254+
/*
1255+
rc = (jlong)webkit_network_session_get_cookie_manager(arg0);
1256+
*/
1257+
{
1258+
WebKitGTK_LOAD_FUNCTION(fp, webkit_network_session_get_cookie_manager)
1259+
if (fp) {
1260+
rc = (jlong)((jlong (CALLING_CONVENTION*)(jlong))fp)(arg0);
1261+
}
1262+
}
1263+
WebKitGTK_NATIVE_EXIT(env, that, webkit_1network_1session_1get_1cookie_1manager_FUNC);
1264+
return rc;
1265+
}
1266+
#endif
1267+
12481268
#ifndef NO_webkit_1network_1session_1get_1default
12491269
JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(webkit_1network_1session_1get_1default)
12501270
(JNIEnv *env, jclass that)
@@ -1265,6 +1285,26 @@ JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(webkit_1network_1session_1get_1default)
12651285
}
12661286
#endif
12671287

1288+
#ifndef NO_webkit_1network_1session_1get_1website_1data_1manager
1289+
JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(webkit_1network_1session_1get_1website_1data_1manager)
1290+
(JNIEnv *env, jclass that, jlong arg0)
1291+
{
1292+
jlong rc = 0;
1293+
WebKitGTK_NATIVE_ENTER(env, that, webkit_1network_1session_1get_1website_1data_1manager_FUNC);
1294+
/*
1295+
rc = (jlong)webkit_network_session_get_website_data_manager(arg0);
1296+
*/
1297+
{
1298+
WebKitGTK_LOAD_FUNCTION(fp, webkit_network_session_get_website_data_manager)
1299+
if (fp) {
1300+
rc = (jlong)((jlong (CALLING_CONVENTION*)(jlong))fp)(arg0);
1301+
}
1302+
}
1303+
WebKitGTK_NATIVE_EXIT(env, that, webkit_1network_1session_1get_1website_1data_1manager_FUNC);
1304+
return rc;
1305+
}
1306+
#endif
1307+
12681308
#ifndef NO_webkit_1policy_1decision_1download
12691309
JNIEXPORT void JNICALL WebKitGTK_NATIVE(webkit_1policy_1decision_1download)
12701310
(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
@@ -83,7 +83,9 @@ typedef enum {
8383
webkit_1javascript_1result_1get_1value_FUNC,
8484
webkit_1javascript_1result_1unref_FUNC,
8585
webkit_1navigation_1policy_1decision_1get_1request_FUNC,
86+
webkit_1network_1session_1get_1cookie_1manager_FUNC,
8687
webkit_1network_1session_1get_1default_FUNC,
88+
webkit_1network_1session_1get_1website_1data_1manager_FUNC,
8789
webkit_1policy_1decision_1download_FUNC,
8890
webkit_1policy_1decision_1ignore_FUNC,
8991
webkit_1response_1policy_1decision_1get_1request_FUNC,

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

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,11 @@ class WebKit extends WebBrowser {
224224

225225
NativeClearSessions = () -> {
226226
if (!WebKitGTK.LibraryLoaded) return;
227-
if (WebKitGTK.webkit_get_minor_version() >= 16) {
227+
if (GTK.GTK4) {
228+
long session = WebKitGTK.webkit_network_session_get_default();
229+
long manager = WebKitGTK.webkit_network_session_get_website_data_manager(session);
230+
WebKitGTK.webkit_website_data_manager_clear(manager, 64, 0, 0, 0, 0);
231+
} else if (WebKitGTK.webkit_get_minor_version() >= 16) {
228232
long context = WebKitGTK.webkit_web_context_get_default();
229233
long manager = WebKitGTK.webkit_web_context_get_website_data_manager (context);
230234
WebKitGTK.webkit_website_data_manager_clear(manager, WebKitGTK.WEBKIT_WEBSITE_DATA_COOKIES, 0, 0, 0, 0);
@@ -1159,8 +1163,14 @@ static void setCookieBrowser (Browser toSet) {
11591163
}
11601164

11611165
static boolean setCookie(String cookieUrl, String cookieValue) {
1162-
long context = WebKitGTK.webkit_web_context_get_default();
1163-
long cookieManager = WebKitGTK.webkit_web_context_get_cookie_manager(context);
1166+
long cookieManager;
1167+
if (GTK.GTK4) {
1168+
long session = WebKitGTK.webkit_network_session_get_default();
1169+
cookieManager = WebKitGTK.webkit_network_session_get_cookie_manager(session);
1170+
} else {
1171+
long context = WebKitGTK.webkit_web_context_get_default();
1172+
cookieManager = WebKitGTK.webkit_web_context_get_cookie_manager(context);
1173+
}
11641174
byte[] bytes = Converter.wcsToMbcs (cookieUrl, true);
11651175
long uri;
11661176
if (WebKitGTK.soup_get_major_version()==2) {
@@ -1230,8 +1240,14 @@ private static void setCookie_callback(long cookieManager, long result, long use
12301240
}
12311241

12321242
static String getCookie(String cookieUrl, String cookieName) {
1233-
long context = WebKitGTK.webkit_web_context_get_default();
1234-
long cookieManager = WebKitGTK.webkit_web_context_get_cookie_manager(context);
1243+
long cookieManager;
1244+
if (GTK.GTK4) {
1245+
long session = WebKitGTK.webkit_network_session_get_default();
1246+
cookieManager = WebKitGTK.webkit_network_session_get_cookie_manager(session);
1247+
} else {
1248+
long context = WebKitGTK.webkit_web_context_get_default();
1249+
cookieManager = WebKitGTK.webkit_web_context_get_cookie_manager(context);
1250+
}
12351251
byte[] uri = Converter.wcsToMbcs (cookieUrl, true);
12361252
if (nonBlockingEvaluate > 0) {
12371253
System.err.println("SWT Webkit: getCookie() called inside a synchronous callback, which can lead to a deadlock.\n"

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
@@ -85,7 +85,7 @@ public class WebKitGTK extends C {
8585
public static final int G_TLS_CERTIFICATE_GENERIC_ERROR = 6;
8686
public static final int G_TLS_CERTIFICATE_VALIDATE_ALL = 7;
8787

88-
public static final int WEBKIT_WEBSITE_DATA_COOKIES = 1 << 8;
88+
public static final int WEBKIT_WEBSITE_DATA_COOKIES = GTK.GTK4 ? 64 : 1 << 8;
8989

9090
public static final int WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_START = 0;
9191
public static final int WEBKIT_USER_CONTENT_INJECT_TOP_FRAME = 1;
@@ -365,6 +365,12 @@ public class WebKitGTK extends C {
365365
/** @method flags=dynamic */
366366
public static final native long webkit_network_session_get_default();
367367

368+
/** @method flags=dynamic */
369+
public static final native long webkit_network_session_get_cookie_manager(long session);
370+
371+
/** @method flags=dynamic */
372+
public static final native long webkit_network_session_get_website_data_manager(long session);
373+
368374
/** @method flags=dynamic */
369375
public static final native long webkit_web_context_get_cookie_manager(long context);
370376

0 commit comments

Comments
 (0)