From: Jihoon Kim Date: Wed, 17 Oct 2018 06:50:29 +0000 (+0900) Subject: Add code to handle error X-Git-Tag: submit/tizen/20181101.014111~19 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1f57a67c62f42c7e2c787bf3aeaa6da4b7903647;p=platform%2Fcore%2Fuifw%2Fautofill.git Add code to handle error Change-Id: I26ad02ffe8d3c015ac32f96f7dc99dcda41747b3 Signed-off-by: Jihoon Kim --- diff --git a/client/autofill.c b/client/autofill.c index d6e792e..e85119a 100644 --- a/client/autofill.c +++ b/client/autofill.c @@ -237,6 +237,8 @@ EXPORT_API int autofill_deinitialize() rpc_port_proxy_AutofillAppPort_destroy(rpc_h); rpc_h = NULL; } + else + return AUTOFILL_ERROR_NOT_INITIALIZED; return AUTOFILL_ERROR_NONE; } @@ -304,9 +306,9 @@ EXPORT_API int autofill_commit(autofill_save_view_info_h vi) LOGD("app id : %s, view id : %s", vi->app_id, vi->view_id); - rpc_port_proxy_AutofillAppPort_invoke_commit(rpc_h, vih); + int ret = rpc_port_proxy_AutofillAppPort_invoke_commit(rpc_h, vih); rpc_port_autofill_save_view_info_destroy(vih); - return AUTOFILL_ERROR_NONE; + return ret; } diff --git a/client/autofill_auth.c b/client/autofill_auth.c index fa54479..cdf9775 100644 --- a/client/autofill_auth.c +++ b/client/autofill_auth.c @@ -38,6 +38,7 @@ EXPORT_API int autofill_auth_info_request(autofill_view_info_h vi) { LOGD("app id : %s, view id : %s", vi->app_id, vi->view_id); + int ret = AUTOFILL_ERROR_NONE; rpc_port_autofill_view_info_h vih; char *id; char *label; @@ -49,6 +50,11 @@ EXPORT_API int autofill_auth_info_request(autofill_view_info_h vi) return AUTOFILL_ERROR_INVALID_PARAMETER; } + if (!rpc_h) { + LOGW("Not initialized"); + return AUTOFILL_ERROR_NOT_INITIALIZED; + } + rpc_port_autofill_view_info_create(&vih); rpc_port_autofill_view_info_set_view_id(vih, vi->view_id); @@ -86,13 +92,11 @@ EXPORT_API int autofill_auth_info_request(autofill_view_info_h vi) LOGD("rpc_h : %p", rpc_h); - if (rpc_h) { - rpc_port_proxy_AutofillAppPort_invoke_request_auth_info(rpc_h, vih); - } + ret = rpc_port_proxy_AutofillAppPort_invoke_request_auth_info(rpc_h, vih); rpc_port_autofill_view_info_destroy(vih); - return AUTOFILL_ERROR_NONE; + return ret; } EXPORT_API int autofill_auth_info_set_callback(Autofill_Auth_Info_Cb autofill_auth_info_cb, void *data) diff --git a/client/autofill_fill_request.c b/client/autofill_fill_request.c index 964b548..6993dcd 100644 --- a/client/autofill_fill_request.c +++ b/client/autofill_fill_request.c @@ -36,6 +36,7 @@ void *g_autofill_fill_response_data = NULL; EXPORT_API int autofill_fill_request(autofill_view_info_h vi) { + int ret = AUTOFILL_ERROR_NONE; rpc_port_autofill_view_info_h vih; char *id; char *label; @@ -47,6 +48,11 @@ EXPORT_API int autofill_fill_request(autofill_view_info_h vi) return AUTOFILL_ERROR_INVALID_PARAMETER; } + if (!rpc_h) { + LOGW("Not initialized"); + return AUTOFILL_ERROR_NOT_INITIALIZED; + } + Eina_List *l; autofill_item_h it; @@ -85,11 +91,11 @@ EXPORT_API int autofill_fill_request(autofill_view_info_h vi) LOGD("app id : %s, view id : %s", vi->app_id, vi->view_id); - rpc_port_proxy_AutofillAppPort_invoke_send_fill_request(rpc_h, vih); + ret = rpc_port_proxy_AutofillAppPort_invoke_send_fill_request(rpc_h, vih); rpc_port_autofill_view_info_destroy(vih); - return AUTOFILL_ERROR_NONE; + return ret; } EXPORT_API int autofill_fill_response_set_callback(Autofill_Fill_Response_Cb autofill_response_cb, void *data) diff --git a/client/autofill_proxy.c b/client/autofill_proxy.c index c41ae7d..b279edf 100644 --- a/client/autofill_proxy.c +++ b/client/autofill_proxy.c @@ -3294,19 +3294,20 @@ void rpc_port_proxy_AutofillAppPort_invoke_Unregister(rpc_port_proxy_AutofillApp set_last_result(r); } -void rpc_port_proxy_AutofillAppPort_invoke_request_auth_info(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_view_info_h vi) +int rpc_port_proxy_AutofillAppPort_invoke_request_auth_info(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_view_info_h vi) { rpc_port_parcel_h parcel; int r; + int ret = -1; if (!h || !vi) { _E("Invalid parameter"); - return; + return ret; } if (!h->port) { _E("Not connected"); - return; + return ret; } rpc_port_parcel_create(&parcel); @@ -3320,22 +3321,41 @@ void rpc_port_proxy_AutofillAppPort_invoke_request_auth_info(rpc_port_proxy_Auto } rpc_port_parcel_destroy(parcel); + + g_rec_mutex_lock(&h->mutex); + do { + rpc_port_parcel_h parcel_received; + + parcel_received = __AutofillAppPort_consume_command(h); + if (!parcel_received) { + _E("Invalid protocol"); + break; + } + + rpc_port_parcel_read_int32(parcel_received, &ret); + + rpc_port_parcel_destroy(parcel_received); + } while (0); + g_rec_mutex_unlock(&h->mutex); set_last_result(r); + + return ret; } -void rpc_port_proxy_AutofillAppPort_invoke_send_fill_request(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_view_info_h vi) +int rpc_port_proxy_AutofillAppPort_invoke_send_fill_request(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_view_info_h vi) { rpc_port_parcel_h parcel; int r; + int ret = -1; if (!h || !vi) { _E("Invalid parameter"); - return; + return ret; } if (!h->port) { _E("Not connected"); - return; + return ret; } rpc_port_parcel_create(&parcel); @@ -3349,22 +3369,41 @@ void rpc_port_proxy_AutofillAppPort_invoke_send_fill_request(rpc_port_proxy_Auto } rpc_port_parcel_destroy(parcel); + + g_rec_mutex_lock(&h->mutex); + do { + rpc_port_parcel_h parcel_received; + + parcel_received = __AutofillAppPort_consume_command(h); + if (!parcel_received) { + _E("Invalid protocol"); + break; + } + + rpc_port_parcel_read_int32(parcel_received, &ret); + + rpc_port_parcel_destroy(parcel_received); + } while (0); + g_rec_mutex_unlock(&h->mutex); set_last_result(r); + + return ret; } -void rpc_port_proxy_AutofillAppPort_invoke_commit(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_save_view_info_h vi) +int rpc_port_proxy_AutofillAppPort_invoke_commit(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_save_view_info_h vi) { rpc_port_parcel_h parcel; int r; + int ret = -1; if (!h || !vi) { _E("Invalid parameter"); - return; + return ret; } if (!h->port) { _E("Not connected"); - return; + return ret; } rpc_port_parcel_create(&parcel); @@ -3378,7 +3417,25 @@ void rpc_port_proxy_AutofillAppPort_invoke_commit(rpc_port_proxy_AutofillAppPort } rpc_port_parcel_destroy(parcel); + + g_rec_mutex_lock(&h->mutex); + do { + rpc_port_parcel_h parcel_received; + + parcel_received = __AutofillAppPort_consume_command(h); + if (!parcel_received) { + _E("Invalid protocol"); + break; + } + + rpc_port_parcel_read_int32(parcel_received, &ret); + + rpc_port_parcel_destroy(parcel_received); + } while (0); + g_rec_mutex_unlock(&h->mutex); set_last_result(r); + + return ret; } static struct AutofillAppPort_s *__create_AutofillAppPort(const char *stub_appid, rpc_port_proxy_AutofillAppPort_callback_s *callback, void *user_data) diff --git a/client/autofill_proxy.h b/client/autofill_proxy.h index 3f296a7..2d129f5 100644 --- a/client/autofill_proxy.h +++ b/client/autofill_proxy.h @@ -283,11 +283,11 @@ int rpc_port_proxy_AutofillAppPort_invoke_Register(rpc_port_proxy_AutofillAppPor void rpc_port_proxy_AutofillAppPort_invoke_Unregister(rpc_port_proxy_AutofillAppPort_h h); -void rpc_port_proxy_AutofillAppPort_invoke_request_auth_info(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_view_info_h vi); +int rpc_port_proxy_AutofillAppPort_invoke_request_auth_info(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_view_info_h vi); -void rpc_port_proxy_AutofillAppPort_invoke_send_fill_request(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_view_info_h vi); +int rpc_port_proxy_AutofillAppPort_invoke_send_fill_request(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_view_info_h vi); -void rpc_port_proxy_AutofillAppPort_invoke_commit(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_save_view_info_h vi); +int rpc_port_proxy_AutofillAppPort_invoke_commit(rpc_port_proxy_AutofillAppPort_h h, rpc_port_autofill_save_view_info_h vi); #ifdef __cplusplus } diff --git a/include/autofill.h b/include/autofill.h index bb5f73e..8f6f418 100644 --- a/include/autofill.h +++ b/include/autofill.h @@ -68,8 +68,12 @@ typedef void (*Autofill_Auth_Info_Cb)(autofill_auth_info_h auth_info, void *data * * @privlevel public * + * @privilege %http://tizen.org/privilege/appmanager.launch \n + * %http://tizen.org/privilege/datasharing + * * @return 0 on success, otherwise a negative error value * @retval #AUTOFILL_ERROR_NONE No error + * @retval #AUTOFILL_ERROR_PERMISSION_DENIED Permission denied */ int autofill_initialize(autofill_connection_status_changed_cb callback, void *user_data); @@ -82,6 +86,7 @@ int autofill_initialize(autofill_connection_status_changed_cb callback, void *us * * @return 0 on success, otherwise a negative error value * @retval #AUTOFILL_ERROR_NONE No error + * @retval #AUTOFILL_ERROR_NOT_INITIALIZED Not initialized */ int autofill_deinitialize(); @@ -95,6 +100,8 @@ int autofill_deinitialize(); * * @return 0 on success, otherwise a negative error value * @retval #AUTOFILL_ERROR_NONE No error + * @retval #AUTOFILL_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #AUTOFILL_ERROR_NOT_INITIALIZED Not initialized */ int autofill_auth_info_request(autofill_view_info_h vi); @@ -131,6 +138,8 @@ int autofill_auth_info_unset_callback(); * * @return 0 on success, otherwise a negative error value * @retval #AUTOFILL_ERROR_NONE No error + * @retval #AUTOFILL_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #AUTOFILL_ERROR_NOT_INITIALIZED Not initialized */ int autofill_fill_request(autofill_view_info_h vi); @@ -168,6 +177,8 @@ int autofill_fill_response_unset_callback(); * * @return 0 on success, otherwise a negative error value * @retval #AUTOFILL_ERROR_NONE No error + * @retval #AUTOFILL_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #AUTOFILL_ERROR_NOT_INITIALIZED Not initialized */ int autofill_commit(autofill_save_view_info_h vi); diff --git a/server/autofill_stub.c b/server/autofill_stub.c index 0afd799..2c9de73 100644 --- a/server/autofill_stub.c +++ b/server/autofill_stub.c @@ -3341,7 +3341,16 @@ static int __AutofillAppPort_method_request_auth_info(rpc_port_h port, rpc_port_ rpc_port_autofill_view_info_create(&vi); rpc_port_parcel_read(parcel, &vi->parcelable, vi); - context->callback.request_auth_info(context, vi, context->user_data); + int ret = context->callback.request_auth_info(context, vi, context->user_data); + do { + rpc_port_parcel_h result; + + rpc_port_parcel_create(&result); + rpc_port_parcel_write_int32(result, AutofillAppPort_METHOD_Result); + rpc_port_parcel_write_int32(result, ret); + rpc_port_parcel_send(result, port); + rpc_port_parcel_destroy(result); + } while (0); rpc_port_autofill_view_info_destroy(vi); return 0; @@ -3364,7 +3373,16 @@ static int __AutofillAppPort_method_send_fill_request(rpc_port_h port, rpc_port_ rpc_port_autofill_view_info_create(&vi); rpc_port_parcel_read(parcel, &vi->parcelable, vi); - context->callback.send_fill_request(context, vi, context->user_data); + int ret = context->callback.send_fill_request(context, vi, context->user_data); + do { + rpc_port_parcel_h result; + + rpc_port_parcel_create(&result); + rpc_port_parcel_write_int32(result, AutofillAppPort_METHOD_Result); + rpc_port_parcel_write_int32(result, ret); + rpc_port_parcel_send(result, port); + rpc_port_parcel_destroy(result); + } while (0); rpc_port_autofill_view_info_destroy(vi); return 0; @@ -3387,7 +3405,16 @@ static int __AutofillAppPort_method_commit(rpc_port_h port, rpc_port_parcel_h pa rpc_port_autofill_save_view_info_create(&vi); rpc_port_parcel_read(parcel, &vi->parcelable, vi); - context->callback.commit(context, vi, context->user_data); + int ret = context->callback.commit(context, vi, context->user_data); + do { + rpc_port_parcel_h result; + + rpc_port_parcel_create(&result); + rpc_port_parcel_write_int32(result, AutofillAppPort_METHOD_Result); + rpc_port_parcel_write_int32(result, ret); + rpc_port_parcel_send(result, port); + rpc_port_parcel_destroy(result); + } while (0); rpc_port_autofill_save_view_info_destroy(vi); return 0; diff --git a/server/autofill_stub.h b/server/autofill_stub.h index 333d6bc..132cf3f 100644 --- a/server/autofill_stub.h +++ b/server/autofill_stub.h @@ -273,9 +273,9 @@ typedef struct { int (*Register)(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_AutofillAppPort_autofill_auth_info_cb_h auth_info_cb, rpc_port_AutofillAppPort_autofill_fill_response_cb_h fill_response_cb, void *user_data); void (*Unregister)(rpc_port_stub_AutofillAppPort_context_h context, void *user_data); - void (*request_auth_info)(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_view_info_h vi, void *user_data); - void (*send_fill_request)(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_view_info_h vi, void *user_data); - void (*commit)(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_save_view_info_h vi, void *user_data); + int (*request_auth_info)(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_view_info_h vi, void *user_data); + int (*send_fill_request)(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_view_info_h vi, void *user_data); + int (*commit)(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_save_view_info_h vi, void *user_data); } rpc_port_stub_AutofillAppPort_callback_s; int rpc_port_stub_AutofillAppPort_register(rpc_port_stub_AutofillAppPort_callback_s *callback, void *user_data); diff --git a/server/main.c b/server/main.c index b3d576b..4d311ef 100644 --- a/server/main.c +++ b/server/main.c @@ -295,7 +295,7 @@ bool __save_item_cb(rpc_port_autofill_save_item_h items, void *user_data) return true; } -static void __auth_info_request_cb(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_view_info_h vi, void *user_data) +static int __auth_info_request_cb(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_view_info_h vi, void *user_data) { char *sender = NULL; autofill_client_s *sender_client; @@ -328,9 +328,10 @@ static void __auth_info_request_cb(rpc_port_stub_AutofillAppPort_context_h conte rpc_port_autofill_svc_view_info_destroy(svi); + return 0; } -static void __autofill_fill_request_cb(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_view_info_h vi, void *user_data) +static int __autofill_fill_request_cb(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_view_info_h vi, void *user_data) { char *sender = NULL; char *view_id = NULL; @@ -356,9 +357,11 @@ static void __autofill_fill_request_cb(rpc_port_stub_AutofillAppPort_context_h c free(view_id); rpc_port_autofill_svc_view_info_destroy(svi); + + return 0; } -static void __commit_cb(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_save_view_info_h vi, void *user_data) +static int __commit_cb(rpc_port_stub_AutofillAppPort_context_h context, rpc_port_autofill_save_view_info_h vi, void *user_data) { char *sender = NULL; autofill_client_s *sender_client; @@ -388,6 +391,8 @@ static void __commit_cb(rpc_port_stub_AutofillAppPort_context_h context, rpc_por free(view_id); rpc_port_autofill_svc_save_view_info_destroy(svi); + + return 0; } bool fill_response_item_cb(rpc_port_autofill_svc_response_item_h response_items, void *user_data) diff --git a/test/ecore_imf_example.c b/test/ecore_imf_example.c index 28d9d6b..d838be4 100644 --- a/test/ecore_imf_example.c +++ b/test/ecore_imf_example.c @@ -222,19 +222,33 @@ _autofill_auth_info_cb(autofill_auth_info_h auth_info, void *data) LOGD("Send fill request"); autofill_fill_response_set_callback(_autofill_fill_response_cb, NULL); - autofill_fill_request(autofill_view_info); + int ret = autofill_fill_request(autofill_view_info); + if (ret == AUTOFILL_ERROR_NONE) + LOGD("Succeeded to request fill"); + else if (ret == AUTOFILL_ERROR_PERMISSION_DENIED) + LOGW("permission denied"); + else + LOGW("Failed to request fill : %d", ret); } static void _request_autofill_auth_info() { + int ret; autofill_auth_info_set_callback(_autofill_auth_info_cb, NULL); - autofill_auth_info_request(autofill_view_info); + ret = autofill_auth_info_request(autofill_view_info); + if (ret == AUTOFILL_ERROR_NONE) + LOGD("Succeeded to request auth info"); + else if (ret == AUTOFILL_ERROR_PERMISSION_DENIED) + LOGW("permission denied"); + else + LOGW("Failed to request auth info. error : %d", ret); } static void _save_autofill_info() { + int ret; char *app_id; app_get_id(&app_id); autofill_save_view_info_h autofill_save_view_info = NULL; @@ -253,7 +267,13 @@ _save_autofill_info() if (app_id) free(app_id); - autofill_commit(autofill_save_view_info); + ret = autofill_commit(autofill_save_view_info); + if (ret == AUTOFILL_ERROR_NONE) + LOGD("Succeeded to request auth info"); + else if (ret == AUTOFILL_ERROR_PERMISSION_DENIED) + LOGW("permission denied"); + else + LOGW("Failed to request auth info. error : %d", ret); autofill_save_view_info_destroy(autofill_save_view_info); } @@ -803,6 +823,7 @@ main(void) { Ecore_Evas *ee; Evas *evas; + int ret; if (!ecore_evas_init()) { @@ -812,7 +833,13 @@ main(void) ecore_imf_init(); - autofill_initialize(connection_status_changed_cb, NULL); + ret = autofill_initialize(connection_status_changed_cb, NULL); + if (ret == AUTOFILL_ERROR_NONE) + LOGD("Succeeded to initialize"); + else if (ret == AUTOFILL_ERROR_PERMISSION_DENIED) + LOGW("permission denied"); + else + LOGW("Failed to initialize. error : %d", ret); // create a new window, with size=WIDTHxHEIGHT and default engine ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL); diff --git a/tidl/autofill.tidl b/tidl/autofill.tidl index 3dd15a0..07663e7 100644 --- a/tidl/autofill.tidl +++ b/tidl/autofill.tidl @@ -50,7 +50,7 @@ interface AutofillAppPort { int Register(autofill_auth_info_cb auth_info_cb, autofill_fill_response_cb fill_response_cb); void Unregister() async; - void request_auth_info(autofill_view_info vi) async; - void send_fill_request(autofill_view_info vi) async; - void commit(autofill_save_view_info vi) async; + int request_auth_info(autofill_view_info vi); + int send_fill_request(autofill_view_info vi); + int commit(autofill_save_view_info vi); }