summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrii Kalinich (GitHub) <AKalinich@luxoft.com>2021-10-21 10:30:53 -0400
committerGitHub <noreply@github.com>2021-10-21 10:30:53 -0400
commita0f004003ec76a92fac941cea37e8014822938c8 (patch)
tree4866aacc902f744ae03d91355653a11b9138d32a
parente44e292b2f0a87349e6297259474abb35cb5e542 (diff)
downloadsdl_core-a0f004003ec76a92fac941cea37e8014822938c8.tar.gz
Fix issues with web app activation (#3799)8.0.0-RC2
* Add initial states for pending applications This would prevent crashes for cases when app will be attempted to be activated. * Fix UpdateAppList content * Fix checks in SDL.ActivateApp * Fix unit tests
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc13
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc41
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc26
-rw-r--r--src/components/application_manager/src/message_helper/message_helper.cc2
4 files changed, 41 insertions, 41 deletions
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
index 88b3065fb0..e25ee93400 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
@@ -139,7 +139,7 @@ void SDLActivateAppRequest::Run() {
return;
}
- if (!app->is_cloud_app() || app->IsRegistered()) {
+ if (app->app_id() > 0 || app->IsRegistered()) {
auto main_state =
app->CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW);
if (mobile_apis::HMILevel::INVALID_ENUM == main_state->hmi_level()) {
@@ -173,6 +173,15 @@ void SDLActivateAppRequest::Run() {
application_manager_.connection_handler().ConnectToDevice(app->device());
return;
}
+
+ connection_handler::DeviceHandle device_handle = app->device();
+ SDL_LOG_ERROR(
+ "Can't find regular foreground app with the same connection id: "
+ << device_handle);
+ SendErrorResponse(correlation_id(),
+ SDL_ActivateApp,
+ hmi_apis::Common_Result::NO_APPS_REGISTERED,
+ "");
}
#else // EXTERNAL_PROPRIETARY_MODE
@@ -216,7 +225,7 @@ void SDLActivateAppRequest::Run() {
return;
}
- if (!app_to_activate->is_cloud_app() || app_to_activate->IsRegistered()) {
+ if (app_to_activate->app_id() > 0 || app_to_activate->IsRegistered()) {
auto main_state = app_to_activate->CurrentHmiState(
mobile_apis::PredefinedWindows::DEFAULT_WINDOW);
if (mobile_apis::HMILevel::INVALID_ENUM == main_state->hmi_level()) {
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc
index 44bd7f4a80..b110d4bf9e 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc
@@ -157,6 +157,7 @@ TEST_F(SDLActivateAppRequestTest, Run_ActivateApp_SUCCESS) {
CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
.WillOnce(Return(state));
+ EXPECT_CALL(*mock_app, app_id()).WillOnce(Return(kAppID));
EXPECT_CALL(*mock_app, IsRegistered()).WillOnce(Return(true));
EXPECT_CALL(mock_policy_handler_, OnActivateApp(kAppID, kCorrelationID));
@@ -204,12 +205,6 @@ TEST_F(SDLActivateAppRequestTest, FindAppToRegister_SUCCESS) {
IsStateActive(am::HmiState::StateID::STATE_ID_DEACTIVATE_HMI))
.WillOnce(Return(false));
- am::HmiStatePtr state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
- state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
- EXPECT_CALL(*mock_app,
- CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
- .WillOnce(Return(state));
-
ON_CALL(*mock_app, IsRegistered()).WillByDefault(Return(false));
ON_CALL(*mock_app, is_cloud_app()).WillByDefault(Return(false));
ON_CALL(*mock_app, device()).WillByDefault(Return(kHandle));
@@ -272,12 +267,6 @@ TEST_F(SDLActivateAppRequestTest, DevicesAppsEmpty_SUCCESS) {
IsStateActive(am::HmiState::StateID::STATE_ID_DEACTIVATE_HMI))
.WillOnce(Return(false));
- am::HmiStatePtr state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
- state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
- EXPECT_CALL(*mock_app,
- CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
- .WillOnce(Return(state));
-
ON_CALL(*mock_app, IsRegistered()).WillByDefault(Return(false));
ON_CALL(*mock_app, is_cloud_app()).WillByDefault(Return(false));
ON_CALL(*mock_app, device()).WillByDefault(Return(kHandle));
@@ -305,12 +294,6 @@ TEST_F(SDLActivateAppRequestTest, FirstAppActive_SUCCESS) {
.WillOnce(Return(false));
EXPECT_CALL(*mock_app, device()).WillOnce(Return(kHandle));
- am::HmiStatePtr state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
- state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
- EXPECT_CALL(*mock_app,
- CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
- .WillOnce(Return(state));
-
DataAccessor<ApplicationSet> accessor(app_list_, lock_);
EXPECT_CALL(app_mngr_, applications()).WillRepeatedly(Return(accessor));
@@ -348,14 +331,14 @@ TEST_F(SDLActivateAppRequestTest, FirstAppNotActiveNONE_SUCCESS) {
IsStateActive(am::HmiState::StateID::STATE_ID_DEACTIVATE_HMI))
.WillOnce(Return(false));
+ ON_CALL(*mock_app, IsRegistered()).WillByDefault(Return(true));
+
am::HmiStatePtr state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
EXPECT_CALL(*mock_app,
CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
.WillOnce(Return(state));
- EXPECT_CALL(*mock_app, IsRegistered()).WillOnce(Return(true));
-
EXPECT_CALL(mock_policy_handler_, OnActivateApp(kAppID, kCorrelationID));
command->Run();
@@ -377,12 +360,6 @@ TEST_F(SDLActivateAppRequestTest, FirstAppIsForeground_SUCCESS) {
ON_CALL(app_mngr_, application(kAppID)).WillByDefault(Return(mock_app));
- am::HmiStatePtr state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
- state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
- EXPECT_CALL(*mock_app,
- CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
- .WillOnce(Return(state));
-
EXPECT_CALL(*mock_app, device()).WillOnce(Return(kHandle));
ON_CALL(*mock_app, IsRegistered()).WillByDefault(Return(false));
ON_CALL(*mock_app, is_cloud_app()).WillByDefault(Return(false));
@@ -425,12 +402,6 @@ TEST_F(SDLActivateAppRequestTest, FirstAppNotRegisteredAndEmpty_SUCCESS) {
IsStateActive(am::HmiState::StateID::STATE_ID_DEACTIVATE_HMI))
.WillOnce(Return(false));
- am::HmiStatePtr state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
- state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
- EXPECT_CALL(*mock_app,
- CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
- .WillOnce(Return(state));
-
MockAppPtr mock_app_first(CreateMockApp());
ON_CALL(*mock_app_first, device()).WillByDefault(Return(kHandle));
ON_CALL(*mock_app_first, is_foreground()).WillByDefault(Return(false));
@@ -464,12 +435,6 @@ TEST_F(SDLActivateAppRequestTest, FirstAppNotRegistered_SUCCESS) {
IsStateActive(am::HmiState::StateID::STATE_ID_DEACTIVATE_HMI))
.WillOnce(Return(false));
- am::HmiStatePtr state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
- state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
- EXPECT_CALL(*mock_app,
- CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
- .WillOnce(Return(state));
-
DataAccessor<ApplicationSet> accessor(app_list_, lock_);
EXPECT_CALL(app_mngr_, applications()).WillRepeatedly(Return(accessor));
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index 8d2875364d..7a5d5fc0dc 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -1200,6 +1200,19 @@ void ApplicationManagerImpl::CreatePendingApplication(
application->set_hybrid_app_preference(hybrid_app_preference_enum);
application->set_cloud_app_certificate(app_properties.certificate);
+ HmiStatePtr initial_state =
+ CreateRegularState(application,
+ mobile_apis::WindowType::MAIN,
+ mobile_apis::HMILevel::INVALID_ENUM,
+ mobile_apis::AudioStreamingState::INVALID_ENUM,
+ mobile_apis::VideoStreamingState::INVALID_ENUM,
+ mobile_api::SystemContext::SYSCTXT_MAIN);
+
+ application->SetInitialState(
+ mobile_apis::PredefinedWindows::DEFAULT_WINDOW,
+ std::string(), // should not be tracked for main window
+ initial_state);
+
{
sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_);
SDL_LOG_DEBUG(
@@ -1284,6 +1297,19 @@ void ApplicationManagerImpl::CreatePendingLocalApplication(
application->set_hybrid_app_preference(hybrid_app_preference_enum);
application->set_cloud_app_certificate(app_properties.certificate);
+ HmiStatePtr initial_state =
+ CreateRegularState(application,
+ mobile_apis::WindowType::MAIN,
+ mobile_apis::HMILevel::INVALID_ENUM,
+ mobile_apis::AudioStreamingState::INVALID_ENUM,
+ mobile_apis::VideoStreamingState::INVALID_ENUM,
+ mobile_api::SystemContext::SYSCTXT_MAIN);
+
+ application->SetInitialState(
+ mobile_apis::PredefinedWindows::DEFAULT_WINDOW,
+ std::string(), // should not be tracked for main window
+ initial_state);
+
sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_);
apps_to_register_.insert(application);
SDL_LOG_DEBUG("Insert " << application->name().c_str()
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 94d0a75c7f..bbe6189bc9 100644
--- a/src/components/application_manager/src/message_helper/message_helper.cc
+++ b/src/components/application_manager/src/message_helper/message_helper.cc
@@ -1848,7 +1848,7 @@ bool MessageHelper::CreateHMIApplicationStruct(
if (file_system::FileExists(app->app_icon_path())) {
message[strings::icon] = icon_path;
}
- if (!app->is_cloud_app() || app->IsRegistered()) {
+ if (app->app_id() > 0 || app->IsRegistered()) {
message[strings::hmi_display_language_desired] = app->ui_language();
message[strings::is_media_application] = app->is_media_application();
} else {