Setting app type fix.
authorAndrzej Surdej <a.surdej@samsung.com>
Fri, 5 Jul 2013 07:46:15 +0000 (09:46 +0200)
committerGerrit Code Review <gerrit@gerrit.vlan144.tizendev.org>
Fri, 5 Jul 2013 14:04:15 +0000 (14:04 +0000)
[Issue#] LINUXWRT-599
[Problem] Multiple xml namespaces caused unhandled exception.
[Cause] N/A
[Solution] Fixed namespace chosing and catching exception
[Verification] To verify install widget: http://slp-info.sec.samsung.net/bugs/browse/WEB-3530
and run some part of w3c P&C tests

Change-Id: I8c616f70e9ca46f321dae8bfe20abd391da76468

src/jobs/widget_install/job_widget_install.cpp

index 4bbfe02..70cca13 100644 (file)
@@ -325,6 +325,16 @@ ConfigureResult JobWidgetInstall::prepareInstallation(
         LogError("Failed to localize config.xml");
         result = ConfigureResult::Failed_InvalidConfig;
     }
+    Catch(Exceptions::WidgetConfigFileInvalid)
+    {
+        LogError("Invalid configuration file");
+        result = ConfigureResult::Failed_InvalidConfig;
+    }
+    Catch(DPL::Exception)
+    {
+        LogError("Unknown exception");
+        result = ConfigureResult::Failed;
+    }
 
     return result;
 }
@@ -903,43 +913,39 @@ WrtDB::PackagingType JobWidgetInstall::checkPackageType(
 void JobWidgetInstall::setApplicationType(
     const WrtDB::ConfigParserData &configInfo)
 {
+    AppType widgetAppType = APP_TYPE_UNKNOWN;
     FOREACH(iterator, configInfo.nameSpaces) {
         LogInfo("namespace = [" << *iterator << "]");
-        AppType currentAppType = APP_TYPE_UNKNOWN;
 
-        if (*iterator == ConfigurationNamespace::W3CWidgetNamespaceName) {
-            continue;
+        if (*iterator == ConfigurationNamespace::TizenWebAppNamespaceName) {
+            if (widgetAppType != APP_TYPE_UNKNOWN &&
+                widgetAppType != APP_TYPE_TIZENWEBAPP)
+            {
+                LogError("To many namespaces declared in configuration fileA.");
+                ThrowMsg(Exceptions::WidgetConfigFileInvalid,
+                         "Config.xml has more than one valid namespace");
+            }
+            widgetAppType = APP_TYPE_TIZENWEBAPP;
         } else if (
             *iterator ==
             ConfigurationNamespace::WacWidgetNamespaceNameForLinkElement ||
             *iterator ==
             ConfigurationNamespace::WacWidgetNamespaceName)
         {
-            currentAppType = APP_TYPE_WAC20;
-        } else if (*iterator ==
-                   ConfigurationNamespace::TizenWebAppNamespaceName)
-        {
-            currentAppType = APP_TYPE_TIZENWEBAPP;
-        }
-
-        if (m_installerContext.widgetConfig.webAppType ==
-            APP_TYPE_UNKNOWN)
-        {
-            m_installerContext.widgetConfig.webAppType = currentAppType;
-        } else if (m_installerContext.widgetConfig.webAppType ==
-                   currentAppType)
-        {
-            continue;
+            if (widgetAppType != APP_TYPE_UNKNOWN &&
+                widgetAppType != APP_TYPE_WAC20)
+            {
+                LogError("To many namespaces declared in configuration fileB.");
+                ThrowMsg(Exceptions::WidgetConfigFileInvalid,
+                         "Config.xml has more than one valid namespace");
+            }
+            widgetAppType = APP_TYPE_WAC20;
         } else {
-            ThrowMsg(Exceptions::WidgetConfigFileInvalid,
-                     "Config.xml has more than one namespace");
+            LogDebug("Namespace ignored.");
         }
     }
 
-    // If there is no define, type set to WAC 2.0
-    if (m_installerContext.widgetConfig.webAppType == APP_TYPE_UNKNOWN) {
-        m_installerContext.widgetConfig.webAppType = APP_TYPE_WAC20;
-    }
+    m_installerContext.widgetConfig.webAppType = widgetAppType;
 
     LogInfo("type = [" <<
             m_installerContext.widgetConfig.webAppType.getApptypeToString() <<