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 8f602d1cb8ca55bdbe9db762eadec2a84cce479a..d9d8ab2cda9555d9ad8fa764b21fee63668c3715 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 63445887992e2efd6123543beee218c7f43a6fb1..31bebb1070f256ab6d81eb0445dbb426a814b158 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,10 +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(); - UriPermissionManagerClient() = default; + static UriPermissionManagerClient& GetInstance(); ~UriPermissionManagerClient() = default; /** @@ -59,6 +58,7 @@ public: void OnLoadSystemAbilitySuccess(const sptr &remoteObject); void OnLoadSystemAbilityFail(); private: + UriPermissionManagerClient() = default; sptr ConnectUriPermService(); void ClearProxy(); bool LoadUriPermService(); @@ -77,8 +77,6 @@ private: }; private: - static std::recursive_mutex recursiveMutex_; - static std::shared_ptr 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 6d62f8d07786da6a778d6b378ff05e71659b5c44..0d607898eb172c0dd0173cd0af23c641d4ff1a5c 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 22460ce162c697412bb7caeab316301030500951..759c8dbfe71627be62341343555fbb002995faf0 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,17 +27,10 @@ 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::GetInstance() { - if (instance_ == nullptr) { - std::lock_guard lock_l(recursiveMutex_); - if (instance_ == nullptr) { - instance_ = std::make_shared(); - } - } - return instance_; + static UriPermissionManagerClient instance; + return instance; } int UriPermissionManagerClient::GrantUriPermission(const Uri &uri, unsigned int flag, @@ -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 3b48ed9d1d274bd0300b8537a097d922720ca0a7..9b6fc9a8962dbe098e8e3324723ab624151b53c9 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -2352,7 +2352,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) { @@ -2377,8 +2376,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; } @@ -2407,7 +2407,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(); @@ -2418,8 +2417,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; } @@ -2432,8 +2432,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 a519fe6134b9af7a5484e11a3c63c6f4c0d14a7f..19e2e1c08d6e41764887b402640a518ad0e08e67 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 = std::make_shared(); - 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 = std::make_shared(); + 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 = std::make_shared(); + 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,22 +90,9 @@ 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(); - upmc->saLoadFinished_ = true; - auto ret = upmc->LoadUriPermService(); + auto& upmc = AAFwk::UriPermissionManagerClient::GetInstance(); + upmc.saLoadFinished_ = true; + auto ret = upmc.LoadUriPermService(); EXPECT_TRUE(ret); } } // namespace AAFwk