summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/application_manager/include/application_manager/policies/policy_handler.h3
-rw-r--r--src/components/application_manager/src/commands/mobile/register_app_interface_request.cc4
-rw-r--r--src/components/application_manager/src/policies/policy_handler.cc7
-rw-r--r--src/components/application_manager/test/include/application_manager/policy_handler_interface_mock.h3
-rw-r--r--src/components/application_manager/test/policy_handler_test.cc3
-rw-r--r--src/components/include/application_manager/policies/policy_handler_interface.h6
-rw-r--r--src/components/include/policy/policy_external/policy/policy_manager.h6
-rw-r--r--src/components/include/test/application_manager/policies/mock_policy_handler_interface.h3
-rw-r--r--src/components/include/test/policy/policy_external/policy/mock_policy_manager.h3
-rw-r--r--src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h3
-rw-r--r--src/components/include/utils/callable.h26
-rw-r--r--src/components/policy/policy_external/include/policy/policy_manager_impl.h2
-rw-r--r--src/components/policy/policy_external/src/policy_manager_impl.cc27
-rw-r--r--src/components/policy/policy_regular/include/policy/policy_manager.h5
-rw-r--r--src/components/policy/policy_regular/include/policy/policy_manager_impl.h2
-rw-r--r--src/components/policy/policy_regular/src/policy_manager_impl.cc27
-rw-r--r--src/components/policy/policy_regular/test/include/policy/mock_policy_manager.h3
-rw-r--r--src/components/policy/policy_regular/test/policy_manager_impl_test.cc4
18 files changed, 115 insertions, 22 deletions
diff --git a/src/components/application_manager/include/application_manager/policies/policy_handler.h b/src/components/application_manager/include/application_manager/policies/policy_handler.h
index 33b37fb2c8..4c5c923372 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
@@ -330,8 +330,9 @@ class PolicyHandler : public PolicyHandlerInterface,
* @brief Allows to add new or update existed application during
* registration process
* @param application_id The policy aplication id.
+ ** @return function that will notify update manager about new application
*/
- void AddApplication(const std::string& application_id) OVERRIDE;
+ StatusNotifier AddApplication(const std::string& application_id) OVERRIDE;
/**
* Checks whether application is revoked
diff --git a/src/components/application_manager/src/commands/mobile/register_app_interface_request.cc b/src/components/application_manager/src/commands/mobile/register_app_interface_request.cc
index 699837f225..151037065d 100644
--- a/src/components/application_manager/src/commands/mobile/register_app_interface_request.cc
+++ b/src/components/application_manager/src/commands/mobile/register_app_interface_request.cc
@@ -634,11 +634,12 @@ void RegisterAppInterfaceRequest::SendRegisterAppInterfaceResponseToMobile() {
application->mac_address());
}
+ policy::StatusNotifier notify_upd_manager =
+ GetPolicyHandler().AddApplication(application->policy_app_id());
SendResponse(true, result_code, add_info.c_str(), &response_params);
SendOnAppRegisteredNotificationToHMI(
*(application.get()), resumption, need_restore_vr);
- GetPolicyHandler().AddApplication(application->policy_app_id());
// Default HMI level should be set before any permissions validation, since it
// relies on HMI level.
application_manager_.OnApplicationRegistered(application);
@@ -647,6 +648,7 @@ void RegisterAppInterfaceRequest::SendRegisterAppInterfaceResponseToMobile() {
// Sends OnPermissionChange notification to mobile right after RAI response
// and HMI level set-up
GetPolicyHandler().OnAppRegisteredOnMobile(application->policy_app_id());
+ (*notify_upd_manager)();
if (result_code != mobile_apis::Result::RESUME_FAILED) {
resumer.StartResumption(application, hash_id);
diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc
index 513afb9a43..09d01325da 100644
--- a/src/components/application_manager/src/policies/policy_handler.cc
+++ b/src/components/application_manager/src/policies/policy_handler.cc
@@ -484,9 +484,10 @@ void PolicyHandler::GetAvailableApps(std::queue<std::string>& apps) {
}
}
-void PolicyHandler::AddApplication(const std::string& application_id) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->AddApplication(application_id);
+StatusNotifier PolicyHandler::AddApplication(
+ const std::string& application_id) {
+ POLICY_LIB_CHECK(utils::MakeShared<utils::CallNothing>());
+ return policy_manager_->AddApplication(application_id);
}
void PolicyHandler::AddDevice(const std::string& device_id,
diff --git a/src/components/application_manager/test/include/application_manager/policy_handler_interface_mock.h b/src/components/application_manager/test/include/application_manager/policy_handler_interface_mock.h
index da20d8144b..c8e3118ea2 100644
--- a/src/components/application_manager/test/include/application_manager/policy_handler_interface_mock.h
+++ b/src/components/application_manager/test/include/application_manager/policy_handler_interface_mock.h
@@ -164,7 +164,8 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
const std::string& policy_app_id));
MOCK_METHOD0(OnPTExchangeNeeded, void());
MOCK_METHOD1(GetAvailableApps, void(std::queue<std::string>& apps));
- MOCK_METHOD1(AddApplication, void(const std::string& application_id));
+ MOCK_METHOD1(AddApplication,
+ StatusNotifier(const std::string& application_id));
MOCK_METHOD1(IsApplicationRevoked, bool(const std::string& app_id));
MOCK_METHOD0(OnUpdateRequestSentToMobile, void());
MOCK_CONST_METHOD1(HeartBeatTimeout, uint32_t(const std::string& app_id));
diff --git a/src/components/application_manager/test/policy_handler_test.cc b/src/components/application_manager/test/policy_handler_test.cc
index 1862b06836..4f80f2e464 100644
--- a/src/components/application_manager/test/policy_handler_test.cc
+++ b/src/components/application_manager/test/policy_handler_test.cc
@@ -1110,7 +1110,8 @@ TEST_F(PolicyHandlerTest, AddApplication) {
// Arrange
EnablePolicyAndPolicyManagerMock();
// Check expectations
- EXPECT_CALL(*mock_policy_manager_, AddApplication(kPolicyAppId_));
+ EXPECT_CALL(*mock_policy_manager_, AddApplication(kPolicyAppId_))
+ .WillOnce(Return(utils::MakeShared<utils::CallNothing>()));
// Act
policy_handler_.AddApplication(kPolicyAppId_);
}
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 8f34fa9ae5..e1623a92c3 100644
--- a/src/components/include/application_manager/policies/policy_handler_interface.h
+++ b/src/components/include/application_manager/policies/policy_handler_interface.h
@@ -45,8 +45,11 @@
#include "utils/custom_string.h"
#include "policy/policy_settings.h"
#include "smart_objects/smart_object.h"
+#include "utils/callable.h"
namespace policy {
+typedef utils::SharedPtr<utils::Callable> StatusNotifier;
+
class PolicyHandlerInterface {
public:
virtual ~PolicyHandlerInterface() {}
@@ -306,8 +309,9 @@ class PolicyHandlerInterface {
* @brief Allows to add new or update existed application during
* registration process
* @param application_id The policy aplication id.
+ * @return function that will notify update manager about new application
*/
- virtual void AddApplication(const std::string& application_id) = 0;
+ virtual StatusNotifier AddApplication(const std::string& application_id) = 0;
/**
* Checks whether application is revoked
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 c587a00111..7d5bbb5e52 100644
--- a/src/components/include/policy/policy_external/policy/policy_manager.h
+++ b/src/components/include/policy/policy_external/policy/policy_manager.h
@@ -35,12 +35,15 @@
#include <vector>
+#include "utils/callable.h"
+
#include "policy/policy_types.h"
#include "policy/policy_listener.h"
#include "usage_statistics/statistics_manager.h"
namespace policy {
class PolicySettings;
+typedef utils::SharedPtr<utils::Callable> StatusNotifier;
class PolicyManager : public usage_statistics::StatisticsManager {
public:
@@ -354,8 +357,9 @@ 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 Application id assigned by Ford to the application
+ * @return function that will notify update manager about new application
*/
- virtual void AddApplication(const std::string& application_id) = 0;
+ virtual StatusNotifier AddApplication(const std::string& application_id) = 0;
/**
* @brief Removes unpaired device records and related records from DB
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 509ca05056..33a86c6f98 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
@@ -173,7 +173,8 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
const std::string& policy_app_id));
MOCK_METHOD0(OnPTExchangeNeeded, void());
MOCK_METHOD1(GetAvailableApps, void(std::queue<std::string>& apps));
- MOCK_METHOD1(AddApplication, void(const std::string& application_id));
+ MOCK_METHOD1(AddApplication,
+ policy::StatusNotifier(const std::string& application_id));
MOCK_METHOD1(IsApplicationRevoked, bool(const std::string& app_id));
MOCK_METHOD0(OnUpdateRequestSentToMobile, void());
MOCK_CONST_METHOD1(HeartBeatTimeout, uint32_t(const std::string& 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 31f80859c1..0140efddf5 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
@@ -140,7 +140,8 @@ class MockPolicyManager : public PolicyManager {
MOCK_METHOD1(SendNotificationOnPermissionsUpdated,
void(const std::string& application_id));
MOCK_METHOD1(MarkUnpairedDevice, void(const std::string& device_id));
- MOCK_METHOD1(AddApplication, void(const std::string& application_id));
+ MOCK_METHOD1(AddApplication,
+ StatusNotifier(const std::string& application_id));
MOCK_METHOD0(CleanupUnpairedDevices, bool());
MOCK_CONST_METHOD1(CanAppKeepContext, bool(const std::string& app_id));
MOCK_CONST_METHOD1(CanAppStealFocus, bool(const std::string& app_id));
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 5405792d6b..b3f48686e4 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
@@ -139,7 +139,8 @@ class MockPolicyManager : public PolicyManager {
MOCK_METHOD1(SendNotificationOnPermissionsUpdated,
void(const std::string& application_id));
MOCK_METHOD1(MarkUnpairedDevice, void(const std::string& device_id));
- MOCK_METHOD1(AddApplication, void(const std::string& application_id));
+ MOCK_METHOD1(AddApplication,
+ StatusNotifier(const std::string& application_id));
MOCK_METHOD0(CleanupUnpairedDevices, bool());
MOCK_CONST_METHOD1(CanAppKeepContext, bool(const std::string& app_id));
MOCK_CONST_METHOD1(CanAppStealFocus, bool(const std::string& app_id));
diff --git a/src/components/include/utils/callable.h b/src/components/include/utils/callable.h
new file mode 100644
index 0000000000..aff91814bf
--- /dev/null
+++ b/src/components/include/utils/callable.h
@@ -0,0 +1,26 @@
+#ifndef SRC_COMPONENTS_INCLUDE_UTILS_CALLABLE_H
+#define SRC_COMPONENTS_INCLUDE_UTILS_CALLABLE_H
+
+#include "utils/macro.h"
+
+namespace utils {
+/**
+ * @brief The Callable class allows
+ * to create functor to call in other context
+ */
+class Callable {
+ public:
+ virtual void operator()() const = 0;
+ virtual ~Callable() {}
+};
+
+/**
+ * @brief The CallNothing class functior that to nothing
+ */
+class CallNothing : public Callable {
+ // Callable interface
+ public:
+ void operator()() const OVERRIDE {}
+};
+} // namespace utils
+#endif // SRC_COMPONENTS_INCLUDE_UTILS_CALLABLE_H
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 505c9f71ce..55b5ab1212 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
@@ -166,7 +166,7 @@ class PolicyManagerImpl : public PolicyManager {
bool CanAppStealFocus(const std::string& app_id) const;
void MarkUnpairedDevice(const std::string& device_id);
- void AddApplication(const std::string& application_id);
+ StatusNotifier AddApplication(const std::string& application_id);
virtual void RemoveAppConsentForGroup(const std::string& app_id,
const std::string& group_name);
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 737fbf16f8..88d810ecc2 100644
--- a/src/components/policy/policy_external/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_external/src/policy_manager_impl.cc
@@ -47,6 +47,7 @@
#include "policy/cache_manager.h"
#include "policy/update_status_manager.h"
#include "config_profile/profile.h"
+#include "utils/make_shared.h"
policy::PolicyManager* CreateManager() {
return new policy::PolicyManagerImpl();
@@ -1189,7 +1190,27 @@ void PolicyManagerImpl::SetDecryptedCertificate(
cache_->SetDecryptedCertificate(certificate);
}
-void PolicyManagerImpl::AddApplication(const std::string& application_id) {
+/**
+ * @brief The CallStatusChange class notify update manager aboun new application
+ */
+class CallStatusChange : public utils::Callable {
+ public:
+ CallStatusChange(UpdateStatusManager& upd_manager,
+ const DeviceConsent& device_consent)
+ : upd_manager_(upd_manager), device_consent_(device_consent) {}
+
+ // Callable interface
+ void operator()() const {
+ upd_manager_.OnNewApplicationAdded(device_consent_);
+ }
+
+ private:
+ UpdateStatusManager& upd_manager_;
+ const DeviceConsent device_consent_;
+};
+
+StatusNotifier PolicyManagerImpl::AddApplication(
+ const std::string& application_id) {
LOG4CXX_AUTO_TRACE(logger_);
const std::string device_id = GetCurrentDeviceId(application_id);
DeviceConsent device_consent = GetUserConsentForDevice(device_id);
@@ -1197,9 +1218,11 @@ void PolicyManagerImpl::AddApplication(const std::string& application_id) {
if (IsNewApplication(application_id)) {
AddNewApplication(application_id, device_consent);
- update_status_manager_.OnNewApplicationAdded(device_consent);
+ return utils::MakeShared<CallStatusChange>(update_status_manager_,
+ device_consent);
} else {
PromoteExistedApplication(application_id, device_consent);
+ return utils::MakeShared<utils::CallNothing>();
}
}
diff --git a/src/components/policy/policy_regular/include/policy/policy_manager.h b/src/components/policy/policy_regular/include/policy/policy_manager.h
index 1f726d308e..0bd72faaae 100644
--- a/src/components/policy/policy_regular/include/policy/policy_manager.h
+++ b/src/components/policy/policy_regular/include/policy/policy_manager.h
@@ -36,12 +36,14 @@
#include <vector>
#include <cstdint>
+#include "utils/callable.h"
#include "policy/policy_types.h"
#include "policy/policy_listener.h"
#include "policy/usage_statistics/statistics_manager.h"
namespace policy {
class PolicySettings;
+typedef utils::SharedPtr<utils::Callable> StatusNotifier;
class PolicyManager : public usage_statistics::StatisticsManager {
public:
@@ -352,8 +354,9 @@ 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 Application id assigned by Ford to the application
+ * @return function that will notify update manager about new application
*/
- virtual void AddApplication(const std::string& application_id) = 0;
+ virtual StatusNotifier AddApplication(const std::string& application_id) = 0;
/**
* @brief Removes unpaired device records and related records from DB
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 31e4ab454c..c7773d7728 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
@@ -171,7 +171,7 @@ class PolicyManagerImpl : public PolicyManager {
bool CanAppStealFocus(const std::string& app_id) const;
void MarkUnpairedDevice(const std::string& device_id);
- void AddApplication(const std::string& application_id);
+ StatusNotifier AddApplication(const std::string& application_id);
virtual void RemoveAppConsentForGroup(const std::string& app_id,
const std::string& group_name);
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 ac82c9ebcb..8b02f7fc5b 100644
--- a/src/components/policy/policy_regular/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_regular/src/policy_manager_impl.cc
@@ -49,6 +49,7 @@
#include "policy/update_status_manager.h"
#include "config_profile/profile.h"
#include "utils/timer_task_impl.h"
+#include "utils/make_shared.h"
policy::PolicyManager* CreateManager() {
return new policy::PolicyManagerImpl();
@@ -58,7 +59,8 @@ void DeleteManager(policy::PolicyManager* pm) {
}
namespace {
-const uint32_t kDefaultRetryTimeoutInMSec = 60u * date_time::DateTime::MILLISECONDS_IN_SECOND;
+const uint32_t kDefaultRetryTimeoutInMSec =
+ 60u * date_time::DateTime::MILLISECONDS_IN_SECOND;
} // namespace
namespace policy {
@@ -894,7 +896,24 @@ std::string PolicyManagerImpl::RetrieveCertificate() const {
return cache_->GetCertificate();
}
-void PolicyManagerImpl::AddApplication(const std::string& application_id) {
+class CallStatusChange : public utils::Callable {
+ public:
+ CallStatusChange(UpdateStatusManager& upd_manager,
+ const DeviceConsent& device_consent)
+ : upd_manager_(upd_manager), device_consent_(device_consent) {}
+
+ // Callable interface
+ void operator()() const {
+ upd_manager_.OnNewApplicationAdded(device_consent_);
+ }
+
+ private:
+ UpdateStatusManager& upd_manager_;
+ const DeviceConsent device_consent_;
+};
+
+StatusNotifier PolicyManagerImpl::AddApplication(
+ const std::string& application_id) {
LOG4CXX_AUTO_TRACE(logger_);
const std::string device_id = GetCurrentDeviceId(application_id);
DeviceConsent device_consent = GetUserConsentForDevice(device_id);
@@ -902,9 +921,11 @@ void PolicyManagerImpl::AddApplication(const std::string& application_id) {
if (IsNewApplication(application_id)) {
AddNewApplication(application_id, device_consent);
- update_status_manager_.OnNewApplicationAdded(device_consent);
+ return utils::MakeShared<CallStatusChange>(update_status_manager_,
+ device_consent);
} else {
PromoteExistedApplication(application_id, device_consent);
+ return utils::MakeShared<utils::CallNothing>();
}
}
diff --git a/src/components/policy/policy_regular/test/include/policy/mock_policy_manager.h b/src/components/policy/policy_regular/test/include/policy/mock_policy_manager.h
index b63bdf2d19..ff54807ef2 100644
--- a/src/components/policy/policy_regular/test/include/policy/mock_policy_manager.h
+++ b/src/components/policy/policy_regular/test/include/policy/mock_policy_manager.h
@@ -137,7 +137,8 @@ class MockPolicyManager : public PolicyManager {
MOCK_METHOD1(SendNotificationOnPermissionsUpdated,
void(const std::string& application_id));
MOCK_METHOD1(MarkUnpairedDevice, void(const std::string& device_id));
- MOCK_METHOD1(AddApplication, void(const std::string& application_id));
+ MOCK_METHOD1(AddApplication,
+ StatusNotifier(const std::string& application_id));
MOCK_METHOD0(CleanupUnpairedDevices, bool());
MOCK_CONST_METHOD1(CanAppKeepContext, bool(const std::string& app_id));
MOCK_CONST_METHOD1(CanAppStealFocus, bool(const std::string& 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 2f241fa069..51bd1f4fe5 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
@@ -771,7 +771,9 @@ TEST_F(
AddApplication_AddNewApplicationFromDeviceWithoutConsent_ExpectUpdateRequired) {
// Arrange
CreateLocalPT("sdl_preloaded_pt.json");
- manager->AddApplication(app_id1);
+ ::policy::StatusNotifier notifyer = manager->AddApplication(app_id1);
+ DCHECK(notifyer);
+ (*notifyer)();
EXPECT_EQ("UPDATE_NEEDED", manager->GetPolicyTableStatus());
}