Web app with api_version 4.0 will have storage privileges by default on mobile/tv... 56/174356/8
authorYunjin Lee <yunjin-.lee@samsung.com>
Fri, 30 Mar 2018 04:44:32 +0000 (13:44 +0900)
committerYunjin Lee <yunjin-.lee@samsung.com>
Tue, 21 Aug 2018 10:44:46 +0000 (19:44 +0900)
- Map web storage privileges to 4.0 by default for mobile/tv profile
- Modify web storage privileges's mapping from messaging.read, write according to the profile
- Change API privilege_package_info_is_privacy_requestable() to get privilege as input parameter

- Policy type of storage privacy on installation time
_______|___|____Mobile____|___Wearable___|___TV____|
       |3.0| Allow        | Allow        | Allow   |
Native |4.0| Ask          | Ask          | Allow   |
_______|5.0|_Ask__________|_Ask__________|_Allow___|
       |3.0| Allow        | Allow        | Allow   |
Web    |4.0| Allow        | Ask          | Allow   |
_______|5.0|_Ask__________|_Ask__________|_Allow___|

Change-Id: I4b2981353ee309f8114b8df06d98af67c23a86b6
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
capi/include/privilege_db_manager.h
capi/include/privilege_package_info.h
capi/res/dbspace/wrt_privilege_mapping.csv
capi/src/privilege_db_manager.c
capi/src/privilege_info.c
capi/src/privilege_package_info.c
test/tc-common.c
test/tc-common.h
test/tc-privilege-info.c
test/tc-privilege-package-info.c

index c35ce3f..9b90409 100755 (executable)
@@ -365,6 +365,7 @@ int privilege_db_manager_unset_package_privilege_info(const uid_t uid, const cha
  * @remarks If the package have no privacy privilege then it will return PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT
  * @param [in]  uid The uid
  * @param [in]  pkgid The package ID
+ * @param [in] privilege The privilege
  * @param [out] is_privacy_requestable is_privacy_requestable value
  * @return 0 on success, otherwise a negative error value.
  * @retval #PRIVILEGE_DB_MANAGER_ERR_NONE  Successful.
@@ -373,7 +374,7 @@ int privilege_db_manager_unset_package_privilege_info(const uid_t uid, const cha
  * @retval #PRIVILEGE_DB_MANAGER_ERR_CONNECTION_FAIL DB exist but failed to open DB.
  * @retval #PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT No data selected by given qeury.
  */
-int privilege_db_manager_is_privacy_requestable(const uid_t uid, const char* pkgid, bool* is_privacy_requestable);
+int privilege_db_manager_is_privacy_requestable(const uid_t uid, const char* pkgid, const char* privilege, privilege_manager_package_type_e pkg_type, bool* is_privacy_requestable);
 
 /**
  * @brief Get is_critical value for thr privilege and package
index 4c7cf4c..b086f91 100755 (executable)
@@ -84,18 +84,7 @@ EXPORT_API int privilege_package_info_unset_package_privilege_info(const uid_t u
  * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter
  * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error
  */
-EXPORT_API int privilege_package_info_is_privacy_requestable(const uid_t uid, const char* pkgid, bool* is_requestable);
-
-/**
- * @brief See if the given api-version is privacy requestable api-version.
- * @param [in]  api_version The api-version
- * @param [out] is_requestable Indicates whether the given api-version is privacy requestable(true) or not(false).
- * @return 0 on success, otherwise a negative error value.
- * @retval #PRVMGR_ERR_NONE Successful
- * @retval #PRVMGR_ERR_INVALID_PARAMETER Invalid parameter
- * @retval #PRVMGR_ERR_INTERNAL_ERROR Internal error
- */
-EXPORT_API int privilege_package_info_is_privacy_requestable_api_version(const char* api_version, bool* is_requestable);
+EXPORT_API int privilege_package_info_is_privacy_requestable(const uid_t uid, const char* pkgid, const char* privilege, bool* is_requestable);
 
 /**
  * @brief Check if the given privilege is critical for the application package.
index 914f4b8..7bd7a89 100644 (file)
@@ -63,13 +63,17 @@ common,http://tizen.org/privilege/mediacontroller.server,2.2.1,9.9,http://tizen.
 common,http://tizen.org/privilege/mediastorage,2.2.1,9.9,http://tizen.org/privilege/mediastorage
 common,http://tizen.org/privilege/messaging.read,2.2.1,9.9,http://tizen.org/privilege/email
 common,http://tizen.org/privilege/messaging.read,2.2.1,9.9,http://tizen.org/privilege/internal/buxton/message.read
-common,http://tizen.org/privilege/messaging.read,2.2.1,4,http://tizen.org/privilege/mediastorage
+mobile,http://tizen.org/privilege/messaging.read,2.2.1,5,http://tizen.org/privilege/mediastorage
+wearable,http://tizen.org/privilege/messaging.read,2.2.1,4,http://tizen.org/privilege/mediastorage
+tv,http://tizen.org/privilege/messaging.read,2.2.1,5,http://tizen.org/privilege/mediastorage
 common,http://tizen.org/privilege/messaging.read,2.2.1,9.9,http://tizen.org/privilege/message.read
 common,http://tizen.org/privilege/messaging.write,2.2.1,9.9,http://tizen.org/privilege/email
 common,http://tizen.org/privilege/messaging.write,2.2.1,9.9,http://tizen.org/privilege/telephony
 common,http://tizen.org/privilege/messaging.write,2.2.1,9.9,http://tizen.org/privilege/message.read
 common,http://tizen.org/privilege/messaging.write,2.2.1,9.9,http://tizen.org/privilege/message.write
-common,http://tizen.org/privilege/messaging.write,2.2.1,4,http://tizen.org/privilege/mediastorage
+mobile,http://tizen.org/privilege/messaging.write,2.2.1,5,http://tizen.org/privilege/mediastorage
+wearable,http://tizen.org/privilege/messaging.write,2.2.1,4,http://tizen.org/privilege/mediastorage
+tv,http://tizen.org/privilege/messaging.write,2.2.1,5,http://tizen.org/privilege/mediastorage
 common,http://tizen.org/privilege/messaging.write,2.2.1,9.9,http://tizen.org/privilege/internal/buxton/message.read
 common,http://tizen.org/privilege/networkbearerselection,2.2.1,9.9,http://tizen.org/privilege/network.set
 common,http://tizen.org/privilege/nfc.admin,2.2.1,9.9,http://tizen.org/privilege/internal/buxton/nfc
@@ -117,7 +121,7 @@ mobile,http://tizen.org/privilege/internal/default/public,2.2.1,9.9,http://tizen
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,2.3,http://tizen.org/privilege/call
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,2.3,http://tizen.org/privilege/camera
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,9.9,http://tizen.org/privilege/display
-mobile,http://tizen.org/privilege/internal/default/public,2.2.1,4,http://tizen.org/privilege/externalstorage
+mobile,http://tizen.org/privilege/internal/default/public,2.2.1,5,http://tizen.org/privilege/externalstorage
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,9.9,http://tizen.org/privilege/haptic
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,2.4,http://tizen.org/privilege/internal/buxton/location
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,9.9,http://tizen.org/privilege/internal/buxton/network.get
@@ -125,7 +129,7 @@ mobile,http://tizen.org/privilege/internal/default/public,2.2.1,9.9,http://tizen
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,9.9,http://tizen.org/privilege/internal/default/public
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,2.3,http://tizen.org/privilege/internet
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,2.3,http://tizen.org/privilege/location
-mobile,http://tizen.org/privilege/internal/default/public,2.2.1,4,http://tizen.org/privilege/mediastorage
+mobile,http://tizen.org/privilege/internal/default/public,2.2.1,5,http://tizen.org/privilege/mediastorage
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,9.9,http://tizen.org/privilege/network.get
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,9.9,http://tizen.org/privilege/notification
 mobile,http://tizen.org/privilege/internal/default/public,2.2.1,9.9,http://tizen.org/privilege/packagemanager.info
@@ -134,7 +138,7 @@ mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,9.9,http://tize
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,2.3,http://tizen.org/privilege/call
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,2.3,http://tizen.org/privilege/camera
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,9.9,http://tizen.org/privilege/display
-mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,4,http://tizen.org/privilege/externalstorage
+mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,5,http://tizen.org/privilege/externalstorage
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,9.9,http://tizen.org/privilege/haptic
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,2.4,http://tizen.org/privilege/internal/buxton/location
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,9.9,http://tizen.org/privilege/internal/buxton/network.get
@@ -143,7 +147,7 @@ mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,9.9,http://tize
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,9.9,http://tizen.org/privilege/internal/default/public
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,2.3,http://tizen.org/privilege/internet
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,2.3,http://tizen.org/privilege/location
-mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,4,http://tizen.org/privilege/mediastorage
+mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,5,http://tizen.org/privilege/mediastorage
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,9.9,http://tizen.org/privilege/network.get
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,9.9,http://tizen.org/privilege/notification
 mobile,http://tizen.org/privilege/internal/default/partner,2.2.1,9.9,http://tizen.org/privilege/packagemanager.info
@@ -152,7 +156,7 @@ mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,9.9,http://tiz
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,2.3,http://tizen.org/privilege/call
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,2.3,http://tizen.org/privilege/camera
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,9.9,http://tizen.org/privilege/display
-mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,4,http://tizen.org/privilege/externalstorage
+mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,5,http://tizen.org/privilege/externalstorage
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,9.9,http://tizen.org/privilege/haptic
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,2.4,http://tizen.org/privilege/internal/buxton/location
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,9.9,http://tizen.org/privilege/internal/buxton/network.get
@@ -162,7 +166,7 @@ mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,9.9,http://tiz
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,9.9,http://tizen.org/privilege/internal/default/public
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,2.3,http://tizen.org/privilege/internet
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,2.3,http://tizen.org/privilege/location
-mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,4,http://tizen.org/privilege/mediastorage
+mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,5,http://tizen.org/privilege/mediastorage
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,9.9,http://tizen.org/privilege/network.get
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,9.9,http://tizen.org/privilege/notification
 mobile,http://tizen.org/privilege/internal/default/platform,2.2.1,9.9,http://tizen.org/privilege/packagemanager.info
@@ -227,14 +231,14 @@ tv,http://tizen.org/privilege/internal/default/public,2.3,9.9,http://tizen.org/p
 tv,http://tizen.org/privilege/internal/default/public,2.3,2.4,http://tizen.org/privilege/call
 tv,http://tizen.org/privilege/internal/default/public,2.3,2.4,http://tizen.org/privilege/camera
 tv,http://tizen.org/privilege/internal/default/public,2.3,9.9,http://tizen.org/privilege/display
-tv,http://tizen.org/privilege/internal/default/public,2.3,4,http://tizen.org/privilege/externalstorage
+tv,http://tizen.org/privilege/internal/default/public,2.3,5,http://tizen.org/privilege/externalstorage
 tv,http://tizen.org/privilege/internal/default/public,2.3,9.9,http://tizen.org/privilege/haptic
 tv,http://tizen.org/privilege/internal/default/public,2.3,2.4,http://tizen.org/privilege/internal/buxton/location
 tv,http://tizen.org/privilege/internal/default/public,2.3,9.9,http://tizen.org/privilege/internal/buxton/network.get
 tv,http://tizen.org/privilege/internal/default/public,2.3,9.9,http://tizen.org/privilege/internal/buxton/telephony
 tv,http://tizen.org/privilege/internal/default/public,2.3,9.9,http://tizen.org/privilege/internal/default/public
 tv,http://tizen.org/privilege/internal/default/public,2.3,2.4,http://tizen.org/privilege/internet
-tv,http://tizen.org/privilege/internal/default/public,2.3,4,http://tizen.org/privilege/mediastorage
+tv,http://tizen.org/privilege/internal/default/public,2.3,5,http://tizen.org/privilege/mediastorage
 tv,http://tizen.org/privilege/internal/default/public,2.3,9.9,http://tizen.org/privilege/network.get
 tv,http://tizen.org/privilege/internal/default/public,2.3,9.9,http://tizen.org/privilege/notification
 tv,http://tizen.org/privilege/internal/default/public,2.3,9.9,http://tizen.org/privilege/packagemanager.info
@@ -243,7 +247,7 @@ tv,http://tizen.org/privilege/internal/default/partner,2.3,9.9,http://tizen.org/
 tv,http://tizen.org/privilege/internal/default/partner,2.3,2.4,http://tizen.org/privilege/call
 tv,http://tizen.org/privilege/internal/default/partner,2.3,2.4,http://tizen.org/privilege/camera
 tv,http://tizen.org/privilege/internal/default/partner,2.3,9.9,http://tizen.org/privilege/display
-tv,http://tizen.org/privilege/internal/default/partner,2.3,4,http://tizen.org/privilege/externalstorage
+tv,http://tizen.org/privilege/internal/default/partner,2.3,5,http://tizen.org/privilege/externalstorage
 tv,http://tizen.org/privilege/internal/default/partner,2.3,9.9,http://tizen.org/privilege/haptic
 tv,http://tizen.org/privilege/internal/default/partner,2.3,2.4,http://tizen.org/privilege/internal/buxton/location
 tv,http://tizen.org/privilege/internal/default/partner,2.3,9.9,http://tizen.org/privilege/internal/buxton/network.get
@@ -251,7 +255,7 @@ tv,http://tizen.org/privilege/internal/default/partner,2.3,9.9,http://tizen.org/
 tv,http://tizen.org/privilege/internal/default/partner,2.3,9.9,http://tizen.org/privilege/internal/default/partner
 tv,http://tizen.org/privilege/internal/default/partner,2.3,9.9,http://tizen.org/privilege/internal/default/public
 tv,http://tizen.org/privilege/internal/default/partner,2.3,2.4,http://tizen.org/privilege/internet
-tv,http://tizen.org/privilege/internal/default/partner,2.3,4,http://tizen.org/privilege/mediastorage
+tv,http://tizen.org/privilege/internal/default/partner,2.3,5,http://tizen.org/privilege/mediastorage
 tv,http://tizen.org/privilege/internal/default/partner,2.3,9.9,http://tizen.org/privilege/network.get
 tv,http://tizen.org/privilege/internal/default/partner,2.3,9.9,http://tizen.org/privilege/notification
 tv,http://tizen.org/privilege/internal/default/partner,2.3,9.9,http://tizen.org/privilege/packagemanager.info
@@ -260,7 +264,7 @@ tv,http://tizen.org/privilege/internal/default/platform,2.3,9.9,http://tizen.org
 tv,http://tizen.org/privilege/internal/default/platform,2.3,2.4,http://tizen.org/privilege/call
 tv,http://tizen.org/privilege/internal/default/platform,2.3,2.4,http://tizen.org/privilege/camera
 tv,http://tizen.org/privilege/internal/default/platform,2.3,9.9,http://tizen.org/privilege/display
-tv,http://tizen.org/privilege/internal/default/platform,2.3,4,http://tizen.org/privilege/externalstorage
+tv,http://tizen.org/privilege/internal/default/platform,2.3,5,http://tizen.org/privilege/externalstorage
 tv,http://tizen.org/privilege/internal/default/platform,2.3,9.9,http://tizen.org/privilege/haptic
 tv,http://tizen.org/privilege/internal/default/platform,2.3,2.4,http://tizen.org/privilege/internal/buxton/location
 tv,http://tizen.org/privilege/internal/default/platform,2.3,9.9,http://tizen.org/privilege/internal/buxton/network.get
@@ -269,7 +273,7 @@ tv,http://tizen.org/privilege/internal/default/platform,2.3,9.9,http://tizen.org
 tv,http://tizen.org/privilege/internal/default/platform,2.3,9.9,http://tizen.org/privilege/internal/default/platform
 tv,http://tizen.org/privilege/internal/default/platform,2.3,9.9,http://tizen.org/privilege/internal/default/public
 tv,http://tizen.org/privilege/internal/default/platform,2.3,2.4,http://tizen.org/privilege/internet
-tv,http://tizen.org/privilege/internal/default/platform,2.3,4,http://tizen.org/privilege/mediastorage
+tv,http://tizen.org/privilege/internal/default/platform,2.3,5,http://tizen.org/privilege/mediastorage
 tv,http://tizen.org/privilege/internal/default/platform,2.3,9.9,http://tizen.org/privilege/network.get
 tv,http://tizen.org/privilege/internal/default/platform,2.3,9.9,http://tizen.org/privilege/notification
 tv,http://tizen.org/privilege/internal/default/platform,2.3,9.9,http://tizen.org/privilege/packagemanager.info
index d51153f..cbdf92f 100755 (executable)
@@ -45,6 +45,8 @@
 #define GLOBAL_USER 0
 #endif
 
+#define STORAGE_PRIVACY "http://tizen.org/privacy/storage"
+
 #include <iniparser.h>
 privilege_profile_type_e get_priv_profile()
 {
@@ -866,7 +868,7 @@ int privilege_db_manager_set_package_critical_privilege_info(const uid_t uid, co
                        char* sql = NULL;
                        char * privacy_name = NULL;
                        ret = privilege_db_manager_get_privacy_by_privilege(privilege_name, &privacy_name);
-                       if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && privacy_name != NULL && strstr(privacy_name, "N/A") == NULL && privilege_db_manager_is_user_settable(pkgid, privacy_name) == 1) {
+                       if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && strstr(privacy_name, "N/A") == NULL && privilege_db_manager_is_user_settable(pkgid, privacy_name) == 1) {
                                sql = sqlite3_mprintf("insert or replace into privacy_package (uid, pkg_id, privacy_name, privilege_name, api_version, is_critical) values (%d, %Q, %Q, %Q, %Q, 1)", uid, pkgid, privacy_name, privilege_name, api_version);
                                TryReturn(sql != NULL, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); g_list_free_full(mapped_privilege_list, free); free(privacy_name); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
                                ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
@@ -912,7 +914,7 @@ int privilege_db_manager_set_package_privacy_privilege_info(const uid_t uid, con
                        char* sql = NULL;
                        char * privacy_name = NULL;
                        ret = privilege_db_manager_get_privacy_by_privilege(privilege_name, &privacy_name);
-                       if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && privacy_name != NULL && strstr(privacy_name, "N/A") == NULL && privilege_db_manager_is_user_settable(pkgid, privacy_name) == 1) {
+                       if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && strstr(privacy_name, "N/A") == NULL && privilege_db_manager_is_user_settable(pkgid, privacy_name) == 1) {
                                sql = sqlite3_mprintf("insert or ignore into privacy_package (uid, pkg_id, privacy_name, privilege_name, api_version, is_critical) values (%d, %Q, %Q, %Q, %Q, 0)", uid, pkgid, privacy_name, privilege_name, api_version);
                                TryReturn(sql != NULL, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); g_list_free_full(mapped_privilege_list, free); free(privacy_name); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
                                ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
@@ -963,7 +965,7 @@ int privilege_db_manager_unset_package_privilege_info(const uid_t uid, const cha
        return ret;
 }
 
-int privilege_db_manager_is_privacy_requestable(const uid_t uid, const char* pkgid, bool* is_privacy_requestable)
+int privilege_db_manager_is_privacy_requestable(const uid_t uid, const char* pkgid, const char* privilege, privilege_manager_package_type_e pkg_type, bool* is_privacy_requestable)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
@@ -971,7 +973,12 @@ int privilege_db_manager_is_privacy_requestable(const uid_t uid, const char* pkg
        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE)
                return ret;
 
-       char* sql = sqlite3_mprintf("select (case when api_version < 4 then 0 else 1 end) from privacy_package where (uid=%d or uid=%d) and pkg_id=%Q", uid, GLOBAL_USER, pkgid);
+       char* sql = NULL;
+       if (g_privilege_profile_type == PRIVILEGE_PROFILE_TYPE_WEARABLE || pkg_type == PRVMGR_PACKAGE_TYPE_CORE) {
+               sql = sqlite3_mprintf("select (case when api_version < 4 then 0 else 1 end) from privacy_package where (uid=%d or uid=%d) and pkg_id=%Q and privilege_name=%Q", uid, GLOBAL_USER, pkgid, privilege);
+       } else {
+               sql = sqlite3_mprintf("select (case when api_version < 4 or (api_version < 5 and privacy_name=%Q) then 0 else 1 end) from privacy_package where (uid=%d or uid=%d) and pkg_id=%Q and privilege_name=%Q", STORAGE_PRIVACY, uid, GLOBAL_USER, pkgid, privilege);
+       }
        TryReturn(sql != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
        ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
        TryReturn(ret == SQLITE_OK, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] fail to prepare database: %s", sqlite3_errmsg(db));
@@ -983,6 +990,7 @@ int privilege_db_manager_is_privacy_requestable(const uid_t uid, const char* pkg
                else
                        *is_privacy_requestable = false;
        } else if (ret == SQLITE_DONE) {
+               _LOGD("no result!!!!");
                __finalize_db(db, stmt, sql);
                return PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
        } else {
index 1a4f2c0..fdaf770 100755 (executable)
@@ -498,9 +498,34 @@ int privilege_info_is_privacy(const char* privilege)
        return ret;
 }
 
+static int __get_pkg_type(const char *pkgid, privilege_manager_package_type_e *pkg_type)
+{
+       int ret = 0;
+       char *type = NULL;
+       pkgmgrinfo_pkginfo_h handle;
+       ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+       if (ret != PMINFO_R_OK) {
+               LOGE("failed to get pkginfo handle! pkgid <%s>", pkgid);
+               return -1;
+       }
+       ret = pkgmgrinfo_pkginfo_get_type(handle, &type);
+       if (ret != PMINFO_R_OK) {
+               LOGE("failed to get type, pkgid <%s>", pkgid);
+               pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+               return -1;
+       }
+       if (strcmp(type, "wgt") == 0)
+               *pkg_type = PRVMGR_PACKAGE_TYPE_WRT;
+       else
+               *pkg_type = PRVMGR_PACKAGE_TYPE_CORE;
+       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+       return 0;
+}
+
 int privilege_info_get_privilege_type(uid_t uid, const char* pkgid, const char* privilege, privilege_manager_privilege_type_e *type)
 {
        TryReturn(pkgid != NULL && privilege != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] pkgid or privilege is NULL");
+
        int ret = PRVMGR_ERR_NONE;
        ret = privilege_info_is_privacy(privilege);
        if (ret == 1) {
@@ -509,8 +534,12 @@ int privilege_info_get_privilege_type(uid_t uid, const char* pkgid, const char*
                        *type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL;
                        ret = PRVMGR_ERR_NONE;
                } else if (ret == 0) {
+                       privilege_manager_package_type_e pkg_type = PRVMGR_PACKAGE_TYPE_NONE;
+                       ret = __get_pkg_type(pkgid, &pkg_type);
+                       TryReturn(ret == 0 && pkg_type != PRVMGR_PACKAGE_TYPE_NONE, , PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] failed to get pkg type of <%s>", pkgid);
+
                        bool is_requestable = false;
-                       ret = privilege_db_manager_is_privacy_requestable(uid, pkgid, &is_requestable);
+                       ret = privilege_db_manager_is_privacy_requestable(uid, pkgid, privilege, pkg_type, &is_requestable);
                        if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE && ret != PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT) {
                                LOGE("privilege_db_manager_is_privacy_requestable failed");
                                return PRVMGR_ERR_INTERNAL_ERROR;
index aaeed66..77c0951 100755 (executable)
@@ -17,6 +17,8 @@
 #include <stdlib.h>
 #include <dlog.h>
 #include <glib.h>
+#include <pkgmgr-info.h>
+
 #include "privilege_db_manager.h"
 #include "privilege_private.h"
 #include "privilege_package_info.h"
                return returnValue;     \
        }
 
-static int __is_privacy_requestable_api_version(const char* api_version)
-{
-       api_version_code_t api_version_code;
-       api_version_code_t privacy_requestable_api_version_code;
-       int ret = __get_api_version_code(api_version, &api_version_code);
-       TryReturn(ret == PRVMGR_ERR_NONE, , -1, "[PRVMGR_ERR_INTERNAL_ERROR] __get_api_version_code failed. ret = %d", ret);
-       ret = __get_api_version_code(PRIVACY_REQUESTABLE_API_VERSION, &privacy_requestable_api_version_code);
-       TryReturn(ret == PRVMGR_ERR_NONE, , -1, "[PRVMGR_ERR_INTERNAL_ERROR] __get_api_version_code failed. ret = %d", ret);
-       if (api_version_code < privacy_requestable_api_version_code)
-               return 0;
-
-       return 1;
-}
-
 int privilege_package_info_set_privacy_privilege(const uid_t uid, const char* pkgid, privilege_manager_package_type_e pkg_type, const char* api_version, GList* privilege_list)
 {
        if (DISABLE_ASKUSER)
@@ -86,10 +74,39 @@ int privilege_package_info_unset_package_privilege_info(const uid_t uid, const c
        return PRVMGR_ERR_NONE;
 }
 
-int privilege_package_info_is_privacy_requestable(const uid_t uid, const char* pkgid, bool* is_requestable)
+static int __get_pkg_type(const char *pkgid, privilege_manager_package_type_e *pkg_type)
+{
+       int ret = 0;
+       char *type = NULL;
+       pkgmgrinfo_pkginfo_h handle;
+       ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+       if (ret != PMINFO_R_OK) {
+               LOGE("failed to get pkginfo handle! pkgid <%s>", pkgid);
+               return -1;
+       }
+       ret = pkgmgrinfo_pkginfo_get_type(handle, &type);
+       if (ret != PMINFO_R_OK) {
+               LOGE("failed to get type, pkgid <%s>", pkgid);
+               pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+               return -1;
+       }
+       if (strcmp(type, "wgt") == 0)
+               *pkg_type = PRVMGR_PACKAGE_TYPE_WRT;
+       else
+               *pkg_type = PRVMGR_PACKAGE_TYPE_CORE;
+       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+       return 0;
+}
+
+int privilege_package_info_is_privacy_requestable(const uid_t uid, const char* pkgid, const char* privilege, bool* is_requestable)
 {
        TryReturn(pkgid != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] pkgid must not be NULL.");
-       int ret = privilege_db_manager_is_privacy_requestable(uid, pkgid, is_requestable);
+
+       privilege_manager_package_type_e pkg_type = PRVMGR_PACKAGE_TYPE_NONE;
+       int ret = __get_pkg_type(pkgid, &pkg_type);
+       TryReturn(ret == 0 && pkg_type != PRVMGR_PACKAGE_TYPE_NONE, , PRVMGR_ERR_INTERNAL_ERROR, "[PRVMGR_ERR_INTERNAL_ERROR] failed to get pkg type of <%s>", pkgid);
+       ret = privilege_db_manager_is_privacy_requestable(uid, pkgid, privilege, pkg_type, is_requestable);
+
        if (ret == PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT) { // CASE: given pkgid have no privacy privileges
                *is_requestable = false;
        } else if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE) {
@@ -98,18 +115,6 @@ int privilege_package_info_is_privacy_requestable(const uid_t uid, const char* p
        }
        return PRVMGR_ERR_NONE;
 }
-int privilege_package_info_is_privacy_requestable_api_version(const char* api_version, bool* is_requestable)
-{
-       TryReturn(api_version != NULL, , PRVMGR_ERR_INVALID_PARAMETER, "[PRVMGR_ERR_INVALID_PARAMETER] api_version must not be NULL");
-       int is_privacy_requestable = __is_privacy_requestable_api_version(api_version);
-       if (is_privacy_requestable == 1)
-               *is_requestable = true;
-       else if (is_privacy_requestable == 0)
-               *is_requestable = false;
-       else
-               return PRVMGR_ERR_INTERNAL_ERROR;
-       return PRVMGR_ERR_NONE;
-}
 
 int privilege_package_info_is_critical_privilege(const uid_t uid, const char* pkgid, const char* privilege, bool* is_critical)
 {
index 75f8f79..a06d345 100755 (executable)
@@ -37,6 +37,28 @@ void __color_to_bold_yellow()
        printf("%c[%dm%c[%dm", 0x1B, 1, 0x1B, YELLOW);
 }
 
+void __set_privacy_test_pkg_info()
+{
+       int ret = system("/usr/bin/sqlite3 /opt/dbspace/.pkgmgr_parser.db \"insert into package_info (package, package_type, package_api_version, install_location, mainapp_id, root_path, installed_storage) values ('org.test.webapp_4', 'wgt', '4.0', 'auto', 'org.test.webapp_4', '/opt/usr/globallapps/org.test.webapp_4', 'installed_internal')\"");
+       if (ret != 0)
+               printf_red("failed to set pkg info. ret = %d\n", ret);
+       ret = system("/usr/bin/sqlite3 /opt/dbspace/.pkgmgr_parser.db \"insert into package_info (package, package_type, package_api_version, install_location, mainapp_id, root_path, installed_storage) values ('org.test.webapp_5', 'wgt', '5.0', 'auto', 'org.test.webapp_5', '/opt/usr/globallapps/org.test.webapp_5', 'installed_internal')\"");
+       if (ret != 0)
+               printf_red("failed to set pkg info. ret = %d\n", ret);
+ret = system("/usr/bin/sqlite3 /opt/dbspace/.pkgmgr_parser.db \"insert into package_info (package, package_type, package_api_version, install_location, mainapp_id, root_path, installed_storage) values ('org.test.nativeapp_3', 'tpk', '3.0', 'auto', 'org.test.nativeapp_3', '/opt/usr/globallapps/org.test.nativeapp_3', 'installed_internal')\"");
+       if (ret != 0)
+               printf_red("failed to set pkg info. ret = %d\n", ret);
+
+}
+
+void __unset_privacy_test_pkg_info()
+{
+       int ret = system("/usr/bin/sqlite3 /opt/dbspace/.pkgmgr_parser.db \"delete from package_info where package like '%org.test.%'\"");
+       if (ret != 0)
+               printf_red("failed to unset pkg info\n");
+
+}
+
 /* error enum to string */
 char* __get_result_string(char type, int ret)
 {
index b18b748..cb1b5bc 100755 (executable)
@@ -82,6 +82,9 @@ bool __count_result(int result);
 void __print_result(char type, int result);
 
 
+void __set_privacy_test_pkg_info();
+void __unset_privacy_test_pkg_info();
+
 typedef enum {
        TIZEN_PROFILE_UNKNOWN = 0,
        TIZEN_PROFILE_MOBILE = 0x1,
index ccc3776..917c650 100755 (executable)
@@ -1,6 +1,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <privilege_info.h>
+#include <privilege_package_info.h>
 #include <tc-common.h>
 
 static void __check_get_privilege_display_name_result(privilege_manager_error_e expected_result, privilege_manager_error_e result, const char *display_name)
@@ -480,12 +481,39 @@ static void __test_privilege_info_get_privilege_type()
        int test = 0;
        privilege_manager_privilege_type_e type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_MAX;
 
+       /* Set test app info */
+       __set_privacy_test_pkg_info();
+
+       /* Web api-version 4.0 & 5.0 */
+       __print_line();
+       __tcinfo(goal, "set 5001, org.test.webapp_4's privacy privilege set. api_version = 4.0");
+       __privinfo("http://tizen.org/privilege/call", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/mediastorage", NULL, NULL);
+       ret = privilege_package_info_set_privacy_privilege(5001, "org.test.webapp_4", PRVMGR_PACKAGE_TYPE_WRT, "4.0", privilege_list);
+       gfree(privilege_list);
+       if (ret != PRVMGR_ERR_NONE) {
+               printf_red("Failed to set up test info\n");
+               return;
+       }
+
+       __print_line();
+       __tcinfo(goal, "set 5001, org.test.webapp_5's privacy privilege set. api_version = 5.0");
+       __privinfo("http://tizen.org/privilege/call", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/mediastorage", NULL, NULL);
+       ret = privilege_package_info_set_privacy_privilege(5001, "org.test.webapp_5", PRVMGR_PACKAGE_TYPE_WRT, "5.0", privilege_list);
+       gfree(privilege_list);
+       if (ret != PRVMGR_ERR_NONE) {
+               printf_red("Failed to set up test info\n");
+               return;
+       }
+       /* Set up done */
+
        __print_line();
        printf("uid = 5001\n");
-       printf("pkgid = org.tizen.contacts\n");
+       printf("pkgid = org.test.webapp_4\n");
        printf("privilege = http://tizen.org/privilege/internet\n");
        printf("expected type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL\n");
-       ret = privilege_info_get_privilege_type(5001, "org.tizen.contacts", "http://tizen.org/privilege/internet", &type);
+       ret = privilege_info_get_privilege_type(5001, "org.test.webapp_4", "http://tizen.org/privilege/internet", &type);
        if (ret == PRVMGR_ERR_NONE && type == PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL) {
                success_cnt++;
                printf_green("success\n");
@@ -498,6 +526,65 @@ static void __test_privilege_info_get_privilege_type()
 
        __print_line();
        printf("uid = 5001\n");
+       printf("pkgid = org.test.webapp_4\n");
+       printf("privilege = http://tizen.org/privilege/mediastorage\n");
+       ret = privilege_info_get_privilege_type(5001, "org.test.webapp_4", "http://tizen.org/privilege/mediastorage", &type);
+       if (_get_tizen_profile() == TIZEN_PROFILE_WEARABLE) {
+               printf("expected type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY\n");
+               if (ret == PRVMGR_ERR_NONE && type == PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY) {
+                       success_cnt++;
+                       printf_green("success\n");
+               } else {
+                       fail_cnt++;
+                       printf_red("fail. ret = %s, type = %s\n", __get_result_string('m', ret), __get_privilege_type_string(type));
+               }
+       } else {
+               printf("expected type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL\n");
+               if (ret == PRVMGR_ERR_NONE && type == PRIVILEGE_MANAGER_PRIVILEGE_TYPE_NORMAL) {
+                       success_cnt++;
+                       printf_green("success\n");
+               } else {
+                       fail_cnt++;
+                       printf_red("fail. ret = %s, type = %s\n", __get_result_string('m', ret), __get_privilege_type_string(type));
+               }
+       }
+
+       type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_MAX;
+
+       __print_line();
+       printf("uid = 5001\n");
+       printf("pkgid = org.test.webapp_4\n");
+       printf("privilege = http://tizen.org/privilege/call\n");
+       printf("expected type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY\n");
+       ret = privilege_info_get_privilege_type(5001, "org.test.webapp_4", "http://tizen.org/privilege/call", &type);
+       if (ret == PRVMGR_ERR_NONE && type == PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY) {
+               success_cnt++;
+               printf_green("success\n");
+       } else {
+               fail_cnt++;
+               printf_red("fail. ret = %s, type = %s\n", __get_result_string('m', ret), __get_privilege_type_string(type));
+       }
+
+       type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_MAX;
+
+       __print_line();
+       printf("uid = 5001\n");
+       printf("pkgid = org.test.webapp_5\n");
+       printf("privilege = http://tizen.org/privilege/mediastorage\n");
+       printf("expected type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY\n");
+       ret = privilege_info_get_privilege_type(5001, "org.test.webapp_5", "http://tizen.org/privilege/mediastorage", &type);
+       if (ret == PRVMGR_ERR_NONE && type == PRIVILEGE_MANAGER_PRIVILEGE_TYPE_PRIVACY) {
+               success_cnt++;
+               printf_green("success\n");
+       } else {
+               fail_cnt++;
+               printf_red("fail. ret = %s, type = %s\n", __get_result_string('m', ret), __get_privilege_type_string(type));
+       }
+
+       type = PRIVILEGE_MANAGER_PRIVILEGE_TYPE_MAX;
+
+       __print_line();
+       printf("uid = 5001\n");
        printf("pkgid = org.tizen.chromium-efl\n");
        printf("privilege = http://tizen.org/privilege/location\n");
        ret = privilege_info_get_privilege_type(5001, "org.tizen.chromium-efl", "http://tizen.org/privilege/location", &type);
@@ -578,6 +665,25 @@ static void __test_privilege_info_get_privilege_type()
                fail_cnt++;
                printf_red("fail. ret = %s, type = %s\n", __get_result_string('m', ret), __get_privilege_type_string(type));
        }
+
+       __print_line();
+       __tcinfo(goal, "unset 5001, org.test.webapp_4's package privilege info.");
+       ret = privilege_package_info_unset_package_privilege_info(5001, "org.test.webapp_4");
+       if (ret != PRVMGR_ERR_NONE) {
+               printf_red("Failed to unset test info\n");
+               fail_cnt += 1000;
+       }
+
+       __print_line();
+       __tcinfo(goal, "unset 5001, org.test.webapp_5's package privilege info.");
+       ret = privilege_package_info_unset_package_privilege_info(5001, "org.test.webapp_5");
+       if (ret != PRVMGR_ERR_NONE) {
+               printf_red("Failed to unset test info\n");
+               fail_cnt += 1000;
+       }
+
+       __unset_privacy_test_pkg_info();
+
        __print_line();
 }
 
index 63d0373..4b05f90 100755 (executable)
@@ -8,9 +8,12 @@ static void __test_privilege_package_info()
        int ret = 0;
        bool is_requestable;
 
+       __set_privacy_test_pkg_info();
+       /* Native api-version 3.0 */
        gfree(privilege_list);
        __print_line();
-       __tcinfo(goal, "set 5001, org.test.nativeapp privacy privilege set. api_version = 3.0");
+       __tcinfo(goal, "set 5001, org.test.nativeapp_3 privacy privilege set. api_version = 3.0");
+       __privinfo("http://tizen.org/privilge/internal/default/public", NULL, NULL);
        __privinfo("http://tizen.org/privilege/internet", NULL, NULL);
        __privinfo("http://tizen.org/privilege/call", NULL, NULL);
        __privinfo("http://tizen.org/privilege/bookmark.admin", NULL, NULL);
@@ -18,24 +21,26 @@ static void __test_privilege_package_info()
        __privinfo("http://tizen.org/privilege/account.read", NULL, NULL);
        __privinfo("http://tizen.org/privilege/account.write", NULL, NULL);
        __privinfo("http://tizen.org/privilege/display", NULL, NULL);
-       ret = privilege_package_info_set_privacy_privilege(5001, "org.test.nativeapp", PRVMGR_PACKAGE_TYPE_CORE, "3.0", privilege_list);
+       ret = privilege_package_info_set_privacy_privilege(5001, "org.test.nativeapp_3", PRVMGR_PACKAGE_TYPE_CORE, "3.0", privilege_list);
        __tcinfo(expect, PRVMGR_ERR_NONE);
        __print_result('m', ret);
        gfree(privilege_list);
 
        __print_line();
-       __tcinfo(goal, "set 5001, org.test.nativeapp critical privilege set. api_version = 3.0");
+       __tcinfo(goal, "set 5001, org.test.nativeapp_3 critical privilege set. api_version = 3.0");
        __privinfo("http://tizen.org/privilege/internet", NULL, NULL);
        __privinfo("http://tizen.org/privilege/call", NULL, NULL);
        __privinfo("http://tizen.org/privilege/account.read", NULL, NULL);
        __privinfo("http://tizen.org/privilege/display", NULL, NULL);
-       ret = privilege_package_info_set_critical_privilege(5001, "org.test.nativeapp", PRVMGR_PACKAGE_TYPE_CORE, "3.0", privilege_list);
+       ret = privilege_package_info_set_critical_privilege(5001, "org.test.nativeapp_3", PRVMGR_PACKAGE_TYPE_CORE, "3.0", privilege_list);
        __tcinfo(expect, PRVMGR_ERR_NONE);
        __print_result('m', ret);
        gfree(privilege_list);
 
+       /* Web api-version 4.0 */
        __print_line();
-       __tcinfo(goal, "set 5001, org.test.webapp's privacy privilege set. api_version = 4.0");
+       __tcinfo(goal, "set 5001, org.test.webapp_4's privacy privilege set. api_version = 4.0");
+       __privinfo("http://tizen.org/privilge/internal/default/public", NULL, NULL);
        __privinfo("http://tizen.org/privilege/internet", NULL, NULL);
        __privinfo("http://tizen.org/privilege/call", NULL, NULL);
        __privinfo("http://tizen.org/privilege/bookmark.read", NULL, NULL);
@@ -43,73 +48,167 @@ static void __test_privilege_package_info()
        __privinfo("http://tizen.org/privilege/account.read", NULL, NULL);
        __privinfo("http://tizen.org/privilege/download", NULL, NULL);
        __privinfo("http://tizen.org/privilege/messaging.write", NULL, NULL);
-       ret = privilege_package_info_set_privacy_privilege(5001, "org.test.webapp", PRVMGR_PACKAGE_TYPE_WRT, "4.0", privilege_list);
+       __privinfo("http://tizen.org/privilege/mediastorage", NULL, NULL);
+       ret = privilege_package_info_set_privacy_privilege(5001, "org.test.webapp_4", PRVMGR_PACKAGE_TYPE_WRT, "4.0", privilege_list);
        __tcinfo(expect, PRVMGR_ERR_NONE);
        __print_result('m', ret);
        gfree(privilege_list);
 
        __print_line();
-       __tcinfo(goal, "set 5001, org.test.webapp's critical privilege set. api_version = 4.0");
+       __tcinfo(goal, "set 5001, org.test.webapp_4's critical privilege set. api_version = 4.0");
        __privinfo("http://tizen.org/privilege/internet", NULL, NULL);
        __privinfo("http://tizen.org/privilege/messaging.write", NULL, NULL);
        __privinfo("http://tizen.org/privilege/mediacapture", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/mediastorage", NULL, NULL);
+       ret = privilege_package_info_set_critical_privilege(5001, "org.test.webapp_4", PRVMGR_PACKAGE_TYPE_WRT, "4.0", privilege_list);
+       __tcinfo(expect, PRVMGR_ERR_NONE);
+       __print_result('m', ret);
+       gfree(privilege_list);
+
+       /* Web api-version 5.0 */
+       __print_line();
+       __tcinfo(goal, "set 5001, org.test.webapp_5's privacy privilege set. api_version = 5.0");
+       __privinfo("http://tizen.org/privilge/internal/default/public", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/internet", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/call", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/bookmark.read", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/mediacapture", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/account.read", NULL, NULL);
        __privinfo("http://tizen.org/privilege/download", NULL, NULL);
-       ret = privilege_package_info_set_critical_privilege(5001, "org.test.webapp", PRVMGR_PACKAGE_TYPE_WRT, "4.0", privilege_list);
+       __privinfo("http://tizen.org/privilege/messaging.write", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/mediastorage", NULL, NULL);
+       ret = privilege_package_info_set_privacy_privilege(5001, "org.test.webapp_5", PRVMGR_PACKAGE_TYPE_WRT, "5.0", privilege_list);
        __tcinfo(expect, PRVMGR_ERR_NONE);
        __print_result('m', ret);
        gfree(privilege_list);
 
        __print_line();
-       __tcinfo(goal, "see if http://tizen.org/privilege/message.read is critical for uid 5001, org.test.webapp");
-       ret = privilege_package_info_is_critical_privilege(5001, "org.test.webapp", "http://tizen.org/privilege/message.read", &is_requestable);
+       __tcinfo(goal, "set 5001, org.test.webapp_5's critical privilege set. api_version = 5.0");
+       __privinfo("http://tizen.org/privilege/internet", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/messaging.write", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/mediacapture", NULL, NULL);
+       __privinfo("http://tizen.org/privilege/mediastorage", NULL, NULL);
+       ret = privilege_package_info_set_critical_privilege(5001, "org.test.webapp_5", PRVMGR_PACKAGE_TYPE_WRT, "5.0", privilege_list);
+       __tcinfo(expect, PRVMGR_ERR_NONE);
+       __print_result('m', ret);
+       gfree(privilege_list);
+
+
+       /* Test */
+
+       __print_line();
+       __tcinfo(goal, "see if http://tizen.org/privilege/message.read is critical for uid 5001, org.test.webapp_4");
+       ret = privilege_package_info_is_critical_privilege(5001, "org.test.webapp_4", "http://tizen.org/privilege/message.read", &is_requestable);
+       if (is_requestable && ret == PRVMGR_ERR_NONE) {
+               printf_green("\nis critical privilege. SUCCESS\n");
+               success_cnt++;
+       } else {
+               printf_red("\nFAIL\nis requestable = %s, ret = %s\n", is_requestable ? "true" : "false", __get_result_string('m', ret));
+               fail_cnt++;
+       }
+
+       __print_line();
+       __tcinfo(goal, "see if http://tizen.org/privilege/internet is critical for uid 5001, org.test.webapp_4");
+       ret = privilege_package_info_is_critical_privilege(5001, "org.test.webapp_4", "http://tizen.org/privilege/internet", &is_requestable);
+       if (!is_requestable && ret == PRVMGR_ERR_NONE) {
+               printf_green("\nis not critical privilege. SUCCESS\n");
+               success_cnt++;
+       } else {
+               printf_red("\nFAIL\nis requestable = %s, ret = %s\n", is_requestable ? "true" : "false", __get_result_string('m', ret));
+               fail_cnt++;
+       }
+
+       __print_line();
+       __tcinfo(goal, "see if http://tizen.org/privilege/message.read is critical for uid 5001, org.test.webapp_5");
+       ret = privilege_package_info_is_critical_privilege(5001, "org.test.webapp_5", "http://tizen.org/privilege/message.read", &is_requestable);
        if (is_requestable && ret == PRVMGR_ERR_NONE) {
                printf_green("\nis critical privilege. SUCCESS\n");
                success_cnt++;
        } else {
-               printf_red("\nFAIL\n");
+               printf_red("\nFAIL\nis requestable = %s, ret = %s\n", is_requestable ? "true" : "false", __get_result_string('m', ret));
                fail_cnt++;
        }
 
        __print_line();
-       __tcinfo(goal, "see if http://tizen.org/privilege/internet is critical for uid 5001, org.test.webapp");
-       ret = privilege_package_info_is_critical_privilege(5001, "org.test.webapp", "http://tizen.org/privilege/internet", &is_requestable);
+       __tcinfo(goal, "see if http://tizen.org/privilege/internet is critical for uid 5001, org.test.webapp_5");
+       ret = privilege_package_info_is_critical_privilege(5001, "org.test.webapp_5", "http://tizen.org/privilege/internet", &is_requestable);
        if (!is_requestable && ret == PRVMGR_ERR_NONE) {
                printf_green("\nis not critical privilege. SUCCESS\n");
                success_cnt++;
        } else {
-               printf_red("\nFAIL\n");
+               printf_red("\nFAIL\nis requestable = %s, ret = %s\n", is_requestable ? "true" : "false", __get_result_string('m', ret));
                fail_cnt++;
        }
 
        __print_line();
-       __tcinfo(goal, "see if uid 5001, org.test.nativeapp is privacy requestable");
-       ret = privilege_package_info_is_privacy_requestable(5001, "org.test.nativeapp", &is_requestable);
-       if (is_requestable) {
-               printf_red("\nFAIL\n");
+       __tcinfo(goal, "see if http://tizen.org/privilege/mediastorage is critical for uid 5001, org.test.webapp_5");
+       ret = privilege_package_info_is_critical_privilege(5001, "org.test.webapp_5", "http://tizen.org/privilege/mediastorage", &is_requestable);
+       if (is_requestable && ret == PRVMGR_ERR_NONE) {
+               printf_green("\nis not critical privilege. SUCCESS\n");
+               success_cnt++;
+       } else {
+               printf_red("\nFAIL\nis requestable = %s, ret = %s\n", is_requestable ? "true" : "false", __get_result_string('m', ret));
                fail_cnt++;
-       } else if (ret == PRVMGR_ERR_NONE) {
+       }
+
+       __print_line();
+       __tcinfo(goal, "see if uid 5001, api-version=3.0, org.test.nativeapp_3 can request privacy for http://tizen.org/privilege/call");
+       ret = privilege_package_info_is_privacy_requestable(5001, "org.test.nativeapp_3", "http://tizen.org/privilege/call", &is_requestable);
+       if (ret == PRVMGR_ERR_NONE && !is_requestable) {
                printf_green("\nis old app. SUCCESS\n");
                success_cnt++;
        } else {
-               printf_red("\nFAIL\n");
+               printf_red("\nFAIL\nis requestable = %s, ret = %s\n", is_requestable ? "true" : "false", __get_result_string('m', ret));
                fail_cnt++;
        }
 
        __print_line();
-       __tcinfo(goal, "see if uid 5001, org.test.webapp is privacy requestable");
-       ret = privilege_package_info_is_privacy_requestable(5001, "org.test.webapp", &is_requestable);
+       __tcinfo(goal, "see if uid 5001, api-version=4.0, org.test.webapp_4 can request privacy for http://tizen.org/privilege/call");
+       ret = privilege_package_info_is_privacy_requestable(5001, "org.test.webapp_4", "http://tizen.org/privilege/call", &is_requestable);
        if (is_requestable && ret == PRVMGR_ERR_NONE) {
                printf_green("\nis privacy requestable app. SUCCESS\n");
                success_cnt++;
        } else {
-               printf_red("FAIL!!!!!!!!!!!!!!!!!!!!!!\n");
+               printf_red("\nFAIL\nis requestable = %s, ret = %s\n", is_requestable ? "true" : "false", __get_result_string('m', ret));
                fail_cnt++;
        }
 
        __print_line();
-       __tcinfo(goal, "get privacy list of org.test.nativeapp");
+       __tcinfo(goal, "see if uid 5001, api-version=4.0, org.test.webapp_4 can request privacy for http://tizen.org/privilege/mediastorage");
+       ret = privilege_package_info_is_privacy_requestable(5001, "org.test.webapp_4", "http://tizen.org/privilege/mediastorage", &is_requestable);
+       if (_get_tizen_profile() == TIZEN_PROFILE_WEARABLE) {
+               if (is_requestable && ret == PRVMGR_ERR_NONE) {
+                       printf_green("\ncan request storage privacy. SUCCESS\n");
+                       success_cnt++;
+               } else {
+                       printf_red("\nFAIL\nis requestable = %s, ret = %s\n", is_requestable ? "true" : "false", __get_result_string('m', ret));
+                       fail_cnt++;
+               }
+       } else {
+               if (!is_requestable && ret == PRVMGR_ERR_NONE) {
+                       printf_green("\ncan't request storage privacy. SUCCESS\n");
+                       success_cnt++;
+               } else {
+                       printf_red("\nFAIL\nis requestable = %s, ret = %s\n", is_requestable ? "true" : "false", __get_result_string('m', ret));
+                       fail_cnt++;
+               }
+       }
+
+       __print_line();
+       __tcinfo(goal, "see if uid 5001, api-version=5.0, org.test.webapp_5 can request privacy for http://tizen.org/privilege/mediastorage");
+       ret = privilege_package_info_is_privacy_requestable(5001, "org.test.webapp_5", "http://tizen.org/privilege/mediastorage", &is_requestable);
+       if (is_requestable && ret == PRVMGR_ERR_NONE) {
+               printf_green("\nis privacy requestable app. SUCCESS\n");
+               success_cnt++;
+       } else {
+               printf_red("\nFAIL\nis requestable = %s, ret = %s\n", is_requestable ? "true" : "false", __get_result_string('m', ret));
+               fail_cnt++;
+       }
+
+       __print_line();
+       __tcinfo(goal, "get privacy list of org.test.nativeapp_3");
        GList* tmp_list = NULL;
-       ret = privilege_package_info_get_privacy_list_by_pkgid(5001, "org.test.nativeapp", &tmp_list);
+       ret = privilege_package_info_get_privacy_list_by_pkgid(5001, "org.test.nativeapp_3", &tmp_list);
        __tcinfo(expect, PRVMGR_ERR_NONE);
        __print_result('m', ret);
        if (tmp_list != NULL) {
@@ -118,7 +217,7 @@ static void __test_privilege_package_info()
        }
 
        __print_line();
-       __tcinfo(goal, "get list of packaes with bookmark privacy");
+       __tcinfo(goal, "get list of packages with bookmark privacy");
        ret = privilege_package_info_get_package_list_by_privacy(5001, "http://tizen.org/privacy/bookmark", &tmp_list);
        __tcinfo(expect, PRVMGR_ERR_NONE);
        __print_result('m', ret);
@@ -128,7 +227,7 @@ static void __test_privilege_package_info()
        }
 
        __print_line();
-       __tcinfo(goal, "get list of packaes with camera privacy");
+       __tcinfo(goal, "get list of packages with camera privacy");
        ret = privilege_package_info_get_package_list_by_privacy(5001, "http://tizen.org/privacy/camera", &tmp_list);
        __tcinfo(expect, PRVMGR_ERR_NONE);
        __print_result('m', ret);
@@ -138,8 +237,8 @@ static void __test_privilege_package_info()
        }
 
        __print_line();
-       __tcinfo(goal, "get privilege list of org.test.nativeapp's account privacy");
-       ret = privilege_package_info_get_privilege_list_by_pkgid_and_privacy(5001, "org.test.nativeapp", "http://tizen.org/privacy/account", &tmp_list);
+       __tcinfo(goal, "get privilege list of org.test.nativeapp_3's account privacy");
+       ret = privilege_package_info_get_privilege_list_by_pkgid_and_privacy(5001, "org.test.nativeapp_3", "http://tizen.org/privacy/account", &tmp_list);
        __tcinfo(expect, PRVMGR_ERR_NONE);
        __print_result('m', ret);
        if (tmp_list != NULL) {
@@ -157,18 +256,28 @@ static void __test_privilege_package_info()
                gfree(tmp_list);
        }
 
+       /* Unset test app info */
+
        __print_line();
-       __tcinfo(goal, "unset 5001, org.test.nativeapp's package privilege info.");
-       ret = privilege_package_info_unset_package_privilege_info(5001, "org.test.nativeapp");
+       __tcinfo(goal, "unset 5001, org.test.nativeapp_3's package privilege info.");
+       ret = privilege_package_info_unset_package_privilege_info(5001, "org.test.nativeapp_3");
        __tcinfo(expect, PRVMGR_ERR_NONE);
        __print_result('m', ret);
 
        __print_line();
-       __tcinfo(goal, "unset 5001, org.test.webapp's package privilege info.");
-       ret = privilege_package_info_unset_package_privilege_info(5001, "org.test.webapp");
+       __tcinfo(goal, "unset 5001, org.test.webapp_4's package privilege info.");
+       ret = privilege_package_info_unset_package_privilege_info(5001, "org.test.webapp_4");
        __tcinfo(expect, PRVMGR_ERR_NONE);
        __print_result('m', ret);
+
        __print_line();
+       __tcinfo(goal, "unset 5001, org.test.webapp_5's package privilege info.");
+       ret = privilege_package_info_unset_package_privilege_info(5001, "org.test.webapp_5");
+       __tcinfo(expect, PRVMGR_ERR_NONE);
+       __print_result('m', ret);
+       __print_line();
+
+       __unset_privacy_test_pkg_info();
 
 }