diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2018-11-01 21:21:04 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2018-11-01 21:23:12 +0000 |
commit | 647150427e295f312deed6c9464f801b00820698 (patch) | |
tree | 23450f90286c4c95128f31a582ad4d13eb4800bc /gtk | |
parent | 52dace9d2921d8b3784702df7ab5c16fca2109a4 (diff) |
gtk: compile with older WebKit JS interface too.
Change-Id: I62ce96932b77ea8051cfb2862cb4f617d2804c1d
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/mobile.cpp | 62 |
1 files changed, 48 insertions, 14 deletions
diff --git a/gtk/mobile.cpp b/gtk/mobile.cpp index a819972cb..0797fd9c6 100644 --- a/gtk/mobile.cpp +++ b/gtk/mobile.cpp @@ -36,6 +36,9 @@ #include <gtk/gtk.h> #include <webkit2/webkit2.h> +#if !WEBKIT_CHECK_VERSION(2,22,0) +# include<JavaScriptCore/JavaScript.h> +#endif #include "FakeSocket.hpp" #include "Log.hpp" @@ -133,27 +136,55 @@ static void send2JS(const std::vector<char>& buffer) }, jscopy); } -static void handle_debug_message(WebKitUserContentManager *manager, - WebKitJavascriptResult *js_result, - gpointer user_data) +static char *js_result_as_gstring(WebKitJavascriptResult *js_result) { +#if WEBKIT_CHECK_VERSION(2,22,0) // unclear when this API changed ... JSCValue *value = webkit_javascript_result_get_js_value(js_result); if (jsc_value_is_string(value)) - LOG_TRC_NOFILE("From JS: debug: " << jsc_value_to_string(value)); + return jsc_value_to_string(value); + else + return nullptr; +#else // older Webkits + JSValueRef value = webkit_javascript_result_get_value(js_result); + JSContextRef ctx = webkit_javascript_result_get_global_context(js_result); + if (JSValueIsString(ctx, value)) + { + const JSStringRef js_str = JSValueToStringCopy(ctx, value, nullptr); + size_t gstring_max = JSStringGetMaximumUTF8CStringSize(js_str); + char *gstring = (char *)g_malloc(gstring_max); + if (gstring) + JSStringGetUTF8CString(js_str, gstring, gstring_max); + else + LOG_TRC_NOFILE("No string"); + JSStringRelease(js_str); + return gstring; + } else - LOG_TRC_NOFILE("From JS: debug: some object"); + LOG_TRC_NOFILE("Unexpected object type " << JSValueGetType(ctx, value)); + return nullptr; +#endif +} + +static void handle_message(const char * type, WebKitJavascriptResult *js_result) +{ + gchar *string_value = js_result_as_gstring(js_result); + + if (string_value) + LOG_TRC_NOFILE("From JS: " << type << ": " << string_value); + else + LOG_TRC_NOFILE("From JS: " << type << ": some object"); + + g_free(string_value); } static void handle_lool_message(WebKitUserContentManager *manager, WebKitJavascriptResult *js_result, gpointer user_data) { - JSCValue *value = webkit_javascript_result_get_js_value(js_result); + gchar *string_value = js_result_as_gstring(js_result); - if (jsc_value_is_string(value)) + if (string_value) { - gchar *string_value = jsc_value_to_string(value); - LOG_TRC_NOFILE("From JS: lool: " << string_value); if (strcmp(string_value, "HULLO") == 0) @@ -257,15 +288,18 @@ static void handle_lool_message(WebKitUserContentManager *manager, LOG_TRC_NOFILE("From JS: lool: some object"); } +static void handle_debug_message(WebKitUserContentManager *manager, + WebKitJavascriptResult *js_result, + gpointer user_data) +{ + handle_message("debug", js_result); +} + static void handle_error_message(WebKitUserContentManager *manager, WebKitJavascriptResult *js_result, gpointer user_data) { - JSCValue *value = webkit_javascript_result_get_js_value(js_result); - if (jsc_value_is_string(value)) - LOG_TRC_NOFILE("From JS: error: " << jsc_value_to_string(value)); - else - LOG_TRC_NOFILE("From JS: error: some object"); + handle_message("error", js_result); } int main(int argc, char* argv[]) |