[evolution] Clear JSCContext exceptions after the call



commit ced1e32958d24e57b09fcddd5f7bcde3f7bab0a9
Author: Milan Crha <mcrha redhat com>
Date:   Fri Oct 25 09:09:33 2019 +0200

    Clear JSCContext exceptions after the call
    
    The JSCContext keeps exceptions between multiple calls, thus when one
    call fails the consecutive calls would reuse the previous exception
    until it is explicitly cleared, even though the following call succeeded
    without any issue.

 src/e-util/e-web-view-jsc-utils.c      |  6 +++++-
 src/e-util/test-web-view-jsc.c         | 10 +++++++---
 src/modules/itip-formatter/itip-view.c |  4 +++-
 src/web-extensions/e-web-extension.c   |  2 ++
 4 files changed, 17 insertions(+), 5 deletions(-)
---
diff --git a/src/e-util/e-web-view-jsc-utils.c b/src/e-util/e-web-view-jsc-utils.c
index ccdd8c84ff..f0ede92ebd 100644
--- a/src/e-util/e-web-view-jsc-utils.c
+++ b/src/e-util/e-web-view-jsc-utils.c
@@ -279,8 +279,10 @@ ewv_jsc_call_done_cb (GObject *source,
                value = webkit_javascript_result_get_js_value (js_result);
                exception = jsc_context_get_exception (jsc_value_get_context (value));
 
-               if (exception)
+               if (exception) {
                        g_warning ("Failed to call '%s': %s", script, jsc_exception_get_message (exception));
+                       jsc_context_clear_exception (jsc_value_get_context (value));
+               }
 
                webkit_javascript_result_unref (js_result);
        }
@@ -513,6 +515,7 @@ ewv_jsc_get_content_finish (WebKitWebView *web_view,
 
                if (exception) {
                        g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Call failed: %s", 
jsc_exception_get_message (exception));
+                       jsc_context_clear_exception (jsc_value_get_context (value));
                        webkit_javascript_result_unref (js_result);
                        return FALSE;
                }
@@ -689,6 +692,7 @@ e_web_view_jsc_get_element_from_point_finish (WebKitWebView *web_view,
 
                if (exception) {
                        g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Call failed: %s", 
jsc_exception_get_message (exception));
+                       jsc_context_clear_exception (jsc_value_get_context (value));
                        webkit_javascript_result_unref (js_result);
                        return FALSE;
                }
diff --git a/src/e-util/test-web-view-jsc.c b/src/e-util/test-web-view-jsc.c
index 0856984df9..33780da89a 100644
--- a/src/e-util/test-web-view-jsc.c
+++ b/src/e-util/test-web-view-jsc.c
@@ -238,8 +238,10 @@ test_utils_jsc_call_done_cb (GObject *source_object,
                value = webkit_javascript_result_get_js_value (js_result);
                exception = jsc_context_get_exception (jsc_value_get_context (value));
 
-               if (exception)
+               if (exception) {
                        g_warning ("Failed to call '%s': %s", script, jsc_exception_get_message (exception));
+                       jsc_context_clear_exception (jsc_value_get_context (value));
+               }
 
                webkit_javascript_result_unref (js_result);
        }
@@ -282,10 +284,12 @@ test_utils_jsc_call_sync_done_cb (GObject *source_object,
                value = webkit_javascript_result_get_js_value (js_result);
                exception = jsc_context_get_exception (jsc_value_get_context (value));
 
-               if (exception)
+               if (exception) {
                        g_warning ("Failed to call '%s': %s", jcd->script, jsc_exception_get_message 
(exception));
-               else if (jcd->out_result)
+                       jsc_context_clear_exception (jsc_value_get_context (value));
+               } else if (jcd->out_result) {
                        *(jcd->out_result) = value ? g_object_ref (value) : NULL;
+               }
 
                webkit_javascript_result_unref (js_result);
        }
diff --git a/src/modules/itip-formatter/itip-view.c b/src/modules/itip-formatter/itip-view.c
index 66ecb63ddc..5c8941a96f 100644
--- a/src/modules/itip-formatter/itip-view.c
+++ b/src/modules/itip-formatter/itip-view.c
@@ -885,8 +885,10 @@ itip_view_get_state_cb (GObject *source_object,
                        value = webkit_javascript_result_get_js_value (js_result);
                        exception = jsc_context_get_exception (jsc_value_get_context (value));
 
-                       if (exception)
+                       if (exception) {
                                g_warning ("Failed to call 'ItipView.GetState()': %s", 
jsc_exception_get_message (exception));
+                               jsc_context_clear_exception (jsc_value_get_context (value));
+                       }
 
                        view->priv->state_rsvp_comment = e_web_view_jsc_get_object_property_string (value, 
"rsvp-comment", NULL);
                        view->priv->state_rsvp_check = e_web_view_jsc_get_object_property_boolean (value, 
"rsvp-check", FALSE);
diff --git a/src/web-extensions/e-web-extension.c b/src/web-extensions/e-web-extension.c
index 6e7b960573..77db1f54ed 100644
--- a/src/web-extensions/e-web-extension.c
+++ b/src/web-extensions/e-web-extension.c
@@ -173,6 +173,8 @@ load_javascript_file (JSCContext *jsc_context,
                        jsc_exception_get_line_number (exception),
                        jsc_exception_get_column_number (exception),
                        jsc_exception_get_message (exception));
+
+               jsc_context_clear_exception (jsc_context);
        }
 
        g_clear_object (&result);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]