summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Gapchuk (GitHub) <41586842+IGapchuk@users.noreply.github.com>2020-10-05 17:28:12 +0300
committerGitHub <noreply@github.com>2020-10-05 10:28:12 -0400
commit049f7d8633ad99b7a3773eac5a64a67d3d9a531f (patch)
treec61fecaf5c1700171cc84fee9bbc51216bb10bf0
parentfd291d7654bdee02f329a62080e1831206f24edc (diff)
downloadsdl_core-049f7d8633ad99b7a3773eac5a64a67d3d9a531f.tar.gz
Fix deadlock in policy handler (#3497)
-rw-r--r--src/components/application_manager/include/application_manager/policies/policy_handler.h26
-rw-r--r--src/components/application_manager/src/policies/policy_handler.cc739
-rw-r--r--src/components/application_manager/test/policy_handler_test.cc51
3 files changed, 460 insertions, 356 deletions
diff --git a/src/components/application_manager/include/application_manager/policies/policy_handler.h b/src/components/application_manager/include/application_manager/policies/policy_handler.h
index 9206b1d155..c123bcc764 100644
--- a/src/components/application_manager/include/application_manager/policies/policy_handler.h
+++ b/src/components/application_manager/include/application_manager/policies/policy_handler.h
@@ -703,7 +703,7 @@ class PolicyHandler : public PolicyHandlerInterface,
#ifdef BUILD_TESTS
void SetPolicyManager(std::shared_ptr<PolicyManager> pm) {
- policy_manager_ = pm;
+ ExchangePolicyManager(pm);
}
#endif // BUILD_TESTS
@@ -901,8 +901,28 @@ class PolicyHandler : public PolicyHandlerInterface,
*/
void GetRegisteredLinks(std::map<std::string, std::string>& out_links) const;
+ /**
+ * @brief Load policy manager
+ * This method is thread safe
+ * @return Pointer to the policy manager instance or null if not inited
+ */
+ std::shared_ptr<PolicyManager> LoadPolicyManager() const;
+
+ /**
+ * @brief Exchange a policy manager
+ * This method is thread safe
+ * @param policy_manager - new policy manager
+ */
+ void ExchangePolicyManager(std::shared_ptr<PolicyManager> policy_manager);
+
mutable sync_primitives::RWLock policy_manager_lock_;
- std::shared_ptr<PolicyManager> policy_manager_;
+
+ /**
+ * @brief Policy manager
+ * @note Use atomic_policy_manager_ only with
+ * LoadPolicyManager and ExchangePolicyManager methods!
+ */
+ std::shared_ptr<PolicyManager> atomic_policy_manager_;
std::shared_ptr<PolicyEventObserver> event_observer_;
uint32_t last_activated_app_id_;
@@ -918,8 +938,6 @@ class PolicyHandler : public PolicyHandlerInterface,
*/
DeviceHandles pending_device_handles_;
- inline bool CreateManager();
-
typedef std::list<PolicyHandlerObserver*> HandlersCollection;
HandlersCollection listeners_;
mutable sync_primitives::Lock listeners_lock_;
diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc
index e4e78c6f7e..c72566e6e5 100644
--- a/src/components/application_manager/src/policies/policy_handler.cc
+++ b/src/components/application_manager/src/policies/policy_handler.cc
@@ -30,12 +30,14 @@
POSSIBILITY OF SUCH DAMAGE.
*/
#include "application_manager/policies/policy_handler.h"
+
#include <dlfcn.h>
#include <unistd.h>
#include <algorithm>
#include <functional>
#include <utility>
#include <vector>
+
#include "application_manager/application_manager.h"
#include "application_manager/message_helper.h"
#include "application_manager/policies/delegates/app_permission_delegate.h"
@@ -137,21 +139,24 @@ struct HMILevelPredicate
mobile_api::HMILevel::eType level_;
};
+constexpr char kLibraryNotLoadedMessage[] =
+ "The shared library of policy is not loaded";
+
} // namespace
-#define POLICY_LIB_CHECK_OR_RETURN(return_value) \
+#define POLICY_LIB_CHECK_OR_RETURN(policy_manager, return_value) \
{ \
sync_primitives::AutoReadLock lock(policy_manager_lock_); \
- if (!policy_manager_) { \
+ if (!policy_manager) { \
SDL_LOG_DEBUG("The shared library of policy is not loaded"); \
return return_value; \
} \
}
-#define POLICY_LIB_CHECK_VOID() \
+#define POLICY_LIB_CHECK_VOID(policy_manager) \
{ \
sync_primitives::AutoReadLock lock(policy_manager_lock_); \
- if (!policy_manager_) { \
+ if (!policy_manager) { \
SDL_LOG_DEBUG("The shared library of policy is not loaded"); \
return; \
} \
@@ -308,7 +313,7 @@ PolicyHandler::~PolicyHandler() {}
PolicyEncryptionFlagGetterInterfaceSPtr
PolicyHandler::PolicyEncryptionFlagGetter() const {
- return policy_manager_;
+ return LoadPolicyManager();
}
bool PolicyHandler::PolicyEnabled() const {
@@ -317,55 +322,71 @@ bool PolicyHandler::PolicyEnabled() const {
bool PolicyHandler::LoadPolicyLibrary() {
SDL_LOG_AUTO_TRACE();
- sync_primitives::AutoWriteLock lock(policy_manager_lock_);
- if (!PolicyEnabled()) {
- SDL_LOG_WARN(
- "System is configured to work without policy "
- "functionality.");
- policy_manager_.reset();
- return false;
- }
- if (CreateManager()) {
- policy_manager_->set_listener(this);
- event_observer_ = std::shared_ptr<PolicyEventObserver>(
- new PolicyEventObserver(this, application_manager_.event_dispatcher()));
- }
+ auto create_policy_manager_instance = [this]() {
+ if (!PolicyEnabled()) {
+ SDL_LOG_WARN(
+ "System is configured to work without policy "
+ "functionality.");
+ return std::shared_ptr<PolicyManager>();
+ }
- return (policy_manager_.use_count() != 0);
-}
+ ExchangePolicyManager(nullptr);
+ sync_primitives::AutoWriteLock lock(policy_manager_lock_);
+ void* const dl_policy_handle = dlopen(kLibrary.c_str(), RTLD_LAZY);
-bool PolicyHandler::CreateManager() {
- void* policy_handle = dlopen(kLibrary.c_str(), RTLD_LAZY);
- const char* error = dlerror();
- if (!policy_handle) {
- SDL_LOG_ERROR((error == NULL
- ? "Unknown error in dlopen while loading policy table"
- : error));
- return false;
- }
+ if (!dl_policy_handle) {
+ SDL_LOG_ERROR("An error occurs while calling dlopen");
+ return std::shared_ptr<PolicyManager>();
+ }
- typedef PolicyManager* (*CreateManager)(logger::Logger*);
- typedef void (*DeleteManager)(PolicyManager*);
- CreateManager create_manager =
- reinterpret_cast<CreateManager>(dlsym(policy_handle, "CreateManager"));
- DeleteManager delete_manager =
- reinterpret_cast<DeleteManager>(dlsym(policy_handle, "DeleteManager"));
- auto policy_destroyer = [delete_manager,
- policy_handle](PolicyManager* policy_manager) {
- SDL_LOG_DEBUG("Delete Policy Manager");
- delete_manager(policy_manager);
- dlclose(policy_handle);
- };
- char* error_string = dlerror();
- if (NULL == error_string) {
- policy_manager_ = std::shared_ptr<PolicyManager>(
+ typedef PolicyManager* (*CreateManager)(logger::Logger*);
+ typedef void (*DeleteManager)(PolicyManager*);
+
+ CreateManager create_manager = reinterpret_cast<CreateManager>(
+ dlsym(dl_policy_handle, "CreateManager"));
+ char* error_string = dlerror();
+ if (NULL != error_string) {
+ SDL_LOG_WARN(error_string);
+ dlclose(dl_policy_handle);
+ return std::shared_ptr<PolicyManager>();
+ }
+
+ DeleteManager delete_manager = reinterpret_cast<DeleteManager>(
+ dlsym(dl_policy_handle, "DeleteManager"));
+
+ error_string = dlerror();
+ if (NULL != error_string) {
+ SDL_LOG_WARN(error_string);
+ dlclose(dl_policy_handle);
+ return std::shared_ptr<PolicyManager>();
+ }
+
+ auto policy_destroyer = [delete_manager,
+ dl_policy_handle](PolicyManager* policy_manager) {
+ SDL_LOG_DEBUG("Delete Policy Manager");
+ delete_manager(policy_manager);
+ dlclose(dl_policy_handle);
+ };
+
+ auto policy_manager = std::shared_ptr<PolicyManager>(
create_manager(&logger::Logger::instance()), policy_destroyer);
- } else {
- SDL_LOG_WARN(error_string);
- dlclose(policy_handle);
+
+ policy_manager->set_listener(this);
+
+ return policy_manager;
+ };
+
+ auto policy_manager = create_policy_manager_instance();
+
+ if (!policy_manager) {
+ return false;
}
- return (policy_manager_.use_count() != 0);
+
+ ExchangePolicyManager(policy_manager);
+ event_observer_ = std::make_shared<PolicyEventObserver>(
+ this, application_manager_.event_dispatcher());
+ return true;
}
const PolicySettings& PolicyHandler::get_settings() const {
@@ -374,11 +395,13 @@ const PolicySettings& PolicyHandler::get_settings() const {
bool PolicyHandler::InitPolicyTable() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false)
+
std::string preloaded_file = get_settings().preloaded_pt_file();
if (file_system::FileExists(preloaded_file)) {
const bool pt_inited =
- policy_manager_->InitPT(preloaded_file, &get_settings());
+ policy_manager->InitPT(preloaded_file, &get_settings());
OnPTInited();
return pt_inited;
}
@@ -398,20 +421,22 @@ void PolicyHandler::OnPTInited() {
void PolicyHandler::StopRetrySequence() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
#ifndef EXTERNAL_PROPRIETARY_MODE
// Clear cached PTU app
last_ptu_app_id_ = 0;
#endif // EXTERNAL_PROPRIETARY_MODE
- policy_manager_->StopRetrySequence();
+ policy_manager->StopRetrySequence();
}
bool PolicyHandler::ResetPolicyTable() {
SDL_LOG_TRACE("Reset policy table.");
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false)
std::string preloaded_file = get_settings().preloaded_pt_file();
if (file_system::FileExists(preloaded_file)) {
- return policy_manager_->ResetPT(preloaded_file);
+ return policy_manager->ResetPT(preloaded_file);
}
SDL_LOG_WARN("The file which contains preloaded PT is not exist");
return false;
@@ -419,8 +444,9 @@ bool PolicyHandler::ResetPolicyTable() {
bool PolicyHandler::ClearUserConsent() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->ResetUserConsent();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false)
+ return policy_manager->ResetUserConsent();
}
#ifndef EXTERNAL_PROPRIETARY_MODE
@@ -454,7 +480,6 @@ void PolicyHandler::CacheRetryInfo(const uint32_t app_id,
uint32_t PolicyHandler::GetAppIdForSending() const {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(0);
// fix ApplicationSet access crash
const ApplicationSet accessor = application_manager_.applications().GetData();
@@ -494,28 +519,30 @@ uint32_t PolicyHandler::GetAppIdForSending() const {
void PolicyHandler::PushAppIdToPTUQueue(const uint32_t app_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
sync_primitives::AutoLock lock(app_id_queue_lock_);
const auto result = applications_ptu_queue_.insert(app_id);
if (result.second) {
- policy_manager_->UpdatePTUReadyAppsCount(applications_ptu_queue_.size());
+ policy_manager->UpdatePTUReadyAppsCount(applications_ptu_queue_.size());
}
}
void PolicyHandler::PopAppIdFromPTUQueue() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
sync_primitives::AutoLock lock(app_id_queue_lock_);
if (applications_ptu_queue_.size() > 0) {
applications_ptu_queue_.erase(applications_ptu_queue_.begin());
- policy_manager_->UpdatePTUReadyAppsCount(applications_ptu_queue_.size());
+ policy_manager->UpdatePTUReadyAppsCount(applications_ptu_queue_.size());
}
}
#ifdef EXTERNAL_PROPRIETARY_MODE
PTURetryHandler& PolicyHandler::ptu_retry_handler() const {
SDL_LOG_AUTO_TRACE();
- return *policy_manager_;
+ return *atomic_policy_manager_;
}
void PolicyHandler::OnAppPermissionConsent(
@@ -538,7 +565,8 @@ void PolicyHandler::OnAppPermissionConsent(
void PolicyHandler::OnDeviceConsentChanged(const std::string& device_id,
const bool is_allowed) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
connection_handler::DeviceHandle device_handle;
if (!application_manager_.connection_handler().GetDeviceID(device_id,
&device_handle)) {
@@ -563,15 +591,15 @@ void PolicyHandler::OnDeviceConsentChanged(const std::string& device_id,
// with negative data consent, there no necessity to change smth and
// send
// notification for such app in case of device consent is not allowed
- if (policy_manager_->IsPredataPolicy(policy_app_id) && !is_allowed) {
+ if (policy_manager->IsPredataPolicy(policy_app_id) && !is_allowed) {
continue;
}
- policy_manager_->ReactOnUserDevConsentForApp(
+ policy_manager->ReactOnUserDevConsentForApp(
device_handle, policy_app_id, is_allowed);
- policy_manager_->SendNotificationOnPermissionsUpdated(device_id,
- policy_app_id);
+ policy_manager->SendNotificationOnPermissionsUpdated(device_id,
+ policy_app_id);
}
}
}
@@ -604,8 +632,9 @@ void PolicyHandler::SendOnAppPropertiesChangeNotification(
void PolicyHandler::OnPTExchangeNeeded() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->ForcePTExchange();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->ForcePTExchange();
}
void PolicyHandler::GetAvailableApps(std::queue<std::string>& apps) {
@@ -630,22 +659,26 @@ StatusNotifier PolicyHandler::AddApplication(
const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) {
- POLICY_LIB_CHECK_OR_RETURN(std::make_shared<utils::CallNothing>());
- return policy_manager_->AddApplication(device_id, application_id, hmi_types);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager,
+ std::make_shared<utils::CallNothing>());
+ return policy_manager->AddApplication(device_id, application_id, hmi_types);
}
void PolicyHandler::AddDevice(const std::string& device_id,
const std::string& connection_type) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->AddDevice(device_id, connection_type);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->AddDevice(device_id, connection_type);
}
void PolicyHandler::SetDeviceInfo(const std::string& device_id,
const DeviceInfo& device_info) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->SetDeviceInfo(device_id, device_info);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SetDeviceInfo(device_id, device_info);
}
#ifdef EXTERNAL_PROPRIETARY_MODE
@@ -661,7 +694,8 @@ void PolicyHandler::OnAppPermissionConsentInternal(
void PolicyHandler::OnAppPermissionConsentInternal(
const uint32_t connection_key, PermissionConsent& out_permissions) {
#endif
- POLICY_LIB_CHECK_VOID();
+ const std::shared_ptr<PolicyManager> policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
if (connection_key) {
ApplicationSharedPtr app = application_manager_.application(connection_key);
@@ -677,9 +711,9 @@ void PolicyHandler::OnAppPermissionConsentInternal(
if (!out_permissions.policy_app_id.empty()) {
#ifdef EXTERNAL_PROPRIETARY_MODE
- policy_manager_->SetUserConsentForApp(out_permissions, mode);
+ policy_manager->SetUserConsentForApp(out_permissions, mode);
#else
- policy_manager_->SetUserConsentForApp(out_permissions);
+ policy_manager->SetUserConsentForApp(out_permissions);
#endif
}
} else if (!app_to_device_link_.empty()) {
@@ -716,9 +750,9 @@ void PolicyHandler::OnAppPermissionConsentInternal(
out_permissions.policy_app_id = app->policy_app_id();
out_permissions.device_id = app->mac_address();
#ifdef EXTERNAL_PROPRIETARY_MODE
- policy_manager_->SetUserConsentForApp(out_permissions, mode);
+ policy_manager->SetUserConsentForApp(out_permissions, mode);
#else
- policy_manager_->SetUserConsentForApp(out_permissions);
+ policy_manager->SetUserConsentForApp(out_permissions);
#endif
}
} else {
@@ -727,14 +761,15 @@ void PolicyHandler::OnAppPermissionConsentInternal(
"setting common permissions.");
}
#ifdef EXTERNAL_PROPRIETARY_MODE
- if (!policy_manager_->SetExternalConsentStatus(external_consent_status)) {
+ if (!policy_manager->SetExternalConsentStatus(external_consent_status)) {
SDL_LOG_WARN("External User Consent Settings status has not been set!");
}
#endif
}
void policy::PolicyHandler::SetDaysAfterEpoch() {
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
date_time::TimeDuration current_time = date_time::getCurrentTime();
const int kSecondsInDay = 60 * 60 * 24;
int days_after_epoch = date_time::getSecs(current_time) / kSecondsInDay;
@@ -743,8 +778,9 @@ void policy::PolicyHandler::SetDaysAfterEpoch() {
#ifdef ENABLE_SECURITY
std::string PolicyHandler::RetrieveCertificate() const {
- POLICY_LIB_CHECK_OR_RETURN(std::string(""));
- return policy_manager_->RetrieveCertificate();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::string());
+ return policy_manager->RetrieveCertificate();
}
#endif // ENABLE_SECURITY
@@ -753,17 +789,18 @@ void PolicyHandler::OnGetUserFriendlyMessage(
const std::string& language,
uint32_t correlation_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
#ifdef EXTERNAL_PROPRIETARY_MODE
const std::string active_hmi_language = application_manager::EnumToString(
application_manager_.hmi_capabilities().active_ui_language());
const std::vector<UserFriendlyMessage> result =
- policy_manager_->GetUserFriendlyMessages(
+ policy_manager->GetUserFriendlyMessages(
message_codes, language, active_hmi_language);
#else
const std::vector<UserFriendlyMessage> result =
- policy_manager_->GetUserFriendlyMessages(message_codes, language);
+ policy_manager->GetUserFriendlyMessages(message_codes, language);
#endif // EXTERNAL_PROPRIETARY_MODE
// Send response to HMI with gathered data
MessageHelper::SendGetUserFriendlyMessageResponse(
@@ -774,12 +811,16 @@ void PolicyHandler::OnSystemRequestReceived() const {
#ifdef EXTERNAL_PROPRIETARY_MODE
ptu_retry_handler().OnSystemRequestReceived();
#endif
- policy_manager_->ResetTimeout();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->ResetTimeout();
}
void PolicyHandler::TriggerPTUOnStartupIfRequired() {
#ifdef PROPRIETARY_MODE
- policy_manager_->TriggerPTUOnStartupIfRequired();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->TriggerPTUOnStartupIfRequired();
#endif
}
@@ -793,10 +834,23 @@ void PolicyHandler::GetRegisteredLinks(
std::for_each(it_app, it_app_end, linker);
}
+std::shared_ptr<PolicyManager> PolicyHandler::LoadPolicyManager() const {
+ sync_primitives::AutoReadLock lock{policy_manager_lock_};
+ return atomic_policy_manager_;
+}
+
+void PolicyHandler::ExchangePolicyManager(
+ std::shared_ptr<PolicyManager> policy_manager) {
+ sync_primitives::AutoWriteLock lock{policy_manager_lock_};
+ atomic_policy_manager_.swap(policy_manager);
+}
+
std::vector<policy::FunctionalGroupPermission>
PolicyHandler::CollectRegisteredAppsPermissions() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(std::vector<policy::FunctionalGroupPermission>());
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager,
+ std::vector<policy::FunctionalGroupPermission>());
// If no specific app was passed, get permissions for all currently registered
// applications
sync_primitives::AutoLock lock(app_to_device_link_lock_);
@@ -808,7 +862,7 @@ PolicyHandler::CollectRegisteredAppsPermissions() {
std::map<std::string, std::string>::const_iterator it =
app_to_device_link_.begin();
for (; it != app_to_device_link_.end(); ++it) {
- policy_manager_->GetUserConsentForApp(
+ policy_manager->GetUserConsentForApp(
it->first, it->second, group_permissions);
consolidator.Consolidate(group_permissions);
}
@@ -818,7 +872,8 @@ PolicyHandler::CollectRegisteredAppsPermissions() {
std::vector<FunctionalGroupPermission> PolicyHandler::CollectAppPermissions(
const uint32_t connection_key) {
std::vector<FunctionalGroupPermission> group_permissions;
- POLICY_LIB_CHECK_OR_RETURN(group_permissions);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, group_permissions);
// Single app only
ApplicationSharedPtr app = application_manager_.application(connection_key);
@@ -841,9 +896,9 @@ std::vector<FunctionalGroupPermission> PolicyHandler::CollectAppPermissions(
return group_permissions;
}
- policy_manager_->GetUserConsentForApp(device_params.device_mac_address,
- app->policy_app_id(),
- group_permissions);
+ policy_manager->GetUserConsentForApp(device_params.device_mac_address,
+ app->policy_app_id(),
+ group_permissions);
return group_permissions;
}
@@ -851,7 +906,8 @@ std::vector<FunctionalGroupPermission> PolicyHandler::CollectAppPermissions(
void PolicyHandler::OnGetListOfPermissions(const uint32_t connection_key,
const uint32_t correlation_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
application_manager::ApplicationSharedPtr app =
application_manager_.application(connection_key);
@@ -871,7 +927,7 @@ void PolicyHandler::OnGetListOfPermissions(const uint32_t connection_key,
MessageHelper::SendGetListOfPermissionsResponse(
permissions,
#ifdef EXTERNAL_PROPRIETARY_MODE
- policy_manager_->GetExternalConsentStatus(),
+ policy_manager->GetExternalConsentStatus(),
#endif // EXTERNAL_PROPRIETARY_MODE
correlation_id,
application_manager_);
@@ -896,7 +952,8 @@ void PolicyHandler::LinkAppsToDevice() {
bool PolicyHandler::IsAppSuitableForPolicyUpdate(
const Applications::value_type value) const {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
if (!value->IsRegistered()) {
SDL_LOG_DEBUG("Application " << value->app_id()
@@ -913,7 +970,7 @@ bool PolicyHandler::IsAppSuitableForPolicyUpdate(
application_manager_.connection_handler().get_session_observer());
const bool is_device_allowed =
- (kDeviceAllowed == policy_manager_->GetUserConsentForDevice(
+ (kDeviceAllowed == policy_manager->GetUserConsentForDevice(
device_params.device_mac_address));
SDL_LOG_DEBUG("Is device " << device_params.device_mac_address << " allowed "
@@ -942,8 +999,9 @@ uint32_t PolicyHandler::ChooseRandomAppForPolicyUpdate(
void PolicyHandler::OnDeviceSwitching(const std::string& device_id_from,
const std::string& device_id_to) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnDeviceSwitching(device_id_from, device_id_to);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnDeviceSwitching(device_id_from, device_id_to);
}
void PolicyHandler::OnLockScreenDismissalStateChanged() {
@@ -957,17 +1015,19 @@ void PolicyHandler::OnLockScreenDismissalStateChanged() {
void PolicyHandler::OnGetStatusUpdate(const uint32_t correlation_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
MessageHelper::SendGetStatusUpdateResponse(
- policy_manager_->GetPolicyTableStatus(),
+ policy_manager->GetPolicyTableStatus(),
correlation_id,
application_manager_);
}
void PolicyHandler::OnUpdateStatusChanged(const std::string& status) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->SaveUpdateStatusRequired(policy::kUpToDate != status);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SaveUpdateStatusRequired(policy::kUpToDate != status);
MessageHelper::SendOnStatusUpdate(status, application_manager_);
}
@@ -995,26 +1055,32 @@ std::string PolicyHandler::OnCurrentDeviceIdUpdateRequired(
void PolicyHandler::OnSystemInfoChanged(const std::string& language) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->SetSystemLanguage(language);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SetSystemLanguage(language);
}
void PolicyHandler::SetPreloadedPtFlag(const bool is_preloaded) {
SDL_LOG_AUTO_TRACE();
- policy_manager_->SetPreloadedPtFlag(is_preloaded);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SetPreloadedPtFlag(is_preloaded);
}
void PolicyHandler::OnGetSystemInfo(const std::string& ccpu_version,
const std::string& wers_country_code,
const std::string& language) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->SetSystemInfo(ccpu_version, wers_country_code, language);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SetSystemInfo(ccpu_version, wers_country_code, language);
}
std::string PolicyHandler::GetCCPUVersionFromPT() const {
SDL_LOG_AUTO_TRACE();
- return policy_manager_->GetCCPUVersionFromPT();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::string());
+ return policy_manager->GetCCPUVersionFromPT();
}
void PolicyHandler::OnVIIsReady() {
@@ -1031,7 +1097,8 @@ void PolicyHandler::OnVIIsReady() {
void PolicyHandler::OnVehicleDataUpdated(
const smart_objects::SmartObject& message) {
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
#ifdef EXTERNAL_PROPRIETARY_MODE
if (!message.keyExists(strings::msg_params)) {
SDL_LOG_ERROR("Message does not contains mandatory section "
@@ -1039,7 +1106,7 @@ void PolicyHandler::OnVehicleDataUpdated(
return;
}
if (message[strings::msg_params].keyExists(strings::vin)) {
- policy_manager_->SetVINValue(
+ policy_manager->SetVINValue(
message[strings::msg_params][strings::vin].asString());
}
#else
@@ -1052,7 +1119,8 @@ void PolicyHandler::OnPendingPermissionChange(
SDL_LOG_AUTO_TRACE();
SDL_LOG_DEBUG("PolicyHandler::OnPendingPermissionChange for "
<< policy_app_id);
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
ApplicationSharedPtr app =
application_manager_.application(device_id, policy_app_id);
if (app.use_count() == 0) {
@@ -1061,7 +1129,7 @@ void PolicyHandler::OnPendingPermissionChange(
}
AppPermissions permissions =
- policy_manager_->GetAppPermissionsChanges(device_id, policy_app_id);
+ policy_manager->GetAppPermissionsChanges(device_id, policy_app_id);
const uint32_t app_id = app->app_id();
@@ -1075,7 +1143,7 @@ void PolicyHandler::OnPendingPermissionChange(
mobile_apis::AudioStreamingState::NOT_AUDIBLE,
mobile_apis::VideoStreamingState::NOT_STREAMABLE,
true);
- policy_manager_->RemovePendingPermissionChanges(policy_app_id);
+ policy_manager->RemovePendingPermissionChanges(policy_app_id);
return;
}
@@ -1124,7 +1192,7 @@ void PolicyHandler::OnPendingPermissionChange(
app->app_id(), permissions, application_manager_);
}
- policy_manager_->RemovePendingPermissionChanges(policy_app_id);
+ policy_manager->RemovePendingPermissionChanges(policy_app_id);
}
bool PolicyHandler::SendMessageToSDK(const BinaryMessage& pt_string,
@@ -1137,7 +1205,7 @@ bool PolicyHandler::SendMessageToSDK(const BinaryMessage& pt_string,
const std::string& url,
const uint32_t app_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
+ POLICY_LIB_CHECK_OR_RETURN(atomic_policy_manager_, false);
ApplicationSharedPtr app = application_manager_.application(app_id);
@@ -1171,9 +1239,10 @@ bool PolicyHandler::SendMessageToSDK(const BinaryMessage& pt_string,
bool PolicyHandler::ReceiveMessageFromSDK(const std::string& file,
const BinaryMessage& pt_string) {
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
- const auto load_pt_result = policy_manager_->LoadPT(file, pt_string);
+ const auto load_pt_result = policy_manager->LoadPT(file, pt_string);
SDL_LOG_INFO("Load policy table result code: " << load_pt_result);
@@ -1183,9 +1252,9 @@ bool PolicyHandler::ReceiveMessageFromSDK(const std::string& file,
if (is_ptu_successful) {
SDL_LOG_INFO("PTU was successful.");
- policy_manager_->CleanupUnpairedDevices();
+ policy_manager->CleanupUnpairedDevices();
SetDaysAfterEpoch();
- policy_manager_->OnPTUFinished(load_pt_result);
+ policy_manager->OnPTUFinished(load_pt_result);
#ifndef EXTERNAL_PROPRIETARY_MODE
// Clean up retry information
last_ptu_app_id_ = 0;
@@ -1200,7 +1269,7 @@ bool PolicyHandler::ReceiveMessageFromSDK(const std::string& file,
correlation_id, vehicle_data_args, application_manager_);
} else {
SDL_LOG_WARN("Exchange wasn't successful");
- policy_manager_->OnPTUFinished(load_pt_result);
+ policy_manager->OnPTUFinished(load_pt_result);
}
return is_ptu_successful;
@@ -1208,28 +1277,24 @@ bool PolicyHandler::ReceiveMessageFromSDK(const std::string& file,
bool PolicyHandler::UnloadPolicyLibrary() {
SDL_LOG_AUTO_TRACE();
- SDL_LOG_DEBUG("policy_manager_ = " << policy_manager_);
- bool ret = true;
AsyncRunner::Stop();
- sync_primitives::AutoWriteLock lock(policy_manager_lock_);
- if (policy_manager_) {
- policy_manager_.reset();
- }
- SDL_LOG_TRACE("exit");
- return ret;
+ ExchangePolicyManager(nullptr);
+ return !atomic_policy_manager_;
}
#ifdef EXTERNAL_PROPRIETARY_MODE
struct SDLAlowedNotification {
- SDLAlowedNotification(const connection_handler::DeviceHandle& device_id,
+ SDLAlowedNotification(sync_primitives::RWLock& policy_manager_lock,
+ const connection_handler::DeviceHandle& device_id,
PolicyManager* policy_manager,
StateController& state_controller)
- : device_id_(device_id)
+ : policy_manager_lock_(policy_manager_lock)
+ , device_id_(device_id)
, policy_manager_(policy_manager)
, state_controller_(state_controller) {}
void operator()(const ApplicationSharedPtr& app) {
- DCHECK_OR_RETURN_VOID(policy_manager_);
+ POLICY_LIB_CHECK_VOID(policy_manager_);
if (app->device() == device_id_) {
std::string hmi_level;
mobile_apis::HMILevel::eType default_mobile_hmi;
@@ -1255,6 +1320,7 @@ struct SDLAlowedNotification {
}
private:
+ sync_primitives::RWLock& policy_manager_lock_;
connection_handler::DeviceHandle device_id_;
PolicyManager* policy_manager_;
StateController& state_controller_;
@@ -1264,7 +1330,8 @@ struct SDLAlowedNotification {
void PolicyHandler::OnAllowSDLFunctionalityNotification(
bool is_allowed, const std::string& device_mac) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
using namespace mobile_apis;
const bool device_specific = !device_mac.empty();
// Common devices consents change
@@ -1284,7 +1351,7 @@ void PolicyHandler::OnAllowSDLFunctionalityNotification(
SDL_LOG_WARN("Device with id " << device_id << " wasn't found.");
continue;
}
- policy_manager_->SetUserConsentForDevice(device_id, is_allowed);
+ policy_manager->SetUserConsentForDevice(device_id, is_allowed);
connection_handler::DeviceHandle device_handle = 0;
if (!connection_handler.GetDeviceID(device_id, &device_handle)) {
SDL_LOG_WARN("Device handle with mac " << device_id
@@ -1309,8 +1376,9 @@ void PolicyHandler::OnAllowSDLFunctionalityNotification(
std::for_each(
applications.begin(),
applications.end(),
- SDLAlowedNotification(device_handle,
- policy_manager_.get(),
+ SDLAlowedNotification(policy_manager_lock_,
+ device_handle,
+ policy_manager.get(),
application_manager_.state_controller()));
}
#endif // EXTERNAL_PROPRIETARY_MODE
@@ -1320,7 +1388,7 @@ void PolicyHandler::OnAllowSDLFunctionalityNotification(
// Case, when specific device was changed
connection_handler::DeviceHandle device_handle = 0u;
if (device_specific) {
- policy_manager_->SetUserConsentForDevice(device_mac, is_allowed);
+ policy_manager->SetUserConsentForDevice(device_mac, is_allowed);
if (!connection_handler.GetDeviceID(device_mac, &device_handle)) {
SDL_LOG_WARN("Device hadle with mac " << device_mac << " wasn't found.");
}
@@ -1377,8 +1445,9 @@ void PolicyHandler::OnAllowSDLFunctionalityNotification(
void PolicyHandler::OnIgnitionCycleOver() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->IncrementIgnitionCycles();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->IncrementIgnitionCycles();
}
void PolicyHandler::OnActivateApp(uint32_t connection_key,
@@ -1393,15 +1462,15 @@ void PolicyHandler::OnActivateApp(uint32_t connection_key,
AppPermissions permissions(policy_app_id);
- sync_primitives::AutoReadLock lock(policy_manager_lock_);
- if (!policy_manager_) {
+ const auto policy_manager = LoadPolicyManager();
+ if (!policy_manager) {
SDL_LOG_DEBUG("The shared library of policy is not loaded");
if (!PolicyEnabled()) {
permissions.isSDLAllowed = true;
}
} else {
- permissions = policy_manager_->GetAppPermissionsChanges(app->mac_address(),
- policy_app_id);
+ permissions = policy_manager->GetAppPermissionsChanges(app->mac_address(),
+ policy_app_id);
#ifdef EXTERNAL_PROPRIETARY_MODE
UsageStatistics& usage = app->usage_report();
@@ -1411,7 +1480,7 @@ void PolicyHandler::OnActivateApp(uint32_t connection_key,
application_manager_.connection_handler().get_session_observer());
permissions.deviceInfo = device_params;
- DeviceConsent consent = policy_manager_->GetUserConsentForDevice(
+ DeviceConsent consent = policy_manager->GetUserConsentForDevice(
permissions.deviceInfo.device_mac_address);
permissions.isSDLAllowed = kDeviceAllowed == consent;
@@ -1440,7 +1509,7 @@ void PolicyHandler::OnActivateApp(uint32_t connection_key,
#else // EXTERNAL_PROPRIETARY_MODE
permissions.isSDLAllowed = true;
#endif // EXTERNAL_PROPRIETARY_MODE
- policy_manager_->RemovePendingPermissionChanges(policy_app_id);
+ policy_manager->RemovePendingPermissionChanges(policy_app_id);
}
// If application is revoked it should not be activated
// In this case we need to activate application
@@ -1460,14 +1529,16 @@ void PolicyHandler::OnActivateApp(uint32_t connection_key,
void PolicyHandler::KmsChanged(int kilometers) {
SDL_LOG_DEBUG("PolicyHandler::KmsChanged " << kilometers << " kilometers");
- POLICY_LIB_CHECK_VOID();
- policy_manager_->KmsChanged(kilometers);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->KmsChanged(kilometers);
}
void PolicyHandler::PTExchangeAtUserRequest(uint32_t correlation_id) {
SDL_LOG_TRACE("PT exchange at user request");
- POLICY_LIB_CHECK_VOID();
- std::string update_status = policy_manager_->ForcePTExchangeAtUserRequest();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ std::string update_status = policy_manager->ForcePTExchangeAtUserRequest();
MessageHelper::SendUpdateSDLResponse(
update_status, correlation_id, application_manager_);
}
@@ -1534,7 +1605,8 @@ void PolicyHandler::OnPermissionsUpdated(const std::string& device_id,
const std::string& policy_app_id,
const Permissions& permissions) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
ApplicationSharedPtr app =
application_manager_.application(device_id, policy_app_id);
@@ -1545,7 +1617,7 @@ void PolicyHandler::OnPermissionsUpdated(const std::string& device_id,
}
const auto require_encryption =
- policy_manager_->GetAppEncryptionRequired(policy_app_id);
+ policy_manager->GetAppEncryptionRequired(policy_app_id);
MessageHelper::SendOnPermissionsChangeNotification(
app->app_id(), permissions, application_manager_, require_encryption);
@@ -1599,7 +1671,8 @@ void PolicyHandler::OnSnapshotCreated(
void PolicyHandler::OnSnapshotCreated(const BinaryMessage& pt_string,
const PTUIterationType iteration_type) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
#ifdef PROPRIETARY_MODE
if (PTUIterationType::RetryIteration == iteration_type) {
uint32_t app_id_for_sending = 0;
@@ -1619,7 +1692,7 @@ void PolicyHandler::OnSnapshotCreated(const BinaryMessage& pt_string,
MessageHelper::SendPolicyUpdate(
policy_snapshot_full_path,
TimeoutExchangeSec(),
- policy_manager_->RetrySequenceDelaysSeconds(),
+ policy_manager->RetrySequenceDelaysSeconds(),
application_manager_);
}
#else // PROPRIETARY_MODE
@@ -1636,7 +1709,8 @@ void PolicyHandler::OnSnapshotCreated(const BinaryMessage& pt_string,
std::string PolicyHandler::GetNextUpdateUrl(
const PTUIterationType iteration_type, uint32_t& app_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(std::string());
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::string());
app_id = ChoosePTUApplication(iteration_type);
if (0 == app_id) {
@@ -1650,7 +1724,7 @@ std::string PolicyHandler::GetNextUpdateUrl(
}
EndpointUrls endpoint_urls;
- policy_manager_->GetUpdateUrls("0x07", endpoint_urls);
+ policy_manager->GetUpdateUrls("0x07", endpoint_urls);
if (endpoint_urls.empty()) {
SDL_LOG_ERROR("Service URLs are empty!");
@@ -1668,7 +1742,7 @@ std::string PolicyHandler::GetNextUpdateUrl(
return application_manager_.application(app_id);
};
- AppIdURL app_url = policy_manager_->GetNextUpdateUrl(endpoint_urls);
+ AppIdURL app_url = policy_manager->GetNextUpdateUrl(endpoint_urls);
ApplicationSharedPtr app = get_ptu_app(app_url, app_id);
if (!app) {
SDL_LOG_ERROR("No available applications for PTU!");
@@ -1676,7 +1750,7 @@ std::string PolicyHandler::GetNextUpdateUrl(
}
EndpointData& data = endpoint_urls[app_url.first];
while (!IsUrlAppIdValid(app->policy_app_id(), data)) {
- app_url = policy_manager_->GetNextUpdateUrl(endpoint_urls);
+ app_url = policy_manager->GetNextUpdateUrl(endpoint_urls);
app = get_ptu_app(app_url, app_id);
if (!app) {
SDL_LOG_ERROR("No available applications for PTU!");
@@ -1691,8 +1765,9 @@ std::string PolicyHandler::GetNextUpdateUrl(
bool PolicyHandler::GetPriority(const std::string& policy_app_id,
std::string* priority) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->GetPriority(policy_app_id, priority);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->GetPriority(policy_app_id, priority);
}
void PolicyHandler::CheckPermissions(
@@ -1701,7 +1776,8 @@ void PolicyHandler::CheckPermissions(
const PTString& rpc,
const RPCParams& rpc_params,
CheckPermissionResult& result) {
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
const std::string hmi_level =
application_manager::EnumToString(app->hmi_level(window_id));
if (hmi_level.empty()) {
@@ -1715,61 +1791,69 @@ void PolicyHandler::CheckPermissions(
SDL_LOG_INFO("Checking permissions for " << app->policy_app_id() << " in "
<< hmi_level << " on device "
<< device_id << " rpc " << rpc);
- policy_manager_->CheckPermissions(
+ policy_manager->CheckPermissions(
device_id, app->policy_app_id(), hmi_level, rpc, rpc_params, result);
}
uint32_t PolicyHandler::GetNotificationsNumber(const std::string& priority,
const bool is_subtle) const {
- POLICY_LIB_CHECK_OR_RETURN(0);
- return policy_manager_->GetNotificationsNumber(priority, is_subtle);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, 0);
+ return policy_manager->GetNotificationsNumber(priority, is_subtle);
}
DeviceConsent PolicyHandler::GetUserConsentForDevice(
const std::string& device_id) const {
- POLICY_LIB_CHECK_OR_RETURN(kDeviceDisallowed);
- return policy_manager_->GetUserConsentForDevice(device_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, kDeviceDisallowed);
+ return policy_manager->GetUserConsentForDevice(device_id);
}
Json::Value PolicyHandler::GetPolicyTableData() const {
- POLICY_LIB_CHECK_OR_RETURN(Json::Value());
- return policy_manager_->GetPolicyTableData();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, Json::Value());
+ return policy_manager->GetPolicyTableData();
}
bool PolicyHandler::GetDefaultHmi(const std::string& device_id,
const std::string& policy_app_id,
std::string* default_hmi) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->GetDefaultHmi(device_id, policy_app_id, default_hmi);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->GetDefaultHmi(device_id, policy_app_id, default_hmi);
}
bool PolicyHandler::GetInitialAppData(const std::string& application_id,
StringArray* nicknames,
StringArray* app_hmi_types) {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->GetInitialAppData(
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->GetInitialAppData(
application_id, nicknames, app_hmi_types);
}
void PolicyHandler::GetUpdateUrls(const std::string& service_type,
EndpointUrls& out_end_points) const {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->GetUpdateUrls(service_type, out_end_points);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->GetUpdateUrls(service_type, out_end_points);
}
void PolicyHandler::GetUpdateUrls(const uint32_t service_type,
EndpointUrls& out_end_points) const {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->GetUpdateUrls(service_type, out_end_points);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->GetUpdateUrls(service_type, out_end_points);
}
std::string PolicyHandler::GetLockScreenIconUrl(
const std::string& policy_app_id) const {
const std::string default_url;
- POLICY_LIB_CHECK_OR_RETURN(default_url);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, default_url);
EndpointUrls endpoints;
- policy_manager_->GetUpdateUrls("lock_screen_icon_url", endpoints);
+ policy_manager->GetUpdateUrls("lock_screen_icon_url", endpoints);
auto it_specific =
std::find_if(endpoints.begin(),
@@ -1798,14 +1882,16 @@ std::string PolicyHandler::GetLockScreenIconUrl(
}
std::string PolicyHandler::GetIconUrl(const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(std::string(""));
- return policy_manager_->GetIconUrl(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::string());
+ return policy_manager->GetIconUrl(policy_app_id);
}
uint32_t PolicyHandler::NextRetryTimeout() {
- POLICY_LIB_CHECK_OR_RETURN(0);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, 0);
SDL_LOG_AUTO_TRACE();
- return policy_manager_->NextRetryTimeout();
+ return policy_manager->NextRetryTimeout();
}
uint32_t PolicyHandler::TimeoutExchangeSec() const {
@@ -1813,37 +1899,42 @@ uint32_t PolicyHandler::TimeoutExchangeSec() const {
}
uint32_t PolicyHandler::TimeoutExchangeMSec() const {
- POLICY_LIB_CHECK_OR_RETURN(0);
- return policy_manager_->TimeoutExchangeMSec();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, 0);
+ return policy_manager->TimeoutExchangeMSec();
}
void PolicyHandler::OnExceededTimeout() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
std::for_each(listeners_.begin(),
listeners_.end(),
std::mem_fn(&PolicyHandlerObserver::OnPTUTimeoutExceeded));
- policy_manager_->OnExceededTimeout();
+ policy_manager->OnExceededTimeout();
}
const boost::optional<bool> PolicyHandler::LockScreenDismissalEnabledState()
const {
- POLICY_LIB_CHECK_OR_RETURN(boost::optional<bool>());
- return policy_manager_->LockScreenDismissalEnabledState();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, boost::optional<bool>());
+ return policy_manager->LockScreenDismissalEnabledState();
}
const boost::optional<std::string>
PolicyHandler::LockScreenDismissalWarningMessage(
const std::string& language) const {
- POLICY_LIB_CHECK_OR_RETURN(boost::optional<std::string>());
- return policy_manager_->LockScreenDismissalWarningMessage(language);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, boost::optional<std::string>());
+ return policy_manager->LockScreenDismissalWarningMessage(language);
}
void PolicyHandler::PTUpdatedAt(Counters counter, int value) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->PTUpdatedAt(counter, value);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->PTUpdatedAt(counter, value);
}
void PolicyHandler::add_listener(PolicyHandlerObserver* listener) {
@@ -1868,7 +1959,7 @@ PolicyHandler::GetStatisticManager() const {
}
void PolicyHandler::AddStatisticsInfo(int type) {
- POLICY_LIB_CHECK_VOID();
+ POLICY_LIB_CHECK_VOID(atomic_policy_manager_);
switch (static_cast<hmi_apis::Common_StatisticsType::eType>(type)) {
case hmi_apis::Common_StatisticsType::iAPP_BUFFER_FULL: {
usage_statistics::GlobalCounter count_of_iap_buffer_full(
@@ -1881,7 +1972,7 @@ void PolicyHandler::AddStatisticsInfo(int type) {
}
void PolicyHandler::OnSystemError(int code) {
- POLICY_LIB_CHECK_VOID();
+ POLICY_LIB_CHECK_VOID(atomic_policy_manager_);
switch (static_cast<hmi_apis::Common_SystemError::eType>(code)) {
case hmi_apis::Common_SystemError::SYNC_REBOOTED: {
usage_statistics::GlobalCounter count_of_sync_reboots(
@@ -1960,7 +2051,8 @@ void PolicyHandler::OnEmptyCertificateArrived() const {
void PolicyHandler::OnCertificateDecrypted(bool is_succeeded) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
const std::string file_name =
file_system::GetAbsolutePath(get_settings().app_storage_folder()) + +"/" +
@@ -1986,7 +2078,7 @@ void PolicyHandler::OnCertificateDecrypted(bool is_succeeded) {
SDL_LOG_DEBUG("Loaded decrypted certificate data: \"" << certificate_data
<< '"');
- policy_manager_->SetDecryptedCertificate(certificate_data);
+ policy_manager->SetDecryptedCertificate(certificate_data);
sync_primitives::AutoLock lock(listeners_lock_);
std::for_each(
@@ -2049,9 +2141,10 @@ bool PolicyHandler::CanUpdate() {
void PolicyHandler::RemoveDevice(const std::string& device_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
- policy_manager_->MarkUnpairedDevice(device_id);
+ policy_manager->MarkUnpairedDevice(device_id);
#ifdef EXTERNAL_PROPRIETARY_MODE
connection_handler::DeviceHandle device_uid;
if (application_manager_.connection_handler().GetDeviceID(device_id,
@@ -2067,25 +2160,29 @@ void PolicyHandler::RemoveDevice(const std::string& device_id) {
bool PolicyHandler::IsApplicationRevoked(const std::string& app_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
- return policy_manager_->IsApplicationRevoked(app_id);
+ return policy_manager->IsApplicationRevoked(app_id);
}
void PolicyHandler::OnUpdateRequestSentToMobile() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnUpdateStarted();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnUpdateStarted();
}
bool PolicyHandler::CheckKeepContext(const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->CanAppKeepContext(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->CanAppKeepContext(policy_app_id);
}
bool PolicyHandler::CheckStealFocus(const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->CanAppStealFocus(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->CanAppStealFocus(policy_app_id);
}
bool PolicyHandler::CheckSystemAction(
@@ -2108,8 +2205,9 @@ bool PolicyHandler::CheckSystemAction(
}
std::vector<std::string> PolicyHandler::GetApplicationPolicyIDs() const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<std::string>());
- const auto all_policy_ids = policy_manager_->GetApplicationPolicyIDs();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::vector<std::string>());
+ const auto all_policy_ids = policy_manager->GetApplicationPolicyIDs();
std::vector<std::string> policy_app_ids;
std::copy_if(
@@ -2126,26 +2224,30 @@ std::vector<std::string> PolicyHandler::GetApplicationPolicyIDs() const {
void PolicyHandler::GetEnabledCloudApps(
std::vector<std::string>& enabled_apps) const {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->GetEnabledCloudApps(enabled_apps);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->GetEnabledCloudApps(enabled_apps);
}
bool PolicyHandler::GetAppProperties(const std::string& policy_app_id,
AppProperties& out_app_properties) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->GetAppProperties(policy_app_id, out_app_properties);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->GetAppProperties(policy_app_id, out_app_properties);
}
std::vector<std::string> PolicyHandler::GetEnabledLocalApps() const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<std::string>());
- return policy_manager_->GetEnabledLocalApps();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::vector<std::string>());
+ return policy_manager->GetEnabledLocalApps();
}
const bool PolicyHandler::CheckCloudAppEnabled(
const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
AppProperties out_app_properties;
- policy_manager_->GetAppProperties(policy_app_id, out_app_properties);
+ policy_manager->GetAppProperties(policy_app_id, out_app_properties);
return out_app_properties.enabled;
}
@@ -2153,14 +2255,15 @@ PolicyHandler::AppPropertiesState PolicyHandler::GetAppPropertiesStatus(
const smart_objects::SmartObject& properties,
const std::string& app_id) const {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(AppPropertiesState::NO_CHANGES);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, AppPropertiesState::NO_CHANGES);
AppProperties app_properties;
- policy_manager_->GetAppProperties(app_id, app_properties);
+ policy_manager->GetAppProperties(app_id, app_properties);
policy::StringArray nicknames;
policy::StringArray app_hmi_types;
- policy_manager_->GetInitialAppData(app_id, &nicknames, &app_hmi_types);
+ policy_manager->GetInitialAppData(app_id, &nicknames, &app_hmi_types);
if (properties.keyExists(strings::enabled) &&
app_properties.enabled != properties[strings::enabled].asBool()) {
@@ -2240,34 +2343,36 @@ PolicyHandler::AppPropertiesState PolicyHandler::GetAppPropertiesStatus(
}
bool PolicyHandler::IsNewApplication(const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->IsNewApplication(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->IsNewApplication(policy_app_id);
}
void PolicyHandler::OnSetAppProperties(
const smart_objects::SmartObject& properties) {
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
const auto policy_app_id(properties[strings::policy_app_id].asString());
- policy_manager_->InitCloudApp(policy_app_id);
+ policy_manager->InitCloudApp(policy_app_id);
bool auth_token_update = false;
if (properties.keyExists(strings::enabled)) {
const bool enabled = properties[strings::enabled].asBool();
- policy_manager_->SetCloudAppEnabled(policy_app_id, enabled);
+ policy_manager->SetCloudAppEnabled(policy_app_id, enabled);
}
if (properties.keyExists(strings::auth_token)) {
const std::string auth_token = properties[strings::auth_token].asString();
- policy_manager_->SetAppAuthToken(policy_app_id, auth_token);
+ policy_manager->SetAppAuthToken(policy_app_id, auth_token);
auth_token_update = true;
}
if (properties.keyExists(strings::transport_type)) {
- policy_manager_->SetAppCloudTransportType(
+ policy_manager->SetAppCloudTransportType(
policy_app_id, properties[strings::transport_type].asString());
}
if (properties.keyExists(strings::endpoint)) {
- policy_manager_->SetAppEndpoint(policy_app_id,
- properties[strings::endpoint].asString());
+ policy_manager->SetAppEndpoint(policy_app_id,
+ properties[strings::endpoint].asString());
}
if (properties.keyExists(strings::nicknames)) {
StringArray nicknames;
@@ -2276,7 +2381,7 @@ void PolicyHandler::OnSetAppProperties(
for (size_t i = 0; i < nicknames_array.length(); ++i) {
nicknames.push_back(nicknames_array[i].asString());
}
- policy_manager_->SetAppNicknames(policy_app_id, nicknames);
+ policy_manager->SetAppNicknames(policy_app_id, nicknames);
}
if (properties.keyExists(strings::hybrid_app_preference)) {
std::string hybrid_app_preference;
@@ -2286,26 +2391,28 @@ void PolicyHandler::OnSetAppProperties(
smart_objects::EnumConversionHelper<
mobile_apis::HybridAppPreference::eType>::
EnumToString(value, &hybrid_app_preference);
- policy_manager_->SetHybridAppPreference(policy_app_id,
- hybrid_app_preference);
+ policy_manager->SetHybridAppPreference(policy_app_id,
+ hybrid_app_preference);
}
if (auth_token_update) {
AppProperties app_properties;
- if (policy_manager_->GetAppProperties(policy_app_id, app_properties)) {
+ if (policy_manager->GetAppProperties(policy_app_id, app_properties)) {
OnAuthTokenUpdated(policy_app_id, app_properties.auth_token);
}
}
}
void PolicyHandler::OnLocalAppAdded() {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnLocalAppAdded();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnLocalAppAdded();
}
void PolicyHandler::OnSetCloudAppProperties(
const smart_objects::SmartObject& message) {
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
if (!message.keyExists(strings::msg_params)) {
SDL_LOG_ERROR("Message does not contain mandatory section "
<< strings::msg_params);
@@ -2326,21 +2433,21 @@ void PolicyHandler::OnSetCloudAppProperties(
}
std::string policy_app_id(properties[strings::app_id].asString());
- policy_manager_->InitCloudApp(policy_app_id);
+ policy_manager->InitCloudApp(policy_app_id);
bool auth_token_update = false;
if (properties.keyExists(strings::auth_token)) {
std::string auth_token = properties[strings::auth_token].asString();
- policy_manager_->SetAppAuthToken(policy_app_id, auth_token);
+ policy_manager->SetAppAuthToken(policy_app_id, auth_token);
auth_token_update = true;
}
if (properties.keyExists(strings::cloud_transport_type)) {
- policy_manager_->SetAppCloudTransportType(
+ policy_manager->SetAppCloudTransportType(
policy_app_id, properties[strings::cloud_transport_type].asString());
}
if (properties.keyExists(strings::endpoint)) {
- policy_manager_->SetAppEndpoint(policy_app_id,
- properties[strings::endpoint].asString());
+ policy_manager->SetAppEndpoint(policy_app_id,
+ properties[strings::endpoint].asString());
}
if (properties.keyExists(strings::nicknames)) {
StringArray nicknames;
@@ -2349,7 +2456,7 @@ void PolicyHandler::OnSetCloudAppProperties(
for (size_t i = 0; i < nicknames_array.length(); ++i) {
nicknames.push_back(nicknames_array[i].asString());
}
- policy_manager_->SetAppNicknames(policy_app_id, nicknames);
+ policy_manager->SetAppNicknames(policy_app_id, nicknames);
}
if (properties.keyExists(strings::hybrid_app_preference)) {
std::string hybrid_app_preference;
@@ -2359,12 +2466,12 @@ void PolicyHandler::OnSetCloudAppProperties(
smart_objects::EnumConversionHelper<
mobile_apis::HybridAppPreference::eType>::
EnumToString(value, &hybrid_app_preference);
- policy_manager_->SetHybridAppPreference(policy_app_id,
- hybrid_app_preference);
+ policy_manager->SetHybridAppPreference(policy_app_id,
+ hybrid_app_preference);
}
if (properties.keyExists(strings::enabled)) {
bool enabled = properties[strings::enabled].asBool();
- policy_manager_->SetCloudAppEnabled(policy_app_id, enabled);
+ policy_manager->SetCloudAppEnabled(policy_app_id, enabled);
if (!auth_token_update) {
auth_token_update = enabled;
}
@@ -2374,7 +2481,7 @@ void PolicyHandler::OnSetCloudAppProperties(
if (auth_token_update) {
AppProperties app_properties;
- policy_manager_->GetAppProperties(policy_app_id, app_properties);
+ policy_manager->GetAppProperties(policy_app_id, app_properties);
OnAuthTokenUpdated(policy_app_id, app_properties.auth_token);
}
}
@@ -2382,9 +2489,10 @@ void PolicyHandler::OnSetCloudAppProperties(
void PolicyHandler::GetAppServiceParameters(
const std::string& policy_app_id,
policy_table::AppServiceParameters* app_service_parameters) const {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->GetAppServiceParameters(policy_app_id,
- app_service_parameters);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->GetAppServiceParameters(policy_app_id,
+ app_service_parameters);
}
bool PolicyHandler::CheckAppServiceParameters(
@@ -2444,20 +2552,23 @@ bool PolicyHandler::CheckAppServiceParameters(
bool PolicyHandler::UnknownRPCPassthroughAllowed(
const std::string& policy_app_id) const {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->UnknownRPCPassthroughAllowed(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->UnknownRPCPassthroughAllowed(policy_app_id);
}
uint32_t PolicyHandler::HeartBeatTimeout(const std::string& app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(0);
- return policy_manager_->HeartBeatTimeout(app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, 0);
+ return policy_manager->HeartBeatTimeout(app_id);
}
const std::string PolicyHandler::RemoteAppsUrl() const {
const std::string default_url;
- POLICY_LIB_CHECK_OR_RETURN(default_url);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, default_url);
EndpointUrls endpoints;
- policy_manager_->GetUpdateUrls("queryAppsUrl", endpoints);
+ policy_manager->GetUpdateUrls("queryAppsUrl", endpoints);
if (endpoints.empty() || endpoints[0].url.empty()) {
return default_url;
}
@@ -2466,13 +2577,15 @@ const std::string PolicyHandler::RemoteAppsUrl() const {
}
void PolicyHandler::OnAppsSearchStarted() {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnAppsSearchStarted();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnAppsSearchStarted();
}
void PolicyHandler::OnAppsSearchCompleted(const bool trigger_ptu) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnAppsSearchCompleted(trigger_ptu);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnAppsSearchCompleted(trigger_ptu);
}
void PolicyHandler::OnAddedNewApplicationToAppList(
@@ -2487,27 +2600,32 @@ void PolicyHandler::OnAddedNewApplicationToAppList(
void PolicyHandler::OnAppRegisteredOnMobile(const std::string& device_id,
const std::string& application_id) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnAppRegisteredOnMobile(device_id, application_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnAppRegisteredOnMobile(device_id, application_id);
}
RequestType::State PolicyHandler::GetAppRequestTypeState(
const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(RequestType::State::UNAVAILABLE);
- return policy_manager_->GetAppRequestTypesState(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, RequestType::State::UNAVAILABLE);
+ return policy_manager->GetAppRequestTypesState(policy_app_id);
}
RequestSubType::State PolicyHandler::GetAppRequestSubTypeState(
const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(RequestSubType::State::UNAVAILABLE);
- return policy_manager_->GetAppRequestSubTypesState(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager,
+ RequestSubType::State::UNAVAILABLE);
+ return policy_manager->GetAppRequestSubTypesState(policy_app_id);
}
bool PolicyHandler::IsRequestTypeAllowed(
const transport_manager::DeviceHandle& device_id,
const std::string& policy_app_id,
mobile_apis::RequestType::eType type) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
using namespace mobile_apis;
const std::string stringified_type = RequestTypeToString(type);
@@ -2517,7 +2635,7 @@ bool PolicyHandler::IsRequestTypeAllowed(
}
const RequestType::State request_type_state =
- policy_manager_->GetAppRequestTypesState(policy_app_id);
+ policy_manager->GetAppRequestTypesState(policy_app_id);
switch (request_type_state) {
case RequestType::State::EMPTY: {
@@ -2534,9 +2652,9 @@ bool PolicyHandler::IsRequestTypeAllowed(
// If any of request types is available for current application - get them
const auto request_types =
#ifdef EXTERNAL_PROPRIETARY_MODE
- policy_manager_->GetAppRequestTypes(device_id, policy_app_id);
+ policy_manager->GetAppRequestTypes(device_id, policy_app_id);
#else
- policy_manager_->GetAppRequestTypes(policy_app_id);
+ policy_manager->GetAppRequestTypes(policy_app_id);
#endif
return helpers::in_range(request_types, stringified_type);
}
@@ -2548,7 +2666,8 @@ bool PolicyHandler::IsRequestTypeAllowed(
bool PolicyHandler::IsRequestSubTypeAllowed(
const std::string& policy_app_id,
const std::string& request_subtype) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
using namespace mobile_apis;
if (request_subtype.empty()) {
@@ -2557,7 +2676,7 @@ bool PolicyHandler::IsRequestSubTypeAllowed(
}
const RequestSubType::State request_subtype_state =
- policy_manager_->GetAppRequestSubTypesState(policy_app_id);
+ policy_manager->GetAppRequestSubTypesState(policy_app_id);
switch (request_subtype_state) {
case RequestSubType::State::EMPTY: {
// If empty array of request subtypes is assigned to app - any is allowed
@@ -2573,7 +2692,7 @@ bool PolicyHandler::IsRequestSubTypeAllowed(
// If any of request subtypes is available for current application
// get them all
const auto request_subtypes =
- policy_manager_->GetAppRequestSubTypes(policy_app_id);
+ policy_manager->GetAppRequestSubTypes(policy_app_id);
return helpers::in_range(request_subtypes, request_subtype);
}
default:
@@ -2584,62 +2703,73 @@ bool PolicyHandler::IsRequestSubTypeAllowed(
const std::vector<std::string> PolicyHandler::GetAppRequestTypes(
const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<std::string>());
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::vector<std::string>());
#ifdef EXTERNAL_PROPRIETARY_MODE
- return policy_manager_->GetAppRequestTypes(device_handle, policy_app_id);
+ return policy_manager->GetAppRequestTypes(device_handle, policy_app_id);
#else
- return policy_manager_->GetAppRequestTypes(policy_app_id);
+ return policy_manager->GetAppRequestTypes(policy_app_id);
#endif
}
const std::vector<std::string> PolicyHandler::GetAppRequestSubTypes(
const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<std::string>());
- return policy_manager_->GetAppRequestSubTypes(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::vector<std::string>());
+ return policy_manager->GetAppRequestSubTypes(policy_app_id);
}
const std::vector<policy_table::VehicleDataItem>
policy::PolicyHandler::GetVehicleDataItems() const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<policy_table::VehicleDataItem>());
- return policy_manager_->GetVehicleDataItems();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager,
+ std::vector<policy_table::VehicleDataItem>());
+ return policy_manager->GetVehicleDataItems();
}
std::vector<rpc::policy_table_interface_base::VehicleDataItem>
policy::PolicyHandler::GetRemovedVehicleDataItems() const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<policy_table::VehicleDataItem>());
- return policy_manager_->GetRemovedVehicleDataItems();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager,
+ std::vector<policy_table::VehicleDataItem>());
+ return policy_manager->GetRemovedVehicleDataItems();
}
#ifdef EXTERNAL_PROPRIETARY_MODE
const MetaInfo PolicyHandler::GetMetaInfo() const {
- POLICY_LIB_CHECK_OR_RETURN(MetaInfo());
- return policy_manager_->GetMetaInfo();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, MetaInfo());
+ return policy_manager->GetMetaInfo();
}
#endif // EXTERNAL_PROPRIETARY_MODE
void PolicyHandler::Increment(usage_statistics::GlobalCounterId type) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->Increment(type);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->Increment(type);
}
void PolicyHandler::Increment(const std::string& app_id,
usage_statistics::AppCounterId type) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->Increment(app_id, type);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->Increment(app_id, type);
}
void PolicyHandler::Set(const std::string& app_id,
usage_statistics::AppInfoId type,
const std::string& value) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->Set(app_id, type, value);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->Set(app_id, type, value);
}
void PolicyHandler::Add(const std::string& app_id,
usage_statistics::AppStopwatchId type,
int32_t timespan_seconds) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->Add(app_id, type, timespan_seconds);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->Add(app_id, type, timespan_seconds);
}
bool PolicyHandler::IsUrlAppIdValid(const std::string app_id,
@@ -2675,7 +2805,7 @@ std::vector<std::string> PolicyHandler::GetDevicesIds(
void PolicyHandler::UpdateHMILevel(ApplicationSharedPtr app,
mobile_apis::HMILevel::eType level) {
SDL_LOG_AUTO_TRACE();
- DCHECK_OR_RETURN_VOID(app);
+ POLICY_LIB_CHECK_VOID(app);
if (app->hmi_level(mobile_apis::PredefinedWindows::DEFAULT_WINDOW) ==
mobile_apis::HMILevel::HMI_NONE) {
// If default is FULL, send request to HMI. Notification to mobile will be
@@ -2698,14 +2828,16 @@ void PolicyHandler::UpdateHMILevel(ApplicationSharedPtr app,
bool PolicyHandler::CheckModule(const PTString& app_id,
const PTString& module) {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->CheckModule(app_id, module);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->CheckModule(app_id, module);
}
void PolicyHandler::OnRemoteAppPermissionsChanged(
const std::string& device_id, const std::string& application_id) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->SendAppPermissionsChanged(device_id, application_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SendAppPermissionsChanged(device_id, application_id);
}
void PolicyHandler::OnUpdateHMIStatus(const std::string& device_id,
@@ -2739,8 +2871,9 @@ void PolicyHandler::OnUpdateHMIStatus(const std::string& device_id,
bool PolicyHandler::GetModuleTypes(const std::string& policy_app_id,
std::vector<std::string>* modules) const {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->GetModuleTypes(policy_app_id, modules);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->GetModuleTypes(policy_app_id, modules);
}
void PolicyHandler::SetDefaultHmiTypes(
@@ -2748,7 +2881,8 @@ void PolicyHandler::SetDefaultHmiTypes(
const std::string& application_id,
const smart_objects::SmartObject* app_types) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
std::vector<int> hmi_types;
if (app_types && app_types->asArray()) {
smart_objects::SmartArray* hmi_list = app_types->asArray();
@@ -2757,16 +2891,17 @@ void PolicyHandler::SetDefaultHmiTypes(
std::back_inserter(hmi_types),
SmartObjectToInt());
}
- policy_manager_->SetDefaultHmiTypes(device_handle, application_id, hmi_types);
+ policy_manager->SetDefaultHmiTypes(device_handle, application_id, hmi_types);
}
bool PolicyHandler::CheckHMIType(const std::string& application_id,
mobile_apis::AppHMIType::eType hmi,
const smart_objects::SmartObject* app_types) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
std::vector<int> policy_hmi_types;
- bool ret = policy_manager_->GetHMITypes(application_id, &policy_hmi_types);
+ bool ret = policy_manager->GetHMITypes(application_id, &policy_hmi_types);
std::vector<int> additional_hmi_types;
if (app_types && app_types->asArray()) {
diff --git a/src/components/application_manager/test/policy_handler_test.cc b/src/components/application_manager/test/policy_handler_test.cc
index d25a3fbfed..39ad034d6f 100644
--- a/src/components/application_manager/test/policy_handler_test.cc
+++ b/src/components/application_manager/test/policy_handler_test.cc
@@ -3058,16 +3058,12 @@ TEST_F(PolicyHandlerTest, GetAppPropertiesStatus_HybridAppNotChanged_SUCCESS) {
}
TEST_F(PolicyHandlerTest, GetAppPropertiesStatus_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
policy_handler_.LoadPolicyLibrary();
smart_objects::SmartObject properties;
properties[strings::app_id] = kPolicyAppId_;
- EXPECT_CALL(*mock_policy_manager_, GetAppProperties(_, _)).Times(0);
- EXPECT_CALL(*mock_policy_manager_, GetInitialAppData(_, _, _)).Times(0);
const auto expected_app_properties_state =
policy::PolicyHandlerInterface::AppPropertiesState::NO_CHANGES;
EXPECT_EQ(expected_app_properties_state,
@@ -3099,16 +3095,11 @@ TEST_F(PolicyHandlerTest, PushAppIdToPTUQueue_PolicyEnabled_SUCCESS) {
}
TEST_F(PolicyHandlerTest, PushAppIdToPTUQueue_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
- const uint32_t expected_apps_count = 0u;
EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- EXPECT_CALL(*mock_policy_manager_,
- UpdatePTUReadyAppsCount(expected_apps_count))
- .Times(0);
policy_handler_.LoadPolicyLibrary();
policy_handler_.PushAppIdToPTUQueue(kAppId1_);
+ const uint32_t expected_apps_count = 0u;
EXPECT_EQ(expected_apps_count,
policy_handler_.applications_ptu_queue_.size());
}
@@ -3119,16 +3110,6 @@ TEST_F(PolicyHandlerTest, StopRetrySequence_PolicyEnabled_SUCCESS) {
policy_handler_.StopRetrySequence();
}
-TEST_F(PolicyHandlerTest, StopRetrySequence_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
- EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- EXPECT_CALL(*mock_policy_manager_, StopRetrySequence()).Times(0);
-
- policy_handler_.LoadPolicyLibrary();
- policy_handler_.StopRetrySequence();
-}
-
TEST_F(PolicyHandlerTest, GetPolicyTableData_PolicyEnabled_SUCCESS) {
ChangePolicyManagerToMock();
Json::Value expected_table_data(Json::objectValue);
@@ -3139,10 +3120,7 @@ TEST_F(PolicyHandlerTest, GetPolicyTableData_PolicyEnabled_SUCCESS) {
}
TEST_F(PolicyHandlerTest, GetPolicyTableData_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- EXPECT_CALL(*mock_policy_manager_, GetPolicyTableData()).Times(0);
policy_handler_.LoadPolicyLibrary();
@@ -3170,10 +3148,7 @@ TEST_F(PolicyHandlerTest, GetRemovedVehicleDataItems_PolicyEnabled_SUCCESS) {
TEST_F(PolicyHandlerTest, GetRemovedVehicleDataItems_PolicyDisabled_FAIL) {
using rpc::policy_table_interface_base::VehicleDataItem;
- ChangePolicyManagerToMock();
-
EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- EXPECT_CALL(*mock_policy_manager_, GetRemovedVehicleDataItems()).Times(0);
policy_handler_.LoadPolicyLibrary();
@@ -3211,16 +3186,6 @@ TEST_F(PolicyHandlerTest, OnLocalAppAdded_PolicyEnabled_SUCCESS) {
policy_handler_.OnLocalAppAdded();
}
-TEST_F(PolicyHandlerTest, OnLocalAppAdded_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
- EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- EXPECT_CALL(*mock_policy_manager_, OnLocalAppAdded()).Times(0);
-
- policy_handler_.LoadPolicyLibrary();
- policy_handler_.OnLocalAppAdded();
-}
-
TEST_F(PolicyHandlerTest, OnPermissionsUpdated_PolicyEnabled_SUCCESS) {
ChangePolicyManagerToMock();
@@ -3240,14 +3205,10 @@ TEST_F(PolicyHandlerTest, OnPermissionsUpdated_PolicyEnabled_SUCCESS) {
}
TEST_F(PolicyHandlerTest, OnPermissionsUpdated_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
policy_handler_.LoadPolicyLibrary();
EXPECT_CALL(app_manager_, application(kDeviceId_, kPolicyAppId_)).Times(0);
- EXPECT_CALL(*mock_policy_manager_, GetAppEncryptionRequired(kPolicyAppId_))
- .Times(0);
EXPECT_CALL(*mock_app_, app_id()).Times(0);
Permissions app_permissions;
@@ -3266,16 +3227,6 @@ TEST_F(PolicyHandlerTest, IsNewApplication_PolicyEnabled_SUCCESS) {
EXPECT_TRUE(policy_handler_.IsNewApplication(kPolicyAppId_));
}
-TEST_F(PolicyHandlerTest, IsNewApplication_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
- EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- policy_handler_.LoadPolicyLibrary();
-
- EXPECT_CALL(*mock_policy_manager_, IsNewApplication(kPolicyAppId_)).Times(0);
- EXPECT_FALSE(policy_handler_.IsNewApplication(kPolicyAppId_));
-}
-
} // namespace policy_handler_test
} // namespace components
} // namespace test