[epiphany/pgriffis/web-extension/api-cleanups: 8/20] WebExtensions: alarms: Rewrite using only async handlers
- From: Patrick Griffis <pgriffis src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany/pgriffis/web-extension/api-cleanups: 8/20] WebExtensions: alarms: Rewrite using only async handlers
- Date: Wed, 6 Jul 2022 01:22:16 +0000 (UTC)
commit 6945eb8431229da115a28418ffcc71d1933d1e6f
Author: Patrick Griffis <pgriffis igalia com>
Date: Thu Jun 30 21:12:06 2022 -0500
WebExtensions: alarms: Rewrite using only async handlers
src/webextension/api/alarms.c | 94 ++++++++++++++++++++-----------------------
1 file changed, 43 insertions(+), 51 deletions(-)
---
diff --git a/src/webextension/api/alarms.c b/src/webextension/api/alarms.c
index eda9252bf..003026625 100644
--- a/src/webextension/api/alarms.c
+++ b/src/webextension/api/alarms.c
@@ -162,11 +162,11 @@ on_alarm_start (gpointer user_data)
return G_SOURCE_REMOVE;
}
-static char *
+static void
alarms_handler_create (EphyWebExtensionSender *sender,
- char *name,
- JSCValue *args,
- GError **error)
+ char *name,
+ JSCValue *args,
+ GTask *task)
{
g_autoptr (JSCValue) alarm_name = NULL;
g_autoptr (JSCValue) alarm_info = NULL;
@@ -194,8 +194,8 @@ alarms_handler_create (EphyWebExtensionSender *sender,
}
if (delay_in_minutes && when) {
- g_set_error (error, WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_INVALID_ARGUMENT, "alarms.create(): Both
'when' and 'delayInMinutes' cannot be set");
- return NULL;
+ g_task_return_new_error (task, WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_INVALID_ARGUMENT,
"alarms.create(): Both 'when' and 'delayInMinutes' cannot be set");
+ return;
}
alarm = g_new0 (Alarm, 1);
@@ -216,14 +216,14 @@ alarms_handler_create (EphyWebExtensionSender *sender,
g_hash_table_replace (alarms, alarm->name, alarm);
- return NULL;
+ g_task_return_pointer (task, NULL, NULL);
}
-static char *
+static void
alarms_handler_clear (EphyWebExtensionSender *sender,
- char *name,
- JSCValue *args,
- GError **error)
+ char *name,
+ JSCValue *args,
+ GTask *task)
{
GHashTable *alarms = get_alarms (sender->extension);
g_autoptr (JSCValue) name_value = jsc_value_object_get_property_at_index (args, 0);
@@ -234,32 +234,36 @@ alarms_handler_clear (EphyWebExtensionSender *sender,
else
name_str = jsc_value_to_string (name_value);
- if (g_hash_table_remove (alarms, name_str))
- return g_strdup ("true");
+ if (g_hash_table_remove (alarms, name_str)) {
+ g_task_return_pointer (task, g_strdup ("true"), g_free);
+ return;
+ }
- return g_strdup ("false");
+ g_task_return_pointer (task, g_strdup ("false"), g_free);
}
-static char *
-alarms_handler_clear_all (EphyWebExtensionSender *sender,
- char *name,
- JSCValue *args,
- GError **error)
+static void
+alarms_handler_clear_all (EphyWebExtensionSender *sender,
+ char *name,
+ JSCValue *args,
+ GTask *task)
{
GHashTable *alarms = get_alarms (sender->extension);
- if (g_hash_table_size (alarms) == 0)
- return g_strdup ("false");
+ if (g_hash_table_size (alarms) == 0) {
+ g_task_return_pointer (task, g_strdup ("false"), g_free);
+ return;
+ }
g_hash_table_remove_all (alarms);
- return g_strdup ("true");
+ g_task_return_pointer (task, g_strdup ("true"), g_free);
}
-static char *
-alarms_handler_get (EphyWebExtensionSender *sender,
- char *name,
- JSCValue *args,
- GError **error)
+static void
+alarms_handler_get (EphyWebExtensionSender *sender,
+ char *name,
+ JSCValue *args,
+ GTask *task)
{
GHashTable *alarms = get_alarms (sender->extension);
g_autoptr (JSCValue) name_value = jsc_value_object_get_property_at_index (args, 0);
@@ -272,14 +276,14 @@ alarms_handler_get (EphyWebExtensionSender *sender,
name_str = jsc_value_to_string (name_value);
alarm = g_hash_table_lookup (alarms, name_str);
- return alarm_to_json (alarm);
+ g_task_return_pointer (task, alarm_to_json (alarm), g_free);
}
-static char *
-alarms_handler_get_all (EphyWebExtensionSender *sender,
- char *name,
- JSCValue *args,
- GError **error)
+static void
+alarms_handler_get_all (EphyWebExtensionSender *sender,
+ char *name,
+ JSCValue *args,
+ GTask *task)
{
GHashTable *alarms = get_alarms (sender->extension);
g_autoptr (JsonNode) node = json_node_init_array (json_node_alloc (), json_array_new ());
@@ -291,10 +295,10 @@ alarms_handler_get_all (EphyWebExtensionSender *sender,
while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&alarm))
json_array_add_element (array, alarm_to_node (alarm));
- return json_to_string (node, FALSE);
+ g_task_return_pointer (task, json_to_string (node, FALSE), g_free);
}
-static EphyWebExtensionSyncApiHandler alarms_handlers[] = {
+static EphyWebExtensionAsyncApiHandler alarms_handlers[] = {
{"clear", alarms_handler_clear},
{"clearAll", alarms_handler_clear_all},
{"create", alarms_handler_create},
@@ -308,31 +312,19 @@ ephy_web_extension_api_alarms_handler (EphyWebExtensionSender *sender,
JSCValue *args,
GTask *task)
{
- g_autoptr (GError) error = NULL;
-
if (!ephy_web_extension_has_permission (sender->extension, "alarms")) {
- g_warning ("Extension %s tried to use alarms without permission.", ephy_web_extension_get_name
(sender->extension));
- error = g_error_new_literal (WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_PERMISSION_DENIED, "alarms:
Permission Denied");
- g_task_return_error (task, g_steal_pointer (&error));
+ g_task_return_new_error (task, WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_PERMISSION_DENIED, "alarms:
Permission Denied");
return;
}
for (guint idx = 0; idx < G_N_ELEMENTS (alarms_handlers); idx++) {
- EphyWebExtensionSyncApiHandler handler = alarms_handlers[idx];
- char *ret;
+ EphyWebExtensionAsyncApiHandler handler = alarms_handlers[idx];
if (g_strcmp0 (handler.name, name) == 0) {
- ret = handler.execute (sender, name, args, &error);
-
- if (error)
- g_task_return_error (task, g_steal_pointer (&error));
- else
- g_task_return_pointer (task, ret, g_free);
-
+ handler.execute (sender, name, args, task);
return;
}
}
- error = g_error_new (WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_NOT_IMPLEMENTED, "alarms.%s(): Not
Implemented", name);
- g_task_return_error (task, g_steal_pointer (&error));
+ g_task_return_new_error (task, WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_NOT_IMPLEMENTED, "alarms.%s(): Not
Implemented", name);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]