[evolution] Clear JSCContext exceptions after the call
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Clear JSCContext exceptions after the call
- Date: Fri, 25 Oct 2019 07:10:52 +0000 (UTC)
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]