summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShobhit Adlakha <ShobhitAd@users.noreply.github.com>2019-08-16 13:50:43 -0400
committerGitHub <noreply@github.com>2019-08-16 13:50:43 -0400
commitc6e9a9bb55b14571d1f389c75b515a2c1c102f95 (patch)
tree23a9b965edd3138e5c2b98e4926fb484f7a90753
parentfcdd7f70417a2c685795c9062177b225eb9d2183 (diff)
parentdd2ec05bc1995a4cfa49fa1dd629ac5f4e28573d (diff)
downloadsdl_core-c6e9a9bb55b14571d1f389c75b515a2c1c102f95.tar.gz
Merge pull request #2960 from smartdevicelink/feature/same_app_from_multiple_devices
Support running the same app from multiple devices at the same time
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h30
-rw-r--r--src/components/application_manager/include/application_manager/policies/policy_handler.h32
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/change_registration_request.h5
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h14
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/cancel_interaction_request.cc13
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/change_registration_request.cc67
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_request_notification.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc165
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_request_notification_test.cc22
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc245
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/system_request_test.cc32
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc85
-rw-r--r--src/components/application_manager/src/message_helper/message_helper.cc3
-rw-r--r--src/components/application_manager/src/policies/policy_handler.cc156
-rw-r--r--src/components/application_manager/src/rpc_service_impl.cc6
-rw-r--r--src/components/application_manager/test/application_manager_impl_test.cc26
-rw-r--r--src/components/application_manager/test/policy_handler_test.cc172
-rw-r--r--src/components/include/application_manager/application_manager.h12
-rw-r--r--src/components/include/application_manager/policies/policy_handler_interface.h28
-rw-r--r--src/components/include/policy/policy_external/policy/policy_listener.h14
-rw-r--r--src/components/include/policy/policy_external/policy/policy_manager.h41
-rw-r--r--src/components/include/policy/policy_regular/policy/policy_listener.h14
-rw-r--r--src/components/include/policy/policy_regular/policy/policy_manager.h35
-rw-r--r--src/components/include/test/application_manager/mock_application_manager.h5
-rw-r--r--src/components/include/test/application_manager/policies/mock_policy_handler_interface.h53
-rw-r--r--src/components/include/test/policy/policy_external/policy/mock_policy_listener.h32
-rw-r--r--src/components/include/test/policy/policy_external/policy/mock_policy_manager.h52
-rw-r--r--src/components/include/test/policy/policy_regular/policy/mock_policy_listener.h32
-rw-r--r--src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h40
-rw-r--r--src/components/interfaces/HMI_API.xml12
-rw-r--r--src/components/interfaces/MOBILE_API.xml10
-rw-r--r--src/components/policy/policy_external/include/policy/policy_manager_impl.h63
-rw-r--r--src/components/policy/policy_external/src/policy_manager_impl.cc162
-rw-r--r--src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc384
-rw-r--r--src/components/policy/policy_external/test/policy_manager_impl_snapshot_test.cc17
-rw-r--r--src/components/policy/policy_external/test/policy_manager_impl_test.cc84
-rw-r--r--src/components/policy/policy_external/test/policy_manager_impl_test_base.cc77
-rw-r--r--src/components/policy/policy_external/test/policy_manager_impl_user_consent_test.cc158
-rw-r--r--src/components/policy/policy_regular/CMakeLists.txt2
-rw-r--r--src/components/policy/policy_regular/include/policy/policy_manager_impl.h37
-rw-r--r--src/components/policy/policy_regular/src/policy_helper.cc43
-rw-r--r--src/components/policy/policy_regular/src/policy_manager_impl.cc79
-rw-r--r--src/components/policy/policy_regular/test/policy_manager_impl_test.cc123
-rw-r--r--src/components/rpc_base/include/rpc_base/rpc_base_inl.h2
45 files changed, 1754 insertions, 938 deletions
diff --git a/src/components/application_manager/include/application_manager/application_manager_impl.h b/src/components/application_manager/include/application_manager/application_manager_impl.h
index c34affbf13..add099f975 100644
--- a/src/components/application_manager/include/application_manager/application_manager_impl.h
+++ b/src/components/application_manager/include/application_manager/application_manager_impl.h
@@ -517,32 +517,6 @@ class ApplicationManagerImpl
bool IsApplicationForbidden(uint32_t connection_key,
const std::string& mobile_app_id);
- struct ApplicationsAppIdSorter {
- bool operator()(const ApplicationSharedPtr lhs,
- const ApplicationSharedPtr rhs) {
- return lhs->app_id() < rhs->app_id();
- }
- };
-
- struct ApplicationsMobileAppIdSorter {
- bool operator()(const ApplicationSharedPtr lhs,
- const ApplicationSharedPtr rhs) {
- if (lhs->policy_app_id() == rhs->policy_app_id()) {
- return lhs->device() < rhs->device();
- }
- return lhs->policy_app_id() < rhs->policy_app_id();
- }
- };
-
- // typedef for Applications list
- typedef std::set<ApplicationSharedPtr, ApplicationsAppIdSorter> ApplictionSet;
-
- // typedef for Applications list iterator
- typedef ApplictionSet::iterator ApplictionSetIt;
-
- // typedef for Applications list const iterator
- typedef ApplictionSet::const_iterator ApplictionSetConstIt;
-
/**
* @brief Notification from PolicyHandler about PTU.
* Compares AppHMIType between saved in app and received from PTU. If they are
@@ -1065,10 +1039,12 @@ class ApplicationManagerImpl
* @brief IsAppInReconnectMode check if application belongs to session
* affected by transport switching at the moment by checking internal
* waiting list prepared on switching start
+ * @param device_id device identifier
* @param policy_app_id Application id
* @return True if application is in the waiting list, otherwise - false
*/
- bool IsAppInReconnectMode(const std::string& policy_app_id) const FINAL;
+ bool IsAppInReconnectMode(const connection_handler::DeviceHandle& device_id,
+ const std::string& policy_app_id) const FINAL;
bool IsStopping() const OVERRIDE {
return is_stopping_;
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 917f8be559..3422a2a2d2 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
@@ -87,11 +87,14 @@ class PolicyHandler : public PolicyHandlerInterface,
bool ReceiveMessageFromSDK(const std::string& file,
const BinaryMessage& pt_string) OVERRIDE;
bool UnloadPolicyLibrary() OVERRIDE;
- virtual void OnPermissionsUpdated(const std::string& policy_app_id,
+
+ virtual void OnPermissionsUpdated(const std::string& device_id,
+ const std::string& policy_app_id,
const Permissions& permissions,
const HMILevel& default_hmi) OVERRIDE;
- virtual void OnPermissionsUpdated(const std::string& policy_app_id,
+ virtual void OnPermissionsUpdated(const std::string& device_id,
+ const std::string& policy_app_id,
const Permissions& permissions) OVERRIDE;
#ifdef EXTERNAL_PROPRIETARY_MODE
@@ -115,10 +118,12 @@ class PolicyHandler : public PolicyHandlerInterface,
/**
* @brief Sets HMI default type for specified application
+ * @param device_handle device identifier
* @param application_id ID application
* @param app_types list of HMI types
*/
- void SetDefaultHmiTypes(const std::string& application_id,
+ void SetDefaultHmiTypes(const transport_manager::DeviceHandle& device_handle,
+ const std::string& application_id,
const smart_objects::SmartObject* app_types) OVERRIDE;
/**
@@ -177,7 +182,8 @@ class PolicyHandler : public PolicyHandlerInterface,
bool GetModuleTypes(const std::string& policy_app_id,
std::vector<std::string>* modules) const OVERRIDE;
- bool GetDefaultHmi(const std::string& policy_app_id,
+ bool GetDefaultHmi(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi) const OVERRIDE;
bool GetInitialAppData(const std::string& application_id,
StringArray* nicknames = NULL,
@@ -250,7 +256,8 @@ class PolicyHandler : public PolicyHandlerInterface,
*/
void OnIgnitionCycleOver() OVERRIDE;
- void OnPendingPermissionChange(const std::string& policy_app_id) OVERRIDE;
+ void OnPendingPermissionChange(const std::string& device_id,
+ const std::string& policy_app_id) OVERRIDE;
/**
* Initializes PT exchange at user request
@@ -337,9 +344,11 @@ class PolicyHandler : public PolicyHandlerInterface,
/**
* @brief Update currently used device id in policies manager for given
* application
+ * @param device_handle device identifier
* @param policy_app_id Application id
*/
std::string OnCurrentDeviceIdUpdateRequired(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) OVERRIDE;
/**
@@ -503,6 +512,7 @@ class PolicyHandler : public PolicyHandlerInterface,
virtual void SendOnAppPermissionsChanged(
const AppPermissions& permissions,
+ const std::string& device_id,
const std::string& policy_app_id) const OVERRIDE;
virtual void OnPTExchangeNeeded() OVERRIDE;
@@ -512,11 +522,13 @@ class PolicyHandler : public PolicyHandlerInterface,
/**
* @brief Allows to add new or update existed application during
* registration process
+ * @param device_id device identifier
* @param application_id The policy aplication id.
* @param hmi_types list of hmi types
* @return function that will notify update manager about new application
*/
StatusNotifier AddApplication(
+ const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) OVERRIDE;
@@ -560,17 +572,21 @@ class PolicyHandler : public PolicyHandlerInterface,
* succesfully registered on mobile device.
* It will send OnAppPermissionSend notification and will try to start PTU.
*
+ * @param device_id device identifier
* @param application_id registered application.
*/
- void OnAppRegisteredOnMobile(const std::string& application_id) OVERRIDE;
+ void OnAppRegisteredOnMobile(const std::string& device_id,
+ const std::string& application_id) OVERRIDE;
/**
* @brief Checks if certain request type is allowed for application
+ * @param device_handle device identifier
* @param policy_app_id Unique applicaion id
* @param type Request type
* @return true, if allowed, otherwise - false
*/
bool IsRequestTypeAllowed(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id,
mobile_apis::RequestType::eType type) const OVERRIDE;
@@ -602,10 +618,12 @@ class PolicyHandler : public PolicyHandlerInterface,
/**
* @brief Gets application request types
+ * @param device_id device identifier
* @param policy_app_id Unique application id
* @return request types
*/
const std::vector<std::string> GetAppRequestTypes(
+ const transport_manager::DeviceHandle& device_id,
const std::string& policy_app_id) const OVERRIDE;
/**
@@ -725,7 +743,7 @@ class PolicyHandler : public PolicyHandlerInterface,
void UpdateHMILevel(application_manager::ApplicationSharedPtr app,
mobile_apis::HMILevel::eType level);
std::vector<std::string> GetDevicesIds(
- const std::string& policy_app_id) OVERRIDE;
+ const std::string& policy_app_id) const OVERRIDE;
/**
* @brief Sets days after epoch on successful policy update
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/change_registration_request.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/change_registration_request.h
index 01f20a68e3..f9f780b84b 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/change_registration_request.h
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/change_registration_request.h
@@ -123,11 +123,12 @@ class ChangeRegistrationRequest
/**
* @brief Check parameters (name, vr) for
* coincidence with already known parameters of registered applications
- *
+ * @param device_id device identifier
* @return SUCCESS if there is no coincidence of app.name/VR synonyms,
* otherwise appropriate error code returns
*/
- mobile_apis::Result::eType CheckCoincidence();
+ mobile_apis::Result::eType CheckCoincidence(
+ const connection_handler::DeviceHandle& device_id);
/**
* @brief Checks if requested name is allowed by policy
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h
index 8a80db9cdf..c894b355d6 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h
@@ -215,9 +215,23 @@ class RegisterAppInterfaceRequest
*/
bool IsApplicationSwitched();
+ /**
+ * @brief Information about given Connection Key.
+ * @param key Unique key used by other components as session identifier
+ * @param device_id device identifier.
+ * @param mac_address uniq address
+ * @return false in case of error or true in case of success
+ */
+ bool GetDataOnSessionKey(
+ const uint32_t key,
+ connection_handler::DeviceHandle* device_id = nullptr,
+ std::string* mac_address = nullptr) const;
+
private:
std::string response_info_;
mobile_apis::Result::eType result_code_;
+ connection_handler::DeviceHandle device_handle_;
+ std::string device_id_;
policy::PolicyHandlerInterface& GetPolicyHandler();
DISALLOW_COPY_AND_ASSIGN(RegisterAppInterfaceRequest);
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/cancel_interaction_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/cancel_interaction_request.cc
index d9a7eccddf..82e0703da1 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/cancel_interaction_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/cancel_interaction_request.cc
@@ -61,12 +61,13 @@ void CancelInteractionRequest::Run() {
auto function_id = static_cast<mobile_apis::FunctionID::eType>(
(*message_)[strings::msg_params][strings::func_id].asInt());
- if (helpers::Compare<mobile_apis::FunctionID::eType, helpers::NEQ, helpers::ALL>(
- function_id,
- mobile_apis::FunctionID::PerformInteractionID,
- mobile_apis::FunctionID::AlertID,
- mobile_apis::FunctionID::ScrollableMessageID,
- mobile_apis::FunctionID::SliderID)) {
+ if (helpers::
+ Compare<mobile_apis::FunctionID::eType, helpers::NEQ, helpers::ALL>(
+ function_id,
+ mobile_apis::FunctionID::PerformInteractionID,
+ mobile_apis::FunctionID::AlertID,
+ mobile_apis::FunctionID::ScrollableMessageID,
+ mobile_apis::FunctionID::SliderID)) {
LOG4CXX_ERROR(logger_, "Bad function ID" << function_id);
SendResponse(false, mobile_apis::Result::INVALID_ID);
return;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/change_registration_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/change_registration_request.cc
index ef81babdd6..8940ea3f59 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/change_registration_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/change_registration_request.cc
@@ -49,7 +49,7 @@ struct IsSameNickname {
}
private:
- const custom_str::CustomString& app_id_;
+ const custom_str::CustomString app_id_;
};
} // namespace
@@ -160,7 +160,7 @@ void ChangeRegistrationRequest::Run() {
return;
}
- if (mobile_apis::Result::SUCCESS != CheckCoincidence()) {
+ if (mobile_apis::Result::SUCCESS != CheckCoincidence(app->device())) {
SendResponse(false, mobile_apis::Result::DUPLICATE_NAME);
return;
}
@@ -578,36 +578,46 @@ bool ChangeRegistrationRequest::IsWhiteSpaceExist() {
return false;
}
-mobile_apis::Result::eType ChangeRegistrationRequest::CheckCoincidence() {
+mobile_apis::Result::eType ChangeRegistrationRequest::CheckCoincidence(
+ const connection_handler::DeviceHandle& device_id) {
LOG4CXX_AUTO_TRACE(logger_);
const smart_objects::SmartObject& msg_params =
(*message_)[strings::msg_params];
- ApplicationSet accessor = application_manager_.applications().GetData();
+ auto compare_tts_name = [](const smart_objects::SmartObject& obj_1,
+ const smart_objects::SmartObject& obj_2) {
+ return obj_1[application_manager::strings::text]
+ .asCustomString()
+ .CompareIgnoreCase(
+ obj_2[application_manager::strings::text].asCustomString());
+ };
+
+ const auto& accessor = application_manager_.applications().GetData();
custom_str::CustomString app_name;
- uint32_t app_id = connection_key();
+ const uint32_t app_id = connection_key();
if (msg_params.keyExists(strings::app_name)) {
app_name = msg_params[strings::app_name].asCustomString();
}
- ApplicationSetConstIt it = accessor.begin();
- for (; accessor.end() != it; ++it) {
- if (app_id == (*it)->app_id()) {
+ for (const auto& app : accessor) {
+ if (app->device() != device_id) {
+ continue;
+ }
+
+ if (app->app_id() == app_id) {
continue;
}
- const custom_str::CustomString& cur_name = (*it)->name();
+ const auto& cur_name = app->name();
if (msg_params.keyExists(strings::app_name)) {
if (app_name.CompareIgnoreCase(cur_name)) {
LOG4CXX_ERROR(logger_, "Application name is known already.");
return mobile_apis::Result::DUPLICATE_NAME;
}
-
- const smart_objects::SmartObject* vr = (*it)->vr_synonyms();
- const std::vector<smart_objects::SmartObject>* curr_vr = NULL;
- if (NULL != vr) {
- curr_vr = vr->asArray();
+ const auto vr = app->vr_synonyms();
+ if (vr) {
+ const auto curr_vr = vr->asArray();
CoincidencePredicateVR v(app_name);
if (0 != std::count_if(curr_vr->begin(), curr_vr->end(), v)) {
@@ -617,18 +627,37 @@ mobile_apis::Result::eType ChangeRegistrationRequest::CheckCoincidence() {
}
}
- // vr check
+ // VR check
if (msg_params.keyExists(strings::vr_synonyms)) {
- const std::vector<smart_objects::SmartObject>* new_vr =
- msg_params[strings::vr_synonyms].asArray();
+ const auto new_vr = msg_params[strings::vr_synonyms].asArray();
CoincidencePredicateVR v(cur_name);
if (0 != std::count_if(new_vr->begin(), new_vr->end(), v)) {
LOG4CXX_ERROR(logger_, "vr_synonyms duplicated with app_name .");
return mobile_apis::Result::DUPLICATE_NAME;
}
- } // end vr check
- } // application for end
+ } // End vr check
+
+ // TTS check
+ if (msg_params.keyExists(strings::tts_name) && app->tts_name()) {
+ const auto tts_array = msg_params[strings::tts_name].asArray();
+ const auto tts_curr = app->tts_name()->asArray();
+ const auto& it_tts = std::find_first_of(tts_array->begin(),
+ tts_array->end(),
+ tts_curr->begin(),
+ tts_curr->end(),
+ compare_tts_name);
+ if (it_tts != tts_array->end()) {
+ LOG4CXX_ERROR(
+ logger_,
+ "TTS name: "
+ << (*it_tts)[strings::text].asCustomString().AsMBString()
+ << " is known already");
+ return mobile_apis::Result::DUPLICATE_NAME;
+ }
+ } // End tts check
+
+ } // Application for end
return mobile_apis::Result::SUCCESS;
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_request_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_request_notification.cc
index a85dec10bb..fc99bb323c 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_request_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_request_notification.cc
@@ -86,8 +86,8 @@ void OnSystemRequestNotification::Run() {
static_cast<rpc::policy_table_interface_base::RequestType>(
request_type));
- if (!policy_handler.IsRequestTypeAllowed(app->policy_app_id(),
- request_type)) {
+ if (!policy_handler.IsRequestTypeAllowed(
+ app->device(), app->policy_app_id(), request_type)) {
LOG4CXX_WARN(logger_,
"Request type " << stringified_request_type
<< " is not allowed by policies");
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
index 701002ed65..f0da4ebbab 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
@@ -164,7 +164,7 @@ struct IsSameNickname {
}
private:
- const custom_str::CustomString& app_id_;
+ const custom_str::CustomString app_id_;
};
} // namespace
@@ -184,13 +184,14 @@ RegisterAppInterfaceRequest::RegisterAppInterfaceRequest(
rpc_service,
hmi_capabilities,
policy_handler)
- , result_code_(mobile_apis::Result::INVALID_ENUM) {}
+ , result_code_(mobile_apis::Result::INVALID_ENUM)
+ , device_handle_(0) {}
RegisterAppInterfaceRequest::~RegisterAppInterfaceRequest() {}
bool RegisterAppInterfaceRequest::Init() {
LOG4CXX_AUTO_TRACE(logger_);
- return true;
+ return GetDataOnSessionKey(connection_key(), &device_handle_, &device_id_);
}
void RegisterAppInterfaceRequest::Run() {
@@ -224,20 +225,25 @@ void RegisterAppInterfaceRequest::Run() {
return;
}
+ LOG4CXX_DEBUG(
+ logger_,
+ "device_handle: " << device_handle_ << " device_id: " << device_id_);
+
if (IsApplicationSwitched()) {
return;
}
+ // Cache the original app ID (for legacy behavior)
+ const auto policy_app_id =
+ application_manager_.GetCorrectMobileIDFromMessage(message_);
+
ApplicationSharedPtr application =
- application_manager_.application(connection_key());
+ application_manager_.application(device_id_, policy_app_id);
if (application) {
SendResponse(false, mobile_apis::Result::APPLICATION_REGISTERED_ALREADY);
return;
}
- // cache the original app ID (for legacy behavior)
- const std::string policy_app_id =
- application_manager_.GetCorrectMobileIDFromMessage(message_);
const smart_objects::SmartObject& msg_params =
(*message_)[strings::msg_params];
@@ -842,14 +848,15 @@ void RegisterAppInterfaceRequest::SendRegisterAppInterfaceResponseToMobile(
}
}
policy::StatusNotifier notify_upd_manager = GetPolicyHandler().AddApplication(
- application->policy_app_id(), hmi_types);
+ application->mac_address(), application->policy_app_id(), hmi_types);
response_params[strings::icon_resumed] =
file_system::FileExists(application->app_icon_path());
SendResponse(true, result_code, add_info.c_str(), &response_params);
if (msg_params.keyExists(strings::app_hmi_type)) {
- GetPolicyHandler().SetDefaultHmiTypes(application->policy_app_id(),
+ GetPolicyHandler().SetDefaultHmiTypes(application->device(),
+ application->policy_app_id(),
&(msg_params[strings::app_hmi_type]));
}
@@ -863,7 +870,8 @@ void RegisterAppInterfaceRequest::SendRegisterAppInterfaceResponseToMobile(
// Start PTU after successfull registration
// Sends OnPermissionChange notification to mobile right after RAI response
// and HMI level set-up
- GetPolicyHandler().OnAppRegisteredOnMobile(application->policy_app_id());
+ GetPolicyHandler().OnAppRegisteredOnMobile(application->mac_address(),
+ application->policy_app_id());
if (result_code != mobile_apis::Result::RESUME_FAILED) {
resumer.StartResumption(application, hash_id);
@@ -968,48 +976,72 @@ mobile_apis::Result::eType RegisterAppInterfaceRequest::CheckCoincidence(
const smart_objects::SmartObject& msg_params =
(*message_)[strings::msg_params];
- ApplicationSet accessor = application_manager_.applications().GetData();
+ auto compare_tts_name = [](const smart_objects::SmartObject& obj_1,
+ const smart_objects::SmartObject& obj_2) {
+ return obj_1[application_manager::strings::text]
+ .asCustomString()
+ .CompareIgnoreCase(
+ obj_2[application_manager::strings::text].asCustomString());
+ };
- ApplicationSetConstIt it = accessor.begin();
- const custom_str::CustomString& app_name =
- msg_params[strings::app_name].asCustomString();
+ const auto& accessor = application_manager_.applications().GetData();
+ const auto& app_name = msg_params[strings::app_name].asCustomString();
- for (; accessor.end() != it; ++it) {
- // name check
- const custom_str::CustomString& cur_name = (*it)->name();
+ for (const auto& app : accessor) {
+ if (app->device() != device_handle_) {
+ continue;
+ }
+ // Name check
+ const auto& cur_name = app->name();
if (app_name.CompareIgnoreCase(cur_name)) {
LOG4CXX_ERROR(logger_, "Application name is known already.");
- out_duplicate_apps.push_back(*it);
+ out_duplicate_apps.push_back(app);
continue;
}
-
- const smart_objects::SmartObject* vr = (*it)->vr_synonyms();
- const std::vector<smart_objects::SmartObject>* curr_vr = NULL;
- if (NULL != vr) {
- curr_vr = vr->asArray();
+ const auto vr = app->vr_synonyms();
+ if (vr) {
+ const auto curr_vr = vr->asArray();
CoincidencePredicateVR v(app_name);
if (0 != std::count_if(curr_vr->begin(), curr_vr->end(), v)) {
LOG4CXX_ERROR(logger_, "Application name is known already.");
- out_duplicate_apps.push_back(*it);
+ out_duplicate_apps.push_back(app);
continue;
}
}
- // vr check
+ // VR check
if (msg_params.keyExists(strings::vr_synonyms)) {
- const std::vector<smart_objects::SmartObject>* new_vr =
- msg_params[strings::vr_synonyms].asArray();
+ const auto new_vr = msg_params[strings::vr_synonyms].asArray();
CoincidencePredicateVR v(cur_name);
if (0 != std::count_if(new_vr->begin(), new_vr->end(), v)) {
LOG4CXX_ERROR(logger_, "vr_synonyms duplicated with app_name .");
- out_duplicate_apps.push_back(*it);
+ out_duplicate_apps.push_back(app);
continue;
}
- } // end vr check
+ } // End vr check
+
+ // TTS check
+ if (msg_params.keyExists(strings::tts_name) && app->tts_name()) {
+ const auto tts_array = msg_params[strings::tts_name].asArray();
+ const auto tts_curr = app->tts_name()->asArray();
+ const auto& it_tts = std::find_first_of(tts_array->begin(),
+ tts_array->end(),
+ tts_curr->begin(),
+ tts_curr->end(),
+ compare_tts_name);
+ if (it_tts != tts_array->end()) {
+ LOG4CXX_ERROR(
+ logger_,
+ "TTS name: "
+ << (*it_tts)[strings::text].asCustomString().AsMBString()
+ << " is known already");
+ return mobile_apis::Result::DUPLICATE_NAME;
+ }
+ } // End tts check
- } // application for end
+ } // Application for end
if (!out_duplicate_apps.empty()) {
return mobile_apis::Result::DUPLICATE_NAME;
@@ -1138,14 +1170,19 @@ bool RegisterAppInterfaceRequest::IsApplicationWithSameAppIdRegistered() {
const custom_string::CustomString mobile_app_id(
application_manager_.GetCorrectMobileIDFromMessage(message_));
- const ApplicationSet& applications =
- application_manager_.applications().GetData();
-
- ApplicationSetConstIt it = applications.begin();
- ApplicationSetConstIt it_end = applications.end();
-
- for (; it != it_end; ++it) {
- if (mobile_app_id.CompareIgnoreCase((*it)->policy_app_id().c_str())) {
+ const auto& applications = application_manager_.applications().GetData();
+
+ for (const auto& app : applications) {
+ if (mobile_app_id.CompareIgnoreCase(app->policy_app_id().c_str())) {
+ if (app->device() != device_handle_) {
+ LOG4CXX_DEBUG(logger_,
+ "These policy_app_id equal, but applications have "
+ "different device id"
+ << " mobile_app_id: " << mobile_app_id.c_str()
+ << " device_handle: " << device_handle_
+ << " device_handle: " << app->device());
+ continue;
+ }
return true;
}
}
@@ -1330,7 +1367,7 @@ bool RegisterAppInterfaceRequest::IsApplicationSwitched() {
LOG4CXX_DEBUG(logger_, "Looking for application id " << policy_app_id);
- auto app = application_manager_.application_by_policy_id(policy_app_id);
+ auto app = application_manager_.application(device_id_, policy_app_id);
if (!app) {
LOG4CXX_DEBUG(
@@ -1341,12 +1378,13 @@ bool RegisterAppInterfaceRequest::IsApplicationSwitched() {
LOG4CXX_DEBUG(logger_,
"Application with policy id " << policy_app_id << " is found.");
- if (!application_manager_.IsAppInReconnectMode(policy_app_id)) {
+ if (!application_manager_.IsAppInReconnectMode(device_handle_,
+ policy_app_id)) {
LOG4CXX_DEBUG(
logger_,
"Policy id " << policy_app_id << " is not found in reconnection list.");
SendResponse(false, mobile_apis::Result::APPLICATION_REGISTERED_ALREADY);
- return false;
+ return true;
}
LOG4CXX_DEBUG(logger_, "Application is found in reconnection list.");
@@ -1372,6 +1410,51 @@ bool RegisterAppInterfaceRequest::IsApplicationSwitched() {
return true;
}
+bool RegisterAppInterfaceRequest::GetDataOnSessionKey(
+ const uint32_t key,
+ connection_handler::DeviceHandle* device_id,
+ std::string* mac_address) const {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ if ((nullptr == mac_address) && (nullptr == device_id)) {
+ LOG4CXX_ERROR(logger_,
+ "Can't get data on session key because device id and mac "
+ "address are empty.");
+ return false;
+ }
+
+ connection_handler::DeviceHandle device_handle = 0;
+ auto& connect_handler = application_manager_.connection_handler();
+
+ auto result = connect_handler.GetDataOnSessionKey(
+ connection_key(), nullptr, nullptr, &device_handle);
+
+ if (result) {
+ LOG4CXX_DEBUG(
+ logger_,
+ "Failed to get device info for connection key: " << connection_key());
+ return false;
+ }
+
+ if (mac_address) {
+ result = connect_handler.get_session_observer().GetDataOnDeviceID(
+ device_handle, nullptr, nullptr, mac_address, nullptr);
+ }
+
+ if (result) {
+ LOG4CXX_DEBUG(logger_,
+ "Failed get unique address info for connection key: "
+ << connection_key());
+ return false;
+ }
+
+ if (device_id) {
+ *device_id = device_handle;
+ }
+
+ return true;
+}
+
policy::PolicyHandlerInterface&
RegisterAppInterfaceRequest::GetPolicyHandler() {
return policy_handler_;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
index e70433f29b..9be5a270f5 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
@@ -470,8 +470,8 @@ void SystemRequest::Run() {
static_cast<rpc::policy_table_interface_base::RequestType>(
request_type));
- if (!policy_handler.IsRequestTypeAllowed(application->policy_app_id(),
- request_type)) {
+ if (!policy_handler.IsRequestTypeAllowed(
+ application->device(), application->policy_app_id(), request_type)) {
LOG4CXX_ERROR(logger_,
"RequestType " << stringified_request_type
<< " is DISALLOWED by policies");
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_request_notification_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_request_notification_test.cc
index 69ed8fb311..ffa7203f1f 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_request_notification_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_request_notification_test.cc
@@ -62,6 +62,7 @@ using testing::SaveArg;
namespace {
const uint32_t kConnectionKey = 1u;
const std::string kPolicyAppId = "fake-app-id";
+const connection_handler::DeviceHandle kDeviceId = 1u;
} // namespace
class OnSystemRequestNotificationTest
@@ -73,6 +74,7 @@ class OnSystemRequestNotificationTest
ON_CALL(app_mngr_, application(kConnectionKey))
.WillByDefault(Return(mock_app_));
ON_CALL(*mock_app_, policy_app_id()).WillByDefault(Return(kPolicyAppId));
+ ON_CALL(*mock_app_, device()).WillByDefault(Return(kDeviceId));
}
protected:
@@ -90,12 +92,14 @@ TEST_F(OnSystemRequestNotificationTest, Run_ProprietaryType_SUCCESS) {
std::shared_ptr<OnSystemRequestNotification> command =
CreateCommand<OnSystemRequestNotification>(msg);
+ PreConditions();
+
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillRepeatedly(Return(mock_app_));
EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId));
EXPECT_CALL(mock_policy_handler_,
- IsRequestTypeAllowed(kPolicyAppId, request_type))
+ IsRequestTypeAllowed(kDeviceId, kPolicyAppId, request_type))
.WillRepeatedly(Return(true));
#ifdef PROPRIETARY_MODE
@@ -130,10 +134,13 @@ TEST_F(OnSystemRequestNotificationTest, Run_HTTPType_SUCCESS) {
std::shared_ptr<OnSystemRequestNotification> command =
CreateCommand<OnSystemRequestNotification>(msg);
+ PreConditions();
+
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillOnce(Return(mock_app_));
EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId));
- EXPECT_CALL(mock_policy_handler_, IsRequestTypeAllowed(_, _))
+ EXPECT_CALL(mock_policy_handler_,
+ IsRequestTypeAllowed(kDeviceId, kPolicyAppId, request_type))
.WillOnce(Return(true));
EXPECT_CALL(mock_message_helper_, PrintSmartObject(_))
@@ -167,7 +174,7 @@ TEST_F(OnSystemRequestNotificationTest, Run_InvalidApp_NoNotification) {
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillOnce(Return(MockAppPtr()));
EXPECT_CALL(*mock_app_, policy_app_id()).Times(0);
- EXPECT_CALL(mock_policy_handler_, IsRequestTypeAllowed(_, _)).Times(0);
+ EXPECT_CALL(mock_policy_handler_, IsRequestTypeAllowed(_, _, _)).Times(0);
EXPECT_CALL(mock_message_helper_, PrintSmartObject(_)).Times(0);
@@ -187,10 +194,13 @@ TEST_F(OnSystemRequestNotificationTest, Run_RequestNotAllowed_NoNotification) {
std::shared_ptr<OnSystemRequestNotification> command =
CreateCommand<OnSystemRequestNotification>(msg);
+ PreConditions();
+
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillOnce(Return(mock_app_));
EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId));
- EXPECT_CALL(mock_policy_handler_, IsRequestTypeAllowed(_, _))
+ EXPECT_CALL(mock_policy_handler_,
+ IsRequestTypeAllowed(kDeviceId, kPolicyAppId, request_type))
.WillOnce(Return(false));
EXPECT_CALL(mock_message_helper_, PrintSmartObject(_)).Times(0);
@@ -214,7 +224,7 @@ TEST_F(
PreConditions();
EXPECT_CALL(mock_policy_handler_,
- IsRequestTypeAllowed(kPolicyAppId, request_type))
+ IsRequestTypeAllowed(kDeviceId, kPolicyAppId, request_type))
.WillOnce(Return(true));
EXPECT_CALL(mock_policy_handler_,
IsRequestSubTypeAllowed(kPolicyAppId, request_subtype))
@@ -241,7 +251,7 @@ TEST_F(OnSystemRequestNotificationTest,
PreConditions();
EXPECT_CALL(mock_policy_handler_,
- IsRequestTypeAllowed(kPolicyAppId, request_type))
+ IsRequestTypeAllowed(kDeviceId, kPolicyAppId, request_type))
.WillOnce(Return(true));
EXPECT_CALL(mock_policy_handler_,
IsRequestSubTypeAllowed(kPolicyAppId, request_subtype))
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc
index 0e8374b75a..ac45e90d8e 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc
@@ -67,6 +67,8 @@ using ::testing::_;
using ::testing::DoAll;
using ::testing::Return;
using ::testing::ReturnRef;
+using ::testing::SaveArg;
+using ::testing::SetArgPointee;
namespace am = ::application_manager;
@@ -75,12 +77,15 @@ using sdl_rpc_plugin::commands::RegisterAppInterfaceRequest;
namespace {
const uint32_t kConnectionKey = 1u;
+const uint32_t kConnectionKey2 = 2u;
const hmi_apis::Common_Language::eType kHmiLanguage =
hmi_apis::Common_Language::EN_US;
const mobile_apis::Language::eType kMobileLanguage =
mobile_apis::Language::EN_US;
-const std::string kMacAddress = "test_mac_address";
-const std::string kAppId = "test_app_id";
+const std::string kMacAddress1 = "test_mac_address1";
+const std::string kMacAddress2 = "test_mac_address2";
+const std::string kAppId1 = "test_app1_id";
+const std::string kAppId2 = "test_app2_id";
const std::string kFullAppId = "test_app_id_long";
const std::string kDummyString = "test_string";
const std::vector<uint32_t> kDummyDiagModes;
@@ -94,6 +99,7 @@ class RegisterAppInterfaceRequestTest
: msg_(CreateMessage())
, command_(CreateCommand<RegisterAppInterfaceRequest>(msg_))
, app_name_("test_app_name_")
+ , app2_name_("test_app2_name_")
, lock_ptr_(std::make_shared<sync_primitives::Lock>())
, mock_application_helper_(
application_manager_test::MockApplicationHelper::
@@ -112,7 +118,7 @@ class RegisterAppInterfaceRequestTest
void InitBasicMessage() {
(*msg_)[am::strings::params][am::strings::connection_key] = kConnectionKey;
- (*msg_)[am::strings::msg_params][am::strings::app_id] = kAppId;
+ (*msg_)[am::strings::msg_params][am::strings::app_id] = kAppId1;
(*msg_)[am::strings::msg_params][am::strings::full_app_id] = kFullAppId;
(*msg_)[am::strings::msg_params][am::strings::app_name] = app_name_;
(*msg_)[am::strings::msg_params][am::strings::language_desired] =
@@ -130,11 +136,11 @@ class RegisterAppInterfaceRequestTest
MockAppPtr CreateBasicMockedApp() {
MockAppPtr mock_app = CreateMockApp();
ON_CALL(*mock_app, name()).WillByDefault(ReturnRef(app_name_));
- ON_CALL(*mock_app, mac_address()).WillByDefault(ReturnRef(kMacAddress));
+ ON_CALL(*mock_app, mac_address()).WillByDefault(ReturnRef(kMacAddress1));
ON_CALL(*mock_app, app_icon_path()).WillByDefault(ReturnRef(kDummyString));
ON_CALL(*mock_app, language()).WillByDefault(ReturnRef(kMobileLanguage));
ON_CALL(*mock_app, ui_language()).WillByDefault(ReturnRef(kMobileLanguage));
- ON_CALL(*mock_app, policy_app_id()).WillByDefault(Return(kAppId));
+ ON_CALL(*mock_app, policy_app_id()).WillByDefault(Return(kAppId1));
ON_CALL(*mock_app, msg_version())
.WillByDefault(ReturnRef(mock_semantic_version));
return mock_app;
@@ -154,7 +160,7 @@ class RegisterAppInterfaceRequestTest
void InitGetters() {
ON_CALL(app_mngr_, GetCorrectMobileIDFromMessage(msg_))
- .WillByDefault(Return(kAppId));
+ .WillByDefault(Return(kAppId1));
ON_CALL(app_mngr_, IsHMICooperating()).WillByDefault(Return(true));
ON_CALL(app_mngr_, resume_controller())
.WillByDefault(ReturnRef(mock_resume_crt_));
@@ -168,7 +174,7 @@ class RegisterAppInterfaceRequestTest
.WillByDefault(ReturnRef(kDummyString));
ON_CALL(app_mngr_settings_, supported_diag_modes())
.WillByDefault(ReturnRef(kDummyDiagModes));
- ON_CALL(mock_policy_handler_, GetAppRequestTypes(_))
+ ON_CALL(mock_policy_handler_, GetAppRequestTypes(_, _))
.WillByDefault(Return(std::vector<std::string>()));
ON_CALL(mock_policy_handler_, GetAppRequestTypeState(_))
.WillByDefault(Return(policy::RequestType::State::EMPTY));
@@ -180,7 +186,7 @@ class RegisterAppInterfaceRequestTest
.WillByDefault(Return(policy::DeviceConsent::kDeviceAllowed));
ON_CALL(app_mngr_, GetDeviceTransportType(_))
.WillByDefault(Return(hmi_apis::Common_TransportType::WIFI));
- ON_CALL(app_mngr_, IsAppInReconnectMode(_)).WillByDefault(Return(false));
+ ON_CALL(app_mngr_, IsAppInReconnectMode(_, _)).WillByDefault(Return(false));
ON_CALL(app_mngr_, application_by_policy_id(_))
.WillByDefault(Return(ApplicationSharedPtr()));
ON_CALL(mock_hmi_interfaces_, GetInterfaceState(_))
@@ -201,7 +207,7 @@ class RegisterAppInterfaceRequestTest
void SetCommonExpectionsOnSwitchedApplication(
MockAppPtr mock_app, mobile_apis::Result::eType response_result_code) {
- EXPECT_CALL(mock_policy_handler_, AddApplication(_, _)).Times(0);
+ EXPECT_CALL(mock_policy_handler_, AddApplication(_, _, _)).Times(0);
EXPECT_CALL(
mock_rpc_service_,
@@ -250,6 +256,7 @@ class RegisterAppInterfaceRequestTest
std::shared_ptr<RegisterAppInterfaceRequest> command_;
const utils::custom_string::CustomString app_name_;
+ const utils::custom_string::CustomString app2_name_;
std::shared_ptr<sync_primitives::Lock> lock_ptr_;
am::ApplicationSet app_set_;
@@ -280,7 +287,7 @@ TEST_F(RegisterAppInterfaceRequestTest, Init_SUCCESS) {
TEST_F(RegisterAppInterfaceRequestTest, Run_MinimalData_SUCCESS) {
InitBasicMessage();
- (*msg_)[am::strings::msg_params][am::strings::hash_id] = kAppId;
+ (*msg_)[am::strings::msg_params][am::strings::hash_id] = kAppId1;
EXPECT_CALL(app_mngr_, IsStopping())
.WillOnce(Return(false))
.WillOnce(Return(true))
@@ -289,20 +296,30 @@ TEST_F(RegisterAppInterfaceRequestTest, Run_MinimalData_SUCCESS) {
EXPECT_CALL(app_mngr_, updateRequestTimeout(_, _, _));
EXPECT_CALL(app_mngr_, IsApplicationForbidden(_, _)).WillOnce(Return(false));
+ connection_handler::DeviceHandle handle = 1;
+ ON_CALL(mock_connection_handler_,
+ GetDataOnSessionKey(kConnectionKey, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(handle), Return(0)));
+ ON_CALL(mock_session_observer_, GetDataOnDeviceID(handle, _, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(kMacAddress1), Return(0)));
+
MockAppPtr mock_app = CreateBasicMockedApp();
- EXPECT_CALL(app_mngr_, application(kConnectionKey))
- .WillOnce(Return(ApplicationSharedPtr()))
- .WillRepeatedly(Return(mock_app));
+ EXPECT_CALL(app_mngr_, application(kMacAddress1, kAppId1))
+ .WillRepeatedly(Return(ApplicationSharedPtr()));
ON_CALL(app_mngr_, applications())
.WillByDefault(
Return(DataAccessor<am::ApplicationSet>(app_set_, lock_ptr_)));
+
+ EXPECT_CALL(app_mngr_, application(kConnectionKey))
+ .WillOnce(Return(mock_app));
+
ON_CALL(mock_policy_handler_, PolicyEnabled()).WillByDefault(Return(true));
- ON_CALL(mock_policy_handler_, GetInitialAppData(kAppId, _, _))
+ ON_CALL(mock_policy_handler_, GetInitialAppData(kAppId1, _, _))
.WillByDefault(Return(true));
policy::StatusNotifier notify_upd_manager =
std::make_shared<utils::CallNothing>();
- ON_CALL(mock_policy_handler_, AddApplication(_, _))
+ ON_CALL(mock_policy_handler_, AddApplication(kMacAddress1, kAppId1, _))
.WillByDefault(Return(notify_upd_manager));
EXPECT_CALL(app_mngr_, RegisterApplication(msg_)).WillOnce(Return(mock_app));
@@ -323,6 +340,7 @@ TEST_F(RegisterAppInterfaceRequestTest, Run_MinimalData_SUCCESS) {
ManageMobileCommand(_, am::commands::Command::SOURCE_SDL))
.Times(2);
EXPECT_CALL(app_mngr_, SendDriverDistractionState(_));
+ ASSERT_TRUE(command_->Init());
command_->Run();
}
@@ -360,10 +378,19 @@ TEST_F(RegisterAppInterfaceRequestTest,
EXPECT_CALL(app_mngr_, updateRequestTimeout(_, _, _));
EXPECT_CALL(app_mngr_, IsApplicationForbidden(_, _)).WillOnce(Return(false));
+ connection_handler::DeviceHandle handle = 1;
+ ON_CALL(mock_connection_handler_,
+ GetDataOnSessionKey(kConnectionKey, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(handle), Return(0)));
+ ON_CALL(mock_session_observer_, GetDataOnDeviceID(_, _, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(kMacAddress1), Return(0)));
+
MockAppPtr mock_app = CreateBasicMockedApp();
+ EXPECT_CALL(app_mngr_, application(kMacAddress1, kAppId1))
+ .WillRepeatedly(Return(ApplicationSharedPtr()));
+
EXPECT_CALL(app_mngr_, application(kConnectionKey))
- .WillOnce(Return(ApplicationSharedPtr()))
- .WillRepeatedly(Return(mock_app));
+ .WillOnce(Return(mock_app));
MessageSharedPtr expected_message =
CreateMessage(smart_objects::SmartType_Map);
@@ -401,11 +428,11 @@ TEST_F(RegisterAppInterfaceRequestTest,
.WillByDefault(
Return(DataAccessor<am::ApplicationSet>(app_set_, lock_ptr_)));
ON_CALL(mock_policy_handler_, PolicyEnabled()).WillByDefault(Return(true));
- ON_CALL(mock_policy_handler_, GetInitialAppData(kAppId, _, _))
+ ON_CALL(mock_policy_handler_, GetInitialAppData(kAppId1, _, _))
.WillByDefault(Return(true));
policy::StatusNotifier notify_upd_manager =
std::make_shared<utils::CallNothing>();
- ON_CALL(mock_policy_handler_, AddApplication(_, _))
+ ON_CALL(mock_policy_handler_, AddApplication(kMacAddress1, kAppId1, _))
.WillByDefault(Return(notify_upd_manager));
EXPECT_CALL(app_mngr_, RegisterApplication(msg_)).WillOnce(Return(mock_app));
@@ -444,7 +471,7 @@ TEST_F(RegisterAppInterfaceRequestTest,
ManageMobileCommand(_, am::commands::Command::SOURCE_SDL))
.Times(2);
EXPECT_CALL(app_mngr_, SendDriverDistractionState(_));
-
+ ASSERT_TRUE(command_->Init());
command_->Run();
}
@@ -456,10 +483,23 @@ TEST_F(RegisterAppInterfaceRequestTest,
(*msg_)[am::strings::msg_params][am::strings::hash_id] = request_hash_id;
MockAppPtr mock_app = CreateBasicMockedApp();
- EXPECT_CALL(app_mngr_, application_by_policy_id(kAppId))
+ app_set_.insert(mock_app);
+ EXPECT_CALL(app_mngr_, application_by_policy_id(kAppId1))
.WillRepeatedly(Return(mock_app));
- EXPECT_CALL(app_mngr_, IsAppInReconnectMode(kAppId)).WillOnce(Return(true));
+ connection_handler::DeviceHandle device_id = 1;
+ ON_CALL(mock_connection_handler_,
+ GetDataOnSessionKey(kConnectionKey, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(device_id), Return(0)));
+
+ ON_CALL(mock_session_observer_, GetDataOnDeviceID(device_id, _, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(kMacAddress1), Return(0)));
+
+ ON_CALL(app_mngr_, application(kMacAddress1, kAppId1))
+ .WillByDefault(Return(mock_app));
+
+ ON_CALL(app_mngr_, IsAppInReconnectMode(device_id, kAppId1))
+ .WillByDefault(Return(true));
EXPECT_CALL(app_mngr_, ProcessReconnection(_, kConnectionKey));
@@ -482,6 +522,7 @@ TEST_F(RegisterAppInterfaceRequestTest,
SetCommonExpectionsOnSwitchedApplication(mock_app,
mobile_apis::Result::SUCCESS);
+ ASSERT_TRUE(command_->Init());
command_->Run();
}
@@ -492,11 +533,22 @@ TEST_F(RegisterAppInterfaceRequestTest,
const std::string request_hash_id = "abc123";
(*msg_)[am::strings::msg_params][am::strings::hash_id] = request_hash_id;
+ connection_handler::DeviceHandle device_id = 1;
+ ON_CALL(mock_connection_handler_,
+ GetDataOnSessionKey(kConnectionKey, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(device_id), Return(0)));
+
+ ON_CALL(mock_session_observer_, GetDataOnDeviceID(device_id, _, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(kMacAddress1), Return(0)));
+
MockAppPtr mock_app = CreateBasicMockedApp();
- EXPECT_CALL(app_mngr_, application_by_policy_id(kAppId))
+ EXPECT_CALL(app_mngr_, application_by_policy_id(kAppId1))
.WillRepeatedly(Return(mock_app));
- EXPECT_CALL(app_mngr_, IsAppInReconnectMode(kAppId)).WillOnce(Return(true));
+ EXPECT_CALL(app_mngr_, application(kMacAddress1, kAppId1))
+ .WillOnce(Return(mock_app));
+ ON_CALL(app_mngr_, IsAppInReconnectMode(device_id, kAppId1))
+ .WillByDefault(Return(true));
EXPECT_CALL(app_mngr_, ProcessReconnection(_, kConnectionKey));
@@ -520,7 +572,7 @@ TEST_F(RegisterAppInterfaceRequestTest,
SetCommonExpectionsOnSwitchedApplication(mock_app,
mobile_apis::Result::RESUME_FAILED);
-
+ ASSERT_TRUE(command_->Init());
command_->Run();
}
@@ -528,11 +580,23 @@ TEST_F(RegisterAppInterfaceRequestTest,
SwitchApplication_NoHash_ExpectCleanupResumeFailed) {
InitBasicMessage();
+ connection_handler::DeviceHandle device_id = 1;
+ ON_CALL(mock_connection_handler_,
+ GetDataOnSessionKey(kConnectionKey, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(device_id), Return(0)));
+
+ ON_CALL(mock_session_observer_, GetDataOnDeviceID(device_id, _, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(kMacAddress1), Return(0)));
+
MockAppPtr mock_app = CreateBasicMockedApp();
- EXPECT_CALL(app_mngr_, application_by_policy_id(kAppId))
+ EXPECT_CALL(app_mngr_, application_by_policy_id(kAppId1))
.WillRepeatedly(Return(mock_app));
- EXPECT_CALL(app_mngr_, IsAppInReconnectMode(kAppId)).WillOnce(Return(true));
+ EXPECT_CALL(app_mngr_, application(kMacAddress1, kAppId1))
+ .WillOnce(Return(mock_app));
+
+ EXPECT_CALL(app_mngr_, IsAppInReconnectMode(device_id, kAppId1))
+ .WillOnce(Return(true));
EXPECT_CALL(app_mngr_, ProcessReconnection(_, kConnectionKey));
@@ -550,6 +614,133 @@ TEST_F(RegisterAppInterfaceRequestTest,
SetCommonExpectionsOnSwitchedApplication(mock_app,
mobile_apis::Result::RESUME_FAILED);
+ ASSERT_TRUE(command_->Init());
+ command_->Run();
+}
+
+TEST_F(RegisterAppInterfaceRequestTest,
+ RegisterApp_SameAppId_SameDeviceFailed) {
+ using namespace am;
+
+ InitBasicMessage();
+
+ MockAppPtr mock_app1 = CreateBasicMockedApp();
+
+ app_set_.insert(mock_app1);
+ ON_CALL(app_mngr_, applications())
+ .WillByDefault(
+ Return(DataAccessor<am::ApplicationSet>(app_set_, lock_ptr_)));
+
+ MockAppPtr mock_app2 = CreateBasicMockedApp();
+
+ connection_handler::DeviceHandle device_id = 1;
+ ON_CALL(mock_connection_handler_,
+ GetDataOnSessionKey(kConnectionKey, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(device_id), Return(0)));
+
+ ON_CALL(mock_session_observer_, GetDataOnDeviceID(device_id, _, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(kMacAddress1), Return(0)));
+
+ EXPECT_CALL(app_mngr_, application(kMacAddress1, kAppId1))
+ .WillOnce(Return(mock_app1));
+
+ EXPECT_CALL(mock_rpc_service_, ManageHMICommand(_, _)).Times(0);
+
+ EXPECT_CALL(mock_rpc_service_,
+ ManageMobileCommand(
+ MobileResultCodeIs(
+ mobile_apis::Result::APPLICATION_REGISTERED_ALREADY),
+ am::commands::Command::SOURCE_SDL));
+
+ ASSERT_TRUE(command_->Init());
+ command_->Run();
+}
+
+TEST_F(RegisterAppInterfaceRequestTest,
+ RegisterApp_SameAppId_DifferentDevicesSuccess) {
+ MockAppPtr mock_app1 = CreateBasicMockedApp();
+ const connection_handler::DeviceHandle device_id1 = 1u;
+ ON_CALL(*mock_app1, device()).WillByDefault(Return(device_id1));
+ app_set_.insert(mock_app1);
+ ON_CALL(app_mngr_, applications())
+ .WillByDefault(
+ Return(DataAccessor<am::ApplicationSet>(app_set_, lock_ptr_)));
+
+ InitBasicMessage();
+ (*msg_)[am::strings::params][am::strings::connection_key] = kConnectionKey2;
+ EXPECT_CALL(app_mngr_, IsStopping())
+ .WillOnce(Return(false))
+ .WillOnce(Return(true))
+ .WillOnce(Return(false));
+ ON_CALL(app_mngr_, IsHMICooperating()).WillByDefault(Return(false));
+ EXPECT_CALL(app_mngr_, updateRequestTimeout(kConnectionKey2, _, _));
+ EXPECT_CALL(app_mngr_, IsApplicationForbidden(kConnectionKey2, kAppId1))
+ .WillOnce(Return(false));
+
+ connection_handler::DeviceHandle device_id2 = 2u;
+ ON_CALL(mock_connection_handler_,
+ GetDataOnSessionKey(kConnectionKey2, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(device_id2), Return(0)));
+
+ ON_CALL(mock_session_observer_, GetDataOnDeviceID(device_id2, _, _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<3>(kMacAddress2), Return(0)));
+
+ MockAppPtr mock_app2 = CreateBasicMockedApp();
+
+ ON_CALL(*mock_app2, device()).WillByDefault(Return(device_id2));
+ ON_CALL(*mock_app2, mac_address()).WillByDefault(ReturnRef(kMacAddress2));
+ EXPECT_CALL(app_mngr_, application(kMacAddress2, kAppId1))
+ .WillRepeatedly(Return(ApplicationSharedPtr()));
+
+ EXPECT_CALL(app_mngr_, application(kConnectionKey2))
+ .WillOnce(Return(mock_app2));
+
+ ON_CALL(mock_policy_handler_, PolicyEnabled()).WillByDefault(Return(true));
+ ON_CALL(mock_policy_handler_, GetInitialAppData(kAppId1, _, _))
+ .WillByDefault(Return(true));
+ policy::StatusNotifier notify_upd_manager =
+ std::make_shared<utils::CallNothing>();
+ ON_CALL(mock_policy_handler_, AddApplication(kMacAddress2, kAppId1, _))
+ .WillByDefault(Return(notify_upd_manager));
+
+ EXPECT_CALL(app_mngr_, RegisterApplication(msg_)).WillOnce(Return(mock_app2));
+
+ EXPECT_CALL(mock_hmi_interfaces_, GetInterfaceState(_))
+ .WillRepeatedly(Return(am::HmiInterfaces::STATE_AVAILABLE));
+
+ EXPECT_CALL(mock_rpc_service_,
+ ManageHMICommand(
+ HMIResultCodeIs(
+ hmi_apis::FunctionID::BasicCommunication_OnAppRegistered),
+ _))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ mock_rpc_service_,
+ ManageHMICommand(
+ HMIResultCodeIs(hmi_apis::FunctionID::Buttons_OnButtonSubscription),
+ _))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ mock_rpc_service_,
+ ManageHMICommand(
+ HMIResultCodeIs(hmi_apis::FunctionID::VR_ChangeRegistration), _))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ mock_rpc_service_,
+ ManageHMICommand(
+ HMIResultCodeIs(hmi_apis::FunctionID::TTS_ChangeRegistration), _))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ mock_rpc_service_,
+ ManageHMICommand(
+ HMIResultCodeIs(hmi_apis::FunctionID::UI_ChangeRegistration), _))
+ .WillOnce(Return(true));
+ EXPECT_CALL(mock_rpc_service_,
+ ManageMobileCommand(_, am::commands::Command::SOURCE_SDL))
+ .Times(2);
+ EXPECT_CALL(app_mngr_, SendDriverDistractionState(_));
+
+ ASSERT_TRUE(command_->Init());
command_->Run();
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/system_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/system_request_test.cc
index 7351cd67d3..211888d6be 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/system_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/system_request_test.cc
@@ -74,6 +74,7 @@ const std::string kAppStorageFolder = "fake-storage";
const std::string kSystemFilesPath = "/fake/system/files";
const std::string kFileName = "Filename";
const uint32_t kHmiAppId = 3u;
+const connection_handler::DeviceHandle kDeviceId = 1u;
} // namespace
class SystemRequestTest
@@ -99,13 +100,15 @@ class SystemRequestTest
ON_CALL(*mock_app_, policy_app_id()).WillByDefault(Return(kAppPolicyId));
ON_CALL(*mock_app_, folder_name()).WillByDefault(Return(kAppFolderName));
ON_CALL(*mock_app_, hmi_app_id()).WillByDefault(Return(kHmiAppId));
+ ON_CALL(*mock_app_, device()).WillByDefault(Return(kDeviceId));
ON_CALL(app_mngr_settings_, system_files_path())
.WillByDefault(ReturnRef(kSystemFilesPath));
ON_CALL(app_mngr_settings_, app_storage_folder())
.WillByDefault(ReturnRef(kAppStorageFolder));
- ON_CALL(mock_policy_handler_, IsRequestTypeAllowed(kAppPolicyId, _))
+ ON_CALL(mock_policy_handler_,
+ IsRequestTypeAllowed(kDeviceId, kAppPolicyId, _))
.WillByDefault(Return(true));
}
@@ -146,9 +149,10 @@ TEST_F(SystemRequestTest,
PreConditions();
- EXPECT_CALL(mock_policy_handler_,
- IsRequestTypeAllowed(kAppPolicyId,
- mobile_apis::RequestType::OEM_SPECIFIC))
+ EXPECT_CALL(
+ mock_policy_handler_,
+ IsRequestTypeAllowed(
+ kDeviceId, kAppPolicyId, mobile_apis::RequestType::OEM_SPECIFIC))
.WillOnce(Return(true));
EXPECT_CALL(mock_policy_handler_,
@@ -191,9 +195,10 @@ TEST_F(
PreConditions();
- EXPECT_CALL(mock_policy_handler_,
- IsRequestTypeAllowed(kAppPolicyId,
- mobile_apis::RequestType::OEM_SPECIFIC))
+ EXPECT_CALL(
+ mock_policy_handler_,
+ IsRequestTypeAllowed(
+ kDeviceId, kAppPolicyId, mobile_apis::RequestType::OEM_SPECIFIC))
.WillOnce(Return(true));
EXPECT_CALL(mock_policy_handler_,
@@ -216,9 +221,10 @@ TEST_F(SystemRequestTest, Run_RequestTypeDisallowed_SendDisallowedResponse) {
PreConditions();
- EXPECT_CALL(mock_policy_handler_,
- IsRequestTypeAllowed(kAppPolicyId,
- mobile_apis::RequestType::OEM_SPECIFIC))
+ EXPECT_CALL(
+ mock_policy_handler_,
+ IsRequestTypeAllowed(
+ kDeviceId, kAppPolicyId, mobile_apis::RequestType::OEM_SPECIFIC))
.WillOnce(Return(false));
ExpectManageMobileCommandWithResultCode(mobile_apis::Result::DISALLOWED);
@@ -241,9 +247,9 @@ TEST_F(SystemRequestTest, Run_RequestType_IconURL_Success) {
const std::vector<uint8_t> binary_data = {1u, 2u};
(*msg)[am::strings::params][am::strings::binary_data] = binary_data;
- EXPECT_CALL(
- mock_policy_handler_,
- IsRequestTypeAllowed(kAppPolicyId, mobile_apis::RequestType::ICON_URL))
+ EXPECT_CALL(mock_policy_handler_,
+ IsRequestTypeAllowed(
+ kDeviceId, kAppPolicyId, mobile_apis::RequestType::ICON_URL))
.WillOnce(Return(true));
EXPECT_CALL(app_mngr_settings_, app_icons_folder())
.WillOnce(ReturnRef(kAppStorageFolder));
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index 7e72dd4c64..04fcf2c53f 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -121,17 +121,26 @@ bool device_id_comparator(const std::string& device_id,
}
/**
- * @brief policy_app_id_comparator is predicate to compare policy application
- * ids
- * @param policy_app_id Policy id of application
- * @param app Application pointer
- * @return True if policy id of application matches to policy id passed
+ * @brief PolicyAppIdComparator is struct predicate to compare policy
+ * application ids & device
+ * @param device_handle of application
+ * @param id of application
+ * @return True if policy id & device_handle of application matches to policy id
+ * & device_handle passed
*/
-bool policy_app_id_comparator(const std::string& policy_app_id,
- ApplicationSharedPtr app) {
- DCHECK_OR_RETURN(app, false);
- return app->policy_app_id() == policy_app_id;
-}
+struct PolicyAppIdComparator {
+ PolicyAppIdComparator(const connection_handler::DeviceHandle& device_handle,
+ const std::string& policy_app_id)
+ : device_handle_(device_handle), policy_app_id_(policy_app_id) {}
+ bool operator()(const ApplicationSharedPtr app) const {
+ return app && app->device() == device_handle_ &&
+ app->policy_app_id() == policy_app_id_;
+ }
+
+ private:
+ const connection_handler::DeviceHandle& device_handle_;
+ const std::string& policy_app_id_;
+};
uint32_t ApplicationManagerImpl::mobile_corelation_id_ = 0;
uint32_t ApplicationManagerImpl::corelation_id_ = 0;
@@ -1631,7 +1640,8 @@ mobile_apis::HMILevel::eType ApplicationManagerImpl::GetDefaultHmiLevel(
if (GetPolicyHandler().PolicyEnabled()) {
const std::string policy_app_id = application->policy_app_id();
std::string default_hmi_string = "";
- if (GetPolicyHandler().GetDefaultHmi(policy_app_id, &default_hmi_string)) {
+ if (GetPolicyHandler().GetDefaultHmi(
+ application->mac_address(), policy_app_id, &default_hmi_string)) {
if ("BACKGROUND" == default_hmi_string) {
default_hmi = HMILevel::HMI_BACKGROUND;
} else if ("FULL" == default_hmi_string) {
@@ -1943,7 +1953,7 @@ void ApplicationManagerImpl::OnServiceEndedCallback(
return;
}
- if (IsAppInReconnectMode(app->policy_app_id())) {
+ if (IsAppInReconnectMode(app->device(), app->policy_app_id())) {
LOG4CXX_DEBUG(logger_,
"Application is in reconnection list and won't be closed.");
return;
@@ -2490,8 +2500,24 @@ void ApplicationManagerImpl::CreateApplications(SmartArray& obj_array,
}
const std::string policy_app_id(app_data[json::appId].asString());
- ApplicationSharedPtr registered_app =
- application_by_policy_id(policy_app_id);
+
+ connection_handler::DeviceHandle device_handle;
+ if (-1 == connection_handler().get_session_observer().GetDataOnSessionKey(
+ connection_key, nullptr, nullptr, &device_handle)) {
+ LOG4CXX_ERROR(logger_,
+ "Failed to create application: no connection info.");
+ continue;
+ }
+
+ std::string device_id;
+ if (-1 == connection_handler().get_session_observer().GetDataOnDeviceID(
+ device_handle, nullptr, nullptr, &device_id)) {
+ LOG4CXX_ERROR(logger_,
+ "Failed to create application: no connection info.");
+ continue;
+ }
+
+ ApplicationSharedPtr registered_app = application(device_id, policy_app_id);
if (registered_app) {
LOG4CXX_DEBUG(logger_,
"Application with the same id: "
@@ -2530,22 +2556,9 @@ void ApplicationManagerImpl::CreateApplications(SmartArray& obj_array,
const std::string app_icon_dir(settings_.app_icons_folder());
const std::string full_icon_path(app_icon_dir + "/" + policy_app_id);
- connection_handler::DeviceHandle device_id = 0;
-
- if (-1 == connection_handler().get_session_observer().GetDataOnSessionKey(
- connection_key, NULL, NULL, &device_id)) {
- LOG4CXX_ERROR(logger_,
- "Failed to create application: no connection info.");
- continue;
- }
-
- std::string device_mac;
- connection_handler().get_session_observer().GetDataOnDeviceID(
- device_id, NULL, NULL, &device_mac, NULL);
-
const uint32_t hmi_app_id =
- resume_controller().IsApplicationSaved(policy_app_id, device_mac)
- ? resume_controller().GetHMIApplicationID(policy_app_id, device_mac)
+ resume_controller().IsApplicationSaved(policy_app_id, device_id)
+ ? resume_controller().GetHMIApplicationID(policy_app_id, device_id)
: GenerateNewHMIAppID();
// AppId = 0 because this is query_app(provided by hmi for download, but not
@@ -2553,8 +2566,8 @@ void ApplicationManagerImpl::CreateApplications(SmartArray& obj_array,
ApplicationSharedPtr app(
new ApplicationImpl(0,
policy_app_id,
- device_mac,
device_id,
+ device_handle,
appName,
GetPolicyHandler().GetStatisticManager(),
*this));
@@ -3514,14 +3527,14 @@ bool ApplicationManagerImpl::IsApplicationForbidden(
}
bool ApplicationManagerImpl::IsAppInReconnectMode(
+ const connection_handler::DeviceHandle& device_id,
const std::string& policy_app_id) const {
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock lock(reregister_wait_list_lock_);
return reregister_wait_list_.end() !=
std::find_if(reregister_wait_list_.begin(),
reregister_wait_list_.end(),
- std::bind1st(std::ptr_fun(&policy_app_id_comparator),
- policy_app_id));
+ PolicyAppIdComparator(device_id, policy_app_id));
}
policy::DeviceConsent ApplicationManagerImpl::GetUserConsentForDevice(
@@ -3846,10 +3859,10 @@ void ApplicationManagerImpl::EraseAppFromReconnectionList(
const auto policy_app_id = app->policy_app_id();
sync_primitives::AutoLock lock(reregister_wait_list_lock_);
- auto app_it = std::find_if(
- reregister_wait_list_.begin(),
- reregister_wait_list_.end(),
- std::bind1st(std::ptr_fun(&policy_app_id_comparator), policy_app_id));
+ auto app_it =
+ std::find_if(reregister_wait_list_.begin(),
+ reregister_wait_list_.end(),
+ PolicyAppIdComparator(app->device(), policy_app_id));
if (reregister_wait_list_.end() != app_it) {
reregister_wait_list_.erase(app_it);
}
diff --git a/src/components/application_manager/src/message_helper/message_helper.cc b/src/components/application_manager/src/message_helper/message_helper.cc
index 28f8fd88bb..bae4802e56 100644
--- a/src/components/application_manager/src/message_helper/message_helper.cc
+++ b/src/components/application_manager/src/message_helper/message_helper.cc
@@ -1648,7 +1648,8 @@ bool MessageHelper::CreateHMIApplicationStruct(
const policy::RequestType::State app_request_types_state =
policy_handler.GetAppRequestTypeState(policy_app_id);
if (policy::RequestType::State::AVAILABLE == app_request_types_state) {
- const auto request_types = policy_handler.GetAppRequestTypes(policy_app_id);
+ const auto request_types =
+ policy_handler.GetAppRequestTypes(app->device(), policy_app_id);
message[strings::request_type] =
SmartObject(smart_objects::SmartType_Array);
smart_objects::SmartObject& request_types_array =
diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc
index cac09bd5f3..fdbd0ce391 100644
--- a/src/components/application_manager/src/policies/policy_handler.cc
+++ b/src/components/application_manager/src/policies/policy_handler.cc
@@ -470,21 +470,25 @@ void PolicyHandler::OnDeviceConsentChanged(const std::string& device_id,
continue;
}
- policy_manager_->ReactOnUserDevConsentForApp(policy_app_id, is_allowed);
+ policy_manager_->ReactOnUserDevConsentForApp(
+ device_handle, policy_app_id, is_allowed);
- policy_manager_->SendNotificationOnPermissionsUpdated(policy_app_id);
+ policy_manager_->SendNotificationOnPermissionsUpdated(device_id,
+ policy_app_id);
}
}
}
void PolicyHandler::SendOnAppPermissionsChanged(
- const AppPermissions& permissions, const std::string& policy_app_id) const {
+ const AppPermissions& permissions,
+ const std::string& device_id,
+ const std::string& policy_app_id) const {
LOG4CXX_AUTO_TRACE(logger_);
LOG4CXX_DEBUG(
logger_,
"PolicyHandler::SendOnAppPermissionsChanged for " << policy_app_id);
ApplicationSharedPtr app =
- application_manager_.application_by_policy_id(policy_app_id);
+ application_manager_.application(device_id, policy_app_id);
if (app.use_count() == 0) {
LOG4CXX_WARN(logger_, "No app found for policy app id = " << policy_app_id);
return;
@@ -518,10 +522,11 @@ struct SmartObjectToInt {
};
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(std::make_shared<utils::CallNothing>());
- return policy_manager_->AddApplication(application_id, hmi_types);
+ return policy_manager_->AddApplication(device_id, application_id, hmi_types);
}
void PolicyHandler::AddDevice(const std::string& device_id,
@@ -573,13 +578,9 @@ void PolicyHandler::OnAppPermissionConsentInternal(
#endif
}
} else if (!app_to_device_link_.empty()) {
- sync_primitives::AutoLock lock(app_to_device_link_lock_);
- std::map<std::string, std::string>::const_iterator it =
- app_to_device_link_.begin();
- for (; app_to_device_link_.end() != it; ++it) {
- ApplicationSharedPtr app =
- application_manager_.application_by_policy_id(it->second);
-
+ const ApplicationSet& accessor =
+ application_manager_.applications().GetData();
+ for (const auto& app : accessor) {
// If list of apps sent to HMI for user consents is not the same as
// current,
// permissions should be set only for coincident to registered apps
@@ -590,19 +591,26 @@ void PolicyHandler::OnAppPermissionConsentInternal(
continue;
}
+ if (!app->IsRegistered()) {
+ LOG4CXX_DEBUG(logger_,
+ "Application " << app->policy_app_id()
+ << " is not marked as registered.");
+ continue;
+ }
+
DeviceParams device_params = GetDeviceParams(
app->device(),
application_manager_.connection_handler().get_session_observer());
- if (device_params.device_mac_address != it->first) {
+ if (device_params.device_mac_address != app->mac_address()) {
LOG4CXX_WARN(logger_,
"Device_id of application is changed."
"Permissions setting skipped.");
continue;
}
- out_permissions.policy_app_id = it->second;
- out_permissions.device_id = it->first;
+ 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);
#else
@@ -852,10 +860,15 @@ void PolicyHandler::OnUpdateStatusChanged(const std::string& status) {
}
std::string PolicyHandler::OnCurrentDeviceIdUpdateRequired(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) {
LOG4CXX_AUTO_TRACE(logger_);
- ApplicationSharedPtr app =
- application_manager_.application_by_policy_id(policy_app_id);
+ DeviceParams device_params = GetDeviceParams(
+ device_handle,
+ application_manager_.connection_handler().get_session_observer());
+
+ ApplicationSharedPtr app = application_manager_.application(
+ device_params.device_mac_address, policy_app_id);
if (app.use_count() == 0) {
LOG4CXX_WARN(logger_,
@@ -863,11 +876,8 @@ std::string PolicyHandler::OnCurrentDeviceIdUpdateRequired(
<< policy_app_id
<< "' "
"not found within registered applications.");
- return "";
+ return std::string();
}
- DeviceParams device_params = GetDeviceParams(
- app->device(),
- application_manager_.connection_handler().get_session_observer());
return device_params.device_mac_address;
}
@@ -925,14 +935,14 @@ void PolicyHandler::OnVehicleDataUpdated(
}
void PolicyHandler::OnPendingPermissionChange(
- const std::string& policy_app_id) {
+ const std::string& device_id, const std::string& policy_app_id) {
LOG4CXX_AUTO_TRACE(logger_);
LOG4CXX_DEBUG(
logger_,
"PolicyHandler::OnPendingPermissionChange for " << policy_app_id);
POLICY_LIB_CHECK_VOID();
ApplicationSharedPtr app =
- application_manager_.application_by_policy_id(policy_app_id);
+ application_manager_.application(device_id, policy_app_id);
if (app.use_count() == 0) {
LOG4CXX_WARN(logger_,
"No app found for " << policy_app_id << " policy app id.");
@@ -940,7 +950,7 @@ void PolicyHandler::OnPendingPermissionChange(
}
AppPermissions permissions =
- policy_manager_->GetAppPermissionsChanges(policy_app_id);
+ policy_manager_->GetAppPermissionsChanges(device_id, policy_app_id);
const uint32_t app_id = app->app_id();
@@ -1099,7 +1109,8 @@ struct SDLAlowedNotification {
if (app->device() == device_id_) {
std::string hmi_level;
mobile_apis::HMILevel::eType default_mobile_hmi;
- policy_manager_->GetDefaultHmi(app->policy_app_id(), &hmi_level);
+ policy_manager_->GetDefaultHmi(
+ app->mac_address(), app->policy_app_id(), &hmi_level);
if ("BACKGROUND" == hmi_level) {
default_mobile_hmi = mobile_apis::HMILevel::HMI_BACKGROUND;
} else if ("FULL" == hmi_level) {
@@ -1256,7 +1267,8 @@ void PolicyHandler::OnActivateApp(uint32_t connection_key,
permissions.isSDLAllowed = true;
}
} else {
- permissions = policy_manager_->GetAppPermissionsChanges(policy_app_id);
+ permissions = policy_manager_->GetAppPermissionsChanges(app->mac_address(),
+ policy_app_id);
#ifdef EXTERNAL_PROPRIETARY_MODE
UsageStatistics& usage = app->usage_report();
@@ -1327,18 +1339,19 @@ void PolicyHandler::PTExchangeAtUserRequest(uint32_t correlation_id) {
update_status, correlation_id, application_manager_);
}
-void PolicyHandler::OnPermissionsUpdated(const std::string& policy_app_id,
+void PolicyHandler::OnPermissionsUpdated(const std::string& device_id,
+ const std::string& policy_app_id,
const Permissions& permissions,
const HMILevel& default_hmi) {
LOG4CXX_AUTO_TRACE(logger_);
- OnPermissionsUpdated(policy_app_id, permissions);
+ OnPermissionsUpdated(device_id, policy_app_id, permissions);
ApplicationSharedPtr app =
- application_manager_.application_by_policy_id(policy_app_id);
+ application_manager_.application(device_id, policy_app_id);
if (app.use_count() == 0) {
LOG4CXX_WARN(
logger_,
- "Connection_key not found for application_id:" << policy_app_id);
+ "Connection_key not found for application_id: " << policy_app_id);
return;
}
@@ -1365,13 +1378,12 @@ void PolicyHandler::OnPermissionsUpdated(const std::string& policy_app_id,
<< policy_app_id << " to default hmi level "
<< default_hmi);
- if (hmi_level == mobile_apis::HMILevel::HMI_FULL) {
- application_manager_.state_controller().SetRegularState(
- app, hmi_level, true);
- } else {
- application_manager_.state_controller().SetRegularState(
- app, hmi_level, false);
- }
+ const bool is_full_hmi_level =
+ mobile_apis::HMILevel::HMI_FULL == hmi_level;
+
+ application_manager_.state_controller().SetRegularState(
+ app, hmi_level, is_full_hmi_level);
+
break;
}
default:
@@ -1383,15 +1395,16 @@ void PolicyHandler::OnPermissionsUpdated(const std::string& policy_app_id,
}
}
-void PolicyHandler::OnPermissionsUpdated(const std::string& policy_app_id,
+void PolicyHandler::OnPermissionsUpdated(const std::string& device_id,
+ const std::string& policy_app_id,
const Permissions& permissions) {
LOG4CXX_AUTO_TRACE(logger_);
ApplicationSharedPtr app =
- application_manager_.application_by_policy_id(policy_app_id);
+ application_manager_.application(device_id, policy_app_id);
if (app.use_count() == 0) {
LOG4CXX_WARN(
logger_,
- "Connection_key not found for application_id:" << policy_app_id);
+ "Connection_key not found for application_id: " << policy_app_id);
return;
}
@@ -1399,7 +1412,7 @@ void PolicyHandler::OnPermissionsUpdated(const std::string& policy_app_id,
app->app_id(), permissions, application_manager_);
LOG4CXX_DEBUG(logger_,
- "Notification sent for application_id:"
+ "Notification sent for application_id: "
<< policy_app_id << " and connection_key "
<< app->app_id());
}
@@ -1501,13 +1514,9 @@ void PolicyHandler::CheckPermissions(
"Checking permissions for " << app->policy_app_id() << " in "
<< hmi_level << " on device "
<< device_id << " rpc " << rpc);
-#ifdef EXTERNAL_PROPRIETARY_MODE
- policy_manager_->CheckPermissions(
- app->policy_app_id(), hmi_level, rpc, rpc_params, result);
-#else // EXTERNAL_PROPRIETARY_MODE
+
policy_manager_->CheckPermissions(
device_id, app->policy_app_id(), hmi_level, rpc, rpc_params, result);
-#endif // EXTERNAL_PROPRIETARY_MODE
}
uint32_t PolicyHandler::GetNotificationsNumber(
@@ -1522,10 +1531,11 @@ DeviceConsent PolicyHandler::GetUserConsentForDevice(
return policy_manager_->GetUserConsentForDevice(device_id);
}
-bool PolicyHandler::GetDefaultHmi(const std::string& policy_app_id,
+bool PolicyHandler::GetDefaultHmi(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi) const {
POLICY_LIB_CHECK(false);
- return policy_manager_->GetDefaultHmi(policy_app_id, default_hmi);
+ return policy_manager_->GetDefaultHmi(device_id, policy_app_id, default_hmi);
}
bool PolicyHandler::GetInitialAppData(const std::string& application_id,
@@ -1662,7 +1672,7 @@ custom_str::CustomString PolicyHandler::GetAppName(
if (app.use_count() == 0) {
LOG4CXX_WARN(
logger_,
- "Connection_key not found for application_id:" << policy_app_id);
+ "Connection_key not found for application_id: " << policy_app_id);
return custom_str::CustomString("");
}
return app->name();
@@ -2078,9 +2088,10 @@ void PolicyHandler::OnAppsSearchCompleted(const bool trigger_ptu) {
policy_manager_->OnAppsSearchCompleted(trigger_ptu);
}
-void PolicyHandler::OnAppRegisteredOnMobile(const std::string& application_id) {
+void PolicyHandler::OnAppRegisteredOnMobile(const std::string& device_id,
+ const std::string& application_id) {
POLICY_LIB_CHECK_VOID();
- policy_manager_->OnAppRegisteredOnMobile(application_id);
+ policy_manager_->OnAppRegisteredOnMobile(device_id, application_id);
}
RequestType::State PolicyHandler::GetAppRequestTypeState(
@@ -2096,12 +2107,13 @@ RequestSubType::State PolicyHandler::GetAppRequestSubTypeState(
}
bool PolicyHandler::IsRequestTypeAllowed(
+ const transport_manager::DeviceHandle& device_id,
const std::string& policy_app_id,
mobile_apis::RequestType::eType type) const {
POLICY_LIB_CHECK(false);
using namespace mobile_apis;
- std::string stringified_type = RequestTypeToString(type);
+ const std::string stringified_type = RequestTypeToString(type);
if (stringified_type.empty()) {
LOG4CXX_ERROR(logger_, "Unknown request type.");
return false;
@@ -2124,7 +2136,11 @@ bool PolicyHandler::IsRequestTypeAllowed(
case RequestType::State::AVAILABLE: {
// 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);
+#else
policy_manager_->GetAppRequestTypes(policy_app_id);
+#endif
return helpers::in_range(request_types, stringified_type);
}
default:
@@ -2170,9 +2186,14 @@ 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(std::vector<std::string>());
+#ifdef EXTERNAL_PROPRIETARY_MODE
+ return policy_manager_->GetAppRequestTypes(device_handle, policy_app_id);
+#else
return policy_manager_->GetAppRequestTypes(policy_app_id);
+#endif
}
const std::vector<std::string> PolicyHandler::GetAppRequestSubTypes(
@@ -2222,18 +2243,32 @@ bool PolicyHandler::IsUrlAppIdValid(const uint32_t app_idx,
const EndpointUrls& urls) const {
const EndpointData& app_data = urls[app_idx];
const std::vector<std::string> app_urls = app_data.url;
- const ApplicationSharedPtr app =
- application_manager_.application_by_policy_id(app_data.app_id);
- const bool is_registered = (app && (app->IsRegistered()));
- const bool is_default = (app_data.app_id == policy::kDefaultId);
- const bool is_empty_urls = app_urls.empty();
+ if (policy::kDefaultId == app_data.app_id) {
+ return true;
+ }
- return ((is_registered && !is_empty_urls) || is_default);
+ if (app_urls.empty()) {
+ return false;
+ }
+
+ const auto devices_ids = GetDevicesIds(app_data.app_id);
+ LOG4CXX_TRACE(logger_,
+ "Count devices: " << devices_ids.size()
+ << " for app_id: " << app_data.app_id);
+ for (const auto& device_id : devices_ids) {
+ ApplicationSharedPtr app =
+ application_manager_.application(device_id, app_data.app_id);
+ if (app && (app->IsRegistered())) {
+ return true;
+ }
+ }
+
+ return false;
}
std::vector<std::string> PolicyHandler::GetDevicesIds(
- const std::string& policy_app_id) {
+ const std::string& policy_app_id) const {
return application_manager_.devices(policy_app_id);
}
@@ -2307,6 +2342,7 @@ bool PolicyHandler::GetModuleTypes(const std::string& policy_app_id,
}
void PolicyHandler::SetDefaultHmiTypes(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& application_id,
const smart_objects::SmartObject* app_types) {
LOG4CXX_AUTO_TRACE(logger_);
@@ -2319,7 +2355,7 @@ void PolicyHandler::SetDefaultHmiTypes(
std::back_inserter(hmi_types),
SmartObjectToInt());
}
- policy_manager_->SetDefaultHmiTypes(application_id, hmi_types);
+ policy_manager_->SetDefaultHmiTypes(device_handle, application_id, hmi_types);
}
bool PolicyHandler::CheckHMIType(const std::string& application_id,
diff --git a/src/components/application_manager/src/rpc_service_impl.cc b/src/components/application_manager/src/rpc_service_impl.cc
index b5cae1c126..fef5ef0163 100644
--- a/src/components/application_manager/src/rpc_service_impl.cc
+++ b/src/components/application_manager/src/rpc_service_impl.cc
@@ -82,7 +82,8 @@ bool RPCServiceImpl::ManageMobileCommand(
(*message)[strings::params][strings::connection_key].asUInt());
auto app_ptr = app_manager_.application(connection_key);
- if (app_ptr && app_manager_.IsAppInReconnectMode(app_ptr->policy_app_id())) {
+ if (app_ptr && app_manager_.IsAppInReconnectMode(app_ptr->device(),
+ app_ptr->policy_app_id())) {
commands_holder_.Suspend(
app_ptr, CommandHolder::CommandType::kMobileCommand, message);
return true;
@@ -296,7 +297,8 @@ bool RPCServiceImpl::ManageHMICommand(const commands::MessageSharedPtr message,
(*message)[strings::msg_params][strings::app_id].asUInt();
auto app = app_manager_.application(static_cast<uint32_t>(connection_key));
- if (app && app_manager_.IsAppInReconnectMode(app->policy_app_id())) {
+ if (app && app_manager_.IsAppInReconnectMode(app->device(),
+ app->policy_app_id())) {
commands_holder_.Suspend(
app, CommandHolder::CommandType::kHmiCommand, message);
return true;
diff --git a/src/components/application_manager/test/application_manager_impl_test.cc b/src/components/application_manager/test/application_manager_impl_test.cc
index 804959e1db..1f4b94a991 100644
--- a/src/components/application_manager/test/application_manager_impl_test.cc
+++ b/src/components/application_manager/test/application_manager_impl_test.cc
@@ -145,8 +145,10 @@ class ApplicationManagerImplTest : public ::testing::Test {
protected:
void SetUp() OVERRIDE {
CreateAppManager();
- ON_CALL(mock_session_observer_, GetDataOnSessionKey(_, _, _, _))
- .WillByDefault(DoAll(SetArgPointee<3u>(kDeviceId), Return(0)));
+ ON_CALL(*mock_app_ptr_, app_id()).WillByDefault(Return(kConnectionKey));
+ ON_CALL(*mock_app_ptr_, device()).WillByDefault(Return(kDeviceId));
+ ON_CALL(mock_connection_handler_, GetDataOnSessionKey(_, _, _, &kDeviceId))
+ .WillByDefault(DoAll(SetArgPointee<3u>(app_id_), Return(0)));
ON_CALL(mock_connection_handler_, get_session_observer())
.WillByDefault(ReturnRef(mock_session_observer_));
app_manager_impl_->SetMockRPCService(mock_rpc_service_);
@@ -820,6 +822,9 @@ TEST_F(ApplicationManagerImplTest,
std::shared_ptr<MockApplication> switching_app_ptr =
std::make_shared<MockApplication>();
+ ON_CALL(*switching_app_ptr, app_id()).WillByDefault(Return(kConnectionKey));
+ ON_CALL(*switching_app_ptr, device()).WillByDefault(Return(kDeviceId));
+
const std::string switching_device_id = "switching";
const std::string switching_device_id_hash =
encryption::MakeHash(switching_device_id);
@@ -837,7 +842,6 @@ TEST_F(ApplicationManagerImplTest,
std::shared_ptr<MockApplication> nonswitching_app_ptr =
std::make_shared<MockApplication>();
-
const std::string nonswitching_device_id = "nonswitching";
const std::string nonswitching_device_id_hash =
encryption::MakeHash(nonswitching_device_id);
@@ -868,15 +872,18 @@ TEST_F(ApplicationManagerImplTest,
.WillOnce(Return(smart_objects::SmartObjectSPtr()));
app_manager_impl_->OnDeviceSwitchingStart(switching_device,
non_switching_device);
- EXPECT_TRUE(app_manager_impl_->IsAppInReconnectMode(policy_app_id_switch));
- EXPECT_FALSE(
- app_manager_impl_->IsAppInReconnectMode(policy_app_id_nonswitch));
+ EXPECT_TRUE(
+ app_manager_impl_->IsAppInReconnectMode(kDeviceId, policy_app_id_switch));
+ EXPECT_FALSE(app_manager_impl_->IsAppInReconnectMode(
+ kDeviceId, policy_app_id_nonswitch));
}
TEST_F(ApplicationManagerImplTest,
OnDeviceSwitchingFinish_ExpectUnregisterAppsInWaitList) {
std::shared_ptr<MockApplication> switching_app_ptr =
std::make_shared<MockApplication>();
+ ON_CALL(*switching_app_ptr, app_id()).WillByDefault(Return(kConnectionKey));
+ ON_CALL(*switching_app_ptr, device()).WillByDefault(Return(kDeviceId));
plugin_manager::MockRPCPluginManager* mock_rpc_plugin_manager =
new plugin_manager::MockRPCPluginManager;
@@ -913,6 +920,10 @@ TEST_F(ApplicationManagerImplTest,
EXPECT_CALL(*nonswitching_app_ptr, policy_app_id())
.WillRepeatedly(Return(policy_app_id_nonswitch));
+ ON_CALL(*nonswitching_app_ptr, protocol_version())
+ .WillByDefault(
+ Return(protocol_handler::MajorProtocolVersion::PROTOCOL_VERSION_4));
+
const auto hmi_level_nonswitching_app = mobile_apis::HMILevel::HMI_LIMITED;
EXPECT_CALL(*nonswitching_app_ptr, hmi_level())
.WillRepeatedly(Return(hmi_level_nonswitching_app));
@@ -933,7 +944,8 @@ TEST_F(ApplicationManagerImplTest,
app_manager_impl_->OnDeviceSwitchingStart(switching_device,
non_switching_device);
- EXPECT_TRUE(app_manager_impl_->IsAppInReconnectMode(policy_app_id_switch));
+ EXPECT_TRUE(
+ app_manager_impl_->IsAppInReconnectMode(kDeviceId, policy_app_id_switch));
app_manager_impl_->OnDeviceSwitchingFinish(switching_device_id);
EXPECT_FALSE(
diff --git a/src/components/application_manager/test/policy_handler_test.cc b/src/components/application_manager/test/policy_handler_test.cc
index 458b065cdd..6bd2c7fda6 100644
--- a/src/components/application_manager/test/policy_handler_test.cc
+++ b/src/components/application_manager/test/policy_handler_test.cc
@@ -233,7 +233,7 @@ class PolicyHandlerTest : public ::testing::Test {
void TestOnPermissionsUpdated(const std::string& default_hmi_level,
const mobile_apis::HMILevel::eType hmi_level) {
- EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_))
+ EXPECT_CALL(app_manager_, application(kDeviceId, kPolicyAppId_))
.WillRepeatedly(Return(mock_app_));
EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId1_));
EXPECT_CALL(*mock_app_, hmi_level())
@@ -247,7 +247,7 @@ class PolicyHandlerTest : public ::testing::Test {
Permissions permissions;
policy_handler_.OnPermissionsUpdated(
- kPolicyAppId_, permissions, default_hmi_level);
+ kDeviceId, kPolicyAppId_, permissions, default_hmi_level);
}
void CreateFunctionalGroupPermission(
@@ -494,31 +494,31 @@ TEST_F(PolicyHandlerTest, UnloadPolicyLibrary_method_ExpectLibraryUnloaded) {
TEST_F(PolicyHandlerTest, OnPermissionsUpdated_method_With2Parameters) {
// Check expectations
- EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_))
+ EXPECT_CALL(app_manager_, application(kDeviceId, kPolicyAppId_))
.WillOnce(Return(mock_app_));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_));
EXPECT_CALL(mock_message_helper_,
SendOnPermissionsChangeNotification(kAppId1_, _, _));
// Act
Permissions perms;
- policy_handler_.OnPermissionsUpdated(kPolicyAppId_, perms);
+ policy_handler_.OnPermissionsUpdated(kDeviceId, kPolicyAppId_, perms);
}
TEST_F(PolicyHandlerTest, OnPermissionsUpdated_TwoParams_InvalidApp_UNSUCCESS) {
std::shared_ptr<application_manager_test::MockApplication> invalid_app;
- EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_))
+ EXPECT_CALL(app_manager_, application(kDeviceId, kPolicyAppId_))
.WillOnce(Return(invalid_app));
EXPECT_CALL(mock_message_helper_,
SendOnPermissionsChangeNotification(_, _, _))
.Times(0);
Permissions permissions;
- policy_handler_.OnPermissionsUpdated(kPolicyAppId_, permissions);
+ policy_handler_.OnPermissionsUpdated(kDeviceId, kPolicyAppId_, permissions);
}
TEST_F(PolicyHandlerTest, OnPermissionsUpdated_InvalidApp_UNSUCCESS) {
std::shared_ptr<application_manager_test::MockApplication> invalid_app;
- EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_))
+ EXPECT_CALL(app_manager_, application(kDeviceId, kPolicyAppId_))
.WillOnce(Return(mock_app_))
.WillOnce(Return(invalid_app));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_));
@@ -526,7 +526,8 @@ TEST_F(PolicyHandlerTest, OnPermissionsUpdated_InvalidApp_UNSUCCESS) {
SendOnPermissionsChangeNotification(kAppId1_, _, _));
Permissions permissions;
- policy_handler_.OnPermissionsUpdated(kPolicyAppId_, permissions, "HMI_FULL");
+ policy_handler_.OnPermissionsUpdated(
+ kDeviceId, kPolicyAppId_, permissions, "HMI_FULL");
}
TEST_F(PolicyHandlerTest, OnPermissionsUpdated_HmiLevelInvalidEnum_UNSUCCESS) {
@@ -544,7 +545,7 @@ TEST_F(PolicyHandlerTest,
const std::string new_kHmiLevel_string = "HMI_FULL";
mobile_apis::HMILevel::eType new_hmi_level = mobile_apis::HMILevel::HMI_FULL;
// Check expectations
- EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_))
+ EXPECT_CALL(app_manager_, application(kDeviceId, kPolicyAppId_))
.Times(2)
.WillRepeatedly(Return(mock_app_));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_));
@@ -562,7 +563,7 @@ TEST_F(PolicyHandlerTest,
// Act
Permissions perms;
policy_handler_.OnPermissionsUpdated(
- kPolicyAppId_, perms, new_kHmiLevel_string);
+ kDeviceId, kPolicyAppId_, perms, new_kHmiLevel_string);
}
TEST_F(PolicyHandlerTest,
@@ -572,7 +573,7 @@ TEST_F(PolicyHandlerTest,
mobile_apis::HMILevel::eType new_hmi_level =
mobile_apis::HMILevel::HMI_LIMITED;
// Check expectations
- EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_))
+ EXPECT_CALL(app_manager_, application(kDeviceId, kPolicyAppId_))
.Times(2)
.WillRepeatedly(Return(mock_app_));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_));
@@ -590,7 +591,7 @@ TEST_F(PolicyHandlerTest,
// Act
Permissions perms;
policy_handler_.OnPermissionsUpdated(
- kPolicyAppId_, perms, new_kHmiLevel_string);
+ kDeviceId, kPolicyAppId_, perms, new_kHmiLevel_string);
}
TEST_F(PolicyHandlerTest,
@@ -599,7 +600,7 @@ TEST_F(PolicyHandlerTest,
std::string new_kHmiLevel_string = "HMI_FULL";
mobile_apis::HMILevel::eType new_hmi_level = mobile_apis::HMILevel::HMI_FULL;
// Check expectations
- EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_))
+ EXPECT_CALL(app_manager_, application(kDeviceId, kPolicyAppId_))
.Times(2)
.WillRepeatedly(Return(mock_app_));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_));
@@ -615,7 +616,7 @@ TEST_F(PolicyHandlerTest,
// Act
Permissions perms;
policy_handler_.OnPermissionsUpdated(
- kPolicyAppId_, perms, new_kHmiLevel_string);
+ kDeviceId, kPolicyAppId_, perms, new_kHmiLevel_string);
}
TEST_F(PolicyHandlerTest, GetPriority) {
@@ -639,16 +640,9 @@ TEST_F(PolicyHandlerTest, CheckPermissions) {
EXPECT_CALL(*mock_app_, hmi_level()).WillOnce(Return(hmi_level));
EXPECT_CALL(*mock_app_, device()).WillOnce(Return(device));
EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId_));
-#ifdef EXTERNAL_PROPRIETARY_MODE
- EXPECT_CALL(
- *mock_policy_manager_,
- CheckPermissions(kPolicyAppId_, kHmiLevel_, kRpc_, kRpc_params, _));
-
-#else // EXTERNAL_PROPRIETARY_MODE
EXPECT_CALL(*mock_policy_manager_,
CheckPermissions(
kDeviceId, kPolicyAppId_, kHmiLevel_, kRpc_, kRpc_params, _));
-#endif // EXTERNAL_PROPRIETARY_MODE
EXPECT_CALL(mock_message_helper_, StringifiedHMILevel(hmi_level))
.WillOnce(Return(kHmiLevel_));
EXPECT_CALL(mock_message_helper_, GetDeviceMacAddressForHandle(device, _))
@@ -681,9 +675,9 @@ TEST_F(PolicyHandlerTest, GetDefaultHmi) {
EnablePolicyAndPolicyManagerMock();
// Check expectations
EXPECT_CALL(*mock_policy_manager_,
- GetDefaultHmi(kPolicyAppId_, &default_hmi_));
+ GetDefaultHmi(kDeviceId_, kPolicyAppId_, &default_hmi_));
// Act
- policy_handler_.GetDefaultHmi(kPolicyAppId_, &default_hmi_);
+ policy_handler_.GetDefaultHmi(kDeviceId_, kPolicyAppId_, &default_hmi_);
}
TEST_F(PolicyHandlerTest, GetInitialAppData) {
@@ -882,12 +876,14 @@ void PolicyHandlerTest::TestActivateApp(const uint32_t connection_key,
#endif // EXTERNAL_PROPRIETARY_MODE
EXPECT_CALL(*application1, policy_app_id()).WillOnce(Return(kPolicyAppId_));
- EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_))
+ EXPECT_CALL(*mock_policy_manager_,
+ GetAppPermissionsChanges(kMacAddr_, kPolicyAppId_))
.WillOnce(Return(permissions));
ON_CALL(*mock_policy_manager_, Increment(_, _)).WillByDefault(Return());
EXPECT_CALL(*mock_policy_manager_, RemovePendingPermissionChanges(_));
EXPECT_CALL(mock_message_helper_, SendSDLActivateAppResponse(_, _, _));
ON_CALL(*application1, app_id()).WillByDefault(Return(kAppId1_));
+ ON_CALL(*application1, mac_address()).WillByDefault(ReturnRef(kMacAddr_));
// Act
policy_handler_.OnActivateApp(connection_key, correlation_id);
}
@@ -936,12 +932,14 @@ TEST_F(PolicyHandlerTest, OnActivateApp_AppIsRevoked_AppNotActivated) {
// Check expectations
EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId_));
- EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_))
+ EXPECT_CALL(*mock_policy_manager_,
+ GetAppPermissionsChanges(kDefaultId, kPolicyAppId_))
.WillOnce(Return(permissions));
ON_CALL(*mock_policy_manager_, Increment(_, _)).WillByDefault(Return());
EXPECT_CALL(*mock_policy_manager_, RemovePendingPermissionChanges(_));
EXPECT_CALL(mock_message_helper_, SendSDLActivateAppResponse(_, _, _));
ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId1_));
+ ON_CALL(*mock_app_, mac_address()).WillByDefault(ReturnRef(kDefaultId));
// Act
policy_handler_.OnActivateApp(kConnectionKey_, kCorrelationKey_);
}
@@ -963,8 +961,7 @@ void PolicyHandlerTest::OnPendingPermissionChangePrecondition(
std::shared_ptr<application_manager_test::MockApplication> application =
std::make_shared<application_manager_test::MockApplication>();
- EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_))
- .WillOnce(Return(application));
+ EXPECT_CALL(app_manager_, application(_, _)).WillOnce(Return(application));
EXPECT_CALL(*application, app_id()).WillRepeatedly(Return(kAppId1_));
EXPECT_CALL(*application, hmi_level()).WillRepeatedly(Return(hmi_level));
}
@@ -980,13 +977,13 @@ TEST_F(PolicyHandlerTest,
EXPECT_CALL(mock_message_helper_,
SendOnAppPermissionsChangedNotification(kAppId1_, _, _))
.Times(0);
-
- EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_))
+ EXPECT_CALL(*mock_policy_manager_,
+ GetAppPermissionsChanges(kDeviceId_, kPolicyAppId_))
.WillOnce(Return(permissions));
EXPECT_CALL(*mock_policy_manager_,
RemovePendingPermissionChanges(kPolicyAppId_));
// Act
- policy_handler_.OnPendingPermissionChange(kPolicyAppId_);
+ policy_handler_.OnPendingPermissionChange(kDeviceId_, kPolicyAppId_);
}
TEST_F(PolicyHandlerTest, OnPendingPermissionChange_AppInLimitedConsentNeeded) {
@@ -998,12 +995,13 @@ TEST_F(PolicyHandlerTest, OnPendingPermissionChange_AppInLimitedConsentNeeded) {
// Check expectations
EXPECT_CALL(mock_message_helper_,
SendOnAppPermissionsChangedNotification(kAppId1_, _, _));
- EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_))
+ EXPECT_CALL(*mock_policy_manager_,
+ GetAppPermissionsChanges(kDeviceId_, kPolicyAppId_))
.WillOnce(Return(permissions));
EXPECT_CALL(*mock_policy_manager_,
RemovePendingPermissionChanges(kPolicyAppId_));
// Act
- policy_handler_.OnPendingPermissionChange(kPolicyAppId_);
+ policy_handler_.OnPendingPermissionChange(kDeviceId_, kPolicyAppId_);
}
TEST_F(PolicyHandlerTest, OnPendingPermissionChange_AppLimitedAndRevoked) {
@@ -1025,12 +1023,13 @@ TEST_F(PolicyHandlerTest, OnPendingPermissionChange_AppLimitedAndRevoked) {
mobile_apis::VideoStreamingState::NOT_STREAMABLE,
true));
- EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_))
+ EXPECT_CALL(*mock_policy_manager_,
+ GetAppPermissionsChanges(kDeviceId_, kPolicyAppId_))
.WillOnce(Return(permissions));
EXPECT_CALL(*mock_policy_manager_,
RemovePendingPermissionChanges(kPolicyAppId_));
// Act
- policy_handler_.OnPendingPermissionChange(kPolicyAppId_);
+ policy_handler_.OnPendingPermissionChange(kDeviceId_, kPolicyAppId_);
}
TEST_F(PolicyHandlerTest, OnPendingPermissionChange_AppInBackgroundAndRevoked) {
@@ -1044,12 +1043,13 @@ TEST_F(PolicyHandlerTest, OnPendingPermissionChange_AppInBackgroundAndRevoked) {
EXPECT_CALL(mock_message_helper_,
SendOnAppPermissionsChangedNotification(kAppId1_, _, _));
- EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_))
+ EXPECT_CALL(*mock_policy_manager_,
+ GetAppPermissionsChanges(kDeviceId_, kPolicyAppId_))
.WillOnce(Return(permissions));
EXPECT_CALL(*mock_policy_manager_,
RemovePendingPermissionChanges(kPolicyAppId_));
// Act
- policy_handler_.OnPendingPermissionChange(kPolicyAppId_);
+ policy_handler_.OnPendingPermissionChange(kDeviceId_, kPolicyAppId_);
}
TEST_F(PolicyHandlerTest,
@@ -1066,7 +1066,8 @@ TEST_F(PolicyHandlerTest,
EXPECT_CALL(mock_message_helper_,
SendOnAppPermissionsChangedNotification(kAppId1_, _, _));
- EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_))
+ EXPECT_CALL(*mock_policy_manager_,
+ GetAppPermissionsChanges(kDeviceId_, kPolicyAppId_))
.WillOnce(Return(permissions));
EXPECT_CALL(mock_message_helper_,
@@ -1083,7 +1084,7 @@ TEST_F(PolicyHandlerTest,
RemovePendingPermissionChanges(kPolicyAppId_));
// Act
- policy_handler_.OnPendingPermissionChange(kPolicyAppId_);
+ policy_handler_.OnPendingPermissionChange(kDeviceId_, kPolicyAppId_);
}
TEST_F(PolicyHandlerTest,
@@ -1096,13 +1097,14 @@ TEST_F(PolicyHandlerTest,
EXPECT_CALL(mock_message_helper_,
SendOnAppPermissionsChangedNotification(kAppId1_, _, _));
- EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_))
+ EXPECT_CALL(*mock_policy_manager_,
+ GetAppPermissionsChanges(kDeviceId_, kPolicyAppId_))
.WillOnce(Return(permissions));
EXPECT_CALL(*mock_policy_manager_,
RemovePendingPermissionChanges(kPolicyAppId_));
- policy_handler_.OnPendingPermissionChange(kPolicyAppId_);
+ policy_handler_.OnPendingPermissionChange(kDeviceId_, kPolicyAppId_);
}
TEST_F(PolicyHandlerTest,
@@ -1121,7 +1123,8 @@ TEST_F(PolicyHandlerTest,
SendOnAppPermissionsChangedNotification(kAppId1_, _, _))
.Times(0);
- EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_))
+ EXPECT_CALL(*mock_policy_manager_,
+ GetAppPermissionsChanges(kDeviceId_, kPolicyAppId_))
.WillOnce(Return(permissions));
EXPECT_CALL(mock_message_helper_,
@@ -1138,7 +1141,7 @@ TEST_F(PolicyHandlerTest,
RemovePendingPermissionChanges(kPolicyAppId_));
// Act
- policy_handler_.OnPendingPermissionChange(kPolicyAppId_);
+ policy_handler_.OnPendingPermissionChange(kDeviceId_, kPolicyAppId_);
}
TEST_F(PolicyHandlerTest, PTExchangeAtUserRequest) {
@@ -1234,7 +1237,7 @@ TEST_F(PolicyHandlerTest, OnCurrentDeviceIdUpdateRequired) {
// Check expectations
std::shared_ptr<application_manager_test::MockApplication> application =
std::make_shared<application_manager_test::MockApplication>();
- EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_))
+ EXPECT_CALL(app_manager_, application(kDeviceId_, kPolicyAppId_))
.WillOnce(Return(application));
EXPECT_CALL(app_manager_, connection_handler())
.WillOnce(ReturnRef(conn_handler));
@@ -1251,10 +1254,11 @@ TEST_F(PolicyHandlerTest, OnCurrentDeviceIdUpdateRequired) {
_,
_,
_,
- _));
+ _))
+ .WillOnce(DoAll(SetArgPointee<3>(kDeviceId_), Return(0)));
// Act
- policy_handler_.OnCurrentDeviceIdUpdateRequired(kPolicyAppId_);
+ policy_handler_.OnCurrentDeviceIdUpdateRequired(handle, kPolicyAppId_);
}
TEST_F(PolicyHandlerTest, OnSystemInfoChanged) {
@@ -1303,11 +1307,17 @@ TEST_F(PolicyHandlerTest, GetAppRequestTypes) {
// Arrange
EnablePolicy();
ChangePolicyManagerToMock();
- // Check expectations
+ const transport_manager::DeviceHandle handle = 0u;
+// Check expectations
+#ifdef EXTERNAL_PROPRIETARY_MODE
+ EXPECT_CALL(*mock_policy_manager_, GetAppRequestTypes(handle, kPolicyAppId_))
+ .WillOnce(Return(std::vector<std::string>()));
+#else
EXPECT_CALL(*mock_policy_manager_, GetAppRequestTypes(kPolicyAppId_))
.WillOnce(Return(std::vector<std::string>()));
+#endif
// Act
- policy_handler_.GetAppRequestTypes(kPolicyAppId_);
+ policy_handler_.GetAppRequestTypes(handle, kPolicyAppId_);
}
TEST_F(PolicyHandlerTest, OnVIIsReady) {
@@ -1376,13 +1386,14 @@ TEST_F(PolicyHandlerTest, SendOnAppPermissionsChanged) {
std::shared_ptr<application_manager_test::MockApplication> application =
std::make_shared<application_manager_test::MockApplication>();
// Check expectations
- EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_))
+ EXPECT_CALL(app_manager_, application(kDeviceId_, kPolicyAppId_))
.WillOnce(Return(application));
EXPECT_CALL(mock_message_helper_,
SendOnAppPermissionsChangedNotification(_, _, _));
AppPermissions permissions(kPolicyAppId_);
// Act
- policy_handler_.SendOnAppPermissionsChanged(permissions, kPolicyAppId_);
+ policy_handler_.SendOnAppPermissionsChanged(
+ permissions, kDeviceId_, kPolicyAppId_);
}
TEST_F(PolicyHandlerTest, OnPTExchangeNeeded) {
@@ -1400,11 +1411,12 @@ TEST_F(PolicyHandlerTest, AddApplication) {
// Check expectations
EXPECT_CALL(
*mock_policy_manager_,
- AddApplication(kPolicyAppId_, HmiTypes(policy_table::AHT_DEFAULT)))
+ AddApplication(
+ kMacAddr_, kPolicyAppId_, HmiTypes(policy_table::AHT_DEFAULT)))
.WillOnce(Return(std::make_shared<utils::CallNothing>()));
// Act
- policy_handler_.AddApplication(kPolicyAppId_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_handler_.AddApplication(
+ kMacAddr_, kPolicyAppId_, HmiTypes(policy_table::AHT_DEFAULT));
}
TEST_F(PolicyHandlerTest, HeartBeatTimeout) {
@@ -1439,9 +1451,10 @@ TEST_F(PolicyHandlerTest, OnAppRegisteredOnMobile) {
EnablePolicyAndPolicyManagerMock();
// Check expectations
- EXPECT_CALL(*mock_policy_manager_, OnAppRegisteredOnMobile(kPolicyAppId_));
+ EXPECT_CALL(*mock_policy_manager_,
+ OnAppRegisteredOnMobile(kDeviceId, kPolicyAppId_));
// Act
- policy_handler_.OnAppRegisteredOnMobile(kPolicyAppId_);
+ policy_handler_.OnAppRegisteredOnMobile(kDeviceId, kPolicyAppId_);
}
TEST_F(PolicyHandlerTest, IsRequestTypeAllowed) {
@@ -1452,13 +1465,20 @@ TEST_F(PolicyHandlerTest, IsRequestTypeAllowed) {
mobile_apis::RequestType::eType type =
mobile_apis::RequestType::eType::EMERGENCY;
+ const transport_manager::DeviceHandle handle = 0u;
+
EXPECT_CALL(*mock_policy_manager_, GetAppRequestTypesState(kPolicyAppId_))
.WillOnce(Return(policy::RequestType::State::AVAILABLE));
-
+#ifdef EXTERNAL_PROPRIETARY_MODE
+ EXPECT_CALL(*mock_policy_manager_, GetAppRequestTypes(handle, kPolicyAppId_))
+ .WillOnce(Return(std::vector<std::string>({"HTTP"})));
+#else
EXPECT_CALL(*mock_policy_manager_, GetAppRequestTypes(kPolicyAppId_))
.WillOnce(Return(std::vector<std::string>({"HTTP"})));
+#endif
// Act
- EXPECT_FALSE(policy_handler_.IsRequestTypeAllowed(kPolicyAppId_, type));
+ EXPECT_FALSE(
+ policy_handler_.IsRequestTypeAllowed(handle, kPolicyAppId_, type));
}
TEST_F(PolicyHandlerTest, IsRequestSubTypeAllowed) {
@@ -1848,8 +1868,9 @@ TEST_F(PolicyHandlerTest, OnDeviceConsentChanged_ConsentAllowed) {
connection_handler::DeviceHandle test_device_id = 100u;
EXPECT_CALL(app_manager_, connection_handler())
.WillOnce(ReturnRef(conn_handler));
+ EXPECT_CALL(app_manager_, applications()).WillRepeatedly(Return(app_set));
- EXPECT_CALL(conn_handler, GetDeviceID(kPolicyAppId_, _))
+ EXPECT_CALL(conn_handler, GetDeviceID(kDeviceId, _))
.WillOnce(DoAll(SetArgPointee<1>(test_device_id), Return(true)));
test_app.insert(mock_app_);
@@ -1859,12 +1880,13 @@ TEST_F(PolicyHandlerTest, OnDeviceConsentChanged_ConsentAllowed) {
EXPECT_CALL(*mock_policy_manager_, IsPredataPolicy(kPolicyAppId_))
.WillOnce(Return(true));
+ EXPECT_CALL(
+ *mock_policy_manager_,
+ ReactOnUserDevConsentForApp(test_device_id, kPolicyAppId_, is_allowed));
EXPECT_CALL(*mock_policy_manager_,
- ReactOnUserDevConsentForApp(kPolicyAppId_, is_allowed));
- EXPECT_CALL(*mock_policy_manager_,
- SendNotificationOnPermissionsUpdated(kPolicyAppId_));
+ SendNotificationOnPermissionsUpdated(kDeviceId, kPolicyAppId_));
- policy_handler_.OnDeviceConsentChanged(kPolicyAppId_, is_allowed);
+ policy_handler_.OnDeviceConsentChanged(kDeviceId, is_allowed);
}
TEST_F(PolicyHandlerTest, OnDeviceConsentChanged_ConsentNotAllowed) {
@@ -1872,27 +1894,29 @@ TEST_F(PolicyHandlerTest, OnDeviceConsentChanged_ConsentNotAllowed) {
// Arrange
EnablePolicyAndPolicyManagerMock();
- connection_handler::DeviceHandle test_device_id = 100u;
+ connection_handler::DeviceHandle handle = 100u;
EXPECT_CALL(app_manager_, connection_handler())
.WillOnce(ReturnRef(conn_handler));
// Check expectations
- EXPECT_CALL(conn_handler, GetDeviceID(kPolicyAppId_, _))
- .WillOnce(DoAll(SetArgPointee<1>(test_device_id), Return(true)));
+ EXPECT_CALL(conn_handler, GetDeviceID(kMacAddr_, _))
+ .WillOnce(DoAll(SetArgPointee<1>(handle), Return(true)));
test_app.insert(mock_app_);
- EXPECT_CALL(*mock_app_, device()).WillOnce(Return(test_device_id));
+ EXPECT_CALL(*mock_app_, device()).WillOnce(Return(handle));
EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId_));
EXPECT_CALL(*mock_policy_manager_, IsPredataPolicy(kPolicyAppId_))
.WillOnce(Return(true));
- EXPECT_CALL(*mock_policy_manager_, ReactOnUserDevConsentForApp(_, _))
+ EXPECT_CALL(*mock_policy_manager_,
+ ReactOnUserDevConsentForApp(handle, kPolicyAppId_, is_allowed))
.Times(0);
- EXPECT_CALL(*mock_policy_manager_, SendNotificationOnPermissionsUpdated(_))
+ EXPECT_CALL(*mock_policy_manager_,
+ SendNotificationOnPermissionsUpdated(kMacAddr_, kPolicyAppId_))
.Times(0);
- policy_handler_.OnDeviceConsentChanged(kPolicyAppId_, is_allowed);
+ policy_handler_.OnDeviceConsentChanged(kMacAddr_, is_allowed);
}
TEST_F(PolicyHandlerTest, OnDeviceConsentChanged_PredatePolicyNotAllowed) {
@@ -1903,8 +1927,9 @@ TEST_F(PolicyHandlerTest, OnDeviceConsentChanged_PredatePolicyNotAllowed) {
connection_handler::DeviceHandle test_device_id = 100u;
EXPECT_CALL(app_manager_, connection_handler())
.WillOnce(ReturnRef(conn_handler));
+ EXPECT_CALL(app_manager_, applications()).WillRepeatedly(Return(app_set));
- EXPECT_CALL(conn_handler, GetDeviceID(kPolicyAppId_, _))
+ EXPECT_CALL(conn_handler, GetDeviceID(kMacAddr_, _))
.WillOnce(DoAll(SetArgPointee<1>(test_device_id), Return(true)));
test_app.insert(mock_app_);
@@ -1916,12 +1941,13 @@ TEST_F(PolicyHandlerTest, OnDeviceConsentChanged_PredatePolicyNotAllowed) {
EXPECT_CALL(*mock_policy_manager_, IsPredataPolicy(kPolicyAppId_))
.WillOnce(Return(false));
+ EXPECT_CALL(
+ *mock_policy_manager_,
+ ReactOnUserDevConsentForApp(test_device_id, kPolicyAppId_, is_allowed));
EXPECT_CALL(*mock_policy_manager_,
- ReactOnUserDevConsentForApp(kPolicyAppId_, is_allowed));
- EXPECT_CALL(*mock_policy_manager_,
- SendNotificationOnPermissionsUpdated(kPolicyAppId_));
+ SendNotificationOnPermissionsUpdated(kMacAddr_, kPolicyAppId_));
- policy_handler_.OnDeviceConsentChanged(kPolicyAppId_, is_allowed);
+ policy_handler_.OnDeviceConsentChanged(kMacAddr_, is_allowed);
}
#ifdef ENABLE_SECURITY
#ifdef EXTERNAL_PROPRIETARY_MODE
diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h
index 521eadf48e..e03fdcfb94 100644
--- a/src/components/include/application_manager/application_manager.h
+++ b/src/components/include/application_manager/application_manager.h
@@ -94,9 +94,12 @@ class StateControllerImpl;
struct CommandParametersPermissions;
using policy::RPCParams;
typedef std::vector<ApplicationSharedPtr> AppSharedPtrs;
-struct ApplicationsAppIdSorter {
+struct ApplicationsSorter {
bool operator()(const ApplicationSharedPtr lhs,
const ApplicationSharedPtr rhs) const {
+ if (lhs->app_id() == rhs->app_id()) {
+ return lhs->device() < rhs->device();
+ }
return lhs->app_id() < rhs->app_id();
}
};
@@ -110,7 +113,7 @@ struct ApplicationsPolicyAppIdSorter {
}
};
-typedef std::set<ApplicationSharedPtr, ApplicationsAppIdSorter> ApplicationSet;
+typedef std::set<ApplicationSharedPtr, ApplicationsSorter> ApplicationSet;
typedef std::set<ApplicationSharedPtr, ApplicationsPolicyAppIdSorter>
AppsWaitRegistrationSet;
@@ -635,11 +638,14 @@ class ApplicationManager {
/**
* @brief IsAppInReconnectMode check if application belongs to session
* affected by transport switching at the moment
+ * @param device_id device indentifier
* @param policy_app_id Application id
* @return True if application is registered within session being switched,
* otherwise - false
*/
- virtual bool IsAppInReconnectMode(const std::string& policy_app_id) const = 0;
+ virtual bool IsAppInReconnectMode(
+ const connection_handler::DeviceHandle& device_id,
+ const std::string& policy_app_id) const = 0;
virtual resumption::ResumeCtrl& resume_controller() = 0;
diff --git a/src/components/include/application_manager/policies/policy_handler_interface.h b/src/components/include/application_manager/policies/policy_handler_interface.h
index 835ddedd28..3387ed2fc6 100644
--- a/src/components/include/application_manager/policies/policy_handler_interface.h
+++ b/src/components/include/application_manager/policies/policy_handler_interface.h
@@ -71,11 +71,12 @@ class PolicyHandlerInterface {
virtual bool ReceiveMessageFromSDK(const std::string& file,
const BinaryMessage& pt_string) = 0;
virtual bool UnloadPolicyLibrary() = 0;
- virtual void OnPermissionsUpdated(const std::string& policy_app_id,
+ virtual void OnPermissionsUpdated(const std::string& device_id,
+ const std::string& policy_app_id,
const Permissions& permissions,
const HMILevel& default_hmi) = 0;
-
- virtual void OnPermissionsUpdated(const std::string& policy_app_id,
+ virtual void OnPermissionsUpdated(const std::string& device_id,
+ const std::string& policy_app_id,
const Permissions& permissions) = 0;
#ifdef EXTERNAL_PROPRIETARY_MODE
@@ -98,7 +99,8 @@ class PolicyHandlerInterface {
const std::string& priority) const = 0;
virtual DeviceConsent GetUserConsentForDevice(
const std::string& device_id) const = 0;
- virtual bool GetDefaultHmi(const std::string& policy_app_id,
+ virtual bool GetDefaultHmi(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi) const = 0;
virtual bool GetInitialAppData(const std::string& application_id,
StringArray* nicknames = NULL,
@@ -137,6 +139,7 @@ class PolicyHandlerInterface {
virtual void SendOnAppPermissionsChanged(
const AppPermissions& permissions,
+ const std::string& device_id,
const std::string& policy_app_id) const = 0;
/**
@@ -176,7 +179,8 @@ class PolicyHandlerInterface {
*/
virtual void OnIgnitionCycleOver() = 0;
- virtual void OnPendingPermissionChange(const std::string& policy_app_id) = 0;
+ virtual void OnPendingPermissionChange(const std::string& device_id,
+ const std::string& policy_app_id) = 0;
/**
* Initializes PT exchange at user request
@@ -255,9 +259,11 @@ class PolicyHandlerInterface {
/**
* @brief Update currently used device id in policies manager for given
* application
+ * @param device_handle device identifier
* @param policy_app_id Application id
*/
virtual std::string OnCurrentDeviceIdUpdateRequired(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) = 0;
/**
@@ -342,10 +348,12 @@ class PolicyHandlerInterface {
/**
* @brief Allows to add new or update existed application during
* registration process
+ * @param device_id device identifier
* @param application_id The policy aplication id.
* @return function that will notify update manager about new application
*/
virtual StatusNotifier AddApplication(
+ const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) = 0;
@@ -384,17 +392,21 @@ class PolicyHandlerInterface {
* succesfully registered on mobile device.
* It will send OnAppPermissionSend notification and will try to start PTU.
*
+ * @param device_id device identifier
* @param application_id registered application.
*/
- virtual void OnAppRegisteredOnMobile(const std::string& application_id) = 0;
+ virtual void OnAppRegisteredOnMobile(const std::string& device_id,
+ const std::string& application_id) = 0;
/**
* @brief Checks if certain request type is allowed for application
+ * @param device_handle device identifier
* @param policy_app_id Unique applicaion id
* @param type Request type
* @return true, if allowed, otherwise - false
*/
virtual bool IsRequestTypeAllowed(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id,
mobile_apis::RequestType::eType type) const = 0;
@@ -426,10 +438,12 @@ class PolicyHandlerInterface {
/**
* @brief Gets application request types
+ * @param device_handle device identifier
* @param policy_app_id Unique application id
* @return request types
*/
virtual const std::vector<std::string> GetAppRequestTypes(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) const = 0;
/**
@@ -565,10 +579,12 @@ class PolicyHandlerInterface {
/**
* @brief Sets HMI default type for specified application
+ * @param device_handle device identifier
* @param application_id ID application
* @param app_types list of HMI types
*/
virtual void SetDefaultHmiTypes(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& application_id,
const smart_objects::SmartObject* app_types) = 0;
diff --git a/src/components/include/policy/policy_external/policy/policy_listener.h b/src/components/include/policy/policy_external/policy/policy_listener.h
index c64a6d5496..8203f5c9b6 100644
--- a/src/components/include/policy/policy_external/policy/policy_listener.h
+++ b/src/components/include/policy/policy_external/policy/policy_listener.h
@@ -45,14 +45,18 @@ namespace custom_str = utils::custom_string;
class PolicyListener {
public:
virtual ~PolicyListener() {}
- virtual void OnPermissionsUpdated(const std::string& policy_app_id,
+ virtual void OnPermissionsUpdated(const std::string& device_id,
+ const std::string& policy_app_id,
const Permissions& permissions,
const policy::HMILevel& default_hmi) = 0;
- virtual void OnPermissionsUpdated(const std::string& policy_app_id,
+ virtual void OnPermissionsUpdated(const std::string& device_id,
+ const std::string& policy_app_id,
const Permissions& permissions) = 0;
- virtual void OnPendingPermissionChange(const std::string& policy_app_id) = 0;
+ virtual void OnPendingPermissionChange(const std::string& device_id,
+ const std::string& policy_app_id) = 0;
virtual void OnUpdateStatusChanged(const std::string&) = 0;
virtual std::string OnCurrentDeviceIdUpdateRequired(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) = 0;
virtual void OnSystemInfoUpdateRequired() = 0;
virtual custom_str::CustomString GetAppName(
@@ -95,10 +99,12 @@ class PolicyListener {
/**
* @brief Sends OnAppPermissionsChanged notification to HMI
* @param permissions contains parameter for OnAppPermisionChanged
+ * @param device_id device identifier
* @param policy_app_id contains policy application id
*/
virtual void SendOnAppPermissionsChanged(
const AppPermissions& permissions,
+ const std::string& device_id,
const std::string& policy_app_id) const = 0;
/**
@@ -146,7 +152,7 @@ class PolicyListener {
* @return list devices ids
*/
virtual std::vector<std::string> GetDevicesIds(
- const std::string& policy_app_id) = 0;
+ const std::string& policy_app_id) const = 0;
/**
* Notifies about changing HMI level
diff --git a/src/components/include/policy/policy_external/policy/policy_manager.h b/src/components/include/policy/policy_external/policy/policy_manager.h
index aecc4b607a..c6f0202d59 100644
--- a/src/components/include/policy/policy_external/policy/policy_manager.h
+++ b/src/components/include/policy/policy_external/policy/policy_manager.h
@@ -133,6 +133,7 @@ class PolicyManager : public usage_statistics::StatisticsManager {
* @brief Check if specified RPC for specified application
* has permission to be executed in specified HMI Level
* and also its permitted params.
+ * @param device_id device identifier
* @param app_id Id of application provided during registration
* @param hmi_level Current HMI Level of application
* @param rpc Name of RPC
@@ -140,7 +141,8 @@ class PolicyManager : public usage_statistics::StatisticsManager {
* @param CheckPermissionResult containing flag if HMI Level is allowed
* and list of allowed params.
*/
- virtual void CheckPermissions(const PTString& app_id,
+ virtual void CheckPermissions(const PTString& device_id,
+ const PTString& app_id,
const PTString& hmi_level,
const PTString& rpc,
const RPCParams& rpc_params,
@@ -265,12 +267,15 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Update Application Policies as reaction
* on User allowing/disallowing device this app is running on.
+ * @param device_handle device identifier
* @param app_id Unique application id
* @param is_device_allowed true if user allowing device otherwise false
* @return true if operation was successful
*/
- virtual bool ReactOnUserDevConsentForApp(const std::string& app_id,
- const bool is_device_allowed) = 0;
+ virtual bool ReactOnUserDevConsentForApp(
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string& app_id,
+ const bool is_device_allowed) = 0;
/**
* @brief Sets counter value that passed for receiving PT UPdate.
@@ -318,12 +323,14 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Get default HMI level for application
+ * @param device_id device identifier
* @param policy_app_id Unique application id
* @param default_hmi Default HMI level for application or empty, if value
* was not set
* @return true, if succedeed, otherwise - false
*/
- virtual bool GetDefaultHmi(const std::string& policy_app_id,
+ virtual bool GetDefaultHmi(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi) const = 0;
/**
@@ -369,11 +376,12 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Gets specific application permissions changes since last policy
* table update
+ * @param device_id device identifier
* @param policy_app_id Unique application id
* @return Permissions changes
*/
virtual AppPermissions GetAppPermissionsChanges(
- const std::string& policy_app_id) = 0;
+ const std::string& device_id, const std::string& policy_app_id) = 0;
/**
* @brief Removes specific application permissions changes
@@ -383,9 +391,11 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Return device id, which hosts specific application
+ * @param device_handle device identifier
* @param policy_app_id Application id, which is required to update device id
*/
virtual std::string& GetCurrentDeviceId(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) const = 0;
/**
@@ -406,10 +416,11 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Send OnPermissionsUpdated for choosen application
+ * @param device_id device identifier
* @param application_id Unique application id
*/
virtual void SendNotificationOnPermissionsUpdated(
- const std::string& application_id) = 0;
+ const std::string& device_id, const std::string& application_id) = 0;
/**
* @brief Marks device as upaired
@@ -420,11 +431,13 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Adds, application to the db or update existed one
* run PTU if policy update is necessary for application.
+ * @param device_id device identifier
* @param application_id Unique application id
* @param hmi_types application HMI types
* @return function that will notify update manager about new application
*/
virtual StatusNotifier AddApplication(
+ const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) = 0;
@@ -504,10 +517,13 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief OnAppRegisteredOnMobile allows to handle event when application were
* succesfully registered on mobile device.
- * It will send OnAppPermissionSend notification and will try to start PTU. *
+ * It will send OnAppPermissionSend notification and will try to start PTU.
+ *
+ * @param device_id device identifier
* @param application_id registered application.
*/
- virtual void OnAppRegisteredOnMobile(const std::string& application_id) = 0;
+ virtual void OnAppRegisteredOnMobile(const std::string& device_id,
+ const std::string& application_id) = 0;
virtual void OnDeviceSwitching(const std::string& device_id_from,
const std::string& device_id_to) = 0;
@@ -530,10 +546,12 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Gets request types for application
+ * @param device_handle device identifier
* @param policy_app_id Unique application id
* @return request types of application
*/
virtual const std::vector<std::string> GetAppRequestTypes(
+ const transport_manager::DeviceHandle& device_handle,
const std::string policy_app_id) const = 0;
/**
@@ -694,11 +712,14 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Assigns new HMI types for specified application
+ * @param device_handle device identifier
* @param application_id Unique application id
* @param hmi_types new HMI types list
*/
- virtual void SetDefaultHmiTypes(const std::string& application_id,
- const std::vector<int>& hmi_types) = 0;
+ virtual void SetDefaultHmiTypes(
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string& application_id,
+ const std::vector<int>& hmi_types) = 0;
/**
* @brief Gets HMI types
* @param application_id ID application
diff --git a/src/components/include/policy/policy_regular/policy/policy_listener.h b/src/components/include/policy/policy_regular/policy/policy_listener.h
index f12bb2e85f..d717822cac 100644
--- a/src/components/include/policy/policy_regular/policy/policy_listener.h
+++ b/src/components/include/policy/policy_regular/policy/policy_listener.h
@@ -45,14 +45,18 @@ namespace custom_str = utils::custom_string;
class PolicyListener {
public:
virtual ~PolicyListener() {}
- virtual void OnPermissionsUpdated(const std::string& policy_app_id,
+ virtual void OnPermissionsUpdated(const std::string& device_id,
+ const std::string& policy_app_id,
const Permissions& permissions,
const policy::HMILevel& default_hmi) = 0;
- virtual void OnPermissionsUpdated(const std::string& policy_app_id,
+ virtual void OnPermissionsUpdated(const std::string& device_id,
+ const std::string& policy_app_id,
const Permissions& permissions) = 0;
- virtual void OnPendingPermissionChange(const std::string& policy_app_id) = 0;
+ virtual void OnPendingPermissionChange(const std::string& device_id,
+ const std::string& policy_app_id) = 0;
virtual void OnUpdateStatusChanged(const std::string&) = 0;
virtual std::string OnCurrentDeviceIdUpdateRequired(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) = 0;
virtual void OnSystemInfoUpdateRequired() = 0;
virtual custom_str::CustomString GetAppName(
@@ -93,10 +97,12 @@ class PolicyListener {
/**
* @brief Sends OnAppPermissionsChanged notification to HMI
* @param permissions contains parameter for OnAppPermisionChanged
+ * @param device_id device identifier
* @param policy_app_id contains policy application id
*/
virtual void SendOnAppPermissionsChanged(
const AppPermissions& permissions,
+ const std::string& device_id,
const std::string& policy_app_id) const = 0;
/**
@@ -128,7 +134,7 @@ class PolicyListener {
* @return list devices ids
*/
virtual std::vector<std::string> GetDevicesIds(
- const std::string& policy_app_id) = 0;
+ const std::string& policy_app_id) const = 0;
/**
* Notifies about changing HMI level
diff --git a/src/components/include/policy/policy_regular/policy/policy_manager.h b/src/components/include/policy/policy_regular/policy/policy_manager.h
index 713f71dcdb..c1547da760 100644
--- a/src/components/include/policy/policy_regular/policy/policy_manager.h
+++ b/src/components/include/policy/policy_regular/policy/policy_manager.h
@@ -260,12 +260,15 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Update Application Policies as reaction
* on User allowing/disallowing device this app is running on.
+ * @param device_handle device identifier
* @param app_id Unique application id
* @param is_device_allowed true if user allowing device otherwise false
* @return true if operation was successful
*/
- virtual bool ReactOnUserDevConsentForApp(const std::string app_id,
- bool is_device_allowed) = 0;
+ virtual bool ReactOnUserDevConsentForApp(
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string app_id,
+ bool is_device_allowed) = 0;
/**
* @brief Sets counter value that passed for receiving PT UPdate.
@@ -311,12 +314,14 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Get default HMI level for application
+ * @param device_id device identifier
* @param policy_app_id Unique application id
* @param default_hmi Default HMI level for application or empty, if value
* was not set
* @return true, if succedeed, otherwise - false
*/
- virtual bool GetDefaultHmi(const std::string& policy_app_id,
+ virtual bool GetDefaultHmi(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi) const = 0;
/**
@@ -360,11 +365,12 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Gets specific application permissions changes since last policy
* table update
+ * @param device_id device identifier
* @param policy_app_id Unique application id
* @return Permissions changes
*/
virtual AppPermissions GetAppPermissionsChanges(
- const std::string& policy_app_id) = 0;
+ const std::string& device_id, const std::string& policy_app_id) = 0;
/**
* @brief Removes specific application permissions changes
@@ -374,9 +380,11 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Return device id, which hosts specific application
+ * @param device_handle device identifier
* @param policy_app_id Application id, which is required to update device id
*/
virtual std::string& GetCurrentDeviceId(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) const = 0;
/**
@@ -397,10 +405,11 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Send OnPermissionsUpdated for choosen application
+ * @param device_id device identifier
* @param application_id Unique application id
*/
virtual void SendNotificationOnPermissionsUpdated(
- const std::string& application_id) = 0;
+ const std::string& device_id, const std::string& application_id) = 0;
/**
* @brief Marks device as upaired
@@ -411,11 +420,13 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Adds, application to the db or update existed one
* run PTU if policy update is necessary for application.
+ * @param device_id device identifier
* @param application_id Unique application id
* @param hmi_types application HMI types
* @return function that will notify update manager about new application
*/
virtual StatusNotifier AddApplication(
+ const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) = 0;
@@ -636,10 +647,13 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief OnAppRegisteredOnMobile allows to handle event when application were
* succesfully registered on mobile device.
- * It will send OnAppPermissionSend notification and will try to start PTU. *
+ * It will send OnAppPermissionSend notification and will try to start PTU.
+ *
+ * @param device_id device identifier
* @param application_id registered application.
*/
- virtual void OnAppRegisteredOnMobile(const std::string& application_id) = 0;
+ virtual void OnAppRegisteredOnMobile(const std::string& device_id,
+ const std::string& application_id) = 0;
virtual void OnDeviceSwitching(const std::string& device_id_from,
const std::string& device_id_to) = 0;
@@ -674,11 +688,14 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Assigns new HMI types for specified application
+ * @param device_handle device identifier
* @param application_id Unique application id
* @param hmi_types new HMI types list
*/
- virtual void SetDefaultHmiTypes(const std::string& application_id,
- const std::vector<int>& hmi_types) = 0;
+ virtual void SetDefaultHmiTypes(
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string& application_id,
+ const std::vector<int>& hmi_types) = 0;
/**
* @brief Gets HMI types
diff --git a/src/components/include/test/application_manager/mock_application_manager.h b/src/components/include/test/application_manager/mock_application_manager.h
index fcedcebcf8..1579341be7 100644
--- a/src/components/include/test/application_manager/mock_application_manager.h
+++ b/src/components/include/test/application_manager/mock_application_manager.h
@@ -335,8 +335,9 @@ class MockApplicationManager : public application_manager::ApplicationManager {
MOCK_METHOD2(ProcessReconnection,
void(application_manager::ApplicationSharedPtr application,
const uint32_t connection_key));
- MOCK_CONST_METHOD1(IsAppInReconnectMode,
- bool(const std::string& policy_app_id));
+ MOCK_CONST_METHOD2(IsAppInReconnectMode,
+ bool(const connection_handler::DeviceHandle& device_id,
+ const std::string& policy_app_id));
MOCK_CONST_METHOD0(GetCommandFactory, application_manager::CommandFactory&());
MOCK_CONST_METHOD0(get_current_audio_source, uint32_t());
MOCK_METHOD1(set_current_audio_source, void(const uint32_t));
diff --git a/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h b/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h
index 342debca0a..36a9ab4c4c 100644
--- a/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h
+++ b/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h
@@ -57,12 +57,14 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
bool(const std::string& file,
const policy::BinaryMessage& pt_string));
MOCK_METHOD0(UnloadPolicyLibrary, bool());
- MOCK_METHOD3(OnPermissionsUpdated,
- void(const std::string& policy_app_id,
+ MOCK_METHOD4(OnPermissionsUpdated,
+ void(const std::string& device_id,
+ const std::string& policy_app_id,
const policy::Permissions& permissions,
const policy::HMILevel& default_hmi));
- MOCK_METHOD2(OnPermissionsUpdated,
- void(const std::string& policy_app_id,
+ MOCK_METHOD3(OnPermissionsUpdated,
+ void(const std::string& device_id,
+ const std::string& policy_app_id,
const policy::Permissions& permissions));
#ifdef EXTERNAL_PROPRIETARY_MODE
@@ -86,8 +88,9 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
uint32_t(const std::string& priority));
MOCK_CONST_METHOD1(GetUserConsentForDevice,
policy::DeviceConsent(const std::string& device_id));
- MOCK_CONST_METHOD2(GetDefaultHmi,
- bool(const std::string& policy_app_id,
+ MOCK_CONST_METHOD3(GetDefaultHmi,
+ bool(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi));
MOCK_METHOD3(GetInitialAppData,
@@ -127,8 +130,9 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
MOCK_METHOD2(OnAllowSDLFunctionalityNotification,
void(bool is_allowed, const std::string& device_id));
MOCK_METHOD0(OnIgnitionCycleOver, void());
- MOCK_METHOD1(OnPendingPermissionChange,
- void(const std::string& policy_app_id));
+ MOCK_METHOD2(OnPendingPermissionChange,
+ void(const std::string& device_id,
+ const std::string& policy_app_id));
MOCK_METHOD1(PTExchangeAtUserRequest, void(uint32_t correlation_id));
MOCK_METHOD2(AddDevice,
void(const std::string& device_id,
@@ -156,8 +160,9 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
const uint32_t correlation_id));
MOCK_METHOD1(OnGetStatusUpdate, void(const uint32_t correlation_id));
MOCK_METHOD1(OnUpdateStatusChanged, void(const std::string& status));
- MOCK_METHOD1(OnCurrentDeviceIdUpdateRequired,
- std::string(const std::string& policy_app_id));
+ MOCK_METHOD2(OnCurrentDeviceIdUpdateRequired,
+ std::string(const transport_manager::DeviceHandle& device_handle,
+ const std::string& policy_app_id));
MOCK_METHOD1(OnSystemInfoChanged, void(const std::string& language));
MOCK_METHOD3(OnGetSystemInfo,
void(const std::string& ccpu_version,
@@ -182,14 +187,16 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
MOCK_METHOD0(CanUpdate, bool());
MOCK_METHOD2(OnDeviceConsentChanged,
void(const std::string& device_id, bool is_allowed));
- MOCK_CONST_METHOD2(SendOnAppPermissionsChanged,
+ MOCK_CONST_METHOD3(SendOnAppPermissionsChanged,
void(const policy::AppPermissions& permissions,
+ const std::string& device_id,
const std::string& policy_app_id));
MOCK_METHOD0(OnPTExchangeNeeded, void());
MOCK_METHOD1(GetAvailableApps, void(std::queue<std::string>& apps));
- MOCK_METHOD2(
+ MOCK_METHOD3(
AddApplication,
policy::StatusNotifier(
+ const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types));
MOCK_METHOD1(IsApplicationRevoked, bool(const std::string& app_id));
@@ -197,10 +204,12 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
MOCK_CONST_METHOD1(HeartBeatTimeout, uint32_t(const std::string& app_id));
MOCK_METHOD0(OnAppsSearchStarted, void());
MOCK_METHOD1(OnAppsSearchCompleted, void(const bool trigger_ptu));
- MOCK_METHOD1(OnAppRegisteredOnMobile,
- void(const std::string& application_id));
- MOCK_CONST_METHOD2(IsRequestTypeAllowed,
- bool(const std::string& policy_app_id,
+ MOCK_METHOD2(OnAppRegisteredOnMobile,
+ void(const std::string& device_id,
+ const std::string& application_id));
+ MOCK_CONST_METHOD3(IsRequestTypeAllowed,
+ bool(const transport_manager::DeviceHandle& device_handle,
+ const std::string& policy_app_id,
mobile_apis::RequestType::eType type));
MOCK_CONST_METHOD2(IsRequestSubTypeAllowed,
bool(const std::string& policy_app_id,
@@ -214,9 +223,10 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
MOCK_CONST_METHOD1(
GetAppRequestSubTypes,
const std::vector<std::string>(const std::string& policy_app_id));
- MOCK_CONST_METHOD1(
- GetAppRequestTypes,
- const std::vector<std::string>(const std::string& policy_app_id));
+ MOCK_CONST_METHOD2(GetAppRequestTypes,
+ const std::vector<std::string>(
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string& policy_app_id));
MOCK_CONST_METHOD0(GetVehicleInfo, const policy::VehicleInfo());
MOCK_CONST_METHOD1(GetEnabledCloudApps,
void(std::vector<std::string>& enabled_apps));
@@ -293,8 +303,9 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
MOCK_CONST_METHOD2(GetModuleTypes,
bool(const std::string& policy_app_id,
std::vector<std::string>* modules));
- MOCK_METHOD2(SetDefaultHmiTypes,
- void(const std::string& application_id,
+ MOCK_METHOD3(SetDefaultHmiTypes,
+ void(const transport_manager::DeviceHandle& device_handle,
+ const std::string& application_id,
const smart_objects::SmartObject* app_types));
MOCK_METHOD2(OnDeviceSwitching,
void(const std::string& device_id_from,
diff --git a/src/components/include/test/policy/policy_external/policy/mock_policy_listener.h b/src/components/include/test/policy/policy_external/policy/mock_policy_listener.h
index e6ee086b31..16341ed4f4 100644
--- a/src/components/include/test/policy/policy_external/policy/mock_policy_listener.h
+++ b/src/components/include/test/policy/policy_external/policy/mock_policy_listener.h
@@ -38,6 +38,7 @@
#include <vector>
#include "gmock/gmock.h"
+#include "utils/macro.h"
#include "policy/policy_listener.h"
#include "policy/policy_table/types.h"
@@ -54,18 +55,22 @@ namespace custom_str = utils::custom_string;
class MockPolicyListener : public ::policy::PolicyListener {
public:
- MOCK_METHOD3(OnPermissionsUpdated,
- void(const std::string& policy_app_id,
+ MOCK_METHOD4(OnPermissionsUpdated,
+ void(const std::string& device_id,
+ const std::string& policy_app_id,
const policy::Permissions& permissions,
const policy::HMILevel& default_hmi));
- MOCK_METHOD2(OnPermissionsUpdated,
- void(const std::string& policy_app_id,
+ MOCK_METHOD3(OnPermissionsUpdated,
+ void(const std::string& device_id,
+ const std::string& policy_app_id,
const policy::Permissions& permissions));
- MOCK_METHOD1(OnPendingPermissionChange,
- void(const std::string& policy_app_id));
+ MOCK_METHOD2(OnPendingPermissionChange,
+ void(const std::string& device_id,
+ const std::string& policy_app_id));
MOCK_METHOD1(OnUpdateStatusChanged, void(const std::string& status));
- MOCK_METHOD1(OnCurrentDeviceIdUpdateRequired,
- std::string(const std::string& policy_app_id));
+ MOCK_METHOD2(OnCurrentDeviceIdUpdateRequired,
+ std::string(const transport_manager::DeviceHandle& device_handle,
+ const std::string& policy_app_id));
MOCK_METHOD0(OnSystemInfoUpdateRequired, void());
MOCK_METHOD1(GetAppName,
custom_str::CustomString(const std::string& policy_app_id));
@@ -85,10 +90,13 @@ class MockPolicyListener : public ::policy::PolicyListener {
void(const std::string& policy_app_id,
const std::string& auth_token));
MOCK_METHOD1(OnPTUFinished, void(const bool ptu_result));
- MOCK_CONST_METHOD2(SendOnAppPermissionsChanged,
- void(const policy::AppPermissions&, const std::string&));
- MOCK_METHOD1(GetDevicesIds,
- std::vector<std::string>(const std::string& policy_app_id));
+ MOCK_CONST_METHOD3(SendOnAppPermissionsChanged,
+ void(const policy::AppPermissions& permissions,
+ const std::string& device_id,
+ const std::string& policy_app_id));
+ MOCK_CONST_METHOD1(
+ GetDevicesIds,
+ std::vector<std::string>(const std::string& policy_app_id));
MOCK_METHOD3(OnUpdateHMILevel,
void(const std::string& device_id,
const std::string& policy_app_id,
diff --git a/src/components/include/test/policy/policy_external/policy/mock_policy_manager.h b/src/components/include/test/policy/policy_external/policy/mock_policy_manager.h
index 309e357235..5313628890 100644
--- a/src/components/include/test/policy/policy_external/policy/mock_policy_manager.h
+++ b/src/components/include/test/policy/policy_external/policy/mock_policy_manager.h
@@ -68,8 +68,9 @@ class MockPolicyManager : public PolicyManager {
void(const std::string& service_type,
EndpointUrls& out_end_points));
MOCK_METHOD0(RequestPTUpdate, void());
- MOCK_METHOD5(CheckPermissions,
- void(const PTString& app_id,
+ MOCK_METHOD6(CheckPermissions,
+ void(const PTString& device_id,
+ const PTString& app_id,
const PTString& hmi_level,
const PTString& rpc,
const RPCParams& rpc_params,
@@ -99,8 +100,10 @@ class MockPolicyManager : public PolicyManager {
std::vector<policy::FunctionalGroupPermission>& permissions));
MOCK_METHOD2(SetUserConsentForDevice,
void(const std::string& device_id, const bool is_allowed));
- MOCK_METHOD2(ReactOnUserDevConsentForApp,
- bool(const std::string& app_id, bool is_device_allowed));
+ MOCK_METHOD3(ReactOnUserDevConsentForApp,
+ bool(const transport_manager::DeviceHandle& device_handle,
+ const std::string& app_id,
+ bool is_device_allowed));
MOCK_METHOD2(PTUpdatedAt, void(policy::Counters counter, int value));
MOCK_METHOD3(GetInitialAppData,
@@ -117,8 +120,9 @@ class MockPolicyManager : public PolicyManager {
MOCK_METHOD2(SetUserConsentForApp,
void(const policy::PermissionConsent& permissions,
const policy::PolicyManager::NotificationMode mode));
- MOCK_CONST_METHOD2(GetDefaultHmi,
- bool(const std::string& policy_app_id,
+ MOCK_CONST_METHOD3(GetDefaultHmi,
+ bool(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi));
MOCK_CONST_METHOD2(GetPriority,
bool(const std::string& policy_app_id,
@@ -134,26 +138,32 @@ class MockPolicyManager : public PolicyManager {
void(const std::string& device_id,
const std::string& policy_app_id,
std::vector<policy::FunctionalGroupPermission>& permissions));
- MOCK_METHOD1(GetAppPermissionsChanges,
- policy::AppPermissions(const std::string& policy_app_id));
+ MOCK_METHOD2(GetAppPermissionsChanges,
+ policy::AppPermissions(const std::string& device_id,
+ const std::string& policy_app_id));
MOCK_METHOD1(RemovePendingPermissionChanges, void(const std::string& app_id));
- MOCK_CONST_METHOD1(GetCurrentDeviceId,
- std::string&(const std::string& policy_app_id));
+ MOCK_CONST_METHOD2(
+ GetCurrentDeviceId,
+ std::string&(const transport_manager::DeviceHandle& device_handle,
+ const std::string& policy_app_id));
MOCK_METHOD1(SetSystemLanguage, void(const std::string& language));
MOCK_METHOD3(SetSystemInfo,
void(const std::string& ccpu_version,
const std::string& wers_country_code,
const std::string& language));
- MOCK_METHOD1(SendNotificationOnPermissionsUpdated,
- void(const std::string& application_id));
+ MOCK_METHOD2(SendNotificationOnPermissionsUpdated,
+ void(const std::string& device_id,
+ const std::string& application_id));
MOCK_METHOD1(MarkUnpairedDevice, void(const std::string& device_id));
- MOCK_METHOD2(
+ MOCK_METHOD3(
AddApplication,
StatusNotifier(
+ const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types));
- MOCK_METHOD2(SetDefaultHmiTypes,
- void(const std::string& application_id,
+ MOCK_METHOD3(SetDefaultHmiTypes,
+ void(const transport_manager::DeviceHandle& device_handle,
+ const std::string& application_id,
const std::vector<int>& hmi_types));
MOCK_METHOD2(GetHMITypes,
bool(const std::string& application_id,
@@ -181,13 +191,15 @@ class MockPolicyManager : public PolicyManager {
MOCK_METHOD1(SaveUpdateStatusRequired, void(bool is_update_needed));
MOCK_METHOD0(OnAppsSearchStarted, void());
MOCK_METHOD1(OnAppsSearchCompleted, void(const bool trigger_ptu));
- MOCK_METHOD1(OnAppRegisteredOnMobile,
- void(const std::string& application_id));
+ MOCK_METHOD2(OnAppRegisteredOnMobile,
+ void(const std::string& device_id,
+ const std::string& application_id));
MOCK_CONST_METHOD0(GetLockScreenIconUrl, std::string());
MOCK_CONST_METHOD1(GetIconUrl, std::string(const std::string& policy_app_id));
- MOCK_CONST_METHOD1(
- GetAppRequestTypes,
- const std::vector<std::string>(const std::string policy_app_id));
+ MOCK_CONST_METHOD2(GetAppRequestTypes,
+ const std::vector<std::string>(
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string policy_app_id));
MOCK_CONST_METHOD0(GetVehicleInfo, const policy::VehicleInfo());
MOCK_CONST_METHOD1(GetEnabledCloudApps,
void(std::vector<std::string>& enabled_apps));
diff --git a/src/components/include/test/policy/policy_regular/policy/mock_policy_listener.h b/src/components/include/test/policy/policy_regular/policy/mock_policy_listener.h
index 7958bd3304..d0d85409a2 100644
--- a/src/components/include/test/policy/policy_regular/policy/mock_policy_listener.h
+++ b/src/components/include/test/policy/policy_regular/policy/mock_policy_listener.h
@@ -35,6 +35,7 @@
#include <string>
#include "gmock/gmock.h"
+#include "utils/macro.h"
#include "policy/policy_listener.h"
#include "policy/policy_table/types.h"
@@ -52,17 +53,21 @@ namespace custom_str = utils::custom_string;
class MockPolicyListener : public ::policy::PolicyListener {
public:
MOCK_METHOD3(OnPermissionsUpdated,
- void(const std::string& policy_app_id,
+ void(const std::string& device_id,
+ const std::string& policy_app_id,
+ const policy::Permissions& permissions));
+ MOCK_METHOD4(OnPermissionsUpdated,
+ void(const std::string& device_id,
+ const std::string& policy_app_id,
const policy::Permissions& permissions,
const policy::HMILevel& default_hmi));
- MOCK_METHOD2(OnPermissionsUpdated,
- void(const std::string& policy_app_id,
- const policy::Permissions& permissions));
- MOCK_METHOD1(OnPendingPermissionChange,
- void(const std::string& policy_app_id));
+ MOCK_METHOD2(OnPendingPermissionChange,
+ void(const std::string& device_id,
+ const std::string& policy_app_id));
MOCK_METHOD1(OnUpdateStatusChanged, void(const std::string& status));
- MOCK_METHOD1(OnCurrentDeviceIdUpdateRequired,
- std::string(const std::string& policy_app_id));
+ MOCK_METHOD2(OnCurrentDeviceIdUpdateRequired,
+ std::string(const transport_manager::DeviceHandle& device_handle,
+ const std::string& policy_app_id));
MOCK_METHOD0(OnSystemInfoUpdateRequired, void());
MOCK_METHOD1(GetAppName,
custom_str::CustomString(const std::string& policy_app_id));
@@ -78,14 +83,17 @@ class MockPolicyListener : public ::policy::PolicyListener {
MOCK_METHOD2(OnAuthTokenUpdated,
void(const std::string& policy_app_id,
const std::string& auth_token));
- MOCK_CONST_METHOD2(SendOnAppPermissionsChanged,
- void(const policy::AppPermissions&, const std::string&));
+ MOCK_CONST_METHOD3(SendOnAppPermissionsChanged,
+ void(const policy::AppPermissions& permissions,
+ const std::string& device_id,
+ const std::string& policy_app_id));
MOCK_METHOD3(OnUpdateHMILevel,
void(const std::string& device_id,
const std::string& policy_app_id,
const std::string& hmi_level));
- MOCK_METHOD1(GetDevicesIds,
- std::vector<std::string>(const std::string& policy_app_id));
+ MOCK_CONST_METHOD1(
+ GetDevicesIds,
+ std::vector<std::string>(const std::string& policy_app_id));
MOCK_CONST_METHOD1(GetRegisteredLinks,
void(std::map<std::string, std::string>&));
MOCK_METHOD1(OnRemoteAllowedChanged, void(bool new_consent));
diff --git a/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h b/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h
index a670e99bef..c6e692cf0b 100644
--- a/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h
+++ b/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h
@@ -100,8 +100,10 @@ class MockPolicyManager : public PolicyManager {
std::vector<policy::FunctionalGroupPermission>& permissions));
MOCK_METHOD2(SetUserConsentForDevice,
void(const std::string& device_id, const bool is_allowed));
- MOCK_METHOD2(ReactOnUserDevConsentForApp,
- bool(const std::string app_id, bool is_device_allowed));
+ MOCK_METHOD3(ReactOnUserDevConsentForApp,
+ bool(const transport_manager::DeviceHandle& device_handle,
+ const std::string app_id,
+ bool is_device_allowed));
MOCK_METHOD2(PTUpdatedAt, void(policy::Counters counter, int value));
MOCK_METHOD3(GetInitialAppData,
@@ -117,8 +119,9 @@ class MockPolicyManager : public PolicyManager {
const policy::DeviceInfo& device_info));
MOCK_METHOD1(SetUserConsentForApp,
void(const policy::PermissionConsent& permissions));
- MOCK_CONST_METHOD2(GetDefaultHmi,
- bool(const std::string& policy_app_id,
+ MOCK_CONST_METHOD3(GetDefaultHmi,
+ bool(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi));
MOCK_CONST_METHOD2(GetPriority,
bool(const std::string& policy_app_id,
@@ -133,26 +136,32 @@ class MockPolicyManager : public PolicyManager {
void(const std::string& device_id,
const std::string& policy_app_id,
std::vector<policy::FunctionalGroupPermission>& permissions));
- MOCK_METHOD1(GetAppPermissionsChanges,
- policy::AppPermissions(const std::string& policy_app_id));
+ MOCK_METHOD2(GetAppPermissionsChanges,
+ policy::AppPermissions(const std::string& device_id,
+ const std::string& policy_app_id));
MOCK_METHOD1(RemovePendingPermissionChanges, void(const std::string& app_id));
- MOCK_CONST_METHOD1(GetCurrentDeviceId,
- std::string&(const std::string& policy_app_id));
+ MOCK_CONST_METHOD2(
+ GetCurrentDeviceId,
+ std::string&(const transport_manager::DeviceHandle& device_handle,
+ const std::string& policy_app_id));
MOCK_METHOD1(SetSystemLanguage, void(const std::string& language));
MOCK_METHOD3(SetSystemInfo,
void(const std::string& ccpu_version,
const std::string& wers_country_code,
const std::string& language));
- MOCK_METHOD1(SendNotificationOnPermissionsUpdated,
- void(const std::string& application_id));
+ MOCK_METHOD2(SendNotificationOnPermissionsUpdated,
+ void(const std::string& device_id,
+ const std::string& application_id));
MOCK_METHOD1(MarkUnpairedDevice, void(const std::string& device_id));
- MOCK_METHOD2(
+ MOCK_METHOD3(
AddApplication,
StatusNotifier(
+ const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types));
- MOCK_METHOD2(SetDefaultHmiTypes,
- void(const std::string& application_id,
+ MOCK_METHOD3(SetDefaultHmiTypes,
+ void(const transport_manager::DeviceHandle& device_handle,
+ const std::string& application_id,
const std::vector<int>& hmi_types));
MOCK_METHOD2(GetHMITypes,
bool(const std::string& application_id,
@@ -179,8 +188,9 @@ class MockPolicyManager : public PolicyManager {
MOCK_METHOD1(SaveUpdateStatusRequired, void(bool is_update_needed));
MOCK_METHOD0(OnAppsSearchStarted, void());
MOCK_METHOD1(OnAppsSearchCompleted, void(const bool trigger_ptu));
- MOCK_METHOD1(OnAppRegisteredOnMobile,
- void(const std::string& application_id));
+ MOCK_METHOD2(OnAppRegisteredOnMobile,
+ void(const std::string& device_id,
+ const std::string& application_id));
MOCK_CONST_METHOD1(
GetAppRequestTypes,
const std::vector<std::string>(const std::string policy_app_id));
diff --git a/src/components/interfaces/HMI_API.xml b/src/components/interfaces/HMI_API.xml
index 1e768c694e..0944e71b53 100644
--- a/src/components/interfaces/HMI_API.xml
+++ b/src/components/interfaces/HMI_API.xml
@@ -2665,7 +2665,7 @@
<param name="vrSynonyms" type="String" maxlength="40" minsize="1" maxsize="100" array="true" mandatory="false">
<description>
Defines an additional voice recognition command.
- Must not interfere with any name of previously registered applications(SDL makes check).
+ Must not interfere with any name of previously registered applications from the same device.
</description>
</param>
<param name="appID" type="Integer" mandatory="true">
@@ -4086,7 +4086,7 @@
<param name="vrSynonyms" type="String" maxlength="40" minsize="1" maxsize="100" array="true" mandatory="false">
<description>
Defines an additional voice recognition command.
- Must not interfere with any name of previously registered applications(SDL makes check).
+ Must not interfere with any name of previously registered applications from the same device.
</description>
</param>
<param name="resumeVrGrammars" type="Boolean" mandatory="false">
@@ -4471,7 +4471,7 @@
<description>
Request new VR synonyms registration
Defines an additional voice recognition command.
- Must not interfere with any name of previously registered applications(SDL makes check).
+ Must not interfere with any name of previously registered applications from the same device.
</description>
</param>
<param name="language" type="Common.Language" mandatory="true">
@@ -4947,10 +4947,10 @@
<param name="appName" type="String" maxlength="100" mandatory="false">
<description>
Request new app name registration
- Needs to be unique over all applications.
+ Needs to be unique over all applications from the same device.
May not be empty. May not start with a new line character.
- May not interfere with any name or synonym of any registered applications.
- Applications with the same name will be rejected. (SDL makes all the checks)
+ May not interfere with any name or synonym of any registered applications from the same device.
+ Additional applications with the same name from the same device will be rejected.
</description>
</param>
<param name="ngnMediaScreenAppName" type="String" maxlength="100" mandatory="false">
diff --git a/src/components/interfaces/MOBILE_API.xml b/src/components/interfaces/MOBILE_API.xml
index f874baba70..b62b70003c 100644
--- a/src/components/interfaces/MOBILE_API.xml
+++ b/src/components/interfaces/MOBILE_API.xml
@@ -4243,11 +4243,11 @@
<param name="appName" type="String" maxlength="100" mandatory="true" since="1.0">
<description>
The mobile application name, e.g. "Ford Drive Green".
- Needs to be unique over all applications.
+ Needs to be unique over all applications from the same device.
May not be empty.
May not start with a new line character.
- May not interfere with any name or synonym of previously registered applications and any predefined blacklist of words (global commands)
- Needs to be unique over all applications. Applications with the same name will be rejected.
+ May not interfere with any name or synonym of previously registered applications from the same device and any predefined blacklist of words (global commands)
+ Additional applications with the same name from the same device will be rejected.
Only characters from char set [@TODO: Create char set (character/hex value) for each ACM and refer to] are supported.
</description>
</param>
@@ -4256,7 +4256,7 @@
<description>
TTS string for VR recognition of the mobile application name, e.g. "Ford Drive Green".
Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.
- Needs to be unique over all applications.
+ Needs to be unique over all applications from the same device.
May not be empty.
May not start with a new line character.
Only characters from char set [@TODO: Create char set (character/hex value) for each ACM and refer to] are supported.
@@ -4274,7 +4274,7 @@
<param name="vrSynonyms" type="String" maxlength="40" minsize="1" maxsize="100" array="true" mandatory="false" since="1.0">
<description>
Defines an additional voice recognition command.
- May not interfere with any app name of previously registered applications and any predefined blacklist of words (global commands)
+ May not interfere with any app name of previously registered applications from the same device and any predefined blacklist of words (global commands)
Only characters from char set [@TODO: Create char set (character/hex value) for each ACM and refer to] are supported.
</description>
</param>
diff --git a/src/components/policy/policy_external/include/policy/policy_manager_impl.h b/src/components/policy/policy_external/include/policy/policy_manager_impl.h
index 9dd2b3c6ec..261f66a3b2 100644
--- a/src/components/policy/policy_external/include/policy/policy_manager_impl.h
+++ b/src/components/policy/policy_external/include/policy/policy_manager_impl.h
@@ -122,6 +122,7 @@ class PolicyManagerImpl : public PolicyManager {
* @brief Check if specified RPC for specified application
* has permission to be executed in specified HMI Level
* and also its permitted params.
+ * @param device_id device identifier
* @param app_id Id of application provided during registration
* @param hmi_level Current HMI Level of application
* @param rpc Name of RPC
@@ -129,7 +130,8 @@ class PolicyManagerImpl : public PolicyManager {
* @param result containing flag if HMI Level is allowed
* and list of allowed params.
*/
- void CheckPermissions(const PTString& app_id,
+ void CheckPermissions(const PTString& device_id,
+ const PTString& app_id,
const PTString& hmi_level,
const PTString& rpc,
const RPCParams& rpc_params,
@@ -267,12 +269,15 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Update Application Policies as reaction
* on User allowing/disallowing device this app is running on.
+ * @param device_handle device identifier
* @param app_id Unique application id
* @param is_device_allowed true if user allowing device otherwise false
* @return true if operation was successful
*/
- bool ReactOnUserDevConsentForApp(const std::string& app_id,
- const bool is_device_allowed) OVERRIDE;
+ bool ReactOnUserDevConsentForApp(
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string& app_id,
+ const bool is_device_allowed) OVERRIDE;
/**
* @brief Retrieves data from app_policies about app on its registration:
@@ -315,12 +320,14 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Get default HMI level for application
+ * @param device_id device identifier
* @param policy_app_id Unique application id
* @param default_hmi Default HMI level for application or empty, if value
* was not set
* @return true, if succedeed, otherwise - false
*/
- bool GetDefaultHmi(const std::string& policy_app_id,
+ bool GetDefaultHmi(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi) const OVERRIDE;
/**
@@ -365,9 +372,11 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Return device id, which hosts specific application
+ * @param device_id device identifier
* @param policy_app_id Application id, which is required to update device id
*/
std::string& GetCurrentDeviceId(
+ const transport_manager::DeviceHandle& device_id,
const std::string& policy_app_id) const OVERRIDE;
/**
@@ -409,11 +418,12 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Gets specific application permissions changes since last policy
* table update
+ * @param device_id device identifier
* @param policy_app_id Unique application id
* @return Permissions changes
*/
AppPermissions GetAppPermissionsChanges(
- const std::string& policy_app_id) OVERRIDE;
+ const std::string& device_id, const std::string& policy_app_id) OVERRIDE;
/**
* @brief Removes specific application permissions changes
@@ -423,10 +433,11 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Send OnPermissionsUpdated for choosen application
+ * @param device_id device identifier
* @param application_id Unique application id
*/
void SendNotificationOnPermissionsUpdated(
- const std::string& application_id) OVERRIDE;
+ const std::string& device_id, const std::string& application_id) OVERRIDE;
/**
* @brief Removes unpaired device records and related records from DB
@@ -457,20 +468,24 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Adds, application to the db or update existed one
* run PTU if policy update is necessary for application.
+ * @param device_id device identifier
* @param application_id Unique application id
* @param hmi_types application HMI types
* @return function that will notify update manager about new application
*/
StatusNotifier AddApplication(
+ const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) OVERRIDE;
/**
* @brief Assigns new HMI types for specified application
+ * @param device_handle device identifier
* @param application_id Unique application id
* @param hmi_types new HMI types list
*/
- void SetDefaultHmiTypes(const std::string& application_id,
+ void SetDefaultHmiTypes(const transport_manager::DeviceHandle& device_handle,
+ const std::string& application_id,
const std::vector<int>& hmi_types) OVERRIDE;
/**
@@ -564,10 +579,12 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Gets request types for application
+ * @param device_handle device identifier
* @param policy_app_id Unique application id
* @return request types of application
*/
const std::vector<std::string> GetAppRequestTypes(
+ const transport_manager::DeviceHandle& device_handle,
const std::string policy_app_id) const OVERRIDE;
/**
@@ -689,10 +706,13 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief OnAppRegisteredOnMobile allows to handle event when application were
* succesfully registered on mobile device.
- * It will send OnAppPermissionSend notification and will try to start PTU. *
+ * It will send OnAppPermissionSend notification and will try to start PTU.
+ *
+ * @param device_id device identifier
* @param application_id registered application.
*/
- void OnAppRegisteredOnMobile(const std::string& application_id) OVERRIDE;
+ void OnAppRegisteredOnMobile(const std::string& device_id,
+ const std::string& application_id) OVERRIDE;
void OnDeviceSwitching(const std::string& device_id_from,
const std::string& device_id_to) OVERRIDE;
@@ -918,19 +938,23 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Allows to process case when added application is not present in
* policy db.
+ * @param device_id device identifier
* @param policy application id.
* @param cuuren consent for application's device.
*/
- void AddNewApplication(const std::string& application_id,
+ void AddNewApplication(const std::string& device_id,
+ const std::string& application_id,
DeviceConsent device_consent);
/**
* @brief Allows to process case when added application is already
* in policy db.
+ * @param device_id device identifier
* @param policy application id.
* @param cuuren consent for application's device.
*/
- void PromoteExistedApplication(const std::string& application_id,
+ void PromoteExistedApplication(const std::string& device_id,
+ const std::string& application_id,
DeviceConsent device_consent);
/**
@@ -948,9 +972,12 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Checks whether need ask the permission of users
+ * @param device_id device identifier
+ * @param appid policy application id
* @return true if user consent is needed
*/
- virtual bool IsConsentNeeded(const std::string& app_id);
+ virtual bool IsConsentNeeded(const std::string& device_id,
+ const std::string& app_id);
/**
* @brief Changes isConsentNeeded for app pending permissions, in case
@@ -1036,11 +1063,13 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Notify application about its permissions changes by preparing and
* sending OnPermissionsChanged notification
+ * @param device_id device identifier
* @param policy_app_id Application id to send notification to
* @param app_group_permissons Current permissions for groups assigned to
* application
*/
void NotifyPermissionsChanges(
+ const std::string& device_id,
const std::string& policy_app_id,
const std::vector<FunctionalGroupPermission>& app_group_permissions);
@@ -1065,11 +1094,13 @@ class PolicyManagerImpl : public PolicyManager {
* user consents (if any) and ExternalConsent consents (if any) will be
* updated
* appropiately to current ExternalConsent status stored by policy table
+ * @param device_id device identifier
* @param application_id Application id
* @param processing_policy Defines whether consents timestamps must be
* considered or external consents take over
*/
void ProcessExternalConsentStatusForApp(
+ const std::string& device_id,
const std::string& application_id,
const ConsentProcessingPolicy processing_policy);
/**
@@ -1097,16 +1128,20 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Notifies system by sending OnAppPermissionChanged notification
+ * @param device_id device identifier
* @param app_policy Reference to application policy
*/
- void NotifySystem(const AppPoliciesValueType& app_policy) const;
+ void NotifySystem(const std::string& device_id,
+ const AppPoliciesValueType& app_policy) const;
/**
* @brief Sends OnPermissionChange notification to application if its
* currently registered
+ * @param device_id device identifier
* @param app_policy Reference to application policy
*/
- void SendPermissionsToApp(const AppPoliciesValueType& app_policy);
+ void SendPermissionsToApp(const std::string& device_id,
+ const AppPoliciesValueType& app_policy);
/**
* @brief Gets groups names from collection of groups permissions
diff --git a/src/components/policy/policy_external/src/policy_manager_impl.cc b/src/components/policy/policy_external/src/policy_manager_impl.cc
index 42b67734ae..dd33bb86ab 100644
--- a/src/components/policy/policy_external/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_external/src/policy_manager_impl.cc
@@ -565,33 +565,35 @@ void PolicyManagerImpl::ProcessAppPolicyCheckResults(
void PolicyManagerImpl::ProcessActionsForAppPolicies(
const ApplicationsPoliciesActions& actions,
const policy_table::ApplicationPolicies& app_policies) {
- ApplicationsPoliciesActions::const_iterator it_actions = actions.begin();
- for (; it_actions != actions.end(); ++it_actions) {
- policy_table::ApplicationPolicies::const_iterator app_policy =
- app_policies.find(it_actions->first);
+ for (const auto& action : actions) {
+ const auto& app_policy = app_policies.find(action.first);
if (app_policies.end() == app_policy) {
continue;
}
- if (it_actions->second.is_consent_needed) {
- // Post-check after ExternalConsent consent changes
- const std::string& policy_app_id = app_policy->first;
- if (!IsConsentNeeded(policy_app_id)) {
- sync_primitives::AutoLock lock(app_permissions_diff_lock_);
+ const auto devices_ids = listener()->GetDevicesIds(app_policy->first);
+ for (const auto& device_id : devices_ids) {
+ if (action.second.is_consent_needed) {
+ // Post-check after ExternalConsent consent changes
+ const auto& policy_app_id = app_policy->first;
+ if (!IsConsentNeeded(device_id, policy_app_id)) {
+ sync_primitives::AutoLock lock(app_permissions_diff_lock_);
- PendingPermissions::iterator app_id_diff =
- app_permissions_diff_.find(policy_app_id);
+ const auto& app_id_diff = app_permissions_diff_.find(policy_app_id);
- if (app_permissions_diff_.end() != app_id_diff) {
- app_id_diff->second.appPermissionsConsentNeeded = false;
+ if (app_permissions_diff_.end() != app_id_diff) {
+ app_id_diff->second.appPermissionsConsentNeeded = false;
+ }
}
}
- }
- if (it_actions->second.is_notify_system) {
- NotifySystem(*app_policy);
- }
- if (it_actions->second.is_send_permissions_to_app) {
- SendPermissionsToApp(*app_policy);
+
+ if (action.second.is_notify_system) {
+ NotifySystem(device_id, *app_policy);
+ }
+
+ if (action.second.is_send_permissions_to_app) {
+ SendPermissionsToApp(device_id, *app_policy);
+ }
}
}
}
@@ -715,10 +717,11 @@ void PolicyManagerImpl::OnAppsSearchCompleted(const bool trigger_ptu) {
}
const std::vector<std::string> PolicyManagerImpl::GetAppRequestTypes(
+ const transport_manager::DeviceHandle& device_handle,
const std::string policy_app_id) const {
std::vector<std::string> request_types;
- if (kDeviceDisallowed ==
- cache_->GetDeviceConsent(GetCurrentDeviceId(policy_app_id))) {
+ if (kDeviceAllowed != cache_->GetDeviceConsent(
+ GetCurrentDeviceId(device_handle, policy_app_id))) {
cache_->GetAppRequestTypes(kPreDataConsentId, request_types);
} else {
cache_->GetAppRequestTypes(policy_app_id, request_types);
@@ -818,7 +821,8 @@ bool PolicyManagerImpl::UnknownRPCPassthroughAllowed(
return cache_->UnknownRPCPassthroughAllowed(policy_app_id);
}
-void PolicyManagerImpl::CheckPermissions(const PTString& app_id,
+void PolicyManagerImpl::CheckPermissions(const PTString& device_id,
+ const PTString& app_id,
const PTString& hmi_level,
const PTString& rpc,
const RPCParams& rpc_params,
@@ -827,8 +831,6 @@ void PolicyManagerImpl::CheckPermissions(const PTString& app_id,
"CheckPermissions for " << app_id << " and rpc " << rpc
<< " for " << hmi_level << " level.");
- const std::string device_id = GetCurrentDeviceId(app_id);
-
Permissions rpc_permissions;
// Check, if there are calculated permission present in cache
@@ -998,9 +1000,8 @@ policy_table::Strings PolicyManagerImpl::GetGroupsNames(
}
void PolicyManagerImpl::SendNotificationOnPermissionsUpdated(
- const std::string& application_id) {
+ const std::string& device_id, const std::string& application_id) {
LOG4CXX_AUTO_TRACE(logger_);
- const std::string device_id = GetCurrentDeviceId(application_id);
if (device_id.empty()) {
LOG4CXX_WARN(logger_,
"Couldn't find device info for application id "
@@ -1028,15 +1029,16 @@ void PolicyManagerImpl::SendNotificationOnPermissionsUpdated(
const ApplicationOnDevice who = {device_id, application_id};
if (access_remote_->IsAppRemoteControl(who)) {
- listener()->OnPermissionsUpdated(application_id, notification_data);
+ listener()->OnPermissionsUpdated(
+ device_id, application_id, notification_data);
return;
}
std::string default_hmi;
- GetDefaultHmi(application_id, &default_hmi);
+ GetDefaultHmi(device_id, application_id, &default_hmi);
listener()->OnPermissionsUpdated(
- application_id, notification_data, default_hmi);
+ device_id, application_id, notification_data, default_hmi);
}
bool PolicyManagerImpl::CleanupUnpairedDevices() {
@@ -1069,14 +1071,16 @@ void PolicyManagerImpl::SetUserConsentForDevice(const std::string& device_id,
}
bool PolicyManagerImpl::ReactOnUserDevConsentForApp(
- const std::string& app_id, const bool is_device_allowed) {
- std::vector<std::string> current_request_types = GetAppRequestTypes(app_id);
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string& app_id,
+ const bool is_device_allowed) {
+ auto current_request_types = GetAppRequestTypes(device_handle, app_id);
std::string current_priority, new_priority;
GetPriority(app_id, &current_priority);
bool result = cache_->ReactOnUserDevConsentForApp(app_id, is_device_allowed);
- std::vector<std::string> new_request_types = GetAppRequestTypes(app_id);
+ auto new_request_types = GetAppRequestTypes(device_handle, app_id);
GetPriority(app_id, &new_priority);
std::sort(current_request_types.begin(), current_request_types.end());
std::sort(new_request_types.begin(), new_request_types.end());
@@ -1101,7 +1105,8 @@ bool PolicyManagerImpl::ReactOnUserDevConsentForApp(
}
if (permissions.requestTypeChanged || (!permissions.priority.empty())) {
- listener_->SendOnAppPermissionsChanged(permissions, app_id);
+ const auto& device_id = GetCurrentDeviceId(device_handle, app_id);
+ listener_->SendOnAppPermissionsChanged(permissions, device_id, app_id);
}
return result;
}
@@ -1219,6 +1224,7 @@ void PolicyManagerImpl::CheckPendingPermissionsChanges(
}
void PolicyManagerImpl::NotifyPermissionsChanges(
+ const std::string& device_id,
const std::string& policy_app_id,
const std::vector<FunctionalGroupPermission>& app_group_permissions) {
LOG4CXX_AUTO_TRACE(logger_);
@@ -1234,7 +1240,7 @@ void PolicyManagerImpl::NotifyPermissionsChanges(
PrepareNotificationData(
functional_groups, app_groups, app_group_permissions, notification_data);
- listener()->OnPermissionsUpdated(policy_app_id, notification_data);
+ listener()->OnPermissionsUpdated(device_id, policy_app_id, notification_data);
}
void PolicyManagerImpl::SetUserConsentForApp(
@@ -1273,14 +1279,15 @@ void PolicyManagerImpl::SetUserConsentForApp(
CheckPendingPermissionsChanges(verified_permissions.policy_app_id,
updated_app_group_permissons);
- NotifyPermissionsChanges(verified_permissions.policy_app_id,
+ NotifyPermissionsChanges(verified_permissions.device_id,
+ verified_permissions.policy_app_id,
updated_app_group_permissons);
}
-bool PolicyManagerImpl::GetDefaultHmi(const std::string& policy_app_id,
+bool PolicyManagerImpl::GetDefaultHmi(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi) const {
LOG4CXX_AUTO_TRACE(logger_);
- const std::string device_id = GetCurrentDeviceId(policy_app_id);
DeviceConsent device_consent = GetUserConsentForDevice(device_id);
const std::string app_id = policy::kDeviceAllowed != device_consent
? kPreDataConsentId
@@ -1385,11 +1392,13 @@ void PolicyManagerImpl::GetPermissionsForApp(
}
bool allowed_by_default = false;
- if (cache_->IsDefaultPolicy(policy_app_id)) {
+ const auto device_consent = GetUserConsentForDevice(device_id);
+ if ((policy::kDeviceAllowed == device_consent) &&
+ cache_->IsDefaultPolicy(policy_app_id)) {
app_id_to_check = kDefaultId;
allowed_by_default = true;
} else if (cache_->IsPredataPolicy(policy_app_id) ||
- policy::kDeviceDisallowed == GetUserConsentForDevice(device_id)) {
+ policy::kDeviceAllowed != device_consent) {
app_id_to_check = kPreDataConsentId;
allowed_by_default = true;
}
@@ -1473,9 +1482,11 @@ void PolicyManagerImpl::GetPermissionsForApp(
}
std::string& PolicyManagerImpl::GetCurrentDeviceId(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) const {
LOG4CXX_INFO(logger_, "GetDeviceInfo");
- last_device_id_ = listener()->OnCurrentDeviceIdUpdateRequired(policy_app_id);
+ last_device_id_ =
+ listener()->OnCurrentDeviceIdUpdateRequired(device_handle, policy_app_id);
return last_device_id_;
}
@@ -1579,15 +1590,16 @@ void PolicyManagerImpl::UpdateAppConsentWithExternalConsent(
}
void PolicyManagerImpl::NotifySystem(
+ const std::string& device_id,
const PolicyManagerImpl::AppPoliciesValueType& app_policy) const {
- listener()->OnPendingPermissionChange(app_policy.first);
+ listener()->OnPendingPermissionChange(device_id, app_policy.first);
}
void PolicyManagerImpl::SendPermissionsToApp(
+ const std::string& device_id,
const PolicyManagerImpl::AppPoliciesValueType& app_policy) {
const std::string app_id = app_policy.first;
- const std::string device_id = GetCurrentDeviceId(app_id);
if (device_id.empty()) {
LOG4CXX_WARN(logger_,
"Couldn't find device info for application id: " << app_id);
@@ -1610,6 +1622,7 @@ void PolicyManagerImpl::SendPermissionsToApp(
LOG4CXX_INFO(logger_, "Send notification for application_id: " << app_id);
listener()->OnPermissionsUpdated(
+ device_id,
app_id,
notification_data,
policy_table::EnumToJsonString(app_policy.second.default_hmi));
@@ -1870,10 +1883,10 @@ bool PolicyManagerImpl::IsApplicationRevoked(const std::string& app_id) const {
return cache_->IsApplicationRevoked(app_id);
}
-bool PolicyManagerImpl::IsConsentNeeded(const std::string& app_id) {
+bool PolicyManagerImpl::IsConsentNeeded(const std::string& device_id,
+ const std::string& app_id) {
LOG4CXX_AUTO_TRACE(logger_);
- const std::string device_id = GetCurrentDeviceId(app_id);
- int count = cache_->CountUnconsentedGroups(app_id, device_id);
+ const int count = cache_->CountUnconsentedGroups(app_id, device_id);
LOG4CXX_DEBUG(logger_, "There are: " << count << " unconsented groups.");
return count != 0;
}
@@ -1883,7 +1896,7 @@ void PolicyManagerImpl::SetVINValue(const std::string& value) {
}
AppPermissions PolicyManagerImpl::GetAppPermissionsChanges(
- const std::string& policy_app_id) {
+ const std::string& device_id, const std::string& policy_app_id) {
PendingPermissions::iterator app_id_diff =
app_permissions_diff_.find(policy_app_id);
@@ -1892,7 +1905,8 @@ AppPermissions PolicyManagerImpl::GetAppPermissionsChanges(
if (app_permissions_diff_.end() != app_id_diff) {
permissions = app_id_diff->second;
} else {
- permissions.appPermissionsConsentNeeded = IsConsentNeeded(policy_app_id);
+ permissions.appPermissionsConsentNeeded =
+ IsConsentNeeded(device_id, policy_app_id);
permissions.appRevoked = IsApplicationRevoked(policy_app_id);
GetPriority(permissions.application_id, &permissions.priority);
}
@@ -1921,9 +1935,9 @@ void PolicyManagerImpl::MarkUnpairedDevice(const std::string& device_id) {
}
void PolicyManagerImpl::OnAppRegisteredOnMobile(
- const std::string& application_id) {
+ const std::string& device_id, const std::string& application_id) {
StartPTExchange();
- SendNotificationOnPermissionsUpdated(application_id);
+ SendNotificationOnPermissionsUpdated(device_id, application_id);
}
void PolicyManagerImpl::OnDeviceSwitching(const std::string& device_id_from,
@@ -2012,20 +2026,23 @@ class CallStatusChange : public utils::Callable {
};
StatusNotifier PolicyManagerImpl::AddApplication(
+ const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) {
LOG4CXX_AUTO_TRACE(logger_);
- const std::string device_id = GetCurrentDeviceId(application_id);
- DeviceConsent device_consent = GetUserConsentForDevice(device_id);
+ auto device_consent = GetUserConsentForDevice(device_id);
+ LOG4CXX_DEBUG(logger_,
+ "check_device_id: " << device_id << " check_device_consent: "
+ << device_consent);
sync_primitives::AutoLock lock(apps_registration_lock_);
if (IsNewApplication(application_id)) {
LOG4CXX_DEBUG(logger_, "Adding new application");
- AddNewApplication(application_id, device_consent);
+ AddNewApplication(device_id, application_id, device_consent);
return std::make_shared<CallStatusChange>(update_status_manager_,
device_consent);
}
LOG4CXX_DEBUG(logger_, "Promote existed application");
- PromoteExistedApplication(application_id, device_consent);
+ PromoteExistedApplication(device_id, application_id, device_consent);
update_status_manager_.OnExistedApplicationAdded(cache_->UpdateRequired());
return std::make_shared<utils::CallNothing>();
}
@@ -2042,6 +2059,7 @@ bool PolicyManagerImpl::IsPredataPolicy(
}
void PolicyManagerImpl::ProcessExternalConsentStatusForApp(
+ const std::string& device_id,
const std::string& application_id,
const ConsentProcessingPolicy processing_policy) {
ExternalConsentStatus status = cache_->GetExternalConsentStatus();
@@ -2053,7 +2071,7 @@ void PolicyManagerImpl::ProcessExternalConsentStatusForApp(
CalculateGroupsConsentFromExternalConsent(
groups_by_status, allowed_groups, disallowed_groups);
- const std::string device_id = GetCurrentDeviceId(application_id);
+ LOG4CXX_DEBUG(logger_, "check device_id: " << device_id);
UpdateAppConsentWithExternalConsent(device_id,
application_id,
allowed_groups,
@@ -2061,7 +2079,8 @@ void PolicyManagerImpl::ProcessExternalConsentStatusForApp(
processing_policy);
}
-void PolicyManagerImpl::AddNewApplication(const std::string& application_id,
+void PolicyManagerImpl::AddNewApplication(const std::string& device_id,
+ const std::string& application_id,
DeviceConsent device_consent) {
LOG4CXX_AUTO_TRACE(logger_);
@@ -2081,19 +2100,31 @@ void PolicyManagerImpl::AddNewApplication(const std::string& application_id,
}
ProcessExternalConsentStatusForApp(
- application_id, ConsentProcessingPolicy::kExternalConsentBased);
+ device_id,
+ application_id,
+ ConsentProcessingPolicy::kExternalConsentBased);
}
void PolicyManagerImpl::PromoteExistedApplication(
- const std::string& application_id, DeviceConsent device_consent) {
+ const std::string& device_id,
+ const std::string& application_id,
+ DeviceConsent device_consent) {
// If device consent changed to allowed during application being
// disconnected, app permissions should be changed also
+ LOG4CXX_DEBUG(logger_,
+ "kDeviceAllowed == device_consent: "
+ << (kDeviceAllowed == device_consent)
+ << " device_consent: " << device_consent);
if (kDeviceAllowed == device_consent &&
cache_->IsPredataPolicy(application_id)) {
+ LOG4CXX_INFO(logger_,
+ "Setting "
+ << policy::kDefaultId
+ << " permissions for application id: " << application_id);
cache_->SetDefaultPolicy(application_id);
}
- ProcessExternalConsentStatusForApp(application_id,
- ConsentProcessingPolicy::kTimestampBased);
+ ProcessExternalConsentStatusForApp(
+ device_id, application_id, ConsentProcessingPolicy::kTimestampBased);
}
bool PolicyManagerImpl::IsNewApplication(
@@ -2173,10 +2204,12 @@ std::ostream& operator<<(std::ostream& output,
return output;
}
-void PolicyManagerImpl::SetDefaultHmiTypes(const std::string& application_id,
- const std::vector<int>& hmi_types) {
+void PolicyManagerImpl::SetDefaultHmiTypes(
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string& application_id,
+ const std::vector<int>& hmi_types) {
LOG4CXX_INFO(logger_, "SetDefaultHmiTypes");
- const std::string device_id = GetCurrentDeviceId(application_id);
+ const auto device_id = GetCurrentDeviceId(device_handle, application_id);
ApplicationOnDevice who = {device_id, application_id};
access_remote_->SetDefaultHmiTypes(who, hmi_types);
}
@@ -2214,7 +2247,7 @@ bool PolicyManagerImpl::CheckModule(const PTString& app_id,
void PolicyManagerImpl::SendHMILevelChanged(const ApplicationOnDevice& who) {
std::string default_hmi("NONE");
- if (GetDefaultHmi(who.app_id, &default_hmi)) {
+ if (GetDefaultHmi(who.dev_id, who.app_id, &default_hmi)) {
listener()->OnUpdateHMIStatus(who.dev_id, who.app_id, default_hmi);
} else {
LOG4CXX_WARN(
@@ -2251,7 +2284,8 @@ void PolicyManagerImpl::SendAppPermissionsChanged(
const std::string& device_id, const std::string& application_id) {
Permissions notification_data;
GetPermissions(device_id, application_id, &notification_data);
- listener()->OnPermissionsUpdated(application_id, notification_data);
+ listener()->OnPermissionsUpdated(
+ device_id, application_id, notification_data);
}
void PolicyManagerImpl::SendAuthTokenUpdated(const std::string policy_app_id) {
diff --git a/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc b/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc
index 066b5756e2..bb8c6fc12a 100644
--- a/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc
+++ b/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc
@@ -92,7 +92,8 @@ TEST_F(PolicyManagerImplTest,
EXPECT_CALL(*cache_manager_, IsApplicationRepresented(_))
.WillOnce(Return(true));
EXPECT_EQ(policy_manager_->GetPolicyTableStatus(), "UP_TO_DATE");
- policy_manager_->AddApplication(kDefaultId,
+ policy_manager_->AddApplication(kDefaultDeviceMacAddress,
+ kDefaultId,
HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_EQ(policy_manager_->GetPolicyTableStatus(), "UP_TO_DATE");
}
@@ -142,8 +143,11 @@ TEST_F(PolicyManagerImplTest2, IsAppRevoked_SetRevokedAppID_ExpectAppRevoked) {
// Arrange
CreateLocalPT(preloaded_pt_filename_);
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_1_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
+
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
std::ifstream ifile(kValidSdlPtUpdateJson);
Json::Reader reader;
@@ -174,8 +178,8 @@ TEST_F(PolicyManagerImplTest2, AppRevokedOne_AppRegistered) {
EXPECT_FALSE(policy_manager_->GetCache()->IsPTPreloaded());
ASSERT_TRUE(
(policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth"));
- policy_manager_->AddApplication(application_id_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_2_, application_id_, HmiTypes(policy_table::AHT_DEFAULT));
// Registration is allowed
CheckRpcPermissions("RegisterAppInterface", ::policy::kRpcAllowed);
}
@@ -187,12 +191,13 @@ TEST_F(PolicyManagerImplTest2, AppRevokedOne_AppRegistered_HMIDefault) {
EmulatePTAppRevoked(kPtu2Json);
EXPECT_FALSE(policy_manager_->GetCache()->IsPTPreloaded());
- policy_manager_->AddApplication(application_id_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, application_id_, HmiTypes(policy_table::AHT_DEFAULT));
std::string default_hmi;
// Default HMI level is NONE
- EXPECT_TRUE(policy_manager_->GetDefaultHmi(application_id_, &default_hmi));
+ EXPECT_TRUE(policy_manager_->GetDefaultHmi(
+ device_id_1_, application_id_, &default_hmi));
EXPECT_EQ("NONE", default_hmi);
}
@@ -210,12 +215,16 @@ TEST_F(PolicyManagerImplTest2,
"Life",
2,
"Bluetooth");
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
- .WillRepeatedly(Return(device_id_1_));
+
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_, app_id_1_))
+ .Times(0);
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_1_))
+ .WillRepeatedly(Return(transport_manager::DeviceList(1, device_id_1_)));
+
policy_manager_->SetUserConsentForDevice(device_id_1_, true);
// Add app from consented device. App will be assigned with default policies
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
// Check before action
policy_table::RpcParameters rpc_parameters;
rpc_parameters.hmi_levels.push_back(policy_table::HL_FULL);
@@ -227,7 +236,7 @@ TEST_F(PolicyManagerImplTest2,
::policy::CheckPermissionResult output;
policy_manager_->CheckPermissions(
- app_id_1_, kHmiLevelFull, "Alert", input_params, output);
+ device_id_1_, app_id_1_, kHmiLevelFull, "Alert", input_params, output);
// Check RPC is allowed
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
@@ -248,7 +257,7 @@ TEST_F(PolicyManagerImplTest2,
EXPECT_FALSE(cache->IsPTPreloaded());
policy_manager_->CheckPermissions(
- app_id_1_, kHmiLevelFull, "Alert", input_params, output);
+ device_id_1_, app_id_1_, kHmiLevelFull, "Alert", input_params, output);
// Check RPC is disallowed
EXPECT_EQ(::policy::kRpcDisallowed, output.hmi_level_permitted);
ASSERT_TRUE(output.list_of_allowed_params.empty());
@@ -269,12 +278,14 @@ TEST_F(PolicyManagerImplTest2,
"Life",
2,
"Bluetooth"));
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(application_id_))
- .WillRepeatedly(Return(device_id_1_));
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_, application_id_))
+ .Times(0);
+ EXPECT_CALL(listener_, GetDevicesIds(application_id_))
+ .WillRepeatedly(Return(transport_manager::DeviceList(1, device_id_1_)));
policy_manager_->SetUserConsentForDevice(device_id_1_, true);
// Add app from consented device. App will be assigned with default policies
- policy_manager_->AddApplication(application_id_,
- HmiTypes(policy_table::AHT_MEDIA));
+ policy_manager_->AddApplication(
+ device_id_1_, application_id_, HmiTypes(policy_table::AHT_MEDIA));
// Emulate PTU with new policies for app added above
std::ifstream ifile(kValidSdlPtUpdateJson);
Json::Reader reader;
@@ -323,8 +334,6 @@ TEST_F(PolicyManagerImplTest2,
::policy::RPCParams input_params;
::policy::CheckPermissionResult output;
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(application_id_))
- .WillOnce(Return(device_id_1_));
cache->AddDevice(device_id_1_, "Bluetooth");
cache->SetDeviceData(device_id_1_,
"hardware IPX",
@@ -334,8 +343,12 @@ TEST_F(PolicyManagerImplTest2,
"Life",
2,
"Bluetooth");
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelFull, "Alert", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelFull,
+ "Alert",
+ input_params,
+ output);
// Check RPC is allowed
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
// Check list of parameters empty
@@ -344,21 +357,22 @@ TEST_F(PolicyManagerImplTest2,
TEST_F(PolicyManagerImplTest2,
CheckPermissions_NoParametersInPT_CheckRpcsInDifferentLevels) {
+ EXPECT_CALL(listener_, GetDevicesIds(application_id_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
// Arrange
AddSetDeviceData();
LoadPTUFromJsonFile("json/sdl_update_pt_send_location.json");
- // Will be called each time permissions are checked
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(application_id_))
- .Times(4)
- .WillRepeatedly(Return(device_id_1_));
-
// Check RPC in each level
::policy::RPCParams input_params;
::policy::CheckPermissionResult output;
// Rpc in FULL level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelFull, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelFull,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is allowed
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
ASSERT_TRUE(output.list_of_allowed_params.empty());
@@ -367,8 +381,12 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in LIMITED level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelLimited, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelLimited,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is allowed
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
ASSERT_TRUE(output.list_of_allowed_params.empty());
@@ -376,7 +394,8 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in BACKGROUND level
- policy_manager_->CheckPermissions(application_id_,
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
kHmiLevelBackground,
"SendLocation",
input_params,
@@ -388,8 +407,12 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in NONE level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelNone, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelNone,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is disallowed
EXPECT_EQ(::policy::kRpcDisallowed, output.hmi_level_permitted);
// Check list of parameters is empty
@@ -399,24 +422,25 @@ TEST_F(PolicyManagerImplTest2,
TEST_F(
PolicyManagerImplTest2,
CheckPermissions_ParamsNotAllowedInPT_AddAppWithAllParams_CheckRpcsInDiffLvls) {
+ EXPECT_CALL(listener_, GetDevicesIds(application_id_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
// Arrange
AddSetDeviceData();
// File have empty parameters, so they are forbidden
LoadPTUFromJsonFile("json/sdl_update_pt_send_location_no_params.json");
- // Will be called each time permissions are checked
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(application_id_))
- .Times(4)
- .WillRepeatedly(Return(device_id_1_));
-
// Check RPC in each level
::policy::RPCParams input_params;
InsertRpcParametersInList(input_params);
::policy::CheckPermissionResult output;
// Rpc in FULL level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelFull, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelFull,
+ "SendLocation",
+ input_params,
+ output);
// Group which has RPC does not require user consent, so its auto-allowed for
// user. Since RPC 'parameters' section is present, but empty, that means
@@ -431,8 +455,12 @@ TEST_F(
ResetOutputList(output);
// Rpc in LIMITED level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelLimited, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelLimited,
+ "SendLocation",
+ input_params,
+ output);
EXPECT_EQ(::policy::kRpcDisallowed, output.hmi_level_permitted);
@@ -443,7 +471,8 @@ TEST_F(
ResetOutputList(output);
// Rpc in BACKGROUND level
- policy_manager_->CheckPermissions(application_id_,
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
kHmiLevelBackground,
"SendLocation",
input_params,
@@ -459,8 +488,12 @@ TEST_F(
ResetOutputList(output);
// Rpc in NONE level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelNone, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelNone,
+ "SendLocation",
+ input_params,
+ output);
EXPECT_EQ(::policy::kRpcDisallowed, output.hmi_level_permitted);
@@ -472,6 +505,8 @@ TEST_F(
TEST_F(PolicyManagerImplTest2,
CheckPermissions_SomeParamsAllowedInPT_CheckRpcsInDiffLvls) {
+ EXPECT_CALL(listener_, GetDevicesIds(application_id_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
// Arrange
AddSetDeviceData();
@@ -479,19 +514,18 @@ TEST_F(PolicyManagerImplTest2,
//"locationDescription", "phoneNumber" are allowed
LoadPTUFromJsonFile("json/sdl_update_pt_send_location_some_params.json");
- // Will be called each time permissions are checked
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(application_id_))
- .Times(4)
- .WillRepeatedly(Return(device_id_1_));
-
// Check RPC in each level
::policy::RPCParams input_params;
InsertRpcParametersInList(input_params);
::policy::CheckPermissionResult output;
// Rpc in FULL level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelFull, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelFull,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is allowed
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
@@ -520,8 +554,12 @@ TEST_F(PolicyManagerImplTest2,
output.list_of_undefined_params.clear();
// Rpc in LIMITED level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelLimited, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelLimited,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is allowed
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
@@ -539,7 +577,8 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in BACKGROUND level
- policy_manager_->CheckPermissions(application_id_,
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
kHmiLevelBackground,
"SendLocation",
input_params,
@@ -559,8 +598,12 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in NONE level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelNone, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelNone,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is disallowed
EXPECT_EQ(::policy::kRpcDisallowed, output.hmi_level_permitted);
// Check lists of parameters are empty
@@ -585,10 +628,12 @@ TEST_F(PolicyManagerImplTest2, GetCorrectStatus_PTUSuccessful) {
CreateLocalPT(preloaded_pt_filename_);
// Check
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
+ EXPECT_CALL(listener_, GetDevicesIds(application_id_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
// Adding changes PT status
- policy_manager_->AddApplication(application_id_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, application_id_, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
// Before load PT we should send notification about start updating
policy_manager_->OnUpdateStarted();
@@ -613,6 +658,8 @@ TEST_F(PolicyManagerImplTest2,
TEST_F(PolicyManagerImplTest2,
CheckPermissions_DiffParamsAllowedInGroups_CheckRpcsInDiffLvls) {
+ EXPECT_CALL(listener_, GetDevicesIds(application_id_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
// Arrange
AddSetDeviceData();
// Load Json to cache
@@ -621,19 +668,18 @@ TEST_F(PolicyManagerImplTest2,
// Allowed both groups of parameters
LoadPTUFromJsonFile("json/sdl_update_pt_2_groups_have_params.json");
- // Will be called each time permissions are checked
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(application_id_))
- .Times(4)
- .WillRepeatedly(Return(device_id_1_));
-
// Check RPC in each level
::policy::RPCParams input_params;
InsertRpcParametersInList(input_params);
::policy::CheckPermissionResult output;
// Rpc in FULL level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelFull, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelFull,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is allowed
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
// Check list of allowed parameters is not empty
@@ -652,8 +698,12 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in LIMITED level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelLimited, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelLimited,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is allowed
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
// Check list of allowed parameters is not empty
@@ -672,7 +722,8 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in BACKGROUND level
- policy_manager_->CheckPermissions(application_id_,
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
kHmiLevelBackground,
"SendLocation",
input_params,
@@ -696,8 +747,12 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in NONE level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelNone, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelNone,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is disallowed
EXPECT_EQ(::policy::kRpcDisallowed, output.hmi_level_permitted);
// Check lists of parameters are empty
@@ -726,9 +781,12 @@ TEST_F(PolicyManagerImplTest2,
2,
"Bluetooth"));
+ EXPECT_CALL(listener_, GetDevicesIds(application_id_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
// Add app from consented device. App will be assigned with default policies
- policy_manager_->AddApplication(application_id_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->SetUserConsentForDevice(device_id_1_, true);
+ policy_manager_->AddApplication(
+ device_id_1_, application_id_, HmiTypes(policy_table::AHT_DEFAULT));
std::ifstream ifile("json/sdl_update_pt_2_groups_no_params_in1.json");
Json::Reader reader;
@@ -743,19 +801,18 @@ TEST_F(PolicyManagerImplTest2,
EXPECT_TRUE(policy_manager_->LoadPT(kFilePtUpdateJson, msg));
EXPECT_FALSE(cache->IsPTPreloaded());
- // Will be called each time permissions are checked
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(application_id_))
- .Times(4)
- .WillRepeatedly(Return(device_id_1_));
-
// Check RPC in each level
::policy::RPCParams input_params;
InsertRpcParametersInList(input_params);
::policy::CheckPermissionResult output;
// Rpc in FULL level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelFull, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelFull,
+ "SendLocation",
+ input_params,
+ output);
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
EXPECT_TRUE(output.list_of_undefined_params.empty());
@@ -763,8 +820,12 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in LIMITED level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelLimited, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelLimited,
+ "SendLocation",
+ input_params,
+ output);
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
EXPECT_TRUE(output.list_of_undefined_params.empty());
@@ -772,7 +833,8 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in BACKGROUND level
- policy_manager_->CheckPermissions(application_id_,
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
kHmiLevelBackground,
"SendLocation",
input_params,
@@ -785,8 +847,12 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in NONE level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelNone, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelNone,
+ "SendLocation",
+ input_params,
+ output);
EXPECT_EQ(::policy::kRpcDisallowed, output.hmi_level_permitted);
EXPECT_TRUE(output.list_of_allowed_params.empty());
@@ -813,9 +879,12 @@ TEST_F(PolicyManagerImplTest2,
2,
"Bluetooth"));
+ EXPECT_CALL(listener_, GetDevicesIds(application_id_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
// Add app from consented device. App will be assigned with default policies
- policy_manager_->AddApplication(application_id_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->SetUserConsentForDevice(device_id_1_, true);
+ policy_manager_->AddApplication(
+ device_id_1_, application_id_, HmiTypes(policy_table::AHT_DEFAULT));
std::ifstream ifile(
"json/sdl_update_pt_2_groups_no_params_in1_omitted_in2.json");
@@ -831,19 +900,18 @@ TEST_F(PolicyManagerImplTest2,
EXPECT_TRUE(policy_manager_->LoadPT(kFilePtUpdateJson, msg));
EXPECT_FALSE(cache->IsPTPreloaded());
- // Will be called each time permissions are checked
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(application_id_))
- .Times(4)
- .WillRepeatedly(Return(device_id_1_));
-
// Check RPC in each level
::policy::RPCParams input_params;
InsertRpcParametersInList(input_params);
::policy::CheckPermissionResult output;
// Rpc in FULL level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelFull, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelFull,
+ "SendLocation",
+ input_params,
+ output);
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
EXPECT_TRUE(output.list_of_undefined_params.empty());
@@ -851,15 +919,20 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in LIMITED level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelLimited, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelLimited,
+ "SendLocation",
+ input_params,
+ output);
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
EXPECT_TRUE(output.list_of_undefined_params.empty());
EXPECT_EQ(10u, output.list_of_allowed_params.size());
ResetOutputList(output);
// Rpc in BACKGROUND level
- policy_manager_->CheckPermissions(application_id_,
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
kHmiLevelBackground,
"SendLocation",
input_params,
@@ -871,8 +944,12 @@ TEST_F(PolicyManagerImplTest2,
ResetOutputList(output);
// Rpc in NONE level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelNone, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelNone,
+ "SendLocation",
+ input_params,
+ output);
EXPECT_EQ(::policy::kRpcDisallowed, output.hmi_level_permitted);
EXPECT_TRUE(output.list_of_allowed_params.empty());
EXPECT_TRUE(output.list_of_disallowed_params.empty());
@@ -917,8 +994,8 @@ TEST_F(
GetPTU(kValidSdlPtUpdateJson);
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
// Try to add existing app
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
// Check no update required
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
}
@@ -939,14 +1016,14 @@ TEST_F(PolicyManagerImplTest2,
GetPTU(kValidSdlPtUpdateJson);
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
::policy::Counters counter = ::policy::Counters::DAYS_AFTER_EPOCH;
// Set PT was updated 10 days ago (limit is 30 days for now)
// So no limit exceeded
policy_manager_->PTUpdatedAt(counter, days - 10);
- policy_manager_->OnAppRegisteredOnMobile(app_id_2_);
+ policy_manager_->OnAppRegisteredOnMobile(device_id_2_, app_id_2_);
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
}
@@ -959,13 +1036,13 @@ TEST_F(PolicyManagerImplTest2,
GetPTU(kValidSdlPtUpdateJson);
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
::policy::Counters counter = ::policy::Counters::DAYS_AFTER_EPOCH;
// Set PT was updated 50 days ago (limit is 30 days for now)
policy_manager_->PTUpdatedAt(counter, days - 50);
- policy_manager_->OnAppRegisteredOnMobile(app_id_2_);
+ policy_manager_->OnAppRegisteredOnMobile(device_id_2_, app_id_2_);
EXPECT_EQ("UPDATE_NEEDED", policy_manager_->GetPolicyTableStatus());
}
@@ -979,8 +1056,8 @@ TEST_F(
GetPTU(kValidSdlPtUpdateJson);
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
// Try to add existing app
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
::policy::Counters counter = ::policy::Counters::DAYS_AFTER_EPOCH;
// Set PT was updated 10 days ago (limit is 30 days for now)
@@ -993,7 +1070,7 @@ TEST_F(
for (int i = 0; i < ign_cycles; ++i) {
policy_manager_->IncrementIgnitionCycles();
}
- policy_manager_->OnAppRegisteredOnMobile(app_id_2_);
+ policy_manager_->OnAppRegisteredOnMobile(device_id_2_, app_id_2_);
// Check update required
EXPECT_EQ("UPDATE_NEEDED", policy_manager_->GetPolicyTableStatus());
}
@@ -1022,10 +1099,10 @@ TEST_F(PolicyManagerImplTest2,
->SetUserPermissionsForDevice(
device_id_2_, consented_groups, disallowed_groups);
policy_manager_->SetUserConsentForDevice(device_id_2_, true);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_))
- .WillRepeatedly(Return(device_id_2_));
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_2_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
GetPTU(kValidSdlPtUpdateJson);
::policy::PermissionConsent perm_consent;
@@ -1045,7 +1122,8 @@ TEST_F(PolicyManagerImplTest2,
policy_manager_->SetUserConsentForApp(perm_consent,
policy::PolicyManager::kSilentMode);
- policy_manager_->SendNotificationOnPermissionsUpdated(app_id_2_);
+ policy_manager_->SendNotificationOnPermissionsUpdated(device_id_2_,
+ app_id_2_);
std::vector< ::policy::FunctionalGroupPermission> actual_groups_permissions;
std::vector< ::policy::FunctionalGroupPermission>::iterator it;
policy_manager_->GetUserConsentForApp(
@@ -1069,8 +1147,10 @@ TEST_F(PolicyManagerImplTest2,
CanAppKeepContext_SetPoliciesForAppUpdated_ExpectAppCanKeepContext) {
// Arrange
CreateLocalPT(preloaded_pt_filename_);
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_2_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
GetPTU(kValidSdlPtUpdateJson);
// Check keep context in updated policies for app
EXPECT_TRUE(policy_manager_->CanAppKeepContext(app_id_2_));
@@ -1080,8 +1160,10 @@ TEST_F(PolicyManagerImplTest2,
CanAppStealFocus_SetPoliciesForAppUpdated_ExpectAppCanStealFocus) {
// Arrange
CreateLocalPT(preloaded_pt_filename_);
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_2_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
GetPTU(kValidSdlPtUpdateJson);
// Check keep context in updated policies for app
EXPECT_TRUE(policy_manager_->CanAppKeepContext(app_id_2_));
@@ -1130,10 +1212,10 @@ TEST_F(
->SetUserPermissionsForDevice(
device_id_2_, consented_groups, disallowed_groups);
policy_manager_->SetUserConsentForDevice(device_id_2_, true);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_))
- .WillRepeatedly(Return(device_id_2_));
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_2_))
+ .WillRepeatedly(Return(transport_manager::DeviceList(1, device_id_2_)));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
GetPTU(kValidSdlPtUpdateJson);
::policy::PermissionConsent perm_consent;
@@ -1153,7 +1235,8 @@ TEST_F(
policy_manager_->SetUserConsentForApp(perm_consent,
policy::PolicyManager::kSilentMode);
- policy_manager_->SendNotificationOnPermissionsUpdated(app_id_2_);
+ policy_manager_->SendNotificationOnPermissionsUpdated(device_id_2_,
+ app_id_2_);
std::vector< ::policy::FunctionalGroupPermission> actual_groups_permissions;
std::vector< ::policy::FunctionalGroupPermission>::iterator it;
policy_manager_->GetPermissionsForApp(
@@ -1177,19 +1260,23 @@ TEST_F(
PolicyManagerImplTest2,
GetAppRequestTypes_AddApp_UpdateAppPolicies_ExpectReceivedRequestTypesCorrect) {
// Arrange
+ const transport_manager::DeviceHandle handle = 1;
CreateLocalPT(preloaded_pt_filename_);
-
- policy_manager_->AddApplication(app_id_3_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_3_))
+ .WillRepeatedly(Return(transport_manager::DeviceList(1, device_id_1_)));
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(handle, app_id_3_))
+ .WillRepeatedly(Return(device_id_1_));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_3_, HmiTypes(policy_table::AHT_DEFAULT));
::policy::StringArray app_requests =
- policy_manager_->GetAppRequestTypes(app_id_3_);
+ policy_manager_->GetAppRequestTypes(handle, app_id_3_);
EXPECT_EQ(1u, app_requests.size());
Json::Value root = GetPTU(kPtuRequestTypeJson);
Json::Value request_Types = Json::Value(Json::arrayValue);
request_Types =
root["policy_table"]["app_policies"][app_id_3_]["RequestType"];
- app_requests = policy_manager_->GetAppRequestTypes(app_id_3_);
+ app_requests = policy_manager_->GetAppRequestTypes(handle, app_id_3_);
EXPECT_EQ(request_Types.size(), app_requests.size());
// Check nicknames match
for (uint32_t i = 0; i < request_Types.size(); ++i) {
@@ -1213,9 +1300,11 @@ TEST_F(
rpc::ValidationReport report("policy_table");
pt->ReportErrors(&report);
}
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_2_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
// Add new app
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
uint32_t result = policy_manager_->HeartBeatTimeout(app_id_2_);
// By default hertbeat timeout is 0
EXPECT_EQ(0u, result);
@@ -1261,10 +1350,10 @@ TEST_F(PolicyManagerImplTest2,
->SetUserPermissionsForDevice(
device_id_2_, consented_groups, disallowed_groups);
policy_manager_->SetUserConsentForDevice(device_id_2_, true);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_))
- .WillRepeatedly(Return(device_id_2_));
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_2_))
+ .WillRepeatedly(Return(transport_manager::DeviceList(1, device_id_2_)));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
GetPTU(kValidSdlPtUpdateJson);
::policy::PermissionConsent perm_consent;
@@ -1284,7 +1373,8 @@ TEST_F(PolicyManagerImplTest2,
policy_manager_->SetUserConsentForApp(perm_consent,
policy::PolicyManager::kSilentMode);
- policy_manager_->SendNotificationOnPermissionsUpdated(app_id_2_);
+ policy_manager_->SendNotificationOnPermissionsUpdated(device_id_2_,
+ app_id_2_);
std::vector< ::policy::FunctionalGroupPermission> actual_groups_permissions;
std::vector< ::policy::FunctionalGroupPermission>::iterator it;
policy_manager_->GetPermissionsForApp(
@@ -1330,20 +1420,22 @@ TEST_F(PolicyManagerImplTest2,
SingleInvalidRequestTypeInPTU_ExpectReplaceWithDefaultValues) {
// Arrange
const std::string section_name = app_id_2_;
+ const transport_manager::DeviceHandle handle = 1;
// Arrange
CreateLocalPT(preloaded_pt_filename_);
// Setting device consent to 'true' in order to have defult application
// permissions, request type etc.
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_))
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(handle, app_id_2_))
.WillRepeatedly(Return(device_id_1_));
policy_manager_->SetUserConsentForDevice(device_id_1_, true);
-
+ EXPECT_CALL(listener_, GetDevicesIds(section_name))
+ .WillRepeatedly(Return(transport_manager::DeviceList(1, device_id_1_)));
// Add app
- policy_manager_->AddApplication(section_name,
- HmiTypes(policy_table::AHT_DEFAULT));
- EXPECT_CALL(listener_, OnPendingPermissionChange(section_name));
+ policy_manager_->AddApplication(
+ device_id_1_, section_name, HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, OnPendingPermissionChange(device_id_1_, section_name));
// PTU has single invalid RequestTypes, which must be dropped and replaced
// with default RT
@@ -1351,18 +1443,18 @@ TEST_F(PolicyManagerImplTest2,
// Get RequestTypes from <app_id> section of app policies after PT update
::policy::StringArray app_request_types_after =
- policy_manager_->GetAppRequestTypes(section_name);
+ policy_manager_->GetAppRequestTypes(handle, section_name);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(kDefaultId))
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(handle, kDefaultId))
.WillOnce(Return(device_id_1_));
::policy::StringArray default_request_types_after =
- policy_manager_->GetAppRequestTypes(kDefaultId);
+ policy_manager_->GetAppRequestTypes(handle, kDefaultId);
// Check sizes of Request types of PT and PTU
EXPECT_EQ(4u, app_request_types_after.size());
::policy::AppPermissions permissions =
- policy_manager_->GetAppPermissionsChanges(section_name);
+ policy_manager_->GetAppPermissionsChanges(device_id_1_, section_name);
EXPECT_TRUE(permissions.requestTypeChanged);
policy_table::RequestType temp_res1;
diff --git a/src/components/policy/policy_external/test/policy_manager_impl_snapshot_test.cc b/src/components/policy/policy_external/test/policy_manager_impl_snapshot_test.cc
index 3c6377cf5f..ddb5474df3 100644
--- a/src/components/policy/policy_external/test/policy_manager_impl_snapshot_test.cc
+++ b/src/components/policy/policy_external/test/policy_manager_impl_snapshot_test.cc
@@ -259,25 +259,30 @@ TEST_F(
PolicyManagerImplTest2,
AddValidRequestTypeToPT_GetNewAppWithSpecificPoliciesViaPTU_ExpectRTAdded) {
const std::string& app_id = application_id_;
+ const transport_manager::DeviceHandle handle = 1;
// Arrange
CreateLocalPT(preloaded_pt_filename_);
+ EXPECT_CALL(listener_, GetDevicesIds(app_id))
+ .WillRepeatedly(Return(transport_manager::DeviceList(1, device_id_1_)));
// Add app
- policy_manager_->AddApplication(app_id, HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id, HmiTypes(policy_table::AHT_DEFAULT));
// Check app gets RequestTypes from pre_DataConsent of app_policies
// section
- pt_request_types_ = policy_manager_->GetAppRequestTypes(app_id);
+ pt_request_types_ = policy_manager_->GetAppRequestTypes(handle, app_id);
// Only single item as in pre_DataConsent in preloaded PT
EXPECT_EQ(1u, pt_request_types_.size());
- EXPECT_CALL(listener_, OnPendingPermissionChange(app_id)).Times(1);
+ EXPECT_CALL(listener_, OnPendingPermissionChange(device_id_1_, app_id))
+ .Times(1);
// PTU has RequestTypes as [] - means 'all allowed'
Json::Value root = GetPTU("json/PTU2.json");
// Setting device consent to 'true' in order to have appropriate application
// permissions, request type etc.
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(application_id_))
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(handle, app_id))
.WillRepeatedly(Return(device_id_1_));
policy_manager_->SetUserConsentForDevice(device_id_1_, true);
@@ -288,13 +293,13 @@ TEST_F(
pt_request_types_.clear();
// Get RequestTypes from <app_id> section of app policies after PT update
- pt_request_types_ = policy_manager_->GetAppRequestTypes(app_id);
+ pt_request_types_ = policy_manager_->GetAppRequestTypes(handle, app_id);
// Check sizes of Request types of PT and PTU
ASSERT_EQ(ptu_request_types_size_, pt_request_types_.size());
::policy::AppPermissions permissions =
- policy_manager_->GetAppPermissionsChanges(app_id);
+ policy_manager_->GetAppPermissionsChanges(device_id_1_, app_id);
EXPECT_TRUE(permissions.requestTypeChanged);
::policy::StringArray result;
diff --git a/src/components/policy/policy_external/test/policy_manager_impl_test.cc b/src/components/policy/policy_external/test/policy_manager_impl_test.cc
index 47b3959aee..b809c83d75 100644
--- a/src/components/policy/policy_external/test/policy_manager_impl_test.cc
+++ b/src/components/policy/policy_external/test/policy_manager_impl_test.cc
@@ -341,8 +341,10 @@ TEST_F(PolicyManagerImplTest, MarkUnpairedDevice) {
TEST_F(PolicyManagerImplTest2, GetCurrentDeviceId) {
// Arrange
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)).Times(1);
- EXPECT_EQ("", policy_manager_->GetCurrentDeviceId(app_id_2_));
+ const transport_manager::DeviceHandle handle = 1;
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(handle, app_id_2_))
+ .Times(1);
+ EXPECT_EQ("", policy_manager_->GetCurrentDeviceId(handle, app_id_2_));
}
TEST_F(PolicyManagerImplTest2, UpdateApplication_AppServices) {
@@ -424,7 +426,7 @@ TEST_F(
status.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn));
status.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOn));
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
+ EXPECT_CALL(listener_, OnPermissionsUpdated(device_id_1_, app_id_1_, _));
EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status));
@@ -473,7 +475,7 @@ TEST_F(
status.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn));
status.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOn));
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
+ EXPECT_CALL(listener_, OnPermissionsUpdated(device_id_1_, app_id_1_, _));
EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status));
@@ -529,12 +531,12 @@ TEST_F(
EXPECT_FALSE(pt->policy_table.device_data->end() != updated_device_data);
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
+ EXPECT_CALL(listener_, OnPermissionsUpdated(device_id_1_, app_id_1_, _));
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_, app_id_1_))
.WillRepeatedly(Return(device_id_1_));
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
// Check ExternalConsent consents for application
updated_device_data = pt->policy_table.device_data->find(device_id_1_);
@@ -597,12 +599,12 @@ TEST_F(
EXPECT_FALSE(pt->policy_table.device_data->end() != updated_device_data);
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
+ EXPECT_CALL(listener_, OnPermissionsUpdated(device_id_1_, app_id_1_, _));
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_, app_id_1_))
.WillRepeatedly(Return(device_id_1_));
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
// Checking ExternalConsent consents after setting new ExternalConsent status
ApplicationPolicies::const_iterator app_parameters =
@@ -652,15 +654,12 @@ TEST_F(
EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t));
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
- .WillOnce(Return(device_id_1_)) // registered
- .WillOnce(Return("")) // not registered
- .WillRepeatedly(Return(device_id_1_)); // again registered
-
+ EXPECT_CALL(listener_, OnPermissionsUpdated(device_id_1_, app_id_1_, _));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_1_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
// First register w/o app having groups to consent
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
// Act
std::shared_ptr<policy_table::Table> pt =
@@ -691,8 +690,8 @@ TEST_F(
EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t));
// Second time register w/ app having groups to consent
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
// Checking ExternalConsent consents after setting new ExternalConsent status
ApplicationPolicies::const_iterator app_parameters =
@@ -742,15 +741,11 @@ TEST_F(
EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t));
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
- .WillOnce(Return(device_id_1_)) // registered
- .WillOnce(Return("")) // not registered
- .WillRepeatedly(Return(device_id_1_)); // registered again
+ EXPECT_CALL(listener_, OnPermissionsUpdated(device_id_1_, app_id_1_, _));
// First register w/o app having groups to consent
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
// Act
std::shared_ptr<policy_table::Table> pt =
@@ -781,8 +776,8 @@ TEST_F(
EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t));
// Second time register w/ app having groups to consent
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
// Check ExternalConsent consents for application
updated_device_data = pt->policy_table.device_data->find(device_id_1_);
@@ -840,12 +835,11 @@ TEST_F(PolicyManagerImplTest_ExternalConsent,
EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status));
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
- .WillRepeatedly(Return(device_id_1_));
-
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, OnPermissionsUpdated(device_id_1_, app_id_1_, _));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_1_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
std::shared_ptr<policy_table::Table> pt =
policy_manager_->GetCache()->GetPT();
@@ -965,12 +959,11 @@ TEST_F(PolicyManagerImplTest_ExternalConsent,
EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status));
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
- .WillRepeatedly(Return(device_id_1_));
-
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, OnPermissionsUpdated(device_id_1_, app_id_1_, _));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_1_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
std::shared_ptr<policy_table::Table> pt =
policy_manager_->GetCache()->GetPT();
@@ -1099,7 +1092,7 @@ TEST_F(
status_on.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn));
status_on.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOn));
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
+ EXPECT_CALL(listener_, OnPermissionsUpdated(device_id_1_, app_id_1_, _));
EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status_on));
@@ -1135,7 +1128,8 @@ TEST_F(
status_off.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOff));
status_off.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOff));
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(1);
+ EXPECT_CALL(listener_, OnPermissionsUpdated(device_id_1_, app_id_1_, _))
+ .Times(1);
EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status_off));
diff --git a/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc b/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc
index 82d87cd7ba..8a62772992 100644
--- a/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc
+++ b/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc
@@ -307,7 +307,10 @@ void PolicyManagerImplTest2::AddRTtoPT(const std::string& update_file_name,
// Arrange
CreateLocalPT(preloaded_pt_filename_);
// Get RequestTypes from section of preloaded_pt app_policies
- pt_request_types_ = policy_manager_->GetAppRequestTypes(section_name);
+ const transport_manager::DeviceHandle handle = 1;
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(handle, section_name))
+ .WillRepeatedly(Return(device_id_1_));
+ pt_request_types_ = policy_manager_->GetAppRequestTypes(handle, section_name);
EXPECT_EQ(rt_number, pt_request_types_.size());
Json::Value root = GetPTU(update_file_name);
// Get Request Types from JSON (PTU)
@@ -316,7 +319,7 @@ void PolicyManagerImplTest2::AddRTtoPT(const std::string& update_file_name,
ptu_request_types_size_ = ptu_request_types_.size();
pt_request_types_.clear();
// Get RequestTypes from section of PT app policies after update
- pt_request_types_ = policy_manager_->GetAppRequestTypes(section_name);
+ pt_request_types_ = policy_manager_->GetAppRequestTypes(handle, section_name);
// Check number of RT in PTU and PT now are equal
ASSERT_EQ(ptu_request_types_size_ - invalid_rt_number,
pt_request_types_.size());
@@ -329,14 +332,17 @@ void PolicyManagerImplTest2::AddRTtoAppSectionPT(
const uint32_t invalid_rt_number) {
// Arrange
CreateLocalPT(preloaded_pt_filename_);
+ const transport_manager::DeviceHandle handle = 1;
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(handle, section_name))
+ .WillRepeatedly(Return(device_id_1_));
// Add app
- policy_manager_->AddApplication(section_name,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, section_name, HmiTypes(policy_table::AHT_DEFAULT));
// Check app gets RequestTypes from pre_DataConsent of app_policies
// section
- pt_request_types_ = policy_manager_->GetAppRequestTypes(section_name);
+ pt_request_types_ = policy_manager_->GetAppRequestTypes(handle, section_name);
EXPECT_EQ(rt_number, pt_request_types_.size());
- EXPECT_CALL(listener_, OnPendingPermissionChange(section_name)).Times(1);
+ EXPECT_CALL(listener_, OnPendingPermissionChange(_, section_name)).Times(1);
Json::Value root = GetPTU(update_file_name);
// Get App Request Types from PTU
@@ -346,13 +352,13 @@ void PolicyManagerImplTest2::AddRTtoAppSectionPT(
pt_request_types_.clear();
// Get RequestTypes from <app_id> section of app policies after PT update
- pt_request_types_ = policy_manager_->GetAppRequestTypes(section_name);
+ pt_request_types_ = policy_manager_->GetAppRequestTypes(handle, section_name);
// Check sizes of Request types of PT and PTU
ASSERT_EQ(ptu_request_types_size_ - invalid_rt_number,
pt_request_types_.size());
::policy::AppPermissions permissions =
- policy_manager_->GetAppPermissionsChanges(section_name);
+ policy_manager_->GetAppPermissionsChanges(device_id_1_, section_name);
EXPECT_TRUE(permissions.requestTypeChanged);
}
@@ -449,9 +455,13 @@ void PolicyManagerImplTest2::
2,
"Bluetooth"));
+ EXPECT_CALL(listener_, GetDevicesIds(application_id_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
+
// Add app from consented device. App will be assigned with default policies
- policy_manager_->AddApplication(application_id_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->SetUserConsentForDevice(device_id_1_, true);
+ policy_manager_->AddApplication(
+ device_id_1_, application_id_, HmiTypes(policy_table::AHT_DEFAULT));
// Expect all parameters are allowed
std::ifstream ifile(update_file);
@@ -467,19 +477,18 @@ void PolicyManagerImplTest2::
EXPECT_TRUE(policy_manager_->LoadPT(kFilePtUpdateJson, msg));
EXPECT_FALSE(cache->IsPTPreloaded());
- // Will be called each time permissions are checked
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(application_id_))
- .Times(4)
- .WillRepeatedly(Return(device_id_1_));
-
// Check RPC in each level
::policy::RPCParams input_params;
InsertRpcParametersInList(input_params);
::policy::CheckPermissionResult output;
// Rpc in FULL level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelFull, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelFull,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is allowed
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
// Check list of allowed parameters is not empty
@@ -489,8 +498,12 @@ void PolicyManagerImplTest2::
ResetOutputList(output);
// Rpc in LIMITED level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelLimited, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelLimited,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is allowed
EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted);
// Check list of allowed parameters is not empty
@@ -500,7 +513,8 @@ void PolicyManagerImplTest2::
ResetOutputList(output);
// Rpc in BACKGROUND level
- policy_manager_->CheckPermissions(application_id_,
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
kHmiLevelBackground,
"SendLocation",
input_params,
@@ -515,8 +529,12 @@ void PolicyManagerImplTest2::
ResetOutputList(output);
// Rpc in NONE level
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelNone, "SendLocation", input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelNone,
+ "SendLocation",
+ input_params,
+ output);
// Check RPC is disallowed
EXPECT_EQ(::policy::kRpcDisallowed, output.hmi_level_permitted);
// Check lists of parameters are empty
@@ -529,8 +547,12 @@ void PolicyManagerImplTest2::CheckRpcPermissions(
const std::string& rpc_name, const PermitResult& expected_permission) {
::policy::RPCParams input_params;
::policy::CheckPermissionResult output;
- policy_manager_->CheckPermissions(
- application_id_, kHmiLevelFull, rpc_name, input_params, output);
+ policy_manager_->CheckPermissions(device_id_1_,
+ application_id_,
+ kHmiLevelFull,
+ rpc_name,
+ input_params,
+ output);
EXPECT_EQ(expected_permission, output.hmi_level_permitted);
}
@@ -541,7 +563,7 @@ void PolicyManagerImplTest2::CheckRpcPermissions(
::policy::RPCParams input_params;
::policy::CheckPermissionResult output;
policy_manager_->CheckPermissions(
- app_id, kHmiLevelFull, rpc_name, input_params, output);
+ device_id_1_, app_id, kHmiLevelFull, rpc_name, input_params, output);
EXPECT_EQ(out_expected_permission, output.hmi_level_permitted);
}
@@ -576,8 +598,9 @@ void PolicyManagerImplTest2::AddSetDeviceData() {
"Bluetooth"));
// Add app from consented device. App will be assigned with default policies
- policy_manager_->AddApplication(application_id_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->SetUserConsentForDevice(device_id_1_, true);
+ policy_manager_->AddApplication(
+ device_id_1_, application_id_, HmiTypes(policy_table::AHT_DEFAULT));
(policy_manager_->GetCache())->AddDevice(device_id_1_, "Bluetooth");
}
diff --git a/src/components/policy/policy_external/test/policy_manager_impl_user_consent_test.cc b/src/components/policy/policy_external/test/policy_manager_impl_user_consent_test.cc
index c58ae00ff4..e42ecbacd7 100644
--- a/src/components/policy/policy_external/test/policy_manager_impl_user_consent_test.cc
+++ b/src/components/policy/policy_external/test/policy_manager_impl_user_consent_test.cc
@@ -34,6 +34,7 @@
#include "policy/policy_manager_impl_test_base.h"
#include "utils/date_time.h"
+#include "utils/macro.h"
namespace test {
namespace components {
@@ -49,13 +50,13 @@ TEST_F(
// Arrange
CreateLocalPT(preloaded_pt_filename_);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_, app_id_1_))
.WillRepeatedly(Return(device_id_1_));
policy_manager_->SetUserConsentForDevice(device_id_1_, true);
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_EQ("UPDATE_NEEDED", policy_manager_->GetPolicyTableStatus());
}
@@ -76,13 +77,14 @@ TEST_F(
policy_manager_->PTUpdatedAt(DAYS_AFTER_EPOCH, days_after_epoch);
policy_manager_->PTUpdatedAt(KILOMETERS, 1000);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
+ const transport_manager::DeviceHandle handle = 1;
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(handle, app_id_1_))
.WillRepeatedly(Return(device_id_1_));
policy_manager_->SetUserConsentForDevice(device_id_1_, false);
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
}
@@ -92,10 +94,13 @@ TEST_F(
ReactOnUserDevConsentForApp_AddNewApplicationFromDeviceWithoutConsent_ExpectPreDataConsent) {
// Arrange
CreateLocalPT(preloaded_pt_filename_);
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ const transport_manager::DeviceHandle handle = 1;
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(handle, app_id_1_))
+ .WillRepeatedly(Return(device_id_1_));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
ASSERT_TRUE(policy_manager_->IsPredataPolicy(app_id_1_));
- policy_manager_->ReactOnUserDevConsentForApp(app_id_1_, false);
+ policy_manager_->ReactOnUserDevConsentForApp(handle, app_id_1_, false);
EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_1_));
}
@@ -106,8 +111,8 @@ TEST_F(PolicyManagerImplTest2,
CreateLocalPT(kSdlPreloadedPtJson2);
ASSERT_TRUE(
(policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth"));
- policy_manager_->AddApplication(application_id_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_2_, application_id_, HmiTypes(policy_table::AHT_DEFAULT));
// Expect RPCs from pre_dataConsent group are allowed
// Next checks are equal to BaseBeforeDataConsent_APIs.xml checks from task
@@ -155,11 +160,11 @@ TEST_F(PolicyManagerImplTest2,
TEST_F(PolicyManagerImplTest2, CheckPreDataConsent_GetDefaultHmiLevel_NONE) {
// Arrange
CreateLocalPT(preloaded_pt_filename_);
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
std::string default_hmi;
// Default HMI level is NONE
- policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi);
+ policy_manager_->GetDefaultHmi(device_id_1_, app_id_2_, &default_hmi);
EXPECT_EQ("NONE", default_hmi);
// Default priority level is NONE
@@ -173,11 +178,11 @@ TEST_F(PolicyManagerImplTest2,
CheckPreDataConsent_GetDefaultHmiLevel_BACKGROUNG) {
// Arrange
CreateLocalPT(kSdlPreloadedPtJson2);
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
std::string default_hmi;
// Default HMI level is BACKGROUND
- policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi);
+ policy_manager_->GetDefaultHmi(device_id_1_, app_id_2_, &default_hmi);
EXPECT_EQ("BACKGROUND", default_hmi);
// Default priority level is EMERGENCY
std::string priority1;
@@ -191,10 +196,13 @@ TEST_F(
// Arrange
// RequestTypes for default & preDataConsent are different
CreateLocalPT("json/ptu_requestType.json");
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ const transport_manager::DeviceHandle handle = 1;
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(handle, app_id_1_))
+ .WillRepeatedly(Return(device_id_1_));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
ASSERT_TRUE(policy_manager_->IsPredataPolicy(app_id_1_));
- policy_manager_->ReactOnUserDevConsentForApp(app_id_1_, true);
+ policy_manager_->ReactOnUserDevConsentForApp(handle, app_id_1_, true);
EXPECT_FALSE(policy_manager_->IsPredataPolicy(app_id_1_));
// Expect app_id_1_ has default policy
EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_1_));
@@ -206,11 +214,14 @@ TEST_F(
// Arrange
// RequestTypes for default & preDataConsent are the same
CreateLocalPT(kPtu2RequestTypeJson);
- policy_manager_->AddApplication(app_id_1_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ const transport_manager::DeviceHandle handle = 1;
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(handle, app_id_1_))
+ .WillRepeatedly(Return(device_id_1_));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_1_, HmiTypes(policy_table::AHT_DEFAULT));
ASSERT_TRUE(policy_manager_->IsPredataPolicy(app_id_1_));
- EXPECT_CALL(listener_, OnPendingPermissionChange(app_id_1_)).Times(0);
- policy_manager_->ReactOnUserDevConsentForApp(app_id_1_, true);
+ EXPECT_CALL(listener_, OnPendingPermissionChange(_, app_id_1_)).Times(0);
+ policy_manager_->ReactOnUserDevConsentForApp(handle, app_id_1_, true);
EXPECT_FALSE(policy_manager_->IsPredataPolicy(app_id_1_));
EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_1_));
}
@@ -297,12 +308,12 @@ TEST_F(PolicyManagerImplTest2,
policy_manager_->GetUserConsentForDevice(device_id_2_);
// Check
EXPECT_EQ(::policy::DeviceConsent::kDeviceDisallowed, consent);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_))
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_, app_id_2_))
.WillRepeatedly(Return(device_id_2_));
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
std::string default_hmi;
- policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi);
+ policy_manager_->GetDefaultHmi(device_id_2_, app_id_2_, &default_hmi);
EXPECT_EQ("NONE", default_hmi);
}
@@ -310,12 +321,12 @@ TEST_F(PolicyManagerImplTest2,
GetDefaultHmi_SetDeviceAllowed_ExpectReceivedHmiCorrect) {
// Arrange
CreateLocalPT(kPtu2RequestTypeJson);
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
// Check if app has preData policy
EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_));
std::string default_hmi1;
- policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi1);
+ policy_manager_->GetDefaultHmi(device_id_1_, app_id_2_, &default_hmi1);
EXPECT_EQ("NONE", default_hmi1);
ASSERT_TRUE(
(policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth"));
@@ -333,13 +344,13 @@ TEST_F(PolicyManagerImplTest2,
policy_manager_->GetUserConsentForDevice(device_id_2_);
// Check
EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_))
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_, app_id_2_))
.WillRepeatedly(Return(device_id_2_));
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_2_));
std::string default_hmi2;
- policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi2);
+ policy_manager_->GetDefaultHmi(device_id_2_, app_id_2_, &default_hmi2);
EXPECT_EQ("LIMITED", default_hmi2);
}
@@ -347,8 +358,8 @@ TEST_F(PolicyManagerImplTest2,
GetDefaultPriority_SetDeviceAllowed_ExpectReceivedPriorityCorrect) {
// Arrange
CreateLocalPT(kPtu2RequestTypeJson);
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
// Check if app has preData policy
EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_));
std::string priority1;
@@ -370,10 +381,10 @@ TEST_F(PolicyManagerImplTest2,
policy_manager_->GetUserConsentForDevice(device_id_2_);
// Check
EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_))
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_, app_id_2_))
.WillRepeatedly(Return(device_id_2_));
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_2_));
std::string priority2;
EXPECT_TRUE(policy_manager_->GetPriority(app_id_2_, &priority2));
@@ -490,8 +501,10 @@ TEST_F(PolicyManagerImplTest2, SetDeviceInfo_ExpectDevInfoAddedToPT) {
TEST_F(PolicyManagerImplTest2, GetInitialAppData_ExpectReceivedConsentCorrect) {
// Arrange
CreateLocalPT(preloaded_pt_filename_);
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_2_))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
::policy::StringArray app_nicknames;
::policy::StringArray app_hmi_types;
policy_manager_->GetInitialAppData(app_id_2_, &app_nicknames, &app_hmi_types);
@@ -534,8 +547,8 @@ TEST_F(
CanAppKeepContext_AddAppFromUnconsentedDevice_ExpectAppCannotKeepContext) {
// Arrange
CreateLocalPT(preloaded_pt_filename_);
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
// Check if app has preData policy
EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_));
// Check keep context in preData policy
@@ -548,8 +561,8 @@ TEST_F(PolicyManagerImplTest2,
CreateLocalPT(preloaded_pt_filename_);
ASSERT_TRUE(
(policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth"));
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
ASSERT_TRUE((policy_manager_->GetCache())
->SetDeviceData(device_id_2_,
"hardware IPX",
@@ -563,10 +576,10 @@ TEST_F(PolicyManagerImplTest2,
::policy::DeviceConsent consent =
policy_manager_->GetUserConsentForDevice(device_id_2_);
EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_))
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_, app_id_2_))
.WillRepeatedly(Return(device_id_2_));
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_2_));
// Check keep context in default policy
EXPECT_FALSE(policy_manager_->CanAppKeepContext(app_id_2_));
@@ -576,8 +589,8 @@ TEST_F(PolicyManagerImplTest2,
CanAppStealFocus_AddAppFromUnconsentedDevice_ExpectAppCannotStealFocus) {
// Arrange
CreateLocalPT(preloaded_pt_filename_);
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
// Check if app has preData policy
EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_));
// Check keep context in preData policy
@@ -590,8 +603,8 @@ TEST_F(PolicyManagerImplTest2,
CreateLocalPT(preloaded_pt_filename_);
ASSERT_TRUE(
(policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth"));
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
ASSERT_TRUE((policy_manager_->GetCache())
->SetDeviceData(device_id_2_,
"hardware IPX",
@@ -605,10 +618,10 @@ TEST_F(PolicyManagerImplTest2,
::policy::DeviceConsent consent =
policy_manager_->GetUserConsentForDevice(device_id_2_);
EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_))
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_, app_id_2_))
.WillRepeatedly(Return(device_id_2_));
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_2_));
// Check keep context in default policy
EXPECT_FALSE(policy_manager_->CanAppStealFocus(app_id_2_));
@@ -618,8 +631,8 @@ TEST_F(PolicyManagerImplTest2,
IsPredataPolicy_SetAppWIthPredataPolicy_ExpectPredataPolicy) {
// Arrange
CreateLocalPT(preloaded_pt_filename_);
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
// Check if app has preData policy
EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_));
}
@@ -629,18 +642,18 @@ TEST_F(
SendNotificationOnPermissionsUpdated_SetDeviceAllowed_ExpectNotificationSent) {
// Arrange
CreateLocalPT(kPtu2RequestTypeJson);
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_2_)).Times(0);
+ policy_manager_->AddApplication(
+ device_id_1_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
// Check if app has preData policy
EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_));
std::string default_hmi1;
- policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi1);
+ policy_manager_->GetDefaultHmi(device_id_1_, app_id_2_, &default_hmi1);
EXPECT_EQ("NONE", default_hmi1);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_))
- .WillOnce(Return(""));
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_2_, _, default_hmi1))
+ EXPECT_CALL(listener_, OnPermissionsUpdated(device_id_1_, app_id_2_, _))
.Times(0);
- policy_manager_->SendNotificationOnPermissionsUpdated(app_id_2_);
+ policy_manager_->SendNotificationOnPermissionsUpdated(device_id_1_,
+ app_id_2_);
ASSERT_TRUE(
(policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth"));
@@ -658,16 +671,17 @@ TEST_F(
policy_manager_->GetUserConsentForDevice(device_id_2_);
// Check
EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent);
- EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_))
- .WillRepeatedly(Return(device_id_2_));
- policy_manager_->AddApplication(app_id_2_,
- HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener_, GetDevicesIds(app_id_2_)).Times(0);
+ policy_manager_->AddApplication(
+ device_id_2_, app_id_2_, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_2_));
std::string default_hmi2;
- policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi2);
+ policy_manager_->GetDefaultHmi(device_id_2_, app_id_2_, &default_hmi2);
EXPECT_EQ("LIMITED", default_hmi2);
- EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_2_, _, default_hmi2));
- policy_manager_->SendNotificationOnPermissionsUpdated(app_id_2_);
+ EXPECT_CALL(listener_,
+ OnPermissionsUpdated(device_id_2_, app_id_2_, _, default_hmi2));
+ policy_manager_->SendNotificationOnPermissionsUpdated(device_id_2_,
+ app_id_2_);
}
} // namespace policy_test
diff --git a/src/components/policy/policy_regular/CMakeLists.txt b/src/components/policy/policy_regular/CMakeLists.txt
index 3679b2efea..b7455388e9 100644
--- a/src/components/policy/policy_regular/CMakeLists.txt
+++ b/src/components/policy/policy_regular/CMakeLists.txt
@@ -38,6 +38,8 @@ include_directories (
${JSONCPP_INCLUDE_DIRECTORY}
${COMPONENTS_DIR}/utils/include/
${COMPONENTS_DIR}/config_profile/include
+ ${COMPONENTS_DIR}/connection_handler/include/
+ ${COMPONENTS_DIR}/protocol_handler/include/
${LOG4CXX_INCLUDE_DIRECTORY}
${BOOST_INCLUDE_DIR}
)
diff --git a/src/components/policy/policy_regular/include/policy/policy_manager_impl.h b/src/components/policy/policy_regular/include/policy/policy_manager_impl.h
index 13d19e1a41..903f7820d2 100644
--- a/src/components/policy/policy_regular/include/policy/policy_manager_impl.h
+++ b/src/components/policy/policy_regular/include/policy/policy_manager_impl.h
@@ -265,12 +265,15 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Update Application Policies as reaction
* on User allowing/disallowing device this app is running on.
+ * @param device_handle device identifier
* @param app_id Unique application id
* @param is_device_allowed true if user allowing device otherwise false
* @return true if operation was successful
*/
- bool ReactOnUserDevConsentForApp(const std::string app_id,
- const bool is_device_allowed) OVERRIDE;
+ bool ReactOnUserDevConsentForApp(
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string app_id,
+ const bool is_device_allowed) OVERRIDE;
/**
* @brief Retrieves data from app_policies about app on its registration:
@@ -311,12 +314,14 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Get default HMI level for application
+ * @param device_id device identifier
* @param policy_app_id Unique application id
* @param default_hmi Default HMI level for application or empty, if value
* was not set
* @return true, if succedeed, otherwise - false
*/
- bool GetDefaultHmi(const std::string& policy_app_id,
+ bool GetDefaultHmi(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi) const OVERRIDE;
/**
@@ -359,9 +364,11 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Return device id, which hosts specific application
+ * @param device_handle device identifier
* @param policy_app_id Application id, which is required to update device id
*/
std::string& GetCurrentDeviceId(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) const OVERRIDE;
/**
@@ -403,11 +410,12 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Gets specific application permissions changes since last policy
* table update
+ * @param device_id device identifier
* @param policy_app_id Unique application id
* @return Permissions changes
*/
AppPermissions GetAppPermissionsChanges(
- const std::string& policy_app_id) OVERRIDE;
+ const std::string& device_id, const std::string& policy_app_id) OVERRIDE;
/**
* @brief Removes specific application permissions changes
@@ -417,10 +425,11 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Send OnPermissionsUpdated for choosen application
+ * @param device_id device identifier
* @param application_id Unique application id
*/
void SendNotificationOnPermissionsUpdated(
- const std::string& application_id) OVERRIDE;
+ const std::string& device_id, const std::string& application_id) OVERRIDE;
/**
* @brief Removes unpaired device records and related records from DB
@@ -451,20 +460,24 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Adds, application to the db or update existed one
* run PTU if policy update is necessary for application.
+ * @param device_id device identifier
* @param application_id Unique application id
* @param hmi_types application HMI types
* @return function that will notify update manager about new application
*/
StatusNotifier AddApplication(
+ const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) OVERRIDE;
/**
* @brief Assigns new HMI types for specified application
+ * @param device_handle device identifier
* @param application_id Unique application id
* @param hmi_types new HMI types list
*/
- void SetDefaultHmiTypes(const std::string& application_id,
+ void SetDefaultHmiTypes(const transport_manager::DeviceHandle& device_handle,
+ const std::string& application_id,
const std::vector<int>& hmi_types) OVERRIDE;
/**
@@ -684,10 +697,13 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief OnAppRegisteredOnMobile allows to handle event when application were
* succesfully registered on mobile device.
- * It will send OnAppPermissionSend notification and will try to start PTU. *
+ * It will send OnAppPermissionSend notification and will try to start PTU.
+ *
+ * @param device_id device identifier
* @param application_id registered application.
*/
- void OnAppRegisteredOnMobile(const std::string& application_id) OVERRIDE;
+ void OnAppRegisteredOnMobile(const std::string& device_id,
+ const std::string& application_id) OVERRIDE;
void OnDeviceSwitching(const std::string& device_id_from,
const std::string& device_id_to) OVERRIDE;
@@ -891,9 +907,12 @@ class PolicyManagerImpl : public PolicyManager {
/**
* @brief Checks whether need ask the permission of users
+ * @param device_id device identifier
+ * @param app_id policy application id
* @return true if user consent is needed
*/
- virtual bool IsConsentNeeded(const std::string& app_id);
+ virtual bool IsConsentNeeded(const std::string& device_id,
+ const std::string& app_id);
/**
* @brief Changes isConsentNeeded for app pending permissions, in case
diff --git a/src/components/policy/policy_regular/src/policy_helper.cc b/src/components/policy/policy_regular/src/policy_helper.cc
index 5fa0b314b3..26e4984e6d 100644
--- a/src/components/policy/policy_regular/src/policy_helper.cc
+++ b/src/components/policy/policy_regular/src/policy_helper.cc
@@ -263,30 +263,45 @@ bool CheckAppPolicy::IsKnownAppication(
void policy::CheckAppPolicy::NotifySystem(
const policy::AppPoliciesValueType& app_policy) const {
- pm_->listener()->OnPendingPermissionChange(app_policy.first);
+ auto& listener = *pm_->listener();
+ const auto devices_ids = listener.GetDevicesIds(app_policy.first);
+ if (devices_ids.empty()) {
+ LOG4CXX_WARN(
+ logger_,
+ "Couldn't find device info for application id: " << app_policy.first);
+ return;
+ }
+
+ for (const auto& device_id : devices_ids) {
+ listener.OnPendingPermissionChange(device_id, app_policy.first);
+ }
}
void CheckAppPolicy::SendPermissionsToApp(
const std::string& app_id, const policy_table::Strings& groups) const {
- const std::string device_id = pm_->GetCurrentDeviceId(app_id);
- if (device_id.empty()) {
+ const auto devices_ids = pm_->listener()->GetDevicesIds(app_id);
+ if (devices_ids.empty()) {
LOG4CXX_WARN(logger_,
"Couldn't find device info for application id: " << app_id);
return;
}
- std::vector<FunctionalGroupPermission> group_permissons;
- pm_->GetPermissionsForApp(device_id, app_id, group_permissons);
- Permissions notification_data;
- pm_->PrepareNotificationData(update_->policy_table.functional_groupings,
- groups,
- group_permissons,
- notification_data);
+ for (const auto& device_id : devices_ids) {
+ std::vector<FunctionalGroupPermission> group_permissons;
+ pm_->GetPermissionsForApp(device_id, app_id, group_permissons);
+
+ Permissions notification_data;
+ pm_->PrepareNotificationData(update_->policy_table.functional_groupings,
+ groups,
+ group_permissons,
+ notification_data);
- LOG4CXX_INFO(logger_, "Send notification for application_id: " << app_id);
- // Default_hmi is Ford-specific and should not be used with basic policy
- const std::string default_hmi;
- pm_->listener()->OnPermissionsUpdated(app_id, notification_data, default_hmi);
+ LOG4CXX_INFO(logger_, "Send notification for application_id: " << app_id);
+ // Default_hmi is Ford-specific and should not be used with basic policy
+ const std::string default_hmi;
+ pm_->listener()->OnPermissionsUpdated(
+ device_id, app_id, notification_data, default_hmi);
+ }
}
bool CheckAppPolicy::IsAppRevoked(
diff --git a/src/components/policy/policy_regular/src/policy_manager_impl.cc b/src/components/policy/policy_regular/src/policy_manager_impl.cc
index 00a3d33379..8bfa001293 100644
--- a/src/components/policy/policy_regular/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_regular/src/policy_manager_impl.cc
@@ -526,9 +526,9 @@ void PolicyManagerImpl::OnAppsSearchCompleted(const bool trigger_ptu) {
}
void PolicyManagerImpl::OnAppRegisteredOnMobile(
- const std::string& application_id) {
+ const std::string& device_id, const std::string& application_id) {
StartPTExchange();
- SendNotificationOnPermissionsUpdated(application_id);
+ SendNotificationOnPermissionsUpdated(device_id, application_id);
}
void PolicyManagerImpl::OnDeviceSwitching(const std::string& device_id_from,
@@ -681,16 +681,8 @@ bool PolicyManagerImpl::ResetUserConsent() {
}
void PolicyManagerImpl::SendNotificationOnPermissionsUpdated(
- const std::string& application_id) {
+ const std::string& device_id, const std::string& application_id) {
LOG4CXX_AUTO_TRACE(logger_);
- const std::string device_id = GetCurrentDeviceId(application_id);
- if (device_id.empty()) {
- LOG4CXX_WARN(logger_,
- "Couldn't find device info for application id "
- "'" << application_id
- << "'");
- return;
- }
std::vector<FunctionalGroupPermission> app_group_permissions;
GetPermissionsForApp(device_id, application_id, app_group_permissions);
@@ -699,12 +691,8 @@ void PolicyManagerImpl::SendNotificationOnPermissionsUpdated(
cache_->GetFunctionalGroupings(functional_groupings);
policy_table::Strings app_groups;
- std::vector<FunctionalGroupPermission>::const_iterator it =
- app_group_permissions.begin();
- std::vector<FunctionalGroupPermission>::const_iterator it_end =
- app_group_permissions.end();
- for (; it != it_end; ++it) {
- app_groups.push_back((*it).group_name);
+ for (const auto& group_permission : app_group_permissions) {
+ app_groups.push_back(group_permission.group_name);
}
Permissions notification_data;
@@ -714,19 +702,19 @@ void PolicyManagerImpl::SendNotificationOnPermissionsUpdated(
notification_data);
LOG4CXX_INFO(logger_,
- "Send notification for application_id:" << application_id);
+ "Send notification for application_id: " << application_id);
- std::string default_hmi;
- default_hmi = "NONE";
+ std::string default_hmi = "NONE";
const ApplicationOnDevice who = {device_id, application_id};
if (access_remote_->IsAppRemoteControl(who)) {
- listener()->OnPermissionsUpdated(application_id, notification_data);
+ listener()->OnPermissionsUpdated(
+ device_id, application_id, notification_data);
return;
}
listener()->OnPermissionsUpdated(
- application_id, notification_data, default_hmi);
+ device_id, application_id, notification_data, default_hmi);
}
bool PolicyManagerImpl::CleanupUnpairedDevices() {
@@ -756,8 +744,13 @@ void PolicyManagerImpl::SetUserConsentForDevice(const std::string& device_id,
}
}
-bool PolicyManagerImpl::ReactOnUserDevConsentForApp(const std::string app_id,
- bool is_device_allowed) {
+bool PolicyManagerImpl::ReactOnUserDevConsentForApp(
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string app_id,
+ bool is_device_allowed) {
+ UNUSED(device_handle);
+ UNUSED(app_id);
+ UNUSED(is_device_allowed);
return true;
}
@@ -868,11 +861,11 @@ void PolicyManagerImpl::SetUserConsentForApp(
LOG4CXX_AUTO_TRACE(logger_);
}
-bool PolicyManagerImpl::GetDefaultHmi(const std::string& policy_app_id,
+bool PolicyManagerImpl::GetDefaultHmi(const std::string& device_id,
+ const std::string& policy_app_id,
std::string* default_hmi) const {
LOG4CXX_AUTO_TRACE(logger_);
- const std::string device_id = GetCurrentDeviceId(policy_app_id);
- DeviceConsent device_consent = GetUserConsentForDevice(device_id);
+ const DeviceConsent device_consent = GetUserConsentForDevice(device_id);
const std::string app_id = policy::kDeviceAllowed != device_consent
? kPreDataConsentId
: policy_app_id;
@@ -955,7 +948,7 @@ void PolicyManagerImpl::GetPermissionsForApp(
app_id_to_check = kDefaultId;
allowed_by_default = true;
} else if (cache_->IsPredataPolicy(policy_app_id) ||
- policy::kDeviceDisallowed == GetUserConsentForDevice(device_id)) {
+ policy::kDeviceAllowed != GetUserConsentForDevice(device_id)) {
app_id_to_check = kPreDataConsentId;
allowed_by_default = true;
}
@@ -1010,9 +1003,11 @@ void PolicyManagerImpl::GetPermissionsForApp(
}
std::string& PolicyManagerImpl::GetCurrentDeviceId(
+ const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) const {
LOG4CXX_AUTO_TRACE(logger_);
- last_device_id_ = listener()->OnCurrentDeviceIdUpdateRequired(policy_app_id);
+ last_device_id_ =
+ listener()->OnCurrentDeviceIdUpdateRequired(device_handle, policy_app_id);
return last_device_id_;
}
@@ -1202,7 +1197,8 @@ bool PolicyManagerImpl::IsApplicationRevoked(const std::string& app_id) const {
return cache_->IsApplicationRevoked(app_id);
}
-bool PolicyManagerImpl::IsConsentNeeded(const std::string& app_id) {
+bool PolicyManagerImpl::IsConsentNeeded(const std::string& device_id,
+ const std::string& app_id) {
LOG4CXX_AUTO_TRACE(logger_);
return false;
}
@@ -1210,14 +1206,15 @@ bool PolicyManagerImpl::IsConsentNeeded(const std::string& app_id) {
void PolicyManagerImpl::SetVINValue(const std::string& value) {}
AppPermissions PolicyManagerImpl::GetAppPermissionsChanges(
- const std::string& policy_app_id) {
+ const std::string& device_id, const std::string& policy_app_id) {
typedef std::map<std::string, AppPermissions>::iterator PermissionsIt;
PermissionsIt app_id_diff = app_permissions_diff_.find(policy_app_id);
AppPermissions permissions(policy_app_id);
if (app_permissions_diff_.end() != app_id_diff) {
permissions = app_id_diff->second;
} else {
- permissions.appPermissionsConsentNeeded = IsConsentNeeded(policy_app_id);
+ permissions.appPermissionsConsentNeeded =
+ IsConsentNeeded(device_id, policy_app_id);
permissions.appRevoked = IsApplicationRevoked(policy_app_id);
GetPriority(permissions.application_id, &permissions.priority);
}
@@ -1305,11 +1302,11 @@ class CallStatusChange : public utils::Callable {
};
StatusNotifier PolicyManagerImpl::AddApplication(
+ const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) {
LOG4CXX_AUTO_TRACE(logger_);
- const std::string device_id = GetCurrentDeviceId(application_id);
- DeviceConsent device_consent = GetUserConsentForDevice(device_id);
+ auto device_consent = GetUserConsentForDevice(device_id);
sync_primitives::AutoLock lock(apps_registration_lock_);
if (IsNewApplication(application_id)) {
AddNewApplication(application_id, device_consent);
@@ -1437,10 +1434,13 @@ void PolicyManagerImpl::RetrySequence() {
timer_retry_sequence_.Start(timeout_msec, timer::kPeriodic);
}
-void PolicyManagerImpl::SetDefaultHmiTypes(const std::string& application_id,
- const std::vector<int>& hmi_types) {
+void PolicyManagerImpl::SetDefaultHmiTypes(
+ const transport_manager::DeviceHandle& device_handle,
+ const std::string& application_id,
+ const std::vector<int>& hmi_types) {
LOG4CXX_INFO(logger_, "SetDefaultHmiTypes");
- const std::string device_id = GetCurrentDeviceId(application_id);
+ const std::string device_id =
+ GetCurrentDeviceId(device_handle, application_id);
ApplicationOnDevice who = {device_id, application_id};
access_remote_->SetDefaultHmiTypes(who, hmi_types);
}
@@ -1478,7 +1478,7 @@ bool PolicyManagerImpl::CheckModule(const PTString& app_id,
void PolicyManagerImpl::SendHMILevelChanged(const ApplicationOnDevice& who) {
std::string default_hmi("NONE");
- if (GetDefaultHmi(who.app_id, &default_hmi)) {
+ if (GetDefaultHmi(who.dev_id, who.app_id, &default_hmi)) {
listener()->OnUpdateHMIStatus(who.dev_id, who.app_id, default_hmi);
} else {
LOG4CXX_WARN(
@@ -1515,7 +1515,8 @@ void PolicyManagerImpl::SendAppPermissionsChanged(
const std::string& device_id, const std::string& application_id) {
Permissions notification_data;
GetPermissions(device_id, application_id, &notification_data);
- listener()->OnPermissionsUpdated(application_id, notification_data);
+ listener()->OnPermissionsUpdated(
+ device_id, application_id, notification_data);
}
void PolicyManagerImpl::SendAuthTokenUpdated(const std::string policy_app_id) {
diff --git a/src/components/policy/policy_regular/test/policy_manager_impl_test.cc b/src/components/policy/policy_regular/test/policy_manager_impl_test.cc
index 39ff0efa7e..3b07506981 100644
--- a/src/components/policy/policy_regular/test/policy_manager_impl_test.cc
+++ b/src/components/policy/policy_regular/test/policy_manager_impl_test.cc
@@ -40,6 +40,7 @@
#include "json/writer.h"
#include "config_profile/profile.h"
+#include "connection_handler/connection_handler.h"
#include "policy/mock_cache_manager.h"
#include "policy/mock_policy_listener.h"
#include "policy/mock_policy_settings.h"
@@ -177,6 +178,8 @@ class PolicyManagerImplTest2 : public ::testing::Test {
, app_id2("1010101010")
, dev_id1("XXX123456789ZZZ")
, dev_id2("08-00-27-CE-76-FE")
+ , dev_handle1(123456789)
+ , dev_handle2(1010101010)
, PTU_request_types(Json::arrayValue) {}
protected:
@@ -190,6 +193,8 @@ class PolicyManagerImplTest2 : public ::testing::Test {
const std::string app_id2;
const std::string dev_id1;
const std::string dev_id2;
+ const connection_handler::DeviceHandle dev_handle1;
+ const connection_handler::DeviceHandle dev_handle2;
Json::Value PTU_request_types;
NiceMock<policy_handler_test::MockPolicySettings> policy_settings_;
const std::string kAppStorageFolder = "storage_PolicyManagerImplTest2";
@@ -271,12 +276,13 @@ class PolicyManagerImplTest2 : public ::testing::Test {
// Arrange
CreateLocalPT("sdl_preloaded_pt.json");
// Add app
- manager->AddApplication(section_name, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id1, section_name, HmiTypes(policy_table::AHT_DEFAULT));
// Check app gets RequestTypes from pre_DataConsent of app_policies
// section
PT_request_types = manager->GetAppRequestTypes(section_name);
EXPECT_EQ(rt_number, PT_request_types.size());
- EXPECT_CALL(listener, OnPendingPermissionChange(section_name)).Times(1);
+ EXPECT_CALL(listener, OnPendingPermissionChange(_, section_name)).Times(1);
Json::Value root = GetPTU(update_file_name);
// Get App Request Types from PTU
@@ -292,7 +298,7 @@ class PolicyManagerImplTest2 : public ::testing::Test {
PT_request_types.size());
::policy::AppPermissions permissions =
- manager->GetAppPermissionsChanges(section_name);
+ manager->GetAppPermissionsChanges(dev_id1, section_name);
EXPECT_TRUE(permissions.requestTypeChanged);
}
@@ -537,11 +543,14 @@ TEST_F(PolicyManagerImplTest2,
"Life",
2,
"Bluetooth");
- EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id1))
+ EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(_, app_id1))
.WillRepeatedly(Return(dev_id1));
manager->SetUserConsentForDevice(dev_id1, true);
// Add app from consented device. App will be assigned with default policies
- manager->AddApplication(app_id1, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id1, app_id1, HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener, GetDevicesIds(app_id1))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
// Check before action
policy_table::RpcParameters rpc_parameters;
rpc_parameters.hmi_levels.push_back(policy_table::HL_FULL);
@@ -594,11 +603,11 @@ TEST_F(PolicyManagerImplTest2,
"Life",
2,
"Bluetooth"));
- EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired("1234"))
+ EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(_, "1234"))
.WillRepeatedly(Return(dev_id1));
manager->SetUserConsentForDevice(dev_id1, true);
// Add app from consented device. App will be assigned with default policies
- manager->AddApplication("1234", HmiTypes(policy_table::AHT_MEDIA));
+ manager->AddApplication(dev_id1, "1234", HmiTypes(policy_table::AHT_MEDIA));
// Emulate PTU with new policies for app added above
std::ifstream ifile("sdl_preloaded_pt.json");
Json::Reader reader;
@@ -785,8 +794,8 @@ TEST_F(
AddApplication_AddNewApplicationFromDeviceWithoutConsent_ExpectUpdateRequired) {
// Arrange
CreateLocalPT("sdl_preloaded_pt.json");
- ::policy::StatusNotifier notifyer =
- manager->AddApplication(app_id1, HmiTypes(policy_table::AHT_DEFAULT));
+ ::policy::StatusNotifier notifyer = manager->AddApplication(
+ dev_id1, app_id1, HmiTypes(policy_table::AHT_DEFAULT));
DCHECK(notifyer);
(*notifyer)();
EXPECT_EQ("UPDATE_NEEDED", manager->GetPolicyTableStatus());
@@ -798,9 +807,10 @@ TEST_F(
// Arrange
// RequestTypes for default & preDataConsent are different
CreateLocalPT("ptu_requestType.json");
- manager->AddApplication(app_id1, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id1, app_id1, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_FALSE(manager->IsPredataPolicy(app_id1));
- manager->ReactOnUserDevConsentForApp(app_id1, true);
+ manager->ReactOnUserDevConsentForApp(dev_handle1, app_id1, true);
EXPECT_FALSE(manager->IsPredataPolicy(app_id1));
EXPECT_TRUE((manager->GetCache())->IsDefaultPolicy(app_id1));
}
@@ -811,10 +821,11 @@ TEST_F(
// Arrange
// RequestTypes for default & preDataConsent are the same
CreateLocalPT("ptu2_requestType.json");
- manager->AddApplication(app_id1, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id1, app_id1, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_FALSE(manager->IsPredataPolicy(app_id1));
- EXPECT_CALL(listener, OnPendingPermissionChange(app_id1)).Times(0);
- manager->ReactOnUserDevConsentForApp(app_id1, true);
+ EXPECT_CALL(listener, OnPendingPermissionChange(_, app_id1)).Times(0);
+ manager->ReactOnUserDevConsentForApp(dev_handle1, app_id1, true);
EXPECT_FALSE(manager->IsPredataPolicy(app_id1));
EXPECT_TRUE((manager->GetCache())->IsDefaultPolicy(app_id1));
}
@@ -828,7 +839,8 @@ TEST_F(
GetPTU("valid_sdl_pt_update.json");
EXPECT_EQ("UP_TO_DATE", manager->GetPolicyTableStatus());
// Try to add existing app
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
// Check no update required
EXPECT_EQ("UP_TO_DATE", manager->GetPolicyTableStatus());
}
@@ -876,13 +888,14 @@ TEST_F(PolicyManagerImplTest2,
GetPTU("valid_sdl_pt_update.json");
EXPECT_EQ("UP_TO_DATE", manager->GetPolicyTableStatus());
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_EQ("UP_TO_DATE", manager->GetPolicyTableStatus());
::policy::Counters counter = ::policy::Counters::DAYS_AFTER_EPOCH;
// Set PT was updated 10 days ago (limit is 30 days for now)
// So no limit exceeded
manager->PTUpdatedAt(counter, days - 10);
- manager->OnAppRegisteredOnMobile(app_id2);
+ manager->OnAppRegisteredOnMobile(dev_id2, app_id2);
EXPECT_EQ("UP_TO_DATE", manager->GetPolicyTableStatus());
}
@@ -1087,11 +1100,12 @@ TEST_F(PolicyManagerImplTest2,
DISABLED_GetDefaultHmi_SetDeviceAllowed_ExpectReceivedHmiCorrect) {
// Arrange
CreateLocalPT("ptu2_requestType.json");
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
// Check if app has preData policy
EXPECT_FALSE(manager->IsPredataPolicy(app_id2));
std::string default_hmi1;
- manager->GetDefaultHmi(app_id2, &default_hmi1);
+ manager->GetDefaultHmi(dev_id2, app_id2, &default_hmi1);
EXPECT_EQ("", default_hmi1);
ASSERT_TRUE((manager->GetCache())->AddDevice(dev_id2, "Bluetooth"));
ASSERT_TRUE((manager->GetCache())
@@ -1107,12 +1121,13 @@ TEST_F(PolicyManagerImplTest2,
::policy::DeviceConsent consent = manager->GetUserConsentForDevice(dev_id2);
// Check
EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent);
- EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id2))
+ EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(_, app_id2))
.WillRepeatedly(Return(dev_id2));
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_TRUE((manager->GetCache())->IsDefaultPolicy(app_id2));
std::string default_hmi2;
- manager->GetDefaultHmi(app_id2, &default_hmi2);
+ manager->GetDefaultHmi(dev_id2, app_id2, &default_hmi2);
EXPECT_EQ("", default_hmi2);
}
@@ -1120,7 +1135,8 @@ TEST_F(PolicyManagerImplTest2,
GetDefaultPriority_SetDeviceAllowed_ExpectReceivedPriorityCorrect) {
// Arrange
CreateLocalPT("ptu2_requestType.json");
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
// Check if app has preData policy
EXPECT_FALSE(manager->IsPredataPolicy(app_id2));
std::string priority1;
@@ -1140,9 +1156,10 @@ TEST_F(PolicyManagerImplTest2,
::policy::DeviceConsent consent = manager->GetUserConsentForDevice(dev_id2);
// Check
EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent);
- EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id2))
+ EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(_, app_id2))
.WillRepeatedly(Return(dev_id2));
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_TRUE((manager->GetCache())->IsDefaultPolicy(app_id2));
std::string priority2;
EXPECT_TRUE(manager->GetPriority(app_id2, &priority2));
@@ -1152,7 +1169,10 @@ TEST_F(PolicyManagerImplTest2,
TEST_F(PolicyManagerImplTest2, GetInitialAppData_ExpectReceivedConsentCorrect) {
// Arrange
CreateLocalPT("sdl_preloaded_pt.json");
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener, GetDevicesIds(app_id2))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
::policy::StringArray app_nicknames;
::policy::StringArray app_hmi_types;
manager->GetInitialAppData(app_id2, &app_nicknames, &app_hmi_types);
@@ -1194,7 +1214,8 @@ TEST_F(
CanAppKeepContext_AddAppFromUnconsentedDevice_ExpectAppCannotKeepContext) {
// Arrange
CreateLocalPT("sdl_preloaded_pt.json");
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
// Check if app has preData policy
EXPECT_FALSE(manager->IsPredataPolicy(app_id2));
// Check keep context in preData policy
@@ -1206,7 +1227,8 @@ TEST_F(PolicyManagerImplTest2,
// Arrange
CreateLocalPT("sdl_preloaded_pt.json");
ASSERT_TRUE((manager->GetCache())->AddDevice(dev_id2, "Bluetooth"));
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
ASSERT_TRUE((manager->GetCache())
->SetDeviceData(dev_id2,
"hardware IPX",
@@ -1219,9 +1241,10 @@ TEST_F(PolicyManagerImplTest2,
manager->SetUserConsentForDevice(dev_id2, true);
::policy::DeviceConsent consent = manager->GetUserConsentForDevice(dev_id2);
EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent);
- EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id2))
+ EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(_, app_id2))
.WillRepeatedly(Return(dev_id2));
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_TRUE((manager->GetCache())->IsDefaultPolicy(app_id2));
// Check keep context in default policy
EXPECT_TRUE(manager->CanAppKeepContext(app_id2));
@@ -1231,7 +1254,10 @@ TEST_F(PolicyManagerImplTest2,
CanAppKeepContext_SetPoliciesForAppUpdated_ExpectAppCanKeepContext) {
// Arrange
CreateLocalPT("sdl_preloaded_pt.json");
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener, GetDevicesIds(app_id2))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
GetPTU("valid_sdl_pt_update.json");
// Check keep context in updated policies for app
EXPECT_TRUE(manager->CanAppKeepContext(app_id2));
@@ -1242,7 +1268,8 @@ TEST_F(PolicyManagerImplTest2,
// Arrange
CreateLocalPT("sdl_preloaded_pt.json");
ASSERT_TRUE((manager->GetCache())->AddDevice(dev_id2, "Bluetooth"));
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
ASSERT_TRUE((manager->GetCache())
->SetDeviceData(dev_id2,
"hardware IPX",
@@ -1255,9 +1282,10 @@ TEST_F(PolicyManagerImplTest2,
manager->SetUserConsentForDevice(dev_id2, true);
::policy::DeviceConsent consent = manager->GetUserConsentForDevice(dev_id2);
EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent);
- EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id2))
+ EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(_, app_id2))
.WillRepeatedly(Return(dev_id2));
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
EXPECT_TRUE((manager->GetCache())->IsDefaultPolicy(app_id2));
// Check keep context in default policy
EXPECT_TRUE(manager->CanAppStealFocus(app_id2));
@@ -1267,7 +1295,10 @@ TEST_F(PolicyManagerImplTest2,
CanAppStealFocus_SetPoliciesForAppUpdated_ExpectAppCanStealFocus) {
// Arrange
CreateLocalPT("sdl_preloaded_pt.json");
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener, GetDevicesIds(app_id2))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
GetPTU("valid_sdl_pt_update.json");
// Check keep context in updated policies for app
EXPECT_TRUE(manager->CanAppKeepContext(app_id2));
@@ -1275,9 +1306,11 @@ TEST_F(PolicyManagerImplTest2,
TEST_F(PolicyManagerImplTest2, GetCurrentDeviceId) {
// Arrange
- EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id2)).Times(2);
- EXPECT_EQ(custom_str::CustomString(""), manager->GetCurrentDeviceId(app_id2));
- EXPECT_EQ("", manager->GetCurrentDeviceId(app_id2));
+ EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(dev_handle2, app_id2))
+ .Times(2);
+ EXPECT_EQ(custom_str::CustomString(""),
+ manager->GetCurrentDeviceId(dev_handle2, app_id2));
+ EXPECT_EQ("", manager->GetCurrentDeviceId(dev_handle2, app_id2));
}
TEST_F(PolicyManagerImplTest2,
@@ -1321,9 +1354,12 @@ TEST_F(
->SetUserPermissionsForDevice(
dev_id2, consented_groups, disallowed_groups);
manager->SetUserConsentForDevice(dev_id2, true);
- EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id2))
+ EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(_, app_id2))
.WillRepeatedly(Return(dev_id2));
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener, GetDevicesIds(app_id2))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
GetPTU("valid_sdl_pt_update.json");
::policy::PermissionConsent perm_consent;
@@ -1342,7 +1378,7 @@ TEST_F(
perm_consent.group_permissions = groups_permissions;
manager->SetUserConsentForApp(perm_consent);
- manager->SendNotificationOnPermissionsUpdated(app_id2);
+ manager->SendNotificationOnPermissionsUpdated(dev_id2, app_id2);
std::vector< ::policy::FunctionalGroupPermission> actual_groups_permissions;
std::vector< ::policy::FunctionalGroupPermission>::iterator it;
manager->GetPermissionsForApp(dev_id2, app_id2, actual_groups_permissions);
@@ -1377,7 +1413,10 @@ TEST_F(
pt->ReportErrors(&report);
}
// Add new app
- manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ manager->AddApplication(
+ dev_id2, app_id2, HmiTypes(policy_table::AHT_DEFAULT));
+ EXPECT_CALL(listener, GetDevicesIds(app_id2))
+ .WillRepeatedly(Return(transport_manager::DeviceList()));
uint32_t result = manager->HeartBeatTimeout(app_id2);
// By default hertbeat timeout is 0
EXPECT_EQ(0u, result);
diff --git a/src/components/rpc_base/include/rpc_base/rpc_base_inl.h b/src/components/rpc_base/include/rpc_base/rpc_base_inl.h
index 07a85eaa22..985e244235 100644
--- a/src/components/rpc_base/include/rpc_base/rpc_base_inl.h
+++ b/src/components/rpc_base/include/rpc_base/rpc_base_inl.h
@@ -185,12 +185,14 @@ Integer<T, minval, maxval>& Integer<T, minval, maxval>::operator=(
template <typename T, T minval, T maxval>
Integer<T, minval, maxval>& Integer<T, minval, maxval>::operator++() {
++value_;
+ value_state_ = range_.Includes(value_) ? kValid : kInvalid;
return *this;
}
template <typename T, T minval, T maxval>
Integer<T, minval, maxval>& Integer<T, minval, maxval>::operator+=(int value) {
value_ += value;
+ value_state_ = range_.Includes(value_) ? kValid : kInvalid;
return *this;
}