[epiphany/wip/sync: 7/31] sync: Replace json_parser_load_from_data() with json_from_string() where parser is not reused
- From: Gabriel Ivașcu <gabrielivascu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany/wip/sync: 7/31] sync: Replace json_parser_load_from_data() with json_from_string() where parser is not reused
- Date: Fri, 14 Apr 2017 15:52:08 +0000 (UTC)
commit 579f4a303e0ed1d6e89cd2c2c0b4d28e89b0db0f
Author: Gabriel Ivascu <ivascu gabriel59 gmail com>
Date: Wed Apr 5 11:52:21 2017 +0300
sync: Replace json_parser_load_from_data() with json_from_string() where parser is not reused
src/prefs-dialog.c | 15 ++++----
src/sync/ephy-sync-crypto.c | 28 ++++++++-------
src/sync/ephy-sync-secret.c | 18 +++-------
src/sync/ephy-sync-service.c | 72 ++++++++++++++++++----------------------
src/sync/ephy-synchronizable.c | 19 +++++-----
5 files changed, 68 insertions(+), 84 deletions(-)
---
diff --git a/src/prefs-dialog.c b/src/prefs-dialog.c
index 44fc19d..b46ec2e 100644
--- a/src/prefs-dialog.c
+++ b/src/prefs-dialog.c
@@ -289,18 +289,17 @@ sync_fxa_server_message_cb (WebKitUserContentManager *manager,
WebKitJavascriptResult *result,
PrefsDialog *dialog)
{
- JsonParser *parser;
- JsonObject *object;
+ JsonNode *node;
+ JsonObject *json;
JsonObject *detail;
char *json_string;
const char *type;
const char *command;
json_string = ephy_embed_utils_get_js_result_as_string (result);
- parser = json_parser_new ();
- json_parser_load_from_data (parser, json_string, -1, NULL);
- object = json_node_get_object (json_parser_get_root (parser));
- type = json_object_get_string_member (object, "type");
+ node = json_from_string (json_string, NULL);
+ json = json_node_get_object (node);
+ type = json_object_get_string_member (json, "type");
/* The only message type we can receive is FirefoxAccountsCommand. */
if (g_strcmp0 (type, "FirefoxAccountsCommand") != 0) {
@@ -308,7 +307,7 @@ sync_fxa_server_message_cb (WebKitUserContentManager *manager,
goto out;
}
- detail = json_object_get_object_member (object, "detail");
+ detail = json_object_get_object_member (json, "detail");
command = json_object_get_string_member (detail, "command");
if (g_strcmp0 (command, "loaded") == 0) {
@@ -355,7 +354,7 @@ sync_fxa_server_message_cb (WebKitUserContentManager *manager,
out:
g_free (json_string);
- g_object_unref (parser);
+ json_node_unref (node);
}
static void
diff --git a/src/sync/ephy-sync-crypto.c b/src/sync/ephy-sync-crypto.c
index ec96595..2c7fcde 100644
--- a/src/sync/ephy-sync-crypto.c
+++ b/src/sync/ephy-sync-crypto.c
@@ -884,8 +884,9 @@ char *
ephy_sync_crypto_decrypt_record (const char *payload,
SyncCryptoKeyBundle *bundle)
{
- JsonParser *parser;
+ JsonNode *node;
JsonObject *json;
+ GError *error = NULL;
guint8 *aes_key;
guint8 *hmac_key;
guint8 *ciphertext;
@@ -901,21 +902,22 @@ ephy_sync_crypto_decrypt_record (const char *payload,
g_return_val_if_fail (bundle, NULL);
/* Extract ciphertext, iv and hmac from payload. */
- parser = json_parser_new ();
- if (!json_parser_load_from_data (parser, payload, -1, NULL)) {
- g_warning ("Payload is not a valid JSON");
- goto free_parser;
+ node = json_from_string (payload, &error);
+ if (error) {
+ g_warning ("Payload is not a valid JSON: %s", error->message);
+ g_error_free (error);
+ goto out;
}
- if (!JSON_NODE_HOLDS_OBJECT (json_parser_get_root (parser))) {
+ if (!JSON_NODE_HOLDS_OBJECT (node)) {
g_warning ("JSON node does not hold a JSON object");
- goto free_parser;
+ goto free_node;
}
- json = json_node_get_object (json_parser_get_root (parser));
+ json = json_node_get_object (node);
if (!json_object_has_member (json, "ciphertext") ||
!json_object_has_member (json, "IV") ||
!json_object_has_member (json, "hmac")) {
g_warning ("JSON object has missing members");
- goto free_parser;
+ goto free_node;
}
ciphertext_b64 = json_object_get_string_member (json, "ciphertext");
iv_b64 = json_object_get_string_member (json, "IV");
@@ -926,7 +928,7 @@ ephy_sync_crypto_decrypt_record (const char *payload,
hmac_key = ephy_sync_crypto_decode_hex (bundle->hmac_key_hex);
if (!aes_key || !hmac_key) {
g_warning ("The key bundle does not hold valid keys");
- goto free_keys;
+ goto free_node;
}
/* Under no circumstances should a client try to decrypt a record
@@ -946,9 +948,9 @@ ephy_sync_crypto_decrypt_record (const char *payload,
free_keys:
g_free (aes_key);
g_free (hmac_key);
-free_parser:
- g_object_unref (parser);
-
+free_node:
+ json_node_unref (node);
+out:
return cleartext;
}
diff --git a/src/sync/ephy-sync-secret.c b/src/sync/ephy-sync-secret.c
index 8fa0b15..975baf2 100644
--- a/src/sync/ephy-sync-secret.c
+++ b/src/sync/ephy-sync-secret.c
@@ -82,13 +82,12 @@ load_tokens_cb (SecretService *service,
SecretItem *item;
GHashTable *attributes;
SecretValue *value = NULL;
- JsonParser *parser = NULL;
+ JsonNode *node = NULL;
JsonObject *json;
GList *matches = NULL;
GList *members = NULL;
GError *error = NULL;
GError *ret_error = NULL;
- const char *tokens;
const char *email;
const char *user_email;
@@ -137,10 +136,7 @@ load_tokens_cb (SecretService *service,
goto out;
}
- parser = json_parser_new ();
- tokens = secret_value_get_text (value);
- json_parser_load_from_data (parser, tokens, -1, &error);
-
+ node = json_from_string (secret_value_get_text (value), &error);
if (error) {
g_set_error (&ret_error,
SYNC_SECRET_ERROR,
@@ -150,7 +146,7 @@ load_tokens_cb (SecretService *service,
goto out;
}
- json = json_node_get_object (json_parser_get_root (parser));
+ json = json_node_get_object (node);
members = json_object_get_members (json);
/* Set the tokens. */
@@ -166,16 +162,12 @@ out:
if (error)
g_error_free (error);
-
if (ret_error)
g_error_free (ret_error);
-
if (value)
secret_value_unref (value);
-
- if (parser)
- g_object_unref (parser);
-
+ if (node)
+ json_node_unref (node);
g_list_free (members);
g_list_free_full (matches, g_object_unref);
}
diff --git a/src/sync/ephy-sync-service.c b/src/sync/ephy-sync-service.c
index d7194b0..11bb82d 100644
--- a/src/sync/ephy-sync-service.c
+++ b/src/sync/ephy-sync-service.c
@@ -445,7 +445,7 @@ obtain_storage_credentials_cb (SoupSession *session,
gpointer user_data)
{
EphySyncService *self;
- JsonParser *parser;
+ JsonNode *node;
JsonObject *json;
self = ephy_shell_get_sync_service (ephy_shell_get_default ());
@@ -458,10 +458,8 @@ obtain_storage_credentials_cb (SoupSession *session,
return;
}
- parser = json_parser_new ();
- json_parser_load_from_data (parser, msg->response_body->data, -1, NULL);
- json = json_node_get_object (json_parser_get_root (parser));
-
+ node = json_from_string (msg->response_body->data, NULL);
+ json = json_node_get_object (node);
self->storage_endpoint = g_strdup (json_object_get_string_member (json, "api_endpoint"));
self->storage_credentials_id = g_strdup (json_object_get_string_member (json, "id"));
self->storage_credentials_key = g_strdup (json_object_get_string_member (json, "key"));
@@ -470,7 +468,7 @@ obtain_storage_credentials_cb (SoupSession *session,
self->locked = FALSE;
ephy_sync_service_send_next_storage_request (self);
- g_object_unref (parser);
+ json_node_unref (node);
}
static void
@@ -519,15 +517,14 @@ obtain_signed_certificate_cb (SoupSession *session,
gpointer user_data)
{
EphySyncService *self;
- JsonParser *parser;
+ JsonNode *node;
JsonObject *json;
const char *certificate;
self = ephy_shell_get_sync_service (ephy_shell_get_default ());
- parser = json_parser_new ();
- json_parser_load_from_data (parser, msg->response_body->data, -1, NULL);
- json = json_node_get_object (json_parser_get_root (parser));
+ node = json_from_string (msg->response_body->data, NULL);
+ json = json_node_get_object (node);
/* Since a new Firefox Account password implies new tokens, this will fail
* with an error code 110 (Invalid authentication token in request signature)
@@ -567,7 +564,7 @@ obtain_signed_certificate_cb (SoupSession *session,
ephy_sync_service_obtain_storage_credentials (self);
out:
- g_object_unref (parser);
+ json_node_unref (node);
}
static void
@@ -1121,14 +1118,13 @@ get_account_keys_cb (SoupSession *session,
{
EphySyncService *self;
SignInAsyncData *data;
- JsonParser *parser;
+ JsonNode *node;
JsonObject *json;
self = ephy_shell_get_sync_service (ephy_shell_get_default ());
data = (SignInAsyncData *)user_data;
- parser = json_parser_new ();
- json_parser_load_from_data (parser, msg->response_body->data, -1, NULL);
- json = json_node_get_object (json_parser_get_root (parser));
+ node = json_from_string (msg->response_body->data, NULL);
+ json = json_node_get_object (node);
if (msg->status_code == 200) {
/* Extract the master sync keys from the bundle and save tokens. */
@@ -1149,7 +1145,7 @@ get_account_keys_cb (SoupSession *session,
sign_in_async_data_free (data);
}
- g_object_unref (parser);
+ json_node_unref (node);
}
void
@@ -1263,7 +1259,7 @@ download_synchronizable_cb (SoupSession *session,
EphySynchronizable *synchronizable;
SyncCryptoKeyBundle *bundle;
SyncAsyncData *data;
- JsonParser *parser;
+ JsonNode *node;
JsonObject *bso;
GError *error = NULL;
GType type;
@@ -1279,26 +1275,25 @@ download_synchronizable_cb (SoupSession *session,
goto out;
}
- parser = json_parser_new ();
- json_parser_load_from_data (parser, msg->response_body->data, -1, &error);
+ node = json_from_string (msg->response_body->data, &error);
if (error) {
g_warning ("Response is not a valid JSON");
g_error_free (error);
- goto free_parser;
+ goto free_node;
}
- if (!JSON_NODE_HOLDS_OBJECT (json_parser_get_root (parser))) {
+ if (!JSON_NODE_HOLDS_OBJECT (node)) {
g_warning ("JSON root does not hold a JSON object");
- goto free_parser;
+ goto free_node;
}
- bso = json_node_get_object (json_parser_get_root (parser));
+ bso = json_node_get_object (node);
type = ephy_synchronizable_manager_get_synchronizable_type (data->manager);
collection = ephy_synchronizable_manager_get_collection_name (data->manager);
bundle = ephy_sync_service_get_key_bundle (self, collection);
synchronizable = EPHY_SYNCHRONIZABLE (ephy_synchronizable_from_bso (bso, type, bundle, &is_deleted));
if (!synchronizable) {
g_warning ("Failed to create synchronizable object from BSO");
- goto free_parser;
+ goto free_node;
}
/* Delete the local object and add the remote one if it is not marked as deleted. */
@@ -1311,8 +1306,8 @@ download_synchronizable_cb (SoupSession *session,
}
g_object_unref (synchronizable);
-free_parser:
- g_object_unref (parser);
+free_node:
+ json_node_unref (node);
out:
sync_async_data_free (data);
ephy_sync_service_send_next_storage_request (self);
@@ -1421,9 +1416,8 @@ sync_collection_cb (SoupSession *session,
SyncCollectionAsyncData *data;
EphySynchronizable *remote;
SyncCryptoKeyBundle *bundle;
- JsonParser *parser = NULL;
+ JsonNode *node = NULL;
JsonArray *array;
- JsonNode *node;
JsonObject *object;
GError *error = NULL;
GList *remotes_updated = NULL;
@@ -1450,29 +1444,27 @@ sync_collection_cb (SoupSession *session,
goto out;
}
- parser = json_parser_new ();
- json_parser_load_from_data (parser, msg->response_body->data, -1, &error);
+ node = json_from_string (msg->response_body->data, &error);
if (error) {
g_warning ("Response is not a valid JSON: %s", error->message);
g_error_free (error);
- goto free_parser;
+ goto free_node;
}
- if (!JSON_NODE_HOLDS_ARRAY (json_parser_get_root (parser))) {
+ if (!JSON_NODE_HOLDS_ARRAY (node)) {
g_warning ("JSON root does not hold an array");
- goto free_parser;
+ goto free_node;
}
type = ephy_synchronizable_manager_get_synchronizable_type (data->manager);
bundle = ephy_sync_service_get_key_bundle (self, collection);
- array = json_node_get_array (json_parser_get_root (parser));
+ array = json_node_get_array (node);
for (guint i = 0; i < json_array_get_length (array); i++) {
- node = json_array_get_element (array, i);
- if (!JSON_NODE_HOLDS_OBJECT (node)) {
+ if (!JSON_NODE_HOLDS_OBJECT (json_array_get_element (array, i))) {
g_warning ("Array member does not hold a JSON object, skipping...");
continue;
}
- object = json_node_get_object (node);
+ object = json_node_get_object (json_array_get_element (array, i));
remote = EPHY_SYNCHRONIZABLE (ephy_synchronizable_from_bso (object, type, bundle, &is_deleted));
if (!remote) {
g_warning ("Failed to create synchronizable object from BSO, skipping...");
@@ -1504,9 +1496,9 @@ merge_remotes:
g_list_free_full (to_upload, g_object_unref);
g_list_free_full (remotes_updated, g_object_unref);
g_list_free_full (remotes_deleted, g_object_unref);
-free_parser:
- if (parser)
- g_object_unref (parser);
+free_node:
+ if (node)
+ json_node_unref (node);
out:
if (data->collection_index == data->num_collections)
g_signal_emit (self, signals[SYNC_FINISHED], 0);
diff --git a/src/sync/ephy-synchronizable.c b/src/sync/ephy-synchronizable.c
index 93fa18f..dbe3e7f 100644
--- a/src/sync/ephy-synchronizable.c
+++ b/src/sync/ephy-synchronizable.c
@@ -210,7 +210,7 @@ ephy_synchronizable_from_bso (JsonObject *bso,
{
GObject *object = NULL;
GError *error = NULL;
- JsonParser *parser;
+ JsonNode *node;
JsonObject *json;
char *serialized;
const char *payload;
@@ -235,18 +235,17 @@ ephy_synchronizable_from_bso (JsonObject *bso,
goto out;
}
- parser = json_parser_new ();
- json_parser_load_from_data (parser, serialized, -1, &error);
+ node = json_from_string (serialized, &error);
if (error) {
g_warning ("Decrypted text is not a valid JSON: %s", error->message);
g_error_free (error);
- goto free_parser;
+ goto free_node;
}
- if (!JSON_NODE_HOLDS_OBJECT (json_parser_get_root (parser))) {
+ if (!JSON_NODE_HOLDS_OBJECT (node)) {
g_warning ("JSON root does not hold a JSON object");
- goto free_parser;
+ goto free_node;
}
- json = json_node_get_object (json_parser_get_root (parser));
+ json = json_node_get_object (node);
if (json_object_has_member (json, "deleted")) {
if (JSON_NODE_HOLDS_VALUE (json_object_get_member (json, "deleted")))
*is_deleted = json_object_get_boolean_member (json, "deleted");
@@ -258,14 +257,14 @@ ephy_synchronizable_from_bso (JsonObject *bso,
if (error) {
g_warning ("Failed to create GObject from BSO: %s", error->message);
g_error_free (error);
- goto free_parser;
+ goto free_node;
}
ephy_synchronizable_set_modification_time (EPHY_SYNCHRONIZABLE (object), modified);
ephy_synchronizable_set_is_uploaded (EPHY_SYNCHRONIZABLE (object), TRUE);
-free_parser:
- g_object_unref (parser);
+free_node:
+ json_node_unref (node);
g_free (serialized);
out:
return object;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]