From beb199cc9b040d287f1af8cd3fb2dfa167f201df Mon Sep 17 00:00:00 2001 From: Daniel Carl Date: Wed, 30 Jul 2014 14:48:24 +0200 Subject: [PATCH] Give context to js functions instead of web frame. --- src/ex.c | 3 ++- src/hints.c | 2 +- src/js.c | 11 ++++------- src/js.h | 6 +++--- src/main.c | 4 +++- src/setting.c | 3 ++- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/ex.c b/src/ex.c index 88ea453..fdf55e8 100644 --- a/src/ex.c +++ b/src/ex.c @@ -726,7 +726,8 @@ static gboolean ex_eval(const ExArg *arg) } success = js_eval( - webkit_web_view_get_main_frame(vb.gui.webview), arg->rhs->str, NULL, &value + webkit_web_frame_get_global_context(webkit_web_view_get_main_frame(vb.gui.webview)), + arg->rhs->str, NULL, &value ); if (success) { vb_echo(VB_MSG_NORMAL, false, "%s", value); diff --git a/src/hints.c b/src/hints.c index 746c56b..2943def 100644 --- a/src/hints.c +++ b/src/hints.c @@ -62,7 +62,7 @@ void hints_init(WebKitWebFrame *frame) } if (!hints.obj) { hints.ctx = webkit_web_frame_get_global_context(frame); - hints.obj = js_create_object(frame, HINTS_JS); + hints.obj = js_create_object(hints.ctx, HINTS_JS); } } diff --git a/src/js.c b/src/js.c index 3766ff8..973dbba 100644 --- a/src/js.c +++ b/src/js.c @@ -27,14 +27,14 @@ static gboolean evaluate_string(JSContextRef ctx, const char *script, /** * Run scripts out of given file in the given frame. */ -gboolean js_eval_file(WebKitWebFrame *frame, const char *file) +gboolean js_eval_file(JSContextRef ctx, const char *file) { char *js = NULL, *value = NULL; if (g_file_test(file, G_FILE_TEST_IS_REGULAR) && g_file_get_contents(file, &js, NULL, NULL) ) { - gboolean success = js_eval(frame, js, file, &value); + gboolean success = js_eval(ctx, js, file, &value); if (!success) { g_warning("JavaScript error in %s: %s", file, value); } @@ -53,12 +53,11 @@ gboolean js_eval_file(WebKitWebFrame *frame, const char *file) * else with the exception message. In both cases this must be freed by the * caller if no longer used. */ -gboolean js_eval(WebKitWebFrame *frame, const char *script, const char *file, +gboolean js_eval(JSContextRef ctx, const char *script, const char *file, char **value) { gboolean success; JSValueRef result = NULL; - JSContextRef ctx = webkit_web_frame_get_global_context(frame); success = evaluate_string(ctx, script, file, &result); *value = js_ref_to_string(ctx, result); @@ -69,12 +68,10 @@ gboolean js_eval(WebKitWebFrame *frame, const char *script, const char *file, /** * Creates a JavaScript object in contect of given frame. */ -JSObjectRef js_create_object(WebKitWebFrame *frame, const char *script) +JSObjectRef js_create_object(JSContextRef ctx, const char *script) { JSValueRef result = NULL, exc = NULL; JSObjectRef object; - JSContextRef ctx = webkit_web_frame_get_global_context(frame); - if (!evaluate_string(ctx, script, NULL, &result)) { return NULL; } diff --git a/src/js.h b/src/js.h index 491fc50..9dea2bb 100644 --- a/src/js.h +++ b/src/js.h @@ -22,10 +22,10 @@ #include "main.h" -gboolean js_eval_file(WebKitWebFrame *frame, const char *file); -gboolean js_eval(WebKitWebFrame *frame, const char *script, const char *file, +gboolean js_eval_file(JSContextRef ctx, const char *file); +gboolean js_eval(JSContextRef ctx, const char *script, const char *file, char **value); -JSObjectRef js_create_object(WebKitWebFrame *frame, const char *script); +JSObjectRef js_create_object(JSContextRef ctx, const char *script); char* js_object_call_function(JSContextRef ctx, JSObjectRef obj, const char *func, int count, JSValueRef params[]); char *js_ref_to_string(JSContextRef ctx, JSValueRef ref); diff --git a/src/main.c b/src/main.c index 9cc33ca..78a20c6 100644 --- a/src/main.c +++ b/src/main.c @@ -507,6 +507,7 @@ static void webview_load_status_cb(WebKitWebView *view, GParamSpec *pspec) uri = webkit_web_view_get_uri(view); { WebKitWebFrame *frame = webkit_web_view_get_main_frame(view); + JSContextRef ctx; /* set the status */ if (g_str_has_prefix(uri, "https://")) { WebKitWebDataSource *src = webkit_web_frame_get_data_source(frame); @@ -524,7 +525,8 @@ static void webview_load_status_cb(WebKitWebView *view, GParamSpec *pspec) hints_init(frame); /* run user script file */ - js_eval_file(frame, vb.files[FILES_SCRIPT]); + ctx = webkit_web_frame_get_global_context(frame); + js_eval_file(ctx, vb.files[FILES_SCRIPT]); } /* if we load a page from a submitted form, leafe the insert mode */ diff --git a/src/setting.c b/src/setting.c index 8bf80dd..4819236 100644 --- a/src/setting.c +++ b/src/setting.c @@ -642,9 +642,10 @@ static gboolean validate_js_regexp_list(const char *pattern) { gboolean result; char *js, *value = NULL; + WebKitWebFrame *frame = webkit_web_view_get_main_frame(vb.gui.webview); js = g_strdup_printf("var i;for(i=0;i<[%s].length;i++);", pattern); - result = js_eval(webkit_web_view_get_main_frame(vb.gui.webview), js, NULL, &value); + result = js_eval(webkit_web_frame_get_global_context(frame), js, NULL, &value); g_free(js); if (!result) { vb_echo(VB_MSG_ERROR, true, "%s", value); -- 2.20.1