diff options
author | Jacob Keeler <jacob.keeler@livioradio.com> | 2017-09-07 12:47:53 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-07 12:47:53 -0400 |
commit | 3f003d6bbb301725218a8dbacfcf92e04fb874d7 (patch) | |
tree | edd5aa1bdc50955fac47d6e8d71396623faab538 | |
parent | 90339816ea1078f822889fd33e8a94738a4f0f07 (diff) | |
parent | 038ac30079f202885895bebc1f229df918b6929f (diff) | |
download | sdl_core-3f003d6bbb301725218a8dbacfcf92e04fb874d7.tar.gz |
Merge pull request #1620 from AByzhynar/fix/FixFactoryDefaults
Clear persistent data of all registered applications after FACTORY_DEFAULTS and MASTER_RESET
8 files changed, 57 insertions, 13 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 6d5c365a99..7a26501afc 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 @@ -1218,6 +1218,11 @@ class ApplicationManagerImpl return is_stopping_; } + /** + * @brief Clears all applications' persistent data + */ + void ClearAppsPersistentData(); + StateController& state_controller() OVERRIDE; const ApplicationManagerSettings& get_settings() const OVERRIDE; virtual event_engine::EventDispatcher& event_dispatcher() OVERRIDE; diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index d6c2aa6d7a..ab20222fcf 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -2712,32 +2712,38 @@ void ApplicationManagerImpl::RemovePolicyObserver( void ApplicationManagerImpl::SetUnregisterAllApplicationsReason( mobile_api::AppInterfaceUnregisteredReason::eType reason) { + LOG4CXX_AUTO_TRACE(logger_); LOG4CXX_TRACE(logger_, "reason = " << reason); unregister_reason_ = reason; } void ApplicationManagerImpl::HeadUnitReset( mobile_api::AppInterfaceUnregisteredReason::eType reason) { + LOG4CXX_AUTO_TRACE(logger_); stopping_application_mng_lock_.Acquire(); is_stopping_ = true; stopping_application_mng_lock_.Release(); switch (reason) { case mobile_api::AppInterfaceUnregisteredReason::MASTER_RESET: { + LOG4CXX_TRACE(logger_, "Performing MASTER_RESET"); UnregisterAllApplications(); GetPolicyHandler().ResetPolicyTable(); GetPolicyHandler().UnloadPolicyLibrary(); resume_controller().StopSavePersistentDataTimer(); - file_system::remove_directory_content( - get_settings().app_storage_folder()); + + const std::string storage_folder = get_settings().app_storage_folder(); + file_system::RemoveDirectory(storage_folder, true); + ClearAppsPersistentData(); break; } case mobile_api::AppInterfaceUnregisteredReason::FACTORY_DEFAULTS: { + LOG4CXX_TRACE(logger_, "Performing FACTORY_DEFAULTS"); GetPolicyHandler().ClearUserConsent(); resume_controller().StopSavePersistentDataTimer(); - file_system::remove_directory_content( - get_settings().app_storage_folder()); + + ClearAppsPersistentData(); break; } default: { @@ -2747,6 +2753,43 @@ void ApplicationManagerImpl::HeadUnitReset( } } +void ApplicationManagerImpl::ClearAppsPersistentData() { + LOG4CXX_AUTO_TRACE(logger_); + typedef std::vector<std::string> FilesList; + const std::string apps_info_storage_file = get_settings().app_info_storage(); + file_system::DeleteFile(apps_info_storage_file); + + const std::string storage_folder = get_settings().app_storage_folder(); + + FilesList files = file_system::ListFiles(storage_folder); + FilesList::iterator element_to_skip = + std::find(files.begin(), files.end(), "policy.sqlite"); + if (element_to_skip != files.end()) { + files.erase(element_to_skip); + } + + FilesList::iterator it = files.begin(); + for (; it != files.end(); ++it) { + const std::string path_to_item = storage_folder + "/"; + const std::string item_to_remove = path_to_item + (*it); + LOG4CXX_TRACE(logger_, "Removing : " << item_to_remove); + if (file_system::IsDirectory(item_to_remove)) { + LOG4CXX_TRACE(logger_, + "Removal result : " << file_system::RemoveDirectory( + item_to_remove, true)); + } else { + LOG4CXX_TRACE( + logger_, + "Removal result : " << file_system::DeleteFile(item_to_remove)); + } + } + + const std::string apps_icons_folder = get_settings().app_icons_folder(); + if (storage_folder != apps_icons_folder) { + file_system::RemoveDirectory(apps_icons_folder, true); + } +} + void ApplicationManagerImpl::SendOnSDLClose() { LOG4CXX_AUTO_TRACE(logger_); diff --git a/src/components/application_manager/src/commands/hmi/on_exit_all_applications_notification.cc b/src/components/application_manager/src/commands/hmi/on_exit_all_applications_notification.cc index 682093cef9..07a95adcea 100644 --- a/src/components/application_manager/src/commands/hmi/on_exit_all_applications_notification.cc +++ b/src/components/application_manager/src/commands/hmi/on_exit_all_applications_notification.cc @@ -110,5 +110,4 @@ void OnExitAllApplicationsNotification::SendOnSDLPersistenceComplete() { } } // namespace commands - } // namespace application_manager diff --git a/src/components/config_profile/include/config_profile/profile.h b/src/components/config_profile/include/config_profile/profile.h index ea1b3764ac..ac4950220e 100644 --- a/src/components/config_profile/include/config_profile/profile.h +++ b/src/components/config_profile/include/config_profile/profile.h @@ -349,7 +349,7 @@ class Profile : public protocol_handler::ProtocolHandlerSettings, /* * @brief Returns file name for storing applications data */ - const std::string& app_info_storage() const; + const std::string& app_info_storage() const OVERRIDE; /* * @brief Path to preloaded policy file diff --git a/src/components/include/application_manager/application_manager_settings.h b/src/components/include/application_manager/application_manager_settings.h index 415cc57d17..e745a831c6 100644 --- a/src/components/include/application_manager/application_manager_settings.h +++ b/src/components/include/application_manager/application_manager_settings.h @@ -63,6 +63,7 @@ class ApplicationManagerSettings : public RequestControlerSettings, virtual bool launch_hmi() const = 0; virtual const uint32_t& delete_file_in_none() const = 0; virtual const std::vector<uint32_t>& supported_diag_modes() const = 0; + virtual const std::string& app_info_storage() const = 0; virtual const uint32_t& list_files_in_none() const = 0; virtual const std::string& tts_delimiter() const = 0; virtual const uint32_t& put_file_in_none() const = 0; diff --git a/src/components/include/test/application_manager/mock_application_manager_settings.h b/src/components/include/test/application_manager/mock_application_manager_settings.h index c09e79a52f..25cf994566 100644 --- a/src/components/include/test/application_manager/mock_application_manager_settings.h +++ b/src/components/include/test/application_manager/mock_application_manager_settings.h @@ -57,6 +57,7 @@ class MockApplicationManagerSettings const std::pair<uint32_t, int32_t>&()); MOCK_CONST_METHOD0(hash_string_size, uint32_t()); MOCK_CONST_METHOD0(app_storage_folder, const std::string&()); + MOCK_CONST_METHOD0(app_info_storage, const std::string&()); MOCK_CONST_METHOD0(app_dir_quota, const uint32_t&()); MOCK_CONST_METHOD0(stop_streaming_timeout, uint32_t()); MOCK_CONST_METHOD0(application_list_update_timeout, uint32_t()); 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 db858cd2e4..8a80e7755b 100644 --- a/src/components/policy/policy_external/src/policy_manager_impl.cc +++ b/src/components/policy/policy_external/src/policy_manager_impl.cc @@ -737,10 +737,7 @@ void PolicyManagerImpl::CheckPermissions(const PTString& app_id, } bool PolicyManagerImpl::ResetUserConsent() { - bool result = true; - result = cache_->ResetUserConsent(); - - return result; + return cache_->ResetUserConsent(); } policy_table::Strings PolicyManagerImpl::GetGroupsNames( 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 93e831acda..640b9c1457 100644 --- a/src/components/policy/policy_regular/src/policy_manager_impl.cc +++ b/src/components/policy/policy_regular/src/policy_manager_impl.cc @@ -414,9 +414,7 @@ void PolicyManagerImpl::CheckPermissions(const PTString& device_id, } bool PolicyManagerImpl::ResetUserConsent() { - bool result = true; - - return result; + return cache_->ResetUserConsent(); } void PolicyManagerImpl::SendNotificationOnPermissionsUpdated( |