Add prelaunch callback 10/265610/4
authorChanggyu Choi <changyu.choi@samsung.com>
Mon, 25 Oct 2021 06:55:09 +0000 (15:55 +0900)
committerChanggyu Choi <changyu.choi@samsung.com>
Tue, 26 Oct 2021 01:48:52 +0000 (10:48 +0900)
prelaunch callback is called to before being called security_manager_prepare_app()

Change-Id: Ib658ed698966dd4a7cd063bf3316e6f37dacca18
Signed-off-by: Changgyu Choi <changyu.choi@samsung.com>
src/app-defined-loader/src/app-defined-loader.cc
src/lib/launchpad/inc/launchpad.h
src/lib/launchpad/src/launchpad_lib.c

index 3fe7085..4ae4471 100644 (file)
@@ -54,6 +54,7 @@ class AppDefinedLoader {
   AppDefinedLoader(int argc, char** argv) : argc_(argc), argv_(argv) {
     lifecycle_cb_ = std::make_shared<loader_lifecycle_callback_s>();
     lifecycle_cb_->create = OnCreate;
+    lifecycle_cb_->prelaunch = nullptr;
     lifecycle_cb_->launch = OnLaunch;
     lifecycle_cb_->terminate = OnTerminate;
 
index 7d20175..86ea976 100644 (file)
@@ -24,6 +24,9 @@ extern "C" {
 #endif
 
 typedef void (*loader_create_cb)(bundle *extra, int type, void *user_data);
+typedef int (*loader_prelaunch_cb)(int argc, char **argv, const char *app_path,
+               const char *appid, const char *pkgid, const char *pkg_type,
+               void *user_data);
 typedef int (*loader_launch_cb)(int argc, char **argv, const char *app_path,
                const char *appid, const char *pkgid, const char *pkg_type,
                void *user_data);
@@ -38,6 +41,7 @@ typedef void (*loader_remove_fd_cb)(void *user_data, int fd);
 
 typedef struct {
        loader_create_cb create;
+       loader_prelaunch_cb prelaunch;
        loader_launch_cb launch;
        loader_terminate_cb terminate;
 } loader_lifecycle_callback_s;
index 05fa2c3..c4e7a95 100644 (file)
@@ -251,6 +251,17 @@ static int __candidate_process_launchpad_main_loop(app_pkt_t *pkt,
 
        tmp_argv = _create_argc_argv(kb, &tmp_argc);
 
+       if (__loader_callbacks->prelaunch) {
+               ret = __loader_callbacks->prelaunch(tmp_argc, tmp_argv,
+                               app_path, menu_info->appid, menu_info->pkgid,
+                               menu_info->pkg_type, __loader_user_data);
+
+               if (ret < 0) {
+                       _E("prelaunch callback fail (%d)", ret);
+                       exit(-1);
+               }
+       }
+
        __default_launch_cb(kb, menu_info->appid, app_path,
                        menu_info->root_path, menu_info->pkgid,
                        menu_info->pkg_type, type, menu_info->global);