From 8c67f3509bb1bcaea6a5d5c5a1a16072d8dc2c47 Mon Sep 17 00:00:00 2001 From: njupthan Date: Sat, 29 Jan 2022 17:45:22 +0000 Subject: [PATCH] check codex Signed-off-by: njupthan --- aafwk.gni | 3 - .../src/local_call_container.cpp | 2 +- .../ability_runtime/js_ability_context.cpp | 142 +++++++++++++----- .../src/ability_runtime/js_caller_complex.cpp | 2 + frameworks/kits/appkit/BUILD.gn | 1 + .../src/ability_delegator.cpp | 2 - interfaces/kits/napi/BUILD.gn | 2 +- .../aafwk/ability_context/ability_context.js | 4 +- .../napi/aafwk/app/ability_delegator/BUILD.gn | 2 +- interfaces/kits/napi/aafwk/caller/caller.js | 6 + ohos.build | 9 +- .../src/ability_manager_service.cpp | 12 +- .../abilitymgr/src/ability_manager_stub.cpp | 1 + 13 files changed, 127 insertions(+), 61 deletions(-) mode change 100755 => 100644 services/abilitymgr/src/ability_manager_service.cpp diff --git a/aafwk.gni b/aafwk.gni index 0e00cbd507b..c197cf36769 100644 --- a/aafwk.gni +++ b/aafwk.gni @@ -21,6 +21,3 @@ kits_path = "${aafwk_path}/frameworks/kits" innerkits_path = "${aafwk_path}/interfaces/innerkits" dispatcher_path = "${aafwk_path}/common/task_dispatcher" - -system_test_app_path = - "${aafwk_path}/test/resource/amssystemtestability/abilitySrc" diff --git a/frameworks/kits/ability/ability_runtime/src/local_call_container.cpp b/frameworks/kits/ability/ability_runtime/src/local_call_container.cpp index 8ef298e70f4..13ed5205b1c 100644 --- a/frameworks/kits/ability/ability_runtime/src/local_call_container.cpp +++ b/frameworks/kits/ability/ability_runtime/src/local_call_container.cpp @@ -24,7 +24,7 @@ int LocalCallContainer::StartAbilityInner( HILOG_DEBUG("start ability by call."); if (!callback) { - HILOG_ERROR("callback)is nullptr."); + HILOG_ERROR("callback is nullptr."); return ERR_INVALID_VALUE; } diff --git a/frameworks/kits/ability/native/src/ability_runtime/js_ability_context.cpp b/frameworks/kits/ability/native/src/ability_runtime/js_ability_context.cpp index 404dd116c9b..f756f54a456 100755 --- a/frameworks/kits/ability/native/src/ability_runtime/js_ability_context.cpp +++ b/frameworks/kits/ability/native/src/ability_runtime/js_ability_context.cpp @@ -40,6 +40,15 @@ constexpr size_t ARGC_TWO = 2; constexpr size_t ARGC_THREE = 3; constexpr int32_t ERROR_CODE_ONE = 1; +class StartAbilityByCallParameters { +public: + sptr remoteCallee = nullptr; + std::shared_ptr callerCallBack = nullptr; + std::weak_ptr weak_context; + std::mutex mutexlock; + std::condition_variable condition; +}; + void JsAbilityContext::Finalizer(NativeEngine* engine, void* data, void* hint) { HILOG_INFO("JsAbilityContext::Finalizer is called"); @@ -226,54 +235,105 @@ NativeValue* JsAbilityContext::OnStartAbilityWithAccount(NativeEngine& engine, N NativeValue* JsAbilityContext::OnStartAbilityByCall(NativeEngine& engine, NativeCallbackInfo& info) { - int errCode = 0; - sptr remoteCallee; - if (info.argc != ARGC_ONE || info.argv[0]->TypeOf() != NATIVE_OBJECT) { + HILOG_DEBUG("JsAbilityContext::%{public}s, called", __func__); + constexpr size_t ARGC_ONE = 1; + constexpr size_t ARGC_TWO = 2; + AAFwk::Want want; + + if (info.argc < ARGC_ONE || info.argv[0]->TypeOf() != NATIVE_OBJECT) { HILOG_ERROR("int put params count error"); return engine.CreateUndefined(); } - AAFwk::Want want; - OHOS::AppExecFwk::UnwrapWant(reinterpret_cast(&engine), - reinterpret_cast(info.argv[0]), want); - NativeValue* callerComplex = nullptr; - std::mutex mutexlock; - std::condition_variable condition; - auto callBackDone = [&mutexlock, &condition, &remoteCallee](const sptr &obj) { - std::unique_lock lock(mutexlock); - remoteCallee = obj; - condition.notify_all(); - HILOG_INFO("OnStartAbilityByCall callBackDone is called"); + + StartAbilityByCallParameters *CallParameters = new (std::nothrow) StartAbilityByCallParameters(); + if (CallParameters == nullptr) { + HILOG_ERROR("CallParameters create error"); + return engine.CreateUndefined(); + } + + CallParameters->weak_context = context_; + CallParameters->callerCallBack = std::make_shared(); + auto callBackDone = [&CallParameters](const sptr &obj) { + HILOG_INFO("OnStartAbilityByCall callBackDone is called begin"); + if (CallParameters != nullptr) { + CallParameters->remoteCallee = obj; + } else { + HILOG_ERROR("OnStartAbilityByCall callBackDone CallParameters is nullptr"); + } + std::unique_lock lock(CallParameters->mutexlock); + CallParameters->condition.notify_all(); + HILOG_INFO("OnStartAbilityByCall callBackDone is called end"); }; auto releaseListen = [](const std::string &str) { HILOG_INFO("OnStartAbilityByCall releaseListen is called %{public}s", str.c_str()); }; - auto context = context_.lock(); - constexpr int CALLER_TIME_OUT = 5; // 5s - if (!context) { - HILOG_ERROR("context is released"); - errCode = -1; - return engine.CreateUndefined(); - } - std::shared_ptr callerCallBack = std::make_shared(); - callerCallBack->SetCallBack(callBackDone); - callerCallBack->SetOnRelease(releaseListen); - HILOG_INFO("OnStartAbilityByCall execute is StartAbility"); - errCode = context->StartAbility(want, callerCallBack); - if (remoteCallee == nullptr) { - HILOG_INFO("OnStartAbilityByCall lock mutexlock Done"); - std::unique_lock lock(mutexlock); - HILOG_INFO("OnStartAbilityByCall lock waiting callBackDone"); - if (condition.wait_for(lock, std::chrono::seconds(CALLER_TIME_OUT)) == std::cv_status::timeout) { - remoteCallee = nullptr; - errCode = -1; - HILOG_ERROR("Waiting callee timeout"); - return engine.CreateUndefined(); - } - } else { - HILOG_INFO("OnStartAbilityByCall remoteCallee isn~t nullptr"); - } - callerComplex = CreateJsCallerComplex(engine, context, remoteCallee, callerCallBack); - return callerComplex; + OHOS::AppExecFwk::UnwrapWant(reinterpret_cast(&engine), + reinterpret_cast(info.argv[0]), want); + CallParameters->callerCallBack->SetCallBack(callBackDone); + CallParameters->callerCallBack->SetOnRelease(releaseListen); + AsyncTask::ExecuteCallback execute = + [&CallParameters, want] ( + NativeEngine& engine, AsyncTask& task) { + constexpr int CALLER_TIME_OUT = 10; // 10s + if (CallParameters == nullptr) { + HILOG_ERROR("CallParameters is released"); + return; + } + auto context = CallParameters->weak_context.lock(); + if (context == nullptr) { + HILOG_ERROR("context is released"); + return; + } + + HILOG_INFO("OnStartAbilityByCall lock mutexlock"); + std::unique_lock lock(CallParameters->mutexlock); + HILOG_INFO("OnStartAbilityByCall execute is StartAbility"); + if (context->StartAbility(want, CallParameters->callerCallBack) != 0) { + HILOG_ERROR("StartAbility is failed"); + return; + } + HILOG_INFO("OnStartAbilityByCall lock waiting callBackDone"); + if (CallParameters->remoteCallee == nullptr) { + if (CallParameters->condition.wait_for( + lock, std::chrono::seconds(CALLER_TIME_OUT)) == std::cv_status::timeout) { + HILOG_ERROR("Waiting callee timeout"); + } + } + HILOG_DEBUG("JsAbilityContext::%{public}s, end", "OnStartAbilityByCall::ExecuteCallback"); + }; + AsyncTask::CompleteCallback complete = + [&CallParameters] ( + NativeEngine& engine, AsyncTask& task, int32_t status) { + if (CallParameters == nullptr) { + HILOG_ERROR("CallParameters is released"); + task.Reject(engine, CreateJsError(engine, -1, "CallParameters Create Call Failed.")); + delete CallParameters; + CallParameters = nullptr; + return; + } + + auto context = CallParameters->weak_context.lock(); + if (context != nullptr && CallParameters->callerCallBack != nullptr && + CallParameters->remoteCallee != nullptr) { + task.Resolve(engine, CreateJsCallerComplex(engine, context, CallParameters->remoteCallee, + CallParameters->callerCallBack)); + } else { + task.Reject(engine, CreateJsError(engine, -1, "CallParameters Create Call Failed.")); + } + + delete CallParameters; + CallParameters = nullptr; + HILOG_DEBUG("JsAbilityContext::%{public}s, end", "OnStartAbilityByCall::CompleteCallback"); + }; + + NativeValue* lastParam = ((info.argc == ARGC_TWO) ? info.argv[ARGC_ONE] : nullptr); + NativeValue* retsult = nullptr; + AsyncTask::Schedule( + engine, + CreateAsyncTaskWithLastParam(engine, lastParam, std::move(execute), std::move(complete), &retsult)); + + HILOG_DEBUG("JsAbilityContext::%{public}s, called end", __func__); + return retsult; } NativeValue* JsAbilityContext::OnStartAbilityForResult(NativeEngine& engine, NativeCallbackInfo& info) diff --git a/frameworks/kits/ability/native/src/ability_runtime/js_caller_complex.cpp b/frameworks/kits/ability/native/src/ability_runtime/js_caller_complex.cpp index bb553457003..d7867cc6123 100644 --- a/frameworks/kits/ability/native/src/ability_runtime/js_caller_complex.cpp +++ b/frameworks/kits/ability/native/src/ability_runtime/js_caller_complex.cpp @@ -128,6 +128,8 @@ private: NativeValue* callback = jsreleaseCallBackObj_->Get(); NativeValue* args[] = { CreateJsValue(releaseCallBackEngine_, str) }; releaseCallBackEngine_.CallFunction(value, callback, args, 1); + HILOG_DEBUG("OnReleaseNotifyTask CallFunction done"); + callee_ = nullptr; HILOG_DEBUG("OnReleaseNotifyTask end"); } diff --git a/frameworks/kits/appkit/BUILD.gn b/frameworks/kits/appkit/BUILD.gn index e6700a94347..d91dfff8a08 100644 --- a/frameworks/kits/appkit/BUILD.gn +++ b/frameworks/kits/appkit/BUILD.gn @@ -141,6 +141,7 @@ ohos_shared_library("appkit_native") { "${aafwk_path}/frameworks/kits/appkit/native/app/src/sys_mgr_client.cpp", "${aafwk_path}/frameworks/kits/appkit/native/app/src/watchdog.cpp", "//foundation/aafwk/standard/tools/aa/src/shell_command_result.cpp", + "//foundation/aafwk/standard/tools/aa/src/test_observer_proxy.cpp", ] cflags = [] if (target_cpu == "arm") { diff --git a/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator.cpp b/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator.cpp index d6df6d49117..21267103094 100644 --- a/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator.cpp +++ b/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator.cpp @@ -240,8 +240,6 @@ void AbilityDelegator::OnRun() APP_LOGI("Call TestRunner::Run(), Start run"); testRunner_->Run(); APP_LOGI("Run finished"); - - FinishUserTest(0); } bool AbilityDelegator::DoAbilityForeground(const sptr &token) diff --git a/interfaces/kits/napi/BUILD.gn b/interfaces/kits/napi/BUILD.gn index f38342d2692..56167c6d2ad 100644 --- a/interfaces/kits/napi/BUILD.gn +++ b/interfaces/kits/napi/BUILD.gn @@ -19,7 +19,7 @@ group("napi_packages") { "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/abilityManager:abilitymanager", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/ability_context:abilitycontext_napi", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/ability_manager:abilitymanager_napi", - "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/app/ability_delegator:abilityDelegatorRegistry", + "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/app/ability_delegator:abilitydelegatorregistry", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/app/ability_stage:abilitystage_napi", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/app/ability_stage_context:abilitystagecontext_napi", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/app/appMgr:napi_app_mgr", diff --git a/interfaces/kits/napi/aafwk/ability_context/ability_context.js b/interfaces/kits/napi/aafwk/ability_context/ability_context.js index 7922079eeaa..c053519cd7c 100755 --- a/interfaces/kits/napi/aafwk/ability_context/ability_context.js +++ b/interfaces/kits/napi/aafwk/ability_context/ability_context.js @@ -36,13 +36,13 @@ class AbilityContext extends Context { return this.__context_impl__.startAbilityWithAccount(want, accountId, options, callback) } - startAbilityByCall(want) { + async startAbilityByCall(want) { if (typeof want !== 'object' || want == null) { console.log("AbilityContext::startAbilityByCall input param error"); return null; } - let callee = this.__context_impl__.startAbilityByCall(want); + let callee = await this.__context_impl__.startAbilityByCall(want); if (typeof callee === 'object' && callee != null) { console.log("AbilityContext::startAbilityByCall"); return new Caller(callee); diff --git a/interfaces/kits/napi/aafwk/app/ability_delegator/BUILD.gn b/interfaces/kits/napi/aafwk/app/ability_delegator/BUILD.gn index 8d8eb3639cf..da7a4cbcaaf 100644 --- a/interfaces/kits/napi/aafwk/app/ability_delegator/BUILD.gn +++ b/interfaces/kits/napi/aafwk/app/ability_delegator/BUILD.gn @@ -13,7 +13,7 @@ import("//build/ohos.gni") -ohos_shared_library("abilityDelegatorRegistry") { +ohos_shared_library("abilitydelegatorregistry") { include_dirs = [ "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/inner/napi_common/", "//foundation/communication/ipc/ipc/native/src/napi/include/", diff --git a/interfaces/kits/napi/aafwk/caller/caller.js b/interfaces/kits/napi/aafwk/caller/caller.js index 1cf63fb8ceb..8898d337fe4 100644 --- a/interfaces/kits/napi/aafwk/caller/caller.js +++ b/interfaces/kits/napi/aafwk/caller/caller.js @@ -107,6 +107,12 @@ class Caller { release() { console.log("Caller release js called."); + if (this.__call_obj__.callee == null) { + console.log("Caller release call remoteObj is released"); + throw new Error("Caller release call remoteObj is released"); + return; + } + this.__call_obj__.callee = null; this.__call_obj__.release(); } diff --git a/ohos.build b/ohos.build index c21ef63994e..9e14e3f6f62 100755 --- a/ohos.build +++ b/ohos.build @@ -11,8 +11,7 @@ "//foundation/aafwk/standard/frameworks/kits/ability/ability_runtime:ability_context_native", "//foundation/aafwk/standard/frameworks/kits/appkit:app_context", "//foundation/aafwk/standard/frameworks/kits/appkit:appkit_native", - "//foundation/aafwk/standard/frameworks/kits/appkit:appexec", - "//foundation/aafwk/standard/test/resource/amssystemtestability/abilitySrc:ams_system_test_app" + "//foundation/aafwk/standard/frameworks/kits/appkit:appexec" ], "inner_kits": [ { @@ -188,8 +187,7 @@ "//foundation/aafwk/standard/services:fms_services_target", "//foundation/aafwk/standard/interfaces/innerkits:fms_innerkits_target", "//foundation/aafwk/standard/frameworks/kits/fmskit:fmskit_native", - "//foundation/aafwk/standard/interfaces/kits/napi:form_napi_packages", - "//foundation/aafwk/standard/test/resource/formsystemtestability:fms_system_test_app" + "//foundation/aafwk/standard/interfaces/kits/napi:form_napi_packages" ], "inner_kits": [ { @@ -227,8 +225,7 @@ } ], "test_list": [ - "//foundation/aafwk/standard/services/formmgr/test:unittest", - "//foundation/aafwk/standard/test/systemtest:systemtest" + "//foundation/aafwk/standard/services/formmgr/test:unittest" ] } }, diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp old mode 100755 new mode 100644 index 18c2cbdeebd..1e13b982ce2 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -3975,9 +3975,13 @@ int AbilityManagerService::StartUserTest(const Want &want, const sptrGetBundleInfo(bundleName, AppExecFwk::BundleFlag::GET_BUNDLE_DEFAULT, bundleInfo)) { - HILOG_ERROR("Failed to get bundle info."); - return GET_BUNDLE_INFO_FAILED; + if (!bms->GetBundleInfo(bundleName, AppExecFwk::BundleFlag::GET_BUNDLE_DEFAULT, bundleInfo, U0_USER_ID)) { + HILOG_ERROR("Failed to get bundle info by U0_USER_ID %{public}d.", U0_USER_ID); + int32_t userId = GetUserId(); + if (!bms->GetBundleInfo(bundleName, AppExecFwk::BundleFlag::GET_BUNDLE_DEFAULT, bundleInfo, GetUserId())) { + HILOG_ERROR("Failed to get bundle info by userId %{public}d.", userId); + return GET_BUNDLE_INFO_FAILED; + } } int ret = KillProcess(bundleName); @@ -4063,7 +4067,7 @@ int32_t AbilityManagerService::ShowPickerDialog(const Want& want, int32_t userId HILOG_INFO("share content: ShowPickerDialog"); std::vector abilityInfos; bms->QueryAbilityInfos(want, AppExecFwk::AbilityInfoFlag::GET_ABILITY_INFO_WITH_APPLICATION, userId, abilityInfos); - return Ace::UIServiceMgrClient::GetInstance()->ShowAppPickerDialog(want, abilityInfos, userId); + return Ace::UIServiceMgrClient::GetInstance()->ShowAppPickerDialog(want, abilityInfos); } void AbilityManagerService::UpdateCallerInfo(Want& want) diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index 29e49f39f90..d9c23205e6e 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -31,6 +31,7 @@ AbilityManagerStub::AbilityManagerStub() { FirstStepInit(); SecondStepInit(); + ThirdStepInit(); } AbilityManagerStub::~AbilityManagerStub() -- Gitee