diff options
5 files changed, 22 insertions, 11 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 25e28515d4..438b62c797 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 @@ -651,6 +651,9 @@ class ApplicationManagerImpl const uint32_t corr_id, const int32_t function_id) OVERRIDE; + void OnQueryAppsRequest( + const connection_handler::DeviceHandle device) OVERRIDE; + // Overriden ConnectionHandlerObserver method void OnDeviceListUpdated( const connection_handler::DeviceMap& device_list) OVERRIDE; @@ -1487,11 +1490,12 @@ class ApplicationManagerImpl * will send TTS global properties to HMI after timeout */ std::map<uint32_t, date_time::TimeDuration> tts_global_properties_app_list_; - + std::set<connection_handler::DeviceHandle> query_apps_devices_; bool audio_pass_thru_active_; uint32_t audio_pass_thru_app_id_; sync_primitives::Lock audio_pass_thru_lock_; sync_primitives::Lock tts_global_properties_app_list_lock_; + mutable sync_primitives::Lock query_apps_devices_lock_; hmi_apis::Common_DriverDistractionState::eType driver_distraction_state_; bool is_vr_session_strated_; bool hmi_cooperating_; 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 9be5a270f5..030db82881 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 @@ -612,7 +612,7 @@ void SystemRequest::Run() { return; } else if (mobile_apis::RequestType::QUERY_APPS == request_type) { using namespace ns_smart_device_link::ns_json_handler::formatters; - + application_manager_.OnQueryAppsRequest(application->device()); smart_objects::SmartObject sm_object; Json::Reader reader; std::string json(binary_data.begin(), binary_data.end()); @@ -623,6 +623,7 @@ void SystemRequest::Run() { } CFormatterJsonBase::jsonValueToObj(root, sm_object); + if (!ValidateQueryAppData(sm_object)) { SendResponse(false, mobile_apis::Result::GENERIC_ERROR); return; diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index 6187a6daba..d51d4c9d06 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -1443,15 +1443,8 @@ ApplicationManagerImpl::AppsWaitingForRegistration() const { bool ApplicationManagerImpl::IsAppsQueriedFrom( const connection_handler::DeviceHandle handle) const { - sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_); - AppsWaitRegistrationSet::iterator it = apps_to_register_.begin(); - AppsWaitRegistrationSet::const_iterator it_end = apps_to_register_.end(); - for (; it != it_end; ++it) { - if (handle == (*it)->device()) { - return true; - } - } - return false; + sync_primitives::AutoLock lock(query_apps_devices_lock_); + return query_apps_devices_.find(handle) != query_apps_devices_.end(); } StateController& ApplicationManagerImpl::state_controller() { @@ -1543,6 +1536,13 @@ void ApplicationManagerImpl::OnFindNewApplicationsRequest() { GetPolicyHandler().OnAppsSearchStarted(); } +void ApplicationManagerImpl::OnQueryAppsRequest( + const connection_handler::DeviceHandle device) { + LOG4CXX_AUTO_TRACE(logger_); + sync_primitives::AutoLock lock(query_apps_devices_lock_); + query_apps_devices_.insert(device); +} + void ApplicationManagerImpl::SendUpdateAppList() { LOG4CXX_AUTO_TRACE(logger_); @@ -1567,6 +1567,8 @@ void ApplicationManagerImpl::SendUpdateAppList() { void ApplicationManagerImpl::RemoveDevice( const connection_handler::DeviceHandle& device_handle) { LOG4CXX_DEBUG(logger_, "device_handle " << device_handle); + sync_primitives::AutoLock lock(query_apps_devices_lock_); + query_apps_devices_.erase(device_handle); } void ApplicationManagerImpl::OnDeviceSwitchingStart( diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h index 9343d7d973..e96101e7f1 100644 --- a/src/components/include/application_manager/application_manager.h +++ b/src/components/include/application_manager/application_manager.h @@ -170,6 +170,8 @@ class ApplicationManager { virtual ApplicationSharedPtr application(uint32_t app_id) const = 0; virtual ApplicationSharedPtr active_application() const = 0; + virtual void OnQueryAppsRequest( + const connection_handler::DeviceHandle device) = 0; virtual ApplicationSharedPtr get_full_or_limited_application() const = 0; 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 60ad7196a8..2e0269cefd 100644 --- a/src/components/include/test/application_manager/mock_application_manager.h +++ b/src/components/include/test/application_manager/mock_application_manager.h @@ -241,6 +241,8 @@ class MockApplicationManager : public application_manager::ApplicationManager { void(const uint32_t connection_key, const uint32_t corr_id, const int32_t function_id)); + MOCK_METHOD1(OnQueryAppsRequest, + void(const connection_handler::DeviceHandle)); MOCK_METHOD4(UnregisterApplication, void(const uint32_t&, mobile_apis::Result::eType, bool, bool)); MOCK_METHOD3(updateRequestTimeout, |