From 3213c02cd1b7f5727563c311b12bc34952d3b6f5 Mon Sep 17 00:00:00 2001 From: jiangwensai Date: Fri, 28 Jan 2022 16:32:51 +0800 Subject: [PATCH] IssueNo: #I4SI5D Description: Fix crash. Sig: SIG_ApplicationFramework Feature or Bugfix: Bugfix Binary Source: No Signed-off-by: jiangwensai --- .../ability_runtime/js_ability_context.h | 6 +-- .../include/js_service_extension_context.h | 5 +- .../ability_runtime/js_ability_context.cpp | 38 +++++--------- .../src/js_service_extension_context.cpp | 45 ++++++----------- .../aafwk/app/app_manager/js_app_manager.cpp | 50 +++++-------------- .../aafwk/app/app_manager/js_app_manager.h | 5 +- 6 files changed, 48 insertions(+), 101 deletions(-) diff --git a/frameworks/kits/ability/native/include/ability_runtime/js_ability_context.h b/frameworks/kits/ability/native/include/ability_runtime/js_ability_context.h index b9927d393fe..ac71fd0236e 100755 --- a/frameworks/kits/ability/native/include/ability_runtime/js_ability_context.h +++ b/frameworks/kits/ability/native/include/ability_runtime/js_ability_context.h @@ -22,9 +22,9 @@ #include "ability_connect_callback.h" #include "foundation/aafwk/standard/frameworks/kits/ability/ability_runtime/include/ability_context.h" +#include "js_runtime.h" #include "event_handler.h" -class NativeEngine; class NativeObject; class NativeReference; class NativeValue; @@ -87,7 +87,7 @@ NativeValue* CreateJsAbilityContext(NativeEngine& engine, std::shared_ptr &remoteObject, int resultCode) override; @@ -99,7 +99,7 @@ public: void CallJsFailed(int32_t errorCode); private: NativeValue* ConvertElement(const AppExecFwk::ElementName &element); - std::unique_ptr engine_; + NativeEngine& engine_; std::unique_ptr jsConnectionObject_ = nullptr; }; diff --git a/frameworks/kits/ability/native/include/js_service_extension_context.h b/frameworks/kits/ability/native/include/js_service_extension_context.h index 4c48893f912..4648a5646b3 100755 --- a/frameworks/kits/ability/native/include/js_service_extension_context.h +++ b/frameworks/kits/ability/native/include/js_service_extension_context.h @@ -32,17 +32,18 @@ NativeValue* CreateJsServiceExtensionContext(NativeEngine& engine, std::shared_p class JSServiceExtensionConnection : public AbilityConnectCallback { public: + explicit JSServiceExtensionConnection(NativeEngine& engine); + ~JSServiceExtensionConnection(); void OnAbilityConnectDone( const AppExecFwk::ElementName &element, const sptr &remoteObject, int resultCode) override; void OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) override; void HandleOnAbilityConnectDone( const AppExecFwk::ElementName &element, const sptr &remoteObject, int resultCode); void HandleOnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode); - void SetNativeEngine(NativeEngine* engine); void SetJsConnectionObject(NativeValue* jsConnectionObject); void CallJsFailed(int32_t errorCode); private: - NativeEngine* engine_ = nullptr; + NativeEngine& engine_; std::unique_ptr jsConnectionObject_ = nullptr; }; 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 e66ebfdb226..e7e26ba66a6 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 @@ -21,7 +21,6 @@ #include "hilog_wrapper.h" #include "js_context_utils.h" #include "js_data_struct_converter.h" -#include "js_runtime.h" #include "js_runtime_utils.h" #include "ability_runtime/js_caller_complex.h" #include "napi_common_start_options.h" @@ -442,7 +441,7 @@ NativeValue* JsAbilityContext::OnConnectAbility(NativeEngine& engine, NativeCall want.GetElement().GetAbilityName().c_str()); // unwarp connection - sptr connection = new JSAbilityConnection(&engine); + sptr connection = new JSAbilityConnection(engine); connection->SetJsConnectionObject(info.argv[1]); int64_t connectId = g_serialNumber; ConnectionKey key; @@ -502,7 +501,7 @@ NativeValue* JsAbilityContext::OnConnectAbilityWithAccount(NativeEngine& engine, } // unwarp connection - sptr connection = new JSAbilityConnection(&engine); + sptr connection = new JSAbilityConnection(engine); connection->SetJsConnectionObject(info.argv[INDEX_TWO]); int64_t connectId = g_serialNumber; ConnectionKey key; @@ -832,7 +831,7 @@ NativeValue* CreateJsAbilityContext(NativeEngine& engine, std::shared_ptr(engine_.get()), remoteObject); + reinterpret_cast(&engine_), remoteObject); NativeValue* nativeRemoteObject = reinterpret_cast(napiRemoteObject); NativeValue* argv[] = { ConvertElement(element), nativeRemoteObject }; - engine_->CallFunction(value, methodOnConnect, argv, ARGC_TWO); + engine_.CallFunction(value, methodOnConnect, argv, ARGC_TWO); HILOG_INFO("OnAbilityConnectDone end"); } @@ -948,14 +943,10 @@ void JSAbilityConnection::HandleOnAbilityDisconnectDone(const AppExecFwk::Elemen abilityConnects_.erase(item); HILOG_INFO("OnAbilityDisconnectDone erase abilityConnects_.size:%{public}zu", abilityConnects_.size()); } - // one params - if (engine_ == nullptr) { - HILOG_ERROR("engine_ nullptr"); - return; - } + NativeValue* argv[] = { ConvertElement(element) }; HILOG_INFO("OnAbilityDisconnectDone CallFunction success"); - engine_->CallFunction(value, method, argv, ARGC_ONE); + engine_.CallFunction(value, method, argv, ARGC_ONE); } void JSAbilityConnection::CallJsFailed(int32_t errorCode) @@ -977,25 +968,22 @@ void JSAbilityConnection::CallJsFailed(int32_t errorCode) HILOG_ERROR("Failed to get onFailed from object"); return; } - if (engine_ == nullptr) { - HILOG_ERROR("engine_ nullptr"); - return; - } - NativeValue* argv[] = {engine_->CreateNumber(errorCode)}; + + NativeValue* argv[] = {engine_.CreateNumber(errorCode)}; HILOG_INFO("CallJsFailed CallFunction success"); - engine_->CallFunction(value, method, argv, ARGC_ONE); + engine_.CallFunction(value, method, argv, ARGC_ONE); HILOG_INFO("CallJsFailed end"); } NativeValue* JSAbilityConnection::ConvertElement(const AppExecFwk::ElementName &element) { - napi_value napiElementName = OHOS::AppExecFwk::WrapElementName(reinterpret_cast(engine_.get()), element); + napi_value napiElementName = OHOS::AppExecFwk::WrapElementName(reinterpret_cast(&engine_), element); return reinterpret_cast(napiElementName); } void JSAbilityConnection::SetJsConnectionObject(NativeValue* jsConnectionObject) { - jsConnectionObject_ = std::unique_ptr(engine_->CreateReference(jsConnectionObject, 1)); + jsConnectionObject_ = std::unique_ptr(engine_.CreateReference(jsConnectionObject, 1)); } } // namespace AbilityRuntime } // namespace OHOS \ No newline at end of file diff --git a/frameworks/kits/ability/native/src/js_service_extension_context.cpp b/frameworks/kits/ability/native/src/js_service_extension_context.cpp index c4f697433ae..86e5b036394 100755 --- a/frameworks/kits/ability/native/src/js_service_extension_context.cpp +++ b/frameworks/kits/ability/native/src/js_service_extension_context.cpp @@ -261,8 +261,7 @@ private: want.GetBundle().c_str(), want.GetElement().GetAbilityName().c_str()); // unwarp connection - sptr connection = new JSServiceExtensionConnection(); - connection->SetNativeEngine(&engine); + sptr connection = new JSServiceExtensionConnection(engine); connection->SetJsConnectionObject(info.argv[1]); int64_t connectId = serialNumber_; ConnecttionKey key; @@ -322,8 +321,7 @@ private: } // unwarp connection - sptr connection = new JSServiceExtensionConnection(); - connection->SetNativeEngine(&engine); + sptr connection = new JSServiceExtensionConnection(engine); connection->SetJsConnectionObject(info.argv[1]); int64_t connectId = serialNumber_; ConnecttionKey key; @@ -442,6 +440,10 @@ NativeValue* CreateJsServiceExtensionContext(NativeEngine& engine, std::shared_p return objValue; } +JSServiceExtensionConnection::JSServiceExtensionConnection(NativeEngine& engine) : engine_(engine) {} + +JSServiceExtensionConnection::~JSServiceExtensionConnection() = default; + void JSServiceExtensionConnection::OnAbilityConnectDone(const AppExecFwk::ElementName &element, const sptr &remoteObject, int resultCode) { @@ -467,13 +469,13 @@ void JSServiceExtensionConnection::HandleOnAbilityConnectDone(const AppExecFwk:: { HILOG_INFO("HandleOnAbilityConnectDone begin, resultCode:%{public}d", resultCode); // wrap ElementName - napi_value napiElementName = OHOS::AppExecFwk::WrapElementName(reinterpret_cast(engine_), element); + napi_value napiElementName = OHOS::AppExecFwk::WrapElementName(reinterpret_cast(&engine_), element); NativeValue* nativeElementName = reinterpret_cast(napiElementName); // wrap RemoteObject HILOG_INFO("OnAbilityConnectDone begin NAPI_ohos_rpc_CreateJsRemoteObject"); napi_value napiRemoteObject = NAPI_ohos_rpc_CreateJsRemoteObject( - reinterpret_cast(engine_), remoteObject); + reinterpret_cast(&engine_), remoteObject); NativeValue* nativeRemoteObject = reinterpret_cast(napiRemoteObject); NativeValue* argv[] = {nativeElementName, nativeRemoteObject}; if (jsConnectionObject_ == nullptr) { @@ -492,12 +494,7 @@ void JSServiceExtensionConnection::HandleOnAbilityConnectDone(const AppExecFwk:: return; } HILOG_INFO("JSServiceExtensionConnection::CallFunction onConnect, success"); - // two params - if (engine_ == nullptr) { - HILOG_ERROR("engine_ nullptr"); - return; - } - engine_->CallFunction(value, methodOnConnect, argv, ARGC_TWO); + engine_.CallFunction(value, methodOnConnect, argv, ARGC_TWO); HILOG_INFO("OnAbilityConnectDone end"); } @@ -524,7 +521,7 @@ void JSServiceExtensionConnection::HandleOnAbilityDisconnectDone(const AppExecFw int resultCode) { HILOG_INFO("HandleOnAbilityDisconnectDone begin, resultCode:%{public}d", resultCode); - napi_value napiElementName = OHOS::AppExecFwk::WrapElementName(reinterpret_cast(engine_), element); + napi_value napiElementName = OHOS::AppExecFwk::WrapElementName(reinterpret_cast(&engine_), element); NativeValue* nativeElementName = reinterpret_cast(napiElementName); NativeValue* argv[] = {nativeElementName}; if (jsConnectionObject_ == nullptr) { @@ -560,23 +557,13 @@ void JSServiceExtensionConnection::HandleOnAbilityDisconnectDone(const AppExecFw connects_.erase(item); HILOG_INFO("OnAbilityDisconnectDone erase connects_.size:%{public}zu", connects_.size()); } - // one params - if (engine_ == nullptr) { - HILOG_ERROR("engine_ nullptr"); - return; - } HILOG_INFO("OnAbilityDisconnectDone CallFunction success"); - engine_->CallFunction(value, method, argv, ARGC_ONE); -} - -void JSServiceExtensionConnection::SetNativeEngine(NativeEngine* engine) -{ - engine_ = engine; + engine_.CallFunction(value, method, argv, ARGC_ONE); } void JSServiceExtensionConnection::SetJsConnectionObject(NativeValue* jsConnectionObject) { - jsConnectionObject_ = std::unique_ptr(engine_->CreateReference(jsConnectionObject, 1)); + jsConnectionObject_ = std::unique_ptr(engine_.CreateReference(jsConnectionObject, 1)); } void JSServiceExtensionConnection::CallJsFailed(int32_t errorCode) @@ -598,13 +585,9 @@ void JSServiceExtensionConnection::CallJsFailed(int32_t errorCode) HILOG_ERROR("Failed to get onFailed from object"); return; } - if (engine_ == nullptr) { - HILOG_ERROR("engine_ nullptr"); - return; - } - NativeValue* argv[] = {engine_->CreateNumber(errorCode)}; + NativeValue* argv[] = {engine_.CreateNumber(errorCode)}; HILOG_INFO("CallJsFailed CallFunction success"); - engine_->CallFunction(value, method, argv, ARGC_ONE); + engine_.CallFunction(value, method, argv, ARGC_ONE); HILOG_INFO("CallJsFailed end"); } } // namespace AbilityRuntime diff --git a/interfaces/kits/napi/aafwk/app/app_manager/js_app_manager.cpp b/interfaces/kits/napi/aafwk/app/app_manager/js_app_manager.cpp index de8d4f39138..9e864b0619a 100644 --- a/interfaces/kits/napi/aafwk/app/app_manager/js_app_manager.cpp +++ b/interfaces/kits/napi/aafwk/app/app_manager/js_app_manager.cpp @@ -103,8 +103,7 @@ private: } // unwarp observer - sptr observer = new JSApplicationStateObserver(); - observer->SetNativeEngine(&engine); + sptr observer = new JSApplicationStateObserver(engine); observer->SetJsObserverObject(info.argv[0]); int64_t observerId = serialNumber_; observerIds_.emplace(observerId, observer); @@ -364,6 +363,10 @@ NativeValue* JsAppManagerInit(NativeEngine* engine, NativeValue* exportObj) return engine->CreateUndefined(); } +JSApplicationStateObserver::JSApplicationStateObserver(NativeEngine& engine) : engine_(engine) {} + +JSApplicationStateObserver::~JSApplicationStateObserver() = default; + void JSApplicationStateObserver::OnForegroundApplicationChanged(const AppStateData &appStateData) { HILOG_DEBUG("onForegroundApplicationChanged bundleName:%{public}s, uid:%{public}d, state:%{public}d", @@ -388,11 +391,7 @@ void JSApplicationStateObserver::HandleOnForegroundApplicationChanged(const AppS { HILOG_DEBUG("HandleOnForegroundApplicationChanged bundleName:%{public}s, uid:%{public}d, state:%{public}d", appStateData.bundleName.c_str(), appStateData.uid, appStateData.state); - if (engine_ == nullptr) { - HILOG_ERROR("engine_ nullptr"); - return; - } - NativeValue* argv[] = {CreateJsAppStateData(*engine_, appStateData)}; + NativeValue* argv[] = {CreateJsAppStateData(engine_, appStateData)}; CallJsFunction("onForegroundApplicationChanged", argv, ARGC_ONE); } @@ -418,11 +417,7 @@ void JSApplicationStateObserver::OnAbilityStateChanged(const AbilityStateData &a void JSApplicationStateObserver::HandleOnAbilityStateChanged(const AbilityStateData &abilityStateData) { HILOG_INFO("HandleOnAbilityStateChanged begin"); - if (engine_ == nullptr) { - HILOG_ERROR("engine_ nullptr"); - return; - } - NativeValue* argv[] = {CreateJsAbilityStateData(*engine_, abilityStateData)}; + NativeValue* argv[] = {CreateJsAbilityStateData(engine_, abilityStateData)}; CallJsFunction("onAbilityStateChanged", argv, ARGC_ONE); } @@ -448,11 +443,7 @@ void JSApplicationStateObserver::OnExtensionStateChanged(const AbilityStateData void JSApplicationStateObserver::HandleOnExtensionStateChanged(const AbilityStateData &abilityStateData) { HILOG_INFO("HandleOnExtensionStateChanged begin"); - if (engine_ == nullptr) { - HILOG_ERROR("engine_ nullptr"); - return; - } - NativeValue* argv[] = {CreateJsAbilityStateData(*engine_, abilityStateData)}; + NativeValue* argv[] = {CreateJsAbilityStateData(engine_, abilityStateData)}; CallJsFunction("onExtensionStateChanged", argv, ARGC_ONE); } @@ -478,11 +469,7 @@ void JSApplicationStateObserver::OnProcessCreated(const ProcessData &processData void JSApplicationStateObserver::HandleOnProcessCreated(const ProcessData &processData) { HILOG_INFO("HandleOnProcessCreated begin"); - if (engine_ == nullptr) { - HILOG_ERROR("engine_ nullptr"); - return; - } - NativeValue* argv[] = {CreateJsProcessData(*engine_, processData)}; + NativeValue* argv[] = {CreateJsProcessData(engine_, processData)}; CallJsFunction("onProcessCreated", argv, ARGC_ONE); } @@ -508,11 +495,7 @@ void JSApplicationStateObserver::OnProcessDied(const ProcessData &processData) void JSApplicationStateObserver::HandleOnProcessDied(const ProcessData &processData) { HILOG_INFO("HandleOnProcessDied begin"); - if (engine_ == nullptr) { - HILOG_ERROR("engine_ nullptr"); - return; - } - NativeValue* argv[] = {CreateJsProcessData(*engine_, processData)}; + NativeValue* argv[] = {CreateJsProcessData(engine_, processData)}; CallJsFunction("onProcessDied", argv, ARGC_ONE); } @@ -535,23 +518,14 @@ void JSApplicationStateObserver::CallJsFunction(const char* methodName, NativeVa HILOG_ERROR("Failed to get from object"); return; } - if (engine_ == nullptr) { - HILOG_ERROR("engine_ nullptr"); - return; - } HILOG_INFO("CallJsFunction CallFunction success"); - engine_->CallFunction(value, method, argv, argc); + engine_.CallFunction(value, method, argv, argc); HILOG_INFO("CallJsFunction end"); } -void JSApplicationStateObserver::SetNativeEngine(NativeEngine* engine) -{ - engine_ = engine; -} - void JSApplicationStateObserver::SetJsObserverObject(NativeValue* jsObserverObject) { - jsObserverObject_ = std::unique_ptr(engine_->CreateReference(jsObserverObject, 1)); + jsObserverObject_ = std::unique_ptr(engine_.CreateReference(jsObserverObject, 1)); } } // namespace AbilityRuntime } // namespace OHOS \ No newline at end of file diff --git a/interfaces/kits/napi/aafwk/app/app_manager/js_app_manager.h b/interfaces/kits/napi/aafwk/app/app_manager/js_app_manager.h index 11c00117113..15d542346fa 100644 --- a/interfaces/kits/napi/aafwk/app/app_manager/js_app_manager.h +++ b/interfaces/kits/napi/aafwk/app/app_manager/js_app_manager.h @@ -30,6 +30,8 @@ NativeValue* JsAppManagerInit(NativeEngine* engine, NativeValue* exportObj); class JSApplicationStateObserver : public ApplicationStateObserverStub { public: + explicit JSApplicationStateObserver(NativeEngine& engine); + ~JSApplicationStateObserver(); void OnForegroundApplicationChanged(const AppStateData &appStateData) override; void OnAbilityStateChanged(const AbilityStateData &abilityStateData) override; void OnExtensionStateChanged(const AbilityStateData &abilityStateData) override; @@ -40,12 +42,11 @@ public: void HandleOnExtensionStateChanged(const AbilityStateData &abilityStateData); void HandleOnProcessCreated(const ProcessData &processData); void HandleOnProcessDied(const ProcessData &processData); - void SetNativeEngine(NativeEngine* engine); void SetJsObserverObject(NativeValue* jsObserverObject); void CallJsFunction(const char* methodName, NativeValue* const* argv, size_t argc); private: - NativeEngine* engine_ = nullptr; + NativeEngine& engine_; std::unique_ptr jsObserverObject_ = nullptr; }; -- Gitee