Skip to content

Commit 5edaae0

Browse files
committed
Add array support
1 parent 0c34033 commit 5edaae0

File tree

5 files changed

+117
-5
lines changed

5 files changed

+117
-5
lines changed

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

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,26 @@ JNIEXPORT jboolean JNICALL WebKitGTK_NATIVE(jsc_1value_1is_1string)
343343
}
344344
#endif
345345

346+
#ifndef NO_jsc_1value_1is_1typed_1array
347+
JNIEXPORT jboolean JNICALL WebKitGTK_NATIVE(jsc_1value_1is_1typed_1array)
348+
(JNIEnv *env, jclass that, jlong arg0)
349+
{
350+
jboolean rc = 0;
351+
WebKitGTK_NATIVE_ENTER(env, that, jsc_1value_1is_1typed_1array_FUNC);
352+
/*
353+
rc = (jboolean)jsc_value_is_typed_array(arg0);
354+
*/
355+
{
356+
WebKitGTK_LOAD_FUNCTION(fp, jsc_value_is_typed_array)
357+
if (fp) {
358+
rc = (jboolean)((jboolean (CALLING_CONVENTION*)(jlong))fp)(arg0);
359+
}
360+
}
361+
WebKitGTK_NATIVE_EXIT(env, that, jsc_1value_1is_1typed_1array_FUNC);
362+
return rc;
363+
}
364+
#endif
365+
346366
#ifndef NO_jsc_1value_1is_1undefined
347367
JNIEXPORT jboolean JNICALL WebKitGTK_NATIVE(jsc_1value_1is_1undefined)
348368
(JNIEnv *env, jclass that, jlong arg0)
@@ -363,6 +383,50 @@ JNIEXPORT jboolean JNICALL WebKitGTK_NATIVE(jsc_1value_1is_1undefined)
363383
}
364384
#endif
365385

386+
#ifndef NO_jsc_1value_1object_1get_1property
387+
JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(jsc_1value_1object_1get_1property)
388+
(JNIEnv *env, jclass that, jlong arg0, jbyteArray arg1)
389+
{
390+
jbyte *lparg1=NULL;
391+
jlong rc = 0;
392+
WebKitGTK_NATIVE_ENTER(env, that, jsc_1value_1object_1get_1property_FUNC);
393+
if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
394+
/*
395+
rc = (jlong)jsc_value_object_get_property(arg0, lparg1);
396+
*/
397+
{
398+
WebKitGTK_LOAD_FUNCTION(fp, jsc_value_object_get_property)
399+
if (fp) {
400+
rc = (jlong)((jlong (CALLING_CONVENTION*)(jlong, jbyte *))fp)(arg0, lparg1);
401+
}
402+
}
403+
fail:
404+
if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, 0);
405+
WebKitGTK_NATIVE_EXIT(env, that, jsc_1value_1object_1get_1property_FUNC);
406+
return rc;
407+
}
408+
#endif
409+
410+
#ifndef NO_jsc_1value_1object_1get_1property_1at_1index
411+
JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(jsc_1value_1object_1get_1property_1at_1index)
412+
(JNIEnv *env, jclass that, jlong arg0, jint arg1)
413+
{
414+
jlong rc = 0;
415+
WebKitGTK_NATIVE_ENTER(env, that, jsc_1value_1object_1get_1property_1at_1index_FUNC);
416+
/*
417+
rc = (jlong)jsc_value_object_get_property_at_index(arg0, arg1);
418+
*/
419+
{
420+
WebKitGTK_LOAD_FUNCTION(fp, jsc_value_object_get_property_at_index)
421+
if (fp) {
422+
rc = (jlong)((jlong (CALLING_CONVENTION*)(jlong, jint))fp)(arg0, arg1);
423+
}
424+
}
425+
WebKitGTK_NATIVE_EXIT(env, that, jsc_1value_1object_1get_1property_1at_1index_FUNC);
426+
return rc;
427+
}
428+
#endif
429+
366430
#ifndef NO_jsc_1value_1to_1boolean
367431
JNIEXPORT jboolean JNICALL WebKitGTK_NATIVE(jsc_1value_1to_1boolean)
368432
(JNIEnv *env, jclass that, jlong arg0)
@@ -403,6 +467,26 @@ JNIEXPORT jdouble JNICALL WebKitGTK_NATIVE(jsc_1value_1to_1double)
403467
}
404468
#endif
405469

470+
#ifndef NO_jsc_1value_1to_1int32
471+
JNIEXPORT jint JNICALL WebKitGTK_NATIVE(jsc_1value_1to_1int32)
472+
(JNIEnv *env, jclass that, jlong arg0)
473+
{
474+
jint rc = 0;
475+
WebKitGTK_NATIVE_ENTER(env, that, jsc_1value_1to_1int32_FUNC);
476+
/*
477+
rc = (jint)jsc_value_to_int32(arg0);
478+
*/
479+
{
480+
WebKitGTK_LOAD_FUNCTION(fp, jsc_value_to_int32)
481+
if (fp) {
482+
rc = (jint)((jint (CALLING_CONVENTION*)(jlong))fp)(arg0);
483+
}
484+
}
485+
WebKitGTK_NATIVE_EXIT(env, that, jsc_1value_1to_1int32_FUNC);
486+
return rc;
487+
}
488+
#endif
489+
406490
#ifndef NO_jsc_1value_1to_1string
407491
JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(jsc_1value_1to_1string)
408492
(JNIEnv *env, jclass that, jlong arg0)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,13 @@ typedef enum {
3939
jsc_1value_1is_1number_FUNC,
4040
jsc_1value_1is_1object_FUNC,
4141
jsc_1value_1is_1string_FUNC,
42+
jsc_1value_1is_1typed_1array_FUNC,
4243
jsc_1value_1is_1undefined_FUNC,
44+
jsc_1value_1object_1get_1property_FUNC,
45+
jsc_1value_1object_1get_1property_1at_1index_FUNC,
4346
jsc_1value_1to_1boolean_FUNC,
4447
jsc_1value_1to_1double_FUNC,
48+
jsc_1value_1to_1int32_FUNC,
4549
jsc_1value_1to_1string_FUNC,
4650
soup_1cookie_1get_1name_FUNC,
4751
soup_1cookie_1get_1value_FUNC,

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2867,8 +2867,18 @@ static Object gtk4_convertToJava(long jsc_value) {
28672867
} else if (WebKitGTK.jsc_value_is_null(jsc_value) || WebKitGTK.jsc_value_is_undefined(jsc_value)) {
28682868
return null;
28692869
} else if (WebKitGTK.jsc_value_is_object(jsc_value)) {
2870-
// TODO
2871-
SWT.error(SWT.ERROR_INVALID_ARGUMENT);
2870+
long jsc_length = WebKitGTK.jsc_value_object_get_property(jsc_value, Converter.wcsToMbcs(PROPERTY_LENGTH, true));
2871+
if (WebKitGTK.jsc_value_is_number(jsc_length)) {
2872+
int length = WebKitGTK.jsc_value_to_int32(jsc_length);
2873+
Object[] result = new Object[length];
2874+
for (int i = 0; i < length; i++) {
2875+
long jsc_value_at_i = WebKitGTK.jsc_value_object_get_property_at_index (jsc_value, i);
2876+
if (jsc_value_at_i != 0) {
2877+
result[i] = gtk4_convertToJava (jsc_value_at_i);
2878+
}
2879+
}
2880+
return result;
2881+
}
28722882
}
28732883

28742884
SWT.error(SWT.ERROR_INVALID_ARGUMENT);

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,23 @@ public static final native void webkit_web_view_evaluate_javascript(long web_vie
545545
* @method flags=dynamic
546546
*/
547547
public static final native double jsc_value_to_double(long value);
548+
/**
549+
* @method flags=dynamic
550+
*/
551+
public static final native int jsc_value_to_int32(long value);
552+
/**
553+
* @method flags=dynamic
554+
*/
555+
public static final native boolean jsc_value_is_typed_array(long value);
556+
/**
557+
* @method flags=dynamic
558+
*/
559+
public static final native long jsc_value_object_get_property(long value, byte[] name);
560+
/**
561+
* @method flags=dynamic
562+
*/
563+
public static final native long jsc_value_object_get_property_at_index(long value, int index);
564+
548565

549566
/** @method flags=dynamic */
550567
public static final native void webkit_web_view_stop_loading(long web_view);

tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2060,7 +2060,6 @@ public void test_evaluate_evaluation_failed_exception() {
20602060
* Test the evaluate() api that returns an array of numbers. Functionality based on Snippet308.
20612061
* Only wait till success. Otherwise timeout after 3 seconds.
20622062
*/
2063-
@Tag("gtk4-todo")
20642063
@Test
20652064
public void test_evaluate_array_numbers() {
20662065

@@ -2100,7 +2099,6 @@ public void test_evaluate_array_numbers() {
21002099
* Test the evaluate() api that returns an array of strings. Functionality based on Snippet308.
21012100
* Only wait till success. Otherwise timeout after 3 seconds.
21022101
*/
2103-
@Tag("gtk4-todo")
21042102
@Test
21052103
public void test_evaluate_array_strings () {
21062104

@@ -2140,7 +2138,6 @@ public void test_evaluate_array_strings () {
21402138
* Test the evaluate() api that returns an array of mixed types. Functionality based on Snippet308.
21412139
* Only wait till success. Otherwise timeout after 3 seconds.
21422140
*/
2143-
@Tag("gtk4-todo")
21442141
@Test
21452142
public void test_evaluate_array_mixedTypes () {
21462143
final AtomicReferenceArray<Object> atomicArray = new AtomicReferenceArray<>(3);

0 commit comments

Comments
 (0)