From e14207a06e995cc5fd35c724be368924ab9c438a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Piotr=20Kosko/Native/Web=20API=20=28PLT=29=20/SRPOL/Profess?= =?utf8?q?ional/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Mon, 22 Jul 2019 11:21:02 +0200 Subject: [PATCH] [Application] Fixed path of getAppSharedURI Application should return path to the 'shared' directory which follows the description of 'shared' directory content available here: https://developer.tizen.org/development/training/native-application/understanding-tizen-programming/file-system-directory-hierarchy New application returns the path like: sh-3.2# ls -al /opt/usr/home/owner/apps_rw/org.example.basic/shared/ total 20 drwxr-xr-x 4 owner users 4096 Jul 18 13:06 . drwxr-xr-x 5 owner users 4096 Jul 18 13:06 .. drwxrwsr-x 2 owner system_share 4096 Jul 18 13:06 data lrwxrwxrwx 1 app_fw app_fw 58 Jul 18 13:06 res -> /opt/usr/globalapps/org.example.basic/shared/res drwxr-xr-x 2 owner users 4096 Jul 18 13:06 trusted Instead of the previous result: sh-3.2# ls -al /opt/usr/globalapps/org.example.basic/shared/ total 12 drwxr-xr-x 3 tizenglobalapp root 4096 Jul 18 13:06 . drwxr-xr-x 6 tizenglobalapp root 4096 Jul 18 13:06 .. drwxr-xr-x 2 tizenglobalapp root 4096 Jul 18 13:06 res [Verification] Checked manually in chrome console TCT Application 100% passrate Change-Id: I0032c10bf2d98487117cd0049103767f9c7f1d09 --- src/application/application_manager.cc | 60 ++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/src/application/application_manager.cc b/src/application/application_manager.cc index 5ac925e..3d8ccd6 100644 --- a/src/application/application_manager.cc +++ b/src/application/application_manager.cc @@ -16,6 +16,7 @@ #include "application_manager.h" +#include #include #include @@ -1086,42 +1087,45 @@ void ApplicationManager::GetAppCerts(const std::string& app_id, picojson::object void ApplicationManager::GetAppSharedUri(const std::string& app_id, picojson::object* out) { ScopeLogger(); + // this implementation assumes that shared/trusted path is the obligatory member of application + // and it is used to extract the parent directory 'shared' + char* path = nullptr; + int ret = app_manager_get_shared_trusted_path(app_id.c_str(), &path); + if (APP_MANAGER_ERROR_NONE != ret) { + // if the application does not exist, there is no need to check "res" directory + if (APP_MANAGER_ERROR_NO_SUCH_APP == ret) { + LogAndReportError(PlatformResult(ErrorCode::NOT_FOUND_ERR, "Failed to get shared URI."), out); + return; + } - char* package_id = nullptr; - - package_id = GetPackageId(app_id); - // automatically release the memory - std::unique_ptr package_id_ptr(package_id, &std::free); - - if (!package_id) { - LogAndReportError(PlatformResult(ErrorCode::NOT_FOUND_ERR, "Failed to get package."), out); - return; + // if the shared_trusted directory is not properly returned, gathering the shared/res path, + // which is the obligatory member. The global path could be different then: + // e.g. instead of path: /opt/usr/home/owner/apps_rw/org.example.basic/shared/ + // returned path is: /opt/usr/globalapps/org.example.basic/shared/ + LoggerW( + "app_manager_get_shared_trusted_path failed(), trying " + "app_manager_get_shared_resource_path() to gather path"); + int ret = app_manager_get_shared_resource_path(app_id.c_str(), &path); + if (APP_MANAGER_ERROR_NONE != ret) { + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to get shared URI."), out); + return; + } } - pkgmgrinfo_pkginfo_h pkg_info = nullptr; - - int ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(package_id, getuid(), &pkg_info); - std::unique_ptr::type, int (*)(pkgmgrinfo_pkginfo_h)> - pkg_info_ptr(pkg_info, - &pkgmgrinfo_pkginfo_destroy_pkginfo); // automatically release the memory - - if (PMINFO_R_OK != ret) { - LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to get package info."), out, - ("Failed to get package info: %d (%s)", ret, get_error_message(ret))); - return; - } + std::string path_str = path; + free(path); - char* root_path = nullptr; - ret = pkgmgrinfo_pkginfo_get_root_path(pkg_info, &root_path); + std::string shared_path = path_str.substr(0, path_str.rfind("/", path_str.length() - 2)); - if (PMINFO_R_OK != ret || nullptr == root_path) { - LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to get root path."), out, - ("Failed to get root path: %d (%s)", ret, get_error_message(ret))); + // checking if path is valid + struct stat stat_res; + if (0 != stat(shared_path.c_str(), &stat_res)) { + LoggerW("Path %s does not exist", shared_path.c_str()); + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to get shared URI."), out); return; } - picojson::value result = picojson::value(kTizenApisFileScheme + root_path + kTizenApisAppSlash + - kTizenApisAppShared + kTizenApisAppSlash); + picojson::value result = picojson::value(kTizenApisFileScheme + shared_path); ReportSuccess(result, *out); } -- 2.7.4