[Release] wrt-commons_0.2.145
[framework/web/wrt-commons.git] / modules / widget_dao / dao / widget_dao.cpp
index 44389c7..ed66aa2 100644 (file)
@@ -37,7 +37,6 @@
 #include <dpl/wrt-dao-ro/WrtDatabase.h>
 
 namespace WrtDB {
-
 //TODO in current solution in each getter there exists a check
 //"IsWidgetInstalled". Maybe it should be verified, if it could be done
 //differently  (check in WidgetDAO constructor)
@@ -53,68 +52,33 @@ namespace WrtDB {
 
 WidgetDAO::WidgetDAO(DPL::OptionalString widgetGUID) :
     WidgetDAOReadOnly(WidgetDAOReadOnly::getHandle(widgetGUID))
-{
-}
+{}
 
-WidgetDAO::WidgetDAO(DPL::String pkgName) :
-    WidgetDAOReadOnly(WidgetDAOReadOnly::getHandle(pkgName))
-{
-}
+WidgetDAO::WidgetDAO(DPL::String tzAppId) :
+    WidgetDAOReadOnly(WidgetDAOReadOnly::getHandle(tzAppId))
+{}
 
 WidgetDAO::WidgetDAO(DbWidgetHandle handle) :
     WidgetDAOReadOnly(handle)
-{
-}
+{}
 
 WidgetDAO::~WidgetDAO()
-{
-}
-
-void WidgetDAO::removeProperty(
-        const PropertyDAOReadOnly::WidgetPropertyKey &key)
-{
-    Try {
-        PropertyDAO::RemoveProperty(m_widgetHandle, key);
-    }
-    Catch(PropertyDAOReadOnly::Exception::ReadOnlyProperty){
-        ReThrowMsg(WidgetDAO::Exception::DatabaseError,
-                   "Failure during removing property");
-    }
-}
-
-void WidgetDAO::setProperty(
-        const PropertyDAOReadOnly::WidgetPropertyKey &key,
-        const PropertyDAOReadOnly::WidgetPropertyValue &value,
-        bool readOnly)
-{
-    Try {
-        PropertyDAO::SetProperty(m_widgetHandle, key, value, readOnly);
-    }
-    Catch(PropertyDAOReadOnly::Exception::ReadOnlyProperty){
-        ReThrowMsg(WidgetDAO::Exception::DatabaseError,
-                   "Failure during setting/updating property");
-    }
-}
-
-void WidgetDAO::setPkgName(const DPL::OptionalString& pkgName)
-{
+{}
 
-   // if(!!pkgName)
-        setPkgName_TEMPORARY_API(*pkgName);
-}
-
-
-void WidgetDAO::setPkgName_TEMPORARY_API(const WidgetPkgName& pkgName)
+void WidgetDAO::setTizenAppId(const DPL::OptionalString& tzAppId)
 {
     SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
     {
         using namespace DPL::DB::ORM;
         wrt::ScopedTransaction transaction(&WrtDatabase::interface());
 
-        isWidgetInstalled(getHandle());
+        if (!isWidgetInstalled(getHandle())) {
+            ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
+                     "Cannot find widget. Handle: " << getHandle());
+        }
 
         wrt::WidgetInfo::Row row;
-        row.Set_pkgname(pkgName);
+        row.Set_tizen_appid(*tzAppId);
 
         WRT_DB_UPDATE(update, wrt::WidgetInfo, &WrtDatabase::interface())
         update->Where(
@@ -137,7 +101,7 @@ void WidgetDAO::setSecurityPopupUsage(const SettingsType value)
         ScopedTransaction transaction(&WrtDatabase::interface());
         if (!isWidgetInstalled(getHandle())) {
             ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
-                "Cannot find widget. Handle: " << getHandle());
+                     "Cannot find widget. Handle: " << getHandle());
         }
 
         WidgetSecuritySettings::Row row;
@@ -163,7 +127,7 @@ void WidgetDAO::setGeolocationUsage(const SettingsType value)
         ScopedTransaction transaction(&WrtDatabase::interface());
         if (!isWidgetInstalled(getHandle())) {
             ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
-                "Cannot find widget. Handle: " << getHandle());
+                     "Cannot find widget. Handle: " << getHandle());
         }
 
         WidgetSecuritySettings::Row row;
@@ -189,7 +153,7 @@ void WidgetDAO::setWebNotificationUsage(const SettingsType value)
         ScopedTransaction transaction(&WrtDatabase::interface());
         if (!isWidgetInstalled(getHandle())) {
             ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
-                "Cannot find widget. Handle: " << getHandle());
+                     "Cannot find widget. Handle: " << getHandle());
         }
 
         WidgetSecuritySettings::Row row;
@@ -215,7 +179,7 @@ void WidgetDAO::setWebDatabaseUsage(const SettingsType value)
         ScopedTransaction transaction(&WrtDatabase::interface());
         if (!isWidgetInstalled(getHandle())) {
             ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
-                "Cannot find widget. Handle: " << getHandle());
+                     "Cannot find widget. Handle: " << getHandle());
         }
 
         WidgetSecuritySettings::Row row;
@@ -231,97 +195,95 @@ void WidgetDAO::setWebDatabaseUsage(const SettingsType value)
     SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to set web database usage")
 }
 
-void WidgetDAO::setFileSystemUsage(const SettingsType value)
-{
-    SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
-    {
-        using namespace DPL::DB::ORM;
-        using namespace DPL::DB::ORM::wrt;
-
-        ScopedTransaction transaction(&WrtDatabase::interface());
-        if (!isWidgetInstalled(getHandle())) {
-            ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
-                "Cannot find widget. Handle: " << getHandle());
-        }
-
-        WidgetSecuritySettings::Row row;
-        row.Set_file_system_usage(value);
-
-        WRT_DB_UPDATE(update, WidgetSecuritySettings, &WrtDatabase::interface())
-        update->Where(Equals<WidgetSecuritySettings::app_id>(getHandle()));
-        update->Values(row);
-        update->Execute();
-
-        transaction.Commit();
-    }
-    SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to set filesystem usage")
-}
-
 void WidgetDAO::registerWidget(
-        const WidgetPkgName & widgetPkgname,
-        const WidgetRegisterInfo &widgetRegInfo,
-        const IWacSecurity &wacSecurity)
+    const TizenAppId & tzAppId,
+    const WidgetRegisterInfo &widgetRegInfo,
+    const IWidgetSecurity &widgetSecurity)
 {
     LogDebug("Registering widget");
     SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
     {
-        DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
-        registerWidgetInternal(widgetPkgname, widgetRegInfo, wacSecurity);
-        transaction.Commit();
-    }
-    SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to register widget")
-}
-
-void WidgetDAO::registerWidget(
-        WrtDB::DbWidgetHandle handle,
-        const WidgetRegisterInfo &widgetRegInfo,
-        const IWacSecurity &wacSecurity)
-{
-    LogDebug("Registering widget");
-    SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
-    {
-        DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
-        registerWidgetInternal(generateTizenId(), widgetRegInfo, wacSecurity, handle);
+        DPL::DB::ORM::wrt::ScopedTransaction transaction(
+            &WrtDatabase::interface());
+        registerWidgetInternal(tzAppId, widgetRegInfo, widgetSecurity);
         transaction.Commit();
     }
     SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to register widget")
 }
 
 DbWidgetHandle WidgetDAO::registerWidget(
-            const WidgetRegisterInfo &pWidgetRegisterInfo,
-            const IWacSecurity &wacSecurity)
+    const WidgetRegisterInfo &pWidgetRegisterInfo,
+    const IWidgetSecurity &widgetSecurity)
 {
     //make it more precise due to very fast tests
     struct timeval tv;
     gettimeofday(&tv, NULL);
-    srand(time(NULL) + tv.tv_usec);
     DbWidgetHandle widgetHandle;
+    unsigned int seed = time(NULL);
     do {
-        widgetHandle = rand();
+        widgetHandle = rand_r(&seed);
     } while (isWidgetInstalled(widgetHandle));
 
-    registerWidget(widgetHandle, pWidgetRegisterInfo, wacSecurity);
+    registerWidget(*pWidgetRegisterInfo.configInfo.tizenAppId,
+                   pWidgetRegisterInfo,
+                   widgetSecurity);
     return widgetHandle;
 }
 
-WidgetPkgName WidgetDAO::registerWidgetGenerateTizenId(
-            const WidgetRegisterInfo &pWidgetRegisterInfo,
-            const IWacSecurity &wacSecurity)
+TizenAppId WidgetDAO::registerWidgetGeneratePkgId(
+    const WidgetRegisterInfo &pWidgetRegisterInfo,
+    const IWidgetSecurity &widgetSecurity)
 {
-    WidgetPkgName widgetPkgName = generateTizenId();
-    registerWidget(widgetPkgName, pWidgetRegisterInfo, wacSecurity);
-    return widgetPkgName;
+    TizenAppId tzAppId = generatePkgId();
+    registerWidget(tzAppId, pWidgetRegisterInfo, widgetSecurity);
+    return tzAppId;
+}
+
+void WidgetDAO::updateTizenAppId(
+    const TizenAppId & fromAppId,
+    const TizenAppId & toAppId)
+{
+    SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
+    {
+        using namespace DPL::DB::ORM;
+        using namespace DPL::DB::ORM::wrt;
+
+        ScopedTransaction transaction(&WrtDatabase::interface());
+        if (!isWidgetInstalled(fromAppId)) {
+            ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
+                     "Cannot find widget. tzAppId: " << fromAppId);
+        }
+
+        WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
+        select->Where(Equals<WidgetInfo::tizen_appid>(fromAppId));
+
+        WidgetInfo::Row row = select->GetSingleRow();
+
+        //WidgetInfo::Row row;
+        row.Set_tizen_appid(toAppId);
+
+        WRT_DB_UPDATE(update, WidgetInfo, &WrtDatabase::interface())
+        update->Where(Equals<WidgetInfo::tizen_appid>(fromAppId));
+        update->Values(row);
+        update->Execute();
+
+        transaction.Commit();
+    }
+    SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to update appid")
 }
 
 void WidgetDAO::registerWidgetInternal(
-        const WidgetPkgName & widgetName,
-        const WidgetRegisterInfo &widgetRegInfo,
-        const IWacSecurity &wacSecurity,
-        const DPL::Optional<DbWidgetHandle> handle)
+    const TizenAppId & tzAppId,
+    const WidgetRegisterInfo &widgetRegInfo,
+    const IWidgetSecurity &widgetSecurity,
+    const DPL::Optional<DbWidgetHandle> handle)
 {
     //Register into WidgetInfo has to be first
     //as all other tables depend upon that
-    DbWidgetHandle widgetHandle = registerWidgetInfo(widgetName, widgetRegInfo, wacSecurity, handle);
+    DbWidgetHandle widgetHandle = registerWidgetInfo(tzAppId,
+                                                     widgetRegInfo,
+                                                     widgetSecurity,
+                                                     handle);
 
     registerWidgetExtendedInfo(widgetHandle, widgetRegInfo);
 
@@ -331,27 +293,31 @@ void WidgetDAO::registerWidgetInternal(
 
     registerWidgetStartFile(widgetHandle, widgetRegInfo);
 
-    PropertyDAO::RegisterProperties(widgetHandle, widgetRegInfo);
+    PropertyDAO::RegisterProperties(widgetHandle, tzAppId, widgetRegInfo);
 
     registerWidgetFeatures(widgetHandle, widgetRegInfo);
 
+    registerWidgetPrivilege(widgetHandle, widgetRegInfo);
+
     registerWidgetWindowModes(widgetHandle, widgetRegInfo);
 
     registerWidgetWarpInfo(widgetHandle, widgetRegInfo);
 
-    registerWidgetCertificates(widgetHandle, wacSecurity);
+    registerWidgetAllowNavigationInfo(widgetHandle, widgetRegInfo);
+
+    registerWidgetCertificates(widgetHandle, widgetSecurity);
 
     CertificateChainList list;
-    wacSecurity.getCertificateChainList(list, SIGNATURE_DISTRIBUTOR);
+    widgetSecurity.getCertificateChainList(list, SIGNATURE_DISTRIBUTOR);
     registerCertificatesChains(widgetHandle, SIGNATURE_DISTRIBUTOR, list);
 
     list.clear();
-    wacSecurity.getCertificateChainList(list, SIGNATURE_AUTHOR);
+    widgetSecurity.getCertificateChainList(list, SIGNATURE_AUTHOR);
     registerCertificatesChains(widgetHandle, SIGNATURE_AUTHOR, list);
 
     registerWidgetSettings(widgetHandle, widgetRegInfo);
 
-    registerAppService(widgetHandle, widgetRegInfo);
+    registerAppControl(widgetHandle, widgetRegInfo);
 
     registerEncryptedResouceInfo(widgetHandle, widgetRegInfo);
 
@@ -360,23 +326,6 @@ void WidgetDAO::registerWidgetInternal(
     registerWidgetSecuritySettings(widgetHandle);
 }
 
-void WidgetDAO::registerOrUpdateWidget(
-        const WidgetPkgName & widgetName,
-        const WidgetRegisterInfo &widgetRegInfo,
-        const IWacSecurity &wacSecurity)
-{
-    LogDebug("Reregistering widget");
-    SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
-    {
-        DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
-
-        unregisterWidgetInternal(widgetName);
-        registerWidgetInternal(widgetName, widgetRegInfo, wacSecurity);
-        transaction.Commit();
-    }
-    SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to reregister widget")
-}
-
 #define DO_INSERT(row, table)                              \
     {                                                      \
         WRT_DB_INSERT(insert, table, &WrtDatabase::interface()) \
@@ -385,18 +334,16 @@ void WidgetDAO::registerOrUpdateWidget(
     }
 
 void WidgetDAO::registerWidgetExtendedInfo(DbWidgetHandle widgetHandle,
-        const WidgetRegisterInfo &regInfo)
+                                           const WidgetRegisterInfo &regInfo)
 {
     //Try and transaction not needed
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
 
-
     WidgetExtendedInfo::Row row;
     row.Set_app_id(widgetHandle);
     //    row.Set_share_href    (DPL::FromUTF8String(regInfo.shareHref));
     row.Set_signature_type(regInfo.signatureType);
-    row.Set_test_widget(regInfo.isTestWidget);
     row.Set_install_time(regInfo.installedTime);
     row.Set_splash_img_src(regInfo.configInfo.splashImgSrc);
     row.Set_background_page(regInfo.configInfo.backgroundPage);
@@ -406,10 +353,10 @@ void WidgetDAO::registerWidgetExtendedInfo(DbWidgetHandle widgetHandle,
 }
 
 DbWidgetHandle WidgetDAO::registerWidgetInfo(
-        const WidgetPkgName & widgetName,
-        const WidgetRegisterInfo &regInfo,
-        const IWacSecurity &wacSecurity,
-        const DPL::Optional<DbWidgetHandle> handle)
+    const TizenAppId & tzAppId,
+    const WidgetRegisterInfo &regInfo,
+    const IWidgetSecurity &widgetSecurity,
+    const DPL::Optional<DbWidgetHandle> handle)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
@@ -419,19 +366,12 @@ DbWidgetHandle WidgetDAO::registerWidgetInfo(
     // Because of that, "Optional" is not used there
 
     WidgetInfo::Row row;
-    if(!!handle)
-    {
+    if (!!handle) {
         row.Set_app_id(*handle);
     }
 
-    if (regInfo.webAppType == APP_TYPE_UNKNOWN && regInfo.type !=
-            APP_TYPE_UNKNOWN) {
-        // TODO : regInfo.type is temporary code for security.
-        //        This code will be removed.
-        row.Set_widget_type(regInfo.type.appType);
-    } else {
-        row.Set_widget_type(regInfo.webAppType.appType);
-    }
+    row.Set_widget_type(regInfo.webAppType.appType);
+
     row.Set_widget_id(widgetConfigurationInfo.widget_id);
     row.Set_defaultlocale(widgetConfigurationInfo.defaultlocale);
     row.Set_widget_version(widgetConfigurationInfo.version);
@@ -440,12 +380,14 @@ DbWidgetHandle WidgetDAO::registerWidgetInfo(
     row.Set_author_name(widgetConfigurationInfo.authorName);
     row.Set_author_email(widgetConfigurationInfo.authorEmail);
     row.Set_author_href(widgetConfigurationInfo.authorHref);
+    row.Set_csp_policy(widgetConfigurationInfo.cspPolicy);
+    row.Set_csp_policy_report_only(widgetConfigurationInfo.cspPolicyReportOnly);
     row.Set_base_folder(DPL::FromUTF8String(regInfo.baseFolder));
     row.Set_webkit_plugins_required(widgetConfigurationInfo.flashNeeded);
-    row.Set_recognized(wacSecurity.isRecognized());
-    row.Set_wac_signed(wacSecurity.isWacSigned());
-    row.Set_distributor_signed(wacSecurity.isDistributorSigned());
-    row.Set_pkgname(widgetName);
+    row.Set_recognized(widgetSecurity.isRecognized());
+    row.Set_distributor_signed(widgetSecurity.isDistributorSigned());
+    row.Set_tizen_appid(tzAppId);
+    row.Set_tizen_pkgid(regInfo.tzPkgid);
     {
         std::stringstream tmp;
         tmp << regInfo.minVersion;
@@ -454,6 +396,8 @@ DbWidgetHandle WidgetDAO::registerWidgetInfo(
     row.Set_back_supported(widgetConfigurationInfo.backSupported);
     row.Set_access_network(widgetConfigurationInfo.accessNetwork);
     row.Set_pkg_type(regInfo.packagingType.pkgType);
+    row.Set_security_model_version(
+        static_cast<int>(widgetConfigurationInfo.securityModelVersion));
 
     Try
     {
@@ -465,21 +409,18 @@ DbWidgetHandle WidgetDAO::registerWidgetInfo(
                    "Failed to register widget info.");
     }
 
-    if(!handle)
-    {
+    if (!handle) {
         //get autoincremented value of widgetHandle
         WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
-        select->Where(Equals<WidgetInfo::pkgname>(widgetName));
+        select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
         return select->GetSingleValue<WidgetInfo::app_id>();
-    }
-    else
-    {
+    } else {
         return *handle;
     }
 }
 
 void WidgetDAO::registerWidgetLocalizedInfo(DbWidgetHandle widgetHandle,
-        const WidgetRegisterInfo &regInfo)
+                                            const WidgetRegisterInfo &regInfo)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
@@ -506,12 +447,11 @@ void WidgetDAO::registerWidgetLocalizedInfo(DbWidgetHandle widgetHandle,
 }
 
 void WidgetDAO::registerWidgetIcons(DbWidgetHandle widgetHandle,
-        const WidgetRegisterInfo &regInfo)
+                                    const WidgetRegisterInfo &regInfo)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
 
-
     FOREACH(i, regInfo.localizationData.icons)
     {
         wrt::WidgetIcon::icon_id::ColumnType icon_id;
@@ -524,7 +464,7 @@ void WidgetDAO::registerWidgetIcons(DbWidgetHandle widgetHandle,
 
             WRT_DB_INSERT(insert, wrt::WidgetIcon, &WrtDatabase::interface())
             insert->Values(row);
-            icon_id = insert->Execute();
+            icon_id = static_cast<int>(insert->Execute());
         }
 
         FOREACH(j, i->availableLocales)
@@ -533,36 +473,17 @@ void WidgetDAO::registerWidgetIcons(DbWidgetHandle widgetHandle,
             row.Set_app_id(widgetHandle);
             row.Set_icon_id(icon_id);
             row.Set_widget_locale(*j);
-            WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
-            select->Where(And(Equals<WidgetLocalizedIcon::app_id>(widgetHandle),
-                              Equals<WidgetLocalizedIcon::widget_locale>(*j)));
-            WidgetLocalizedIcon::Select::RowList rows = select->GetRowList();
-
-            bool flag = !rows.empty();
-
-            if(flag == true)
-            {
-                // already default icon value of same locale exists
-                WRT_DB_UPDATE(update, WidgetLocalizedIcon, &WrtDatabase::interface())
-                update->Where(And(Equals<WidgetLocalizedIcon::app_id>(widgetHandle),
-                                  Equals<WidgetLocalizedIcon::widget_locale>(*j)));
-                update->Values(row);
-                update->Execute();
-            }else{
-                // any icon value of same locale doesn't exist
-                DO_INSERT(row, WidgetLocalizedIcon)
-            }
+            DO_INSERT(row, WidgetLocalizedIcon)
         }
     }
 }
 
 void WidgetDAO::registerWidgetStartFile(DbWidgetHandle widgetHandle,
-        const WidgetRegisterInfo &regInfo)
+                                        const WidgetRegisterInfo &regInfo)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
 
-
     FOREACH(i, regInfo.localizationData.startFiles)
     {
         WidgetStartFile::start_file_id::ColumnType startFileID;
@@ -573,7 +494,7 @@ void WidgetDAO::registerWidgetStartFile(DbWidgetHandle widgetHandle,
 
             WRT_DB_INSERT(insert, WidgetStartFile, &WrtDatabase::interface())
             insert->Values(row);
-            startFileID = insert->Execute();
+            startFileID = static_cast<int>(insert->Execute());
         }
 
         FOREACH(j, i->propertiesForLocales)
@@ -591,44 +512,45 @@ void WidgetDAO::registerWidgetStartFile(DbWidgetHandle widgetHandle,
 }
 
 void WidgetDAO::registerWidgetFeatures(DbWidgetHandle widgetHandle,
-        const WidgetRegisterInfo &regInfo)
+                                       const WidgetRegisterInfo &regInfo)
 {
     using namespace DPL::DB::ORM;
     const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
 
-
     FOREACH(pWidgetFeature, widgetConfigurationInfo.featuresList)
     {
         wrt::WidgetFeature::Row widgetFeature;
         widgetFeature.Set_app_id(widgetHandle);
         widgetFeature.Set_name(pWidgetFeature->name);
-        widgetFeature.Set_required(pWidgetFeature->required);
         widgetFeature.Set_rejected(false);
 
-        wrt::WidgetFeature::widget_feature_id::ColumnType widgetFeatureID;
-        {
-            WRT_DB_INSERT(insert, wrt::WidgetFeature, &WrtDatabase::interface())
-            insert->Values(widgetFeature);
-            widgetFeatureID = insert->Execute();
-        }
+        DO_INSERT(widgetFeature, wrt::WidgetFeature)
+    }
+}
 
-        // Insert into table FeatureParam
-        wrt::FeatureParam::Row featureParam;
-        featureParam.Set_widget_feature_id(widgetFeatureID);
+void WidgetDAO::registerWidgetPrivilege(DbWidgetHandle widgetHandle,
+                                        const WidgetRegisterInfo &regInfo)
+{
+    using namespace DPL::DB::ORM;
+    using namespace DPL::DB::ORM::wrt;
+    const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
 
-        FOREACH(iter, pWidgetFeature->paramsList)
-        {
-            featureParam.Set_name(iter->name);
-            featureParam.Set_value(iter->value);
+    FOREACH(it, widgetConfigurationInfo.privilegeList)
+    {
+        WidgetPrivilege::Row widgetPrivilege;
+        widgetPrivilege.Set_app_id(widgetHandle);
+        widgetPrivilege.Set_name(it->name);
 
-            DO_INSERT(featureParam, wrt::FeatureParam)
-        }
+        DO_INSERT(widgetPrivilege, WidgetPrivilege)
     }
 }
 
-void WidgetDAO::updateFeatureRejectStatus(const DbWidgetFeature &widgetFeature){
-    // This function could be merged with registerWidgetFeature but it requires desing change:
-    // 1. Check "ace step" in installer must be done before "update database step"
+void WidgetDAO::updateFeatureRejectStatus(const DbWidgetFeature &widgetFeature)
+{
+    // This function could be merged with registerWidgetFeature but it requires
+    // desing change:
+    // 1. Check "ace step" in installer must be done before "update database
+    // step"
     // And:
     // ConfigurationParserData shouldn't be called "ParserData" any more.
     using namespace DPL::DB::ORM;
@@ -650,13 +572,12 @@ void WidgetDAO::updateFeatureRejectStatus(const DbWidgetFeature &widgetFeature){
 }
 
 void WidgetDAO::registerWidgetWindowModes(DbWidgetHandle widgetHandle,
-        const WidgetRegisterInfo &regInfo)
+                                          const WidgetRegisterInfo &regInfo)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
     const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
 
-
     FOREACH(i, widgetConfigurationInfo.windowModes)
     {
         wrt::WidgetWindowModes::Row windowMode;
@@ -668,13 +589,12 @@ void WidgetDAO::registerWidgetWindowModes(DbWidgetHandle widgetHandle,
 }
 
 void WidgetDAO::registerWidgetWarpInfo(DbWidgetHandle widgetHandle,
-        const WidgetRegisterInfo &regInfo)
+                                       const WidgetRegisterInfo &regInfo)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
     const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
 
-
     FOREACH(AccIt, widgetConfigurationInfo.accessInfoSet)
     {
         WidgetWARPInfo::Row row;
@@ -687,14 +607,30 @@ void WidgetDAO::registerWidgetWarpInfo(DbWidgetHandle widgetHandle,
     }
 }
 
-void WidgetDAO::registerWidgetCertificates(DbWidgetHandle widgetHandle,
-        const IWacSecurity &wacSecurity)
+void WidgetDAO::registerWidgetAllowNavigationInfo(DbWidgetHandle widgetHandle,
+                                                  const WidgetRegisterInfo &regInfo)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
+    const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
 
+    FOREACH(allowNaviIt, widgetConfigurationInfo.allowNavigationInfoList)
+    {
+        WidgetAllowNavigation::Row row;
+        row.Set_app_id(widgetHandle);
+        row.Set_scheme(allowNaviIt->m_scheme);
+        row.Set_host(allowNaviIt->m_host);
+        DO_INSERT(row, WidgetAllowNavigation)
+    }
+}
 
-    FOREACH(it, wacSecurity.getCertificateList())
+void WidgetDAO::registerWidgetCertificates(DbWidgetHandle widgetHandle,
+                                           const IWidgetSecurity &widgetSecurity)
+{
+    using namespace DPL::DB::ORM;
+    using namespace DPL::DB::ORM::wrt;
+
+    FOREACH(it, widgetSecurity.getCertificateList())
     {
         WidgetCertificateFingerprint::Row row;
         row.Set_app_id(widgetHandle);
@@ -709,9 +645,11 @@ void WidgetDAO::registerWidgetCertificates(DbWidgetHandle widgetHandle,
     }
 }
 
-void WidgetDAO::registerCertificatesChains(DbWidgetHandle widgetHandle,
-        CertificateSource certificateSource,
-        const CertificateChainList &certificateChainList)
+void WidgetDAO::registerCertificatesChains(
+    DbWidgetHandle widgetHandle,
+    CertificateSource certificateSource,
+    const CertificateChainList &
+    certificateChainList)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
@@ -727,7 +665,7 @@ void WidgetDAO::registerCertificatesChains(DbWidgetHandle widgetHandle,
 }
 
 void WidgetDAO::registerWidgetSettings(DbWidgetHandle widgetHandle,
-        const WidgetRegisterInfo &regInfo)
+                                       const WidgetRegisterInfo &regInfo)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
@@ -745,28 +683,94 @@ void WidgetDAO::registerWidgetSettings(DbWidgetHandle widgetHandle,
     }
 }
 
-void WidgetDAO::registerAppService(DbWidgetHandle widgetHandle,
+void WidgetDAO::insertAppControlInfo(DbWidgetHandle handle,
+                                             DPL::String src,
+                                             DPL::String operation,
+                                             DPL::String uri,
+                                             DPL::String mime,
+                                             unsigned index,
+                                             unsigned disposition)
+{
+    using namespace DPL::DB::ORM;
+    using namespace DPL::DB::ORM::wrt;
+
+    AppControlInfo::Row row;
+
+    row.Set_app_id(handle);
+    row.Set_execute_index(index);
+    row.Set_src(src);
+    row.Set_operation(operation);
+    row.Set_uri(uri);
+    row.Set_mime(mime);
+    row.Set_disposition(disposition);
+
+    DO_INSERT(row, AppControlInfo);
+}
+
+void WidgetDAO::registerAppControl(DbWidgetHandle widgetHandle,
                                    const WidgetRegisterInfo &regInfo)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
     const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
 
-    FOREACH(ASIt, widgetConfigurationInfo.appServiceList)
+    // appControlList
+    FOREACH(appControl_it, widgetConfigurationInfo.appControlList)
     {
-        ApplicationServiceInfo::Row row;
-        row.Set_app_id(widgetHandle);
-        row.Set_src(ASIt->m_src);
-        row.Set_operation(ASIt->m_operation);
-        row.Set_scheme(ASIt->m_scheme);
-        row.Set_mime(ASIt->m_mime);
+        DPL::String src       = appControl_it->m_src;
+        DPL::String operation = appControl_it->m_operation;
+        unsigned index        = appControl_it->m_index;
+        unsigned disposition  = appControl_it->m_disposition ==
+            ConfigParserData::AppControlInfo::Disposition::INLINE ? 1 : 0;
+
+        if (!appControl_it->m_uriList.empty())
+        {
+            FOREACH(uri_it, appControl_it->m_uriList)
+            {
+                DPL::String uri = *uri_it;
+
+                if (!appControl_it->m_mimeList.empty())
+                {
+                    FOREACH(mime_it, appControl_it->m_mimeList)
+                    {
+                        DPL::String mime = *mime_it;
+
+                        insertAppControlInfo(widgetHandle, src, operation, uri, mime, index, disposition);
+                    }
+                }
+                else
+                {
+                    DPL::String mime = L"";
+
+                    insertAppControlInfo(widgetHandle, src, operation, uri, mime, index, disposition);
+                }
+            }
+        }
+        else
+        {
+            DPL::String uri = L"";
 
-        DO_INSERT(row, ApplicationServiceInfo)
+            if (!appControl_it->m_mimeList.empty())
+            {
+                FOREACH(mime_it, appControl_it->m_mimeList)
+                {
+                    DPL::String mime = *mime_it;
+
+                    insertAppControlInfo(widgetHandle, src, operation, uri, mime, index, disposition);
+                }
+            }
+            else
+            {
+                DPL::String mime = L"";
+
+                insertAppControlInfo(widgetHandle, src, operation, uri, mime, index, disposition);
+            }
+        }
     }
 }
 
 void WidgetDAO::registerEncryptedResouceInfo(DbWidgetHandle widgetHandle,
-        const WidgetRegisterInfo &regInfo)
+                                             const WidgetRegisterInfo &regInfo)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
@@ -782,14 +786,17 @@ void WidgetDAO::registerEncryptedResouceInfo(DbWidgetHandle widgetHandle,
     }
 }
 
-void WidgetDAO::registerExternalLocations(DbWidgetHandle widgetHandle,
-                                          const ExternalLocationList & externals)
+void WidgetDAO::registerExternalLocations(
+    DbWidgetHandle widgetHandle,
+    const ExternalLocationList &
+    externals)
 {
     SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
     {
         using namespace DPL::DB::ORM;
         using namespace DPL::DB::ORM::wrt;
-        DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
+        DPL::DB::ORM::wrt::ScopedTransaction transaction(
+            &WrtDatabase::interface());
         LogDebug("Inserting external files for widgetHandle: " << widgetHandle);
         FOREACH(it, externals)
         {
@@ -806,24 +813,16 @@ void WidgetDAO::registerExternalLocations(DbWidgetHandle widgetHandle,
 
 void WidgetDAO::registerWidgetSecuritySettings(DbWidgetHandle widgetHandle)
 {
-    SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
-    {
-        using namespace DPL::DB::ORM;
-        using namespace DPL::DB::ORM::wrt;
-        DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
-
-        WidgetSecuritySettings::Row row;
-        row.Set_app_id(widgetHandle);
-        row.Set_security_popup_usage(SETTINGS_TYPE_ON);
-        row.Set_geolocation_usage(SETTINGS_TYPE_ON);
-        row.Set_web_notification_usage(SETTINGS_TYPE_ON);
-        row.Set_web_database_usage(SETTINGS_TYPE_ON);
-        row.Set_file_system_usage(SETTINGS_TYPE_ON);
+    using namespace DPL::DB::ORM;
+    using namespace DPL::DB::ORM::wrt;
+    WidgetSecuritySettings::Row row;
+    row.Set_app_id(widgetHandle);
+    row.Set_security_popup_usage(SETTINGS_TYPE_ON);
+    row.Set_geolocation_usage(SETTINGS_TYPE_ON);
+    row.Set_web_notification_usage(SETTINGS_TYPE_ON);
+    row.Set_web_database_usage(SETTINGS_TYPE_ON);
 
-        DO_INSERT(row, WidgetSecuritySettings)
-        transaction.Commit();
-    }
-    SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to register external files");
+    DO_INSERT(row, WidgetSecuritySettings)
 }
 
 void WidgetDAO::unregisterAllExternalLocations()
@@ -836,44 +835,26 @@ void WidgetDAO::unregisterAllExternalLocations()
     del->Execute();
 }
 
-void WidgetDAO::unregisterWidget(const WidgetPkgName & pkgName)
-{
-    LogDebug("Unregistering widget from DB. PkgName: " << pkgName);
-    SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
-    {
-        DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
-        unregisterWidgetInternal(pkgName);
-        transaction.Commit();
-    }
-    SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to unregister widget")
-}
-
-void WidgetDAO::unregisterWidget(WrtDB::DbWidgetHandle handle)
+void WidgetDAO::unregisterWidget(const TizenAppId & tzAppId)
 {
-    LogDebug("Unregistering widget from DB. Handle: " << handle);
+    LogDebug("Unregistering widget from DB. tzAppId: " << tzAppId);
     SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
     {
-        using namespace DPL::DB::ORM;
-        using namespace DPL::DB::ORM::wrt;
-        ScopedTransaction transaction(&WrtDatabase::interface());
-
-        // Delete from table Widget Info
-        WRT_DB_DELETE(del, WidgetInfo, &WrtDatabase::interface())
-        del->Where(Equals<WidgetInfo::app_id>(handle));
-        del->Execute();
-
+        DPL::DB::ORM::wrt::ScopedTransaction transaction(
+            &WrtDatabase::interface());
+        unregisterWidgetInternal(tzAppId);
         transaction.Commit();
     }
     SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to unregister widget")
 }
 
 void WidgetDAO::unregisterWidgetInternal(
-        const WidgetPkgName & pkgName)
+    const TizenAppId & tzAppId)
 {
     using namespace DPL::DB::ORM;
     using namespace DPL::DB::ORM::wrt;
 
-    DbWidgetHandle handle = getHandle(pkgName);
+    DbWidgetHandle handle = getHandle(tzAppId);
 
     // Delete from table Widget Info
     WRT_DB_DELETE(del, WidgetInfo, &WrtDatabase::interface())
@@ -887,5 +868,4 @@ void WidgetDAO::unregisterWidgetInternal(
 
 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
-
 } // namespace WrtDB