diff --git a/frameworks/native/ability/native/auto_fill_extension_ability/js_fill_request_callback.cpp b/frameworks/native/ability/native/auto_fill_extension_ability/js_fill_request_callback.cpp index de319784f2a317da75127ee1eda39c660fc49c7d..eff917b5060da13d1c871beba3f6b360f9547fb7 100644 --- a/frameworks/native/ability/native/auto_fill_extension_ability/js_fill_request_callback.cpp +++ b/frameworks/native/ability/native/auto_fill_extension_ability/js_fill_request_callback.cpp @@ -46,6 +46,8 @@ constexpr const char *WANT_PARAMS_UPDATE_POPUP_HEIGHT = "ohos.ability.params.pop constexpr const char *WANT_PARAMS_UPDATE_POPUP_PLACEMENT = "ohos.ability.params.popupPlacement"; constexpr const char *CONFIG_POPUP_SIZE = "popupSize"; constexpr const char *CONFIG_POPUP_PLACEMENT = "placement"; +constexpr const char *WANT_PARAMS_FILL_CONTENT = "ohos.ability.params.fillContent"; +constexpr const char *ERROR_MSG_INVALID_PARAM = "Invalid input parameter, unable to parse json."; } // namespace JsFillRequestCallback::JsFillRequestCallback( @@ -113,7 +115,25 @@ napi_value JsFillRequestCallback::OnFillRequestFailed(napi_env env, NapiCallback napi_value JsFillRequestCallback::OnFillRequestCanceled(napi_env env, NapiCallbackInfo &info) { TAG_LOGD(AAFwkTag::AUTOFILL_EXT, "Called."); - SendResultCodeAndViewData(JsAutoFillExtensionUtil::AutoFillResultCode::CALLBACK_CANCEL, ""); + if (info.argc < ARGC_ONE) { + SendResultCodeAndViewData(JsAutoFillExtensionUtil::AutoFillResultCode::CALLBACK_CANCEL, ""); + return CreateJsUndefined(env); + } + if (!IsTypeForNapiValue(env, info.argv[INDEX_ZERO], napi_string)) { + TAG_LOGE(AAFwkTag::AUTOFILL_EXT, "Failed to parse fillContent JsonString!"); + ThrowError(env, static_cast(AbilityErrorCode::ERROR_CODE_INVALID_PARAM), ERROR_MSG_INVALID_PARAM); + SendResultCodeAndViewData( + JsAutoFillExtensionUtil::AutoFillResultCode::CALLBACK_FAILED_INVALID_PARAM, ""); + return CreateJsUndefined(env); + } + std::string jsonString = UnwrapStringFromJS(env, info.argv[INDEX_ZERO], ""); + if (jsonString.empty()) { + TAG_LOGE(AAFwkTag::AUTOFILL_EXT, "JsonString is empty"); + SendResultCodeAndViewData( + JsAutoFillExtensionUtil::AutoFillResultCode::CALLBACK_FAILED_INVALID_PARAM, ""); + return CreateJsUndefined(env); + } + SendResultCodeAndViewData(JsAutoFillExtensionUtil::AutoFillResultCode::CALLBACK_CANCEL, jsonString); return CreateJsUndefined(env); } @@ -190,6 +210,10 @@ void JsFillRequestCallback::SendResultCodeAndViewData( want.SetParam(WANT_PARAMS_AUTO_FILL_CMD, WANT_PARAMS_AUTO_FILL_CMD_AUTOFILL); } + if (resultCode == JsAutoFillExtensionUtil::AutoFillResultCode::CALLBACK_CANCEL) { + want.SetParam(WANT_PARAMS_FILL_CONTENT, jsString); + } + auto ret = uiWindow_->TransferAbilityResult(resultCode, want); if (ret != Rosen::WMError::WM_OK) { TAG_LOGE(AAFwkTag::AUTOFILL_EXT, "Transfer ability result failed."); diff --git a/interfaces/inner_api/auto_fill_manager/include/auto_fill_extension_callback.h b/interfaces/inner_api/auto_fill_manager/include/auto_fill_extension_callback.h index f2135aa35300123fb15a3563d079cd50925ab226..b6c9f7ea971a1fe833421792112be759aabfa31f 100644 --- a/interfaces/inner_api/auto_fill_manager/include/auto_fill_extension_callback.h +++ b/interfaces/inner_api/auto_fill_manager/include/auto_fill_extension_callback.h @@ -58,7 +58,7 @@ public: private: void SendAutoFillSucess(const AAFwk::Want &want); - void SendAutoFillFailed(int32_t errCode); + void SendAutoFillFailed(int32_t errCode, const AAFwk::Want &want = AAFwk::Want()); void CloseModalUIExtension(); void HandleReloadInModal(const AAFwk::WantParams &wantParams); diff --git a/interfaces/inner_api/auto_fill_manager/include/fill_request_callback_interface.h b/interfaces/inner_api/auto_fill_manager/include/fill_request_callback_interface.h index 0cd51145268b0e9f019ea7eedf4b4eb4b2f9cf66..acec2951d70b1020f4627c900d1ca3363f2d0e89 100644 --- a/interfaces/inner_api/auto_fill_manager/include/fill_request_callback_interface.h +++ b/interfaces/inner_api/auto_fill_manager/include/fill_request_callback_interface.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -25,7 +25,7 @@ public: virtual ~IFillRequestCallback() {} virtual void OnFillRequestSuccess(const AbilityBase::ViewData &viewData) = 0; - virtual void OnFillRequestFailed(int32_t errCode) = 0; + virtual void OnFillRequestFailed(int32_t errCode, const std::string& fillContent = "") = 0; }; } // AbilityRuntime } // OHOS diff --git a/interfaces/inner_api/auto_fill_manager/src/auto_fill_extension_callback.cpp b/interfaces/inner_api/auto_fill_manager/src/auto_fill_extension_callback.cpp index f219d159f05523fa0611743427b8429ab9d112a3..abe2d0609e79205012da5c874f6656303b430221 100644 --- a/interfaces/inner_api/auto_fill_manager/src/auto_fill_extension_callback.cpp +++ b/interfaces/inner_api/auto_fill_manager/src/auto_fill_extension_callback.cpp @@ -31,6 +31,7 @@ constexpr static char WANT_PARAMS_AUTO_FILL_CMD_KEY[] = "ohos.ability.params.aut constexpr static char WANT_PARAMS_UPDATE_POPUP_WIDTH[] = "ohos.ability.params.popupWidth"; constexpr static char WANT_PARAMS_UPDATE_POPUP_HEIGHT[] = "ohos.ability.params.popupHeight"; constexpr static char WANT_PARAMS_UPDATE_POPUP_PLACEMENT[] = "ohos.ability.params.popupPlacement"; +constexpr static char WANT_PARAMS_FILL_CONTENT[] = "ohos.ability.params.fillContent"; } // namespace void AutoFillExtensionCallback::OnResult(int32_t errCode, const AAFwk::Want &want) { @@ -50,7 +51,7 @@ void AutoFillExtensionCallback::OnResult(int32_t errCode, const AAFwk::Want &wan } else { auto resultCode = (errCode == AutoFill::AUTO_FILL_CANCEL) ? AutoFill::AUTO_FILL_CANCEL : AutoFill::AUTO_FILL_FAILED; - SendAutoFillFailed(resultCode); + SendAutoFillFailed(resultCode, want); } } @@ -254,10 +255,11 @@ void AutoFillExtensionCallback::SendAutoFillSucess(const AAFwk::Want &want) } } -void AutoFillExtensionCallback::SendAutoFillFailed(int32_t errCode) +void AutoFillExtensionCallback::SendAutoFillFailed(int32_t errCode, const AAFwk::Want &want) { if (fillCallback_ != nullptr) { - fillCallback_->OnFillRequestFailed(errCode); + std::string fillContent = want.GetStringParam(WANT_PARAMS_FILL_CONTENT); + fillCallback_->OnFillRequestFailed(errCode, fillContent); fillCallback_ = nullptr; }