Give context to js functions instead of web frame.
authorDaniel Carl <danielcarl@gmx.de>
Wed, 30 Jul 2014 12:48:24 +0000 (14:48 +0200)
committerDaniel Carl <danielcarl@gmx.de>
Wed, 30 Jul 2014 13:01:05 +0000 (15:01 +0200)
src/ex.c
src/hints.c
src/js.c
src/js.h
src/main.c
src/setting.c

index 88ea453..fdf55e8 100644 (file)
--- 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);
index 746c56b..2943def 100644 (file)
@@ -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);
     }
 }
 
index 3766ff8..973dbba 100644 (file)
--- 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;
     }
index 491fc50..9dea2bb 100644 (file)
--- a/src/js.h
+++ b/src/js.h
 
 #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);
index 9cc33ca..78a20c6 100644 (file)
@@ -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 */
index 8bf80dd..4819236 100644 (file)
@@ -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);