From 79aef1b7322ab0356da8067e8d14c6001da47397 Mon Sep 17 00:00:00 2001 From: xinking129 Date: Mon, 8 May 2023 17:26:40 +0800 Subject: [PATCH 1/4] uri_permission change Signed-off-by: xinking129 --- .../include/uri_permission_manager_client.h | 2 +- .../src/uri_permission_manager_client.cpp | 2 +- .../uri_permission_manager_test.cpp | 21 ++++--------------- 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h b/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h index 63445887992..5e200421723 100644 --- a/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h +++ b/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h @@ -27,7 +27,6 @@ using ClearProxyCallback = std::function; class UriPermissionManagerClient : public std::enable_shared_from_this { public: static std::shared_ptr GetInstance(); - UriPermissionManagerClient() = default; ~UriPermissionManagerClient() = default; /** @@ -59,6 +58,7 @@ public: void OnLoadSystemAbilitySuccess(const sptr &remoteObject); void OnLoadSystemAbilityFail(); private: + UriPermissionManagerClient() = default; sptr ConnectUriPermService(); void ClearProxy(); bool LoadUriPermService(); diff --git a/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp b/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp index 22460ce162c..be90e15210a 100644 --- a/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp +++ b/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp @@ -34,7 +34,7 @@ std::shared_ptr UriPermissionManagerClient::GetInsta if (instance_ == nullptr) { std::lock_guard lock_l(recursiveMutex_); if (instance_ == nullptr) { - instance_ = std::make_shared(); + instance_ = std::shared_ptr(new UriPermissionManagerClient()); } } return instance_; diff --git a/test/unittest/uri_permission_manager_test/uri_permission_manager_test.cpp b/test/unittest/uri_permission_manager_test/uri_permission_manager_test.cpp index a519fe6134b..548dce09479 100644 --- a/test/unittest/uri_permission_manager_test/uri_permission_manager_test.cpp +++ b/test/unittest/uri_permission_manager_test/uri_permission_manager_test.cpp @@ -46,7 +46,7 @@ void UriPermissionManagerTest::TearDown() {} */ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_001, TestSize.Level1) { - auto upmc = std::make_shared(); + auto upmc = AAFwk::UriPermissionManagerClient::GetInstance(); upmc->saLoadFinished_ = true; auto ret = upmc->ConnectUriPermService(); EXPECT_TRUE(ret == nullptr); @@ -60,7 +60,7 @@ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_001, TestSize.Level1) */ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_002, TestSize.Level1) { - auto upmc = std::make_shared(); + auto upmc = AAFwk::UriPermissionManagerClient::GetInstance(); sptr remoteObject = new (std::nothrow) UriPermissionLoadCallback(); upmc->SetUriPermMgr(remoteObject); auto ret = upmc->ConnectUriPermService(); @@ -75,7 +75,7 @@ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_002, TestSize.Level1) */ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_003, TestSize.Level1) { - auto upmc = std::make_shared(); + auto upmc = AAFwk::UriPermissionManagerClient::GetInstance(); sptr remoteObject = nullptr; upmc->SetUriPermMgr(remoteObject); auto ret = upmc->ConnectUriPermService(); @@ -90,20 +90,7 @@ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_003, TestSize.Level1) */ HWTEST_F(UriPermissionManagerTest, LoadUriPermService_001, TestSize.Level1) { - auto upmc = std::make_shared(); - auto ret = upmc->LoadUriPermService(); - EXPECT_FALSE(ret); -} - -/* - * Feature: UriPermissionManagerClient - * Function: LoadUriPermService - * SubFunction: NA - * FunctionPoints: UriPermissionManagerClient LoadUriPermService - */ -HWTEST_F(UriPermissionManagerTest, LoadUriPermService_002, TestSize.Level1) -{ - auto upmc = std::make_shared(); + auto upmc = AAFwk::UriPermissionManagerClient::GetInstance(); upmc->saLoadFinished_ = true; auto ret = upmc->LoadUriPermService(); EXPECT_TRUE(ret); -- Gitee From 486e7cff9d1c38b2e3ddfb8e352d47aa99674bcf Mon Sep 17 00:00:00 2001 From: xinking129 Date: Thu, 18 May 2023 19:48:43 +0800 Subject: [PATCH 2/4] fix review Signed-off-by: xinking129 --- .../napi/uri_permission/js_uri_perm_mgr.cpp | 4 ++-- .../include/uri_permission_manager_client.h | 3 +-- .../src/uri_permission_load_callback.cpp | 4 ++-- .../src/uri_permission_manager_client.cpp | 18 ++++---------- services/abilitymgr/src/ability_record.cpp | 15 ++++++------ .../uri_permission_manager_test.cpp | 24 +++++++++---------- 6 files changed, 28 insertions(+), 40 deletions(-) diff --git a/frameworks/js/napi/uri_permission/js_uri_perm_mgr.cpp b/frameworks/js/napi/uri_permission/js_uri_perm_mgr.cpp index 816101501e8..43ec7ff4e77 100644 --- a/frameworks/js/napi/uri_permission/js_uri_perm_mgr.cpp +++ b/frameworks/js/napi/uri_permission/js_uri_perm_mgr.cpp @@ -97,7 +97,7 @@ private: AsyncTask::CompleteCallback complete = [uriStr, flag, targetBundleName](NativeEngine& engine, AsyncTask& task, int32_t status) { Uri uri(uriStr); - auto errCode = AAFwk::UriPermissionManagerClient::GetInstance()->GrantUriPermission(uri, flag, + auto errCode = AAFwk::UriPermissionManagerClient::GetInstance().GrantUriPermission(uri, flag, targetBundleName, 0); if (errCode == ERR_OK) { task.ResolveWithNoError(engine, engine.CreateUndefined()); @@ -152,7 +152,7 @@ private: AsyncTask::CompleteCallback complete = [uriStr, bundleName](NativeEngine& engine, AsyncTask& task, int32_t status) { Uri uri(uriStr); - auto errCode = AAFwk::UriPermissionManagerClient::GetInstance()->RevokeUriPermissionManually(uri, + auto errCode = AAFwk::UriPermissionManagerClient::GetInstance().RevokeUriPermissionManually(uri, bundleName); if (errCode == ERR_OK) { task.ResolveWithNoError(engine, engine.CreateUndefined()); diff --git a/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h b/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h index 5e200421723..1b0bf47647e 100644 --- a/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h +++ b/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h @@ -77,8 +77,7 @@ private: }; private: - static std::recursive_mutex recursiveMutex_; - static std::shared_ptr instance_; + static UriPermissionManagerClient instance_; std::mutex mutex_; std::mutex saLoadMutex_; std::condition_variable loadSaVariable_; diff --git a/interfaces/inner_api/uri_permission/src/uri_permission_load_callback.cpp b/interfaces/inner_api/uri_permission/src/uri_permission_load_callback.cpp index 6d62f8d0778..0d607898eb1 100644 --- a/interfaces/inner_api/uri_permission/src/uri_permission_load_callback.cpp +++ b/interfaces/inner_api/uri_permission/src/uri_permission_load_callback.cpp @@ -34,7 +34,7 @@ void UriPermissionLoadCallback::OnLoadSystemAbilitySuccess( } HILOG_DEBUG("Load system ability %{public}d succeed.", systemAbilityId); - UriPermissionManagerClient::GetInstance()->OnLoadSystemAbilitySuccess(remoteObject); + UriPermissionManagerClient::GetInstance().OnLoadSystemAbilitySuccess(remoteObject); } void UriPermissionLoadCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId) @@ -45,7 +45,7 @@ void UriPermissionLoadCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId) } HILOG_DEBUG("Load system ability %{public}d failed.", systemAbilityId); - UriPermissionManagerClient::GetInstance()->OnLoadSystemAbilityFail(); + UriPermissionManagerClient::GetInstance().OnLoadSystemAbilityFail(); } } // namespace AAFwk } // namespace OHOS \ No newline at end of file diff --git a/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp b/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp index be90e15210a..812b88ff49a 100644 --- a/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp +++ b/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp @@ -27,16 +27,9 @@ namespace AAFwk { namespace { const int LOAD_SA_TIMEOUT_MS = 4 * 1000; } // namespace -std::shared_ptr UriPermissionManagerClient::instance_ = nullptr; -std::recursive_mutex UriPermissionManagerClient::recursiveMutex_; -std::shared_ptr UriPermissionManagerClient::GetInstance() +UriPermissionManagerClient UriPermissionManagerClient::instance_; +UriPermissionManagerClient& UriPermissionManagerClient::GetInstance() { - if (instance_ == nullptr) { - std::lock_guard lock_l(recursiveMutex_); - if (instance_ == nullptr) { - instance_ = std::shared_ptr(new UriPermissionManagerClient()); - } - } return instance_; } @@ -84,11 +77,8 @@ sptr UriPermissionManagerClient::ConnectUriPermService() HILOG_ERROR("Failed to get uri permission manager."); return nullptr; } - auto self = shared_from_this(); - const auto& onClearProxyCallback = [self] { - if (self) { - self->ClearProxy(); - } + const auto& onClearProxyCallback = [] { + UriPermissionManagerClient::GetInstance().ClearProxy(); }; sptr recipient(new UpmsDeathRecipient(onClearProxyCallback)); uriPermMgr->AsObject()->AddDeathRecipient(recipient); diff --git a/services/abilitymgr/src/ability_record.cpp b/services/abilitymgr/src/ability_record.cpp index 79c30dc7134..ed0dd1c6cfa 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -2339,7 +2339,6 @@ void AbilityRecord::GrantUriPermission(Want &want, int32_t userId, std::string t uriVec = want.GetStringArrayParam(AbilityConfig::PARAMS_STREAM); uriVec.emplace_back(uriStr); HILOG_DEBUG("GrantUriPermission uriVec size: %{public}zu", uriVec.size()); - auto upmClient = AAFwk::UriPermissionManagerClient::GetInstance(); auto bundleFlag = AppExecFwk::BundleFlag::GET_BUNDLE_WITH_EXTENSION_INFO; auto fromTokenId = IPCSkeleton::GetCallingTokenID(); for (auto&& str : uriVec) { @@ -2364,8 +2363,9 @@ void AbilityRecord::GrantUriPermission(Want &want, int32_t userId, std::string t continue; } int autoremove = 1; - auto ret = IN_PROCESS_CALL(upmClient->GrantUriPermission(uri, want.GetFlags(), - targetBundleName, autoremove)); + auto ret = IN_PROCESS_CALL( + AAFwk::UriPermissionManagerClient::GetInstance().GrantUriPermission(uri, want.GetFlags(), + targetBundleName, autoremove)); if (ret == 0) { isGrantedUriPermission_ = true; } @@ -2394,7 +2394,6 @@ void AbilityRecord::GrantDmsUriPermission(Want &want, std::string targetBundleNa { std::vector uriVec = want.GetStringArrayParam(PARAMS_URI); HILOG_DEBUG("GrantDmsUriPermission uriVec size: %{public}zu", uriVec.size()); - auto upmClient = AAFwk::UriPermissionManagerClient::GetInstance(); for (auto&& str : uriVec) { Uri uri(str); auto&& scheme = uri.GetScheme(); @@ -2405,8 +2404,9 @@ void AbilityRecord::GrantDmsUriPermission(Want &want, std::string targetBundleNa continue; } int autoremove = 1; - auto ret = IN_PROCESS_CALL(upmClient->GrantUriPermission(uri, want.GetFlags(), - targetBundleName, autoremove)); + auto ret = IN_PROCESS_CALL( + AAFwk::UriPermissionManagerClient::GetInstance().GrantUriPermission(uri, want.GetFlags(), + targetBundleName, autoremove)); if (ret) { isGrantedUriPermission_ = true; } @@ -2419,8 +2419,7 @@ void AbilityRecord::RevokeUriPermission() { if (isGrantedUriPermission_) { HILOG_DEBUG("To remove uri permission."); - auto upmClient = AAFwk::UriPermissionManagerClient::GetInstance(); - upmClient->RevokeUriPermission(applicationInfo_.accessTokenId); + AAFwk::UriPermissionManagerClient::GetInstance().RevokeUriPermission(applicationInfo_.accessTokenId); isGrantedUriPermission_ = false; } } diff --git a/test/unittest/uri_permission_manager_test/uri_permission_manager_test.cpp b/test/unittest/uri_permission_manager_test/uri_permission_manager_test.cpp index 548dce09479..19e2e1c08d6 100644 --- a/test/unittest/uri_permission_manager_test/uri_permission_manager_test.cpp +++ b/test/unittest/uri_permission_manager_test/uri_permission_manager_test.cpp @@ -46,9 +46,9 @@ void UriPermissionManagerTest::TearDown() {} */ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_001, TestSize.Level1) { - auto upmc = AAFwk::UriPermissionManagerClient::GetInstance(); - upmc->saLoadFinished_ = true; - auto ret = upmc->ConnectUriPermService(); + auto& upmc = AAFwk::UriPermissionManagerClient::GetInstance(); + upmc.saLoadFinished_ = true; + auto ret = upmc.ConnectUriPermService(); EXPECT_TRUE(ret == nullptr); } @@ -60,10 +60,10 @@ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_001, TestSize.Level1) */ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_002, TestSize.Level1) { - auto upmc = AAFwk::UriPermissionManagerClient::GetInstance(); + auto& upmc = AAFwk::UriPermissionManagerClient::GetInstance(); sptr remoteObject = new (std::nothrow) UriPermissionLoadCallback(); - upmc->SetUriPermMgr(remoteObject); - auto ret = upmc->ConnectUriPermService(); + upmc.SetUriPermMgr(remoteObject); + auto ret = upmc.ConnectUriPermService(); EXPECT_TRUE(ret != nullptr); } @@ -75,10 +75,10 @@ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_002, TestSize.Level1) */ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_003, TestSize.Level1) { - auto upmc = AAFwk::UriPermissionManagerClient::GetInstance(); + auto& upmc = AAFwk::UriPermissionManagerClient::GetInstance(); sptr remoteObject = nullptr; - upmc->SetUriPermMgr(remoteObject); - auto ret = upmc->ConnectUriPermService(); + upmc.SetUriPermMgr(remoteObject); + auto ret = upmc.ConnectUriPermService(); EXPECT_TRUE(ret == nullptr); } @@ -90,9 +90,9 @@ HWTEST_F(UriPermissionManagerTest, ConnectUriPermService_003, TestSize.Level1) */ HWTEST_F(UriPermissionManagerTest, LoadUriPermService_001, TestSize.Level1) { - auto upmc = AAFwk::UriPermissionManagerClient::GetInstance(); - upmc->saLoadFinished_ = true; - auto ret = upmc->LoadUriPermService(); + auto& upmc = AAFwk::UriPermissionManagerClient::GetInstance(); + upmc.saLoadFinished_ = true; + auto ret = upmc.LoadUriPermService(); EXPECT_TRUE(ret); } } // namespace AAFwk -- Gitee From cb9353effccb615c9c9976db522cebb603bc5fe5 Mon Sep 17 00:00:00 2001 From: xinking129 Date: Thu, 18 May 2023 20:24:17 +0800 Subject: [PATCH 3/4] fix build error Signed-off-by: xinking129 --- .../uri_permission/include/uri_permission_manager_client.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h b/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h index 1b0bf47647e..eae5e7cf854 100644 --- a/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h +++ b/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h @@ -24,9 +24,9 @@ namespace OHOS { namespace AAFwk { using ClearProxyCallback = std::function; -class UriPermissionManagerClient : public std::enable_shared_from_this { +class UriPermissionManagerClient { public: - static std::shared_ptr GetInstance(); + static UriPermissionManagerClient& GetInstance(); ~UriPermissionManagerClient() = default; /** -- Gitee From 35e1b76ad3b3f5638fdad61566aaff14feb10dae Mon Sep 17 00:00:00 2001 From: xinking129 Date: Sat, 20 May 2023 14:26:06 +0800 Subject: [PATCH 4/4] fix code Signed-off-by: xinking129 --- .../uri_permission/include/uri_permission_manager_client.h | 1 - .../uri_permission/src/uri_permission_manager_client.cpp | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h b/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h index eae5e7cf854..31bebb1070f 100644 --- a/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h +++ b/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h @@ -77,7 +77,6 @@ private: }; private: - static UriPermissionManagerClient instance_; std::mutex mutex_; std::mutex saLoadMutex_; std::condition_variable loadSaVariable_; diff --git a/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp b/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp index 812b88ff49a..759c8dbfe71 100644 --- a/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp +++ b/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp @@ -27,10 +27,10 @@ namespace AAFwk { namespace { const int LOAD_SA_TIMEOUT_MS = 4 * 1000; } // namespace -UriPermissionManagerClient UriPermissionManagerClient::instance_; UriPermissionManagerClient& UriPermissionManagerClient::GetInstance() { - return instance_; + static UriPermissionManagerClient instance; + return instance; } int UriPermissionManagerClient::GrantUriPermission(const Uri &uri, unsigned int flag, -- Gitee