Configuration parser adjustment to specification
authorTomasz Iwanek <t.iwanek@samsung.com>
Tue, 7 May 2013 12:25:29 +0000 (14:25 +0200)
committerGerrit Code Review <gerrit2@kim11>
Wed, 22 May 2013 11:09:36 +0000 (20:09 +0900)
[Issue#]       LINUXWRT-314
[Bug]          Parser not working as specified
[Cause]        N/A
[Solution]     Several fixes. Following things are being fixed:
 - prefering tizen:content element over widgets:content element
 - taking first content element (besides rule above)
[Verification] Build repository.

Run tests from change no "202543" from wrt-extra.

Change-Id: I75fd980a0dc6a372a001135a62acb9cd4ecd7c54

src/configuration_parser/widget_parser.cpp

index 9a7610e..4404aa6 100644 (file)
@@ -569,7 +569,7 @@ class IconParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     IconParser(ConfigParserData& data) : ElementParser(),
@@ -683,7 +683,7 @@ class ContentParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     ContentParser(ConfigParserData& data) :
@@ -691,8 +691,10 @@ class ContentParser : public ElementParser
         m_data(data)
     {}
 
-    virtual void Accept(const Element& /*element*/)
-    {}
+    virtual void Accept(const Element& element)
+    {
+        m_namespace = element.ns;
+    }
 
     virtual void Accept(const Text& /*text*/)
     {}
@@ -721,13 +723,17 @@ class ContentParser : public ElementParser
 
     virtual void Verify()
     {
-        if (m_data.startFileEncountered) {
-            LogWarning("This is not the first encountered "
-                       "'content' element - ignoring.");
-            return;
+        if(!!m_data.startFile)
+        {
+            if(m_data.startFileNamespace == m_namespace
+                || m_namespace != ConfigurationNamespace::TizenWebAppNamespaceName)
+            {
+                return;
+            }
+            //else continue -> if previous item was not in tizen namespace
         }
 
-        m_data.startFileEncountered = true;
+        m_data.startFileNamespace = m_namespace;
 
         //we're consciously setting startFile even if m_src is null or invalid.
         //WidgetConfigurationManager will deal with this.
@@ -748,6 +754,7 @@ class ContentParser : public ElementParser
     DPL::OptionalString m_type;
     DPL::OptionalString m_encoding;
     ConfigParserData& m_data;
+    DPL::String m_namespace;
 };
 
 class PreferenceParser : public ElementParser
@@ -756,7 +763,7 @@ class PreferenceParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     virtual void Accept(const XmlAttribute& attribute)
@@ -895,7 +902,7 @@ class SettingParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     virtual void Accept(const Text& /*text*/)
@@ -934,7 +941,7 @@ class AppControlParser : public ElementParser
         virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                             const DPL::String& /*name*/)
         {
-            return &IgnoringParser::Create;
+            return &IgnoringParser::Create; //ignore unknown according to w3c
         }
 
         virtual void Accept(const Text& /*text*/)
@@ -980,7 +987,7 @@ class AppControlParser : public ElementParser
         virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                             const DPL::String& /*name*/)
         {
-            return &IgnoringParser::Create;
+            return &IgnoringParser::Create; //ignore unknown according to w3c
         }
 
         virtual void Accept(const Text& /*text*/)
@@ -1026,7 +1033,7 @@ class AppControlParser : public ElementParser
         virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                             const DPL::String& /*name*/)
         {
-            return &IgnoringParser::Create;
+            return &IgnoringParser::Create; //ignore unknown according to w3c
         }
 
         virtual void Accept(const Text& /*text*/)
@@ -1089,7 +1096,7 @@ class AppControlParser : public ElementParser
         virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                             const DPL::String& /*name*/)
         {
-            return &IgnoringParser::Create;
+            return &IgnoringParser::Create; //ignore unknown according to w3c
         }
 
         virtual void Accept(const Text& /*text*/)
@@ -1152,7 +1159,7 @@ class AppControlParser : public ElementParser
         } else if (name == L"mime") {
             return DPL::MakeDelegate(this, &AppControlParser::OnMimeElement);
         } else {
-            return &IgnoringParser::Create;
+            return &IgnoringParser::Create; //ignore unknown according to w3c
         }
     }
 
@@ -1176,13 +1183,11 @@ class AppControlParser : public ElementParser
     virtual void Verify()
     {
         if (m_appControl.m_src == L"") {
-            LogWarning("service element must have src element");
-            return;
+            ThrowMsg(Exception::ParseError, "service element must have src element");
         }
 
         if (m_appControl.m_operation == L"") {
-            LogWarning("service element must have operation element");
-            return;
+            ThrowMsg(Exception::ParseError, "service element must have operation element");
         }
 
         m_data.appControlList.push_back(m_appControl);
@@ -1225,13 +1230,12 @@ class ApplicationParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     virtual void Accept(const Text& /*text*/)
     {
         if (m_properNamespace) {
-            LogDebug("text");
             ThrowMsg(Exception::ParseError, "application element must be empty");
         }
     }
@@ -1243,13 +1247,11 @@ class ApplicationParser : public ElementParser
         {
             m_properNamespace = true;
         }
-        LogDebug("element");
     }
 
     virtual void Accept(const XmlAttribute& attribute)
     {
         if (m_properNamespace) {
-            LogDebug("attribute");
             if (attribute.name == L"id") {
                 m_id = attribute.value;
                 NormalizeAndTrimSpaceString(m_id);
@@ -1365,7 +1367,7 @@ class SplashParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     virtual void Accept(const XmlAttribute& attribute)
@@ -1410,7 +1412,7 @@ class BackgroundParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     virtual void Accept(const XmlAttribute& attribute)
@@ -1454,7 +1456,7 @@ class PrivilegeParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     virtual void Accept(const Text& /*text*/)
@@ -1535,7 +1537,7 @@ class CategoryParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     virtual void Accept(const XmlAttribute& attribute)
@@ -1586,7 +1588,7 @@ class AppWidgetParser : public ElementParser
         virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                             const DPL::String& /*name*/)
         {
-            return &IgnoringParser::Create;
+            return &IgnoringParser::Create; //ignore unknown according to w3c
         }
 
         virtual void Accept(const XmlAttribute& /*attribute*/)
@@ -1634,7 +1636,7 @@ class AppWidgetParser : public ElementParser
         virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                             const DPL::String& /*name*/)
         {
-            return &IgnoringParser::Create;
+            return &IgnoringParser::Create; //ignore unknown according to w3c
         }
 
         virtual void Accept(const XmlAttribute& attribute)
@@ -1686,7 +1688,7 @@ class AppWidgetParser : public ElementParser
             virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                                 const DPL::String& /*name*/)
             {
-                return &IgnoringParser::Create;
+                return &IgnoringParser::Create; //ignore unknown according to w3c
             }
 
             virtual void Accept(const XmlAttribute& attribute)
@@ -1746,7 +1748,7 @@ class AppWidgetParser : public ElementParser
             virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                                 const DPL::String& /*name*/)
             {
-                return &IgnoringParser::Create;
+                return &IgnoringParser::Create; //ignore unknown according to w3c
             }
 
             virtual void Accept(const XmlAttribute& attribute)
@@ -1965,7 +1967,7 @@ class AppWidgetParser : public ElementParser
         } else if (name == L"box-content") {
             return DPL::MakeDelegate(this, &AppWidgetParser::OnBoxContentElement);
         } else {
-            return &IgnoringParser::Create;
+            return &IgnoringParser::Create; //ignore unknown according to w3c
         }
     }
 
@@ -2127,7 +2129,7 @@ class AllowNavigationParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     virtual void Accept(const Element& element)
@@ -2198,7 +2200,7 @@ class CspParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     CspParser(ConfigParserData& data) :
@@ -2243,7 +2245,7 @@ class CspReportOnlyParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     CspReportOnlyParser(ConfigParserData& data) :
@@ -2295,7 +2297,7 @@ class AccountParser : public ElementParser
                 virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                         const DPL::String& /*name*/)
                 {
-                    return &IgnoringParser::Create;
+                    return &IgnoringParser::Create; //ignore unknown according to w3c
                 }
 
                 virtual void Accept(const Text& text)
@@ -2353,7 +2355,7 @@ class AccountParser : public ElementParser
                 virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                         const DPL::String& /*name*/)
                 {
-                    return &IgnoringParser::Create;
+                    return &IgnoringParser::Create; //ignore unknown according to w3c
                 }
 
                 virtual void Accept(const Text& text)
@@ -2405,7 +2407,7 @@ class AccountParser : public ElementParser
                 virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                         const DPL::String& /*name*/)
                 {
-                    return &IgnoringParser::Create;
+                    return &IgnoringParser::Create; //ignore unknown according to w3c
                 }
 
                 virtual void Accept(const Text& text)
@@ -2452,7 +2454,7 @@ class AccountParser : public ElementParser
               } else if (name == L"capability") {
                   return DPL::MakeDelegate(this, &AccountProviderParser::OnCapabilityElement);
               } else {
-                  return &IgnoringParser::Create;
+                  return &IgnoringParser::Create; //ignore unknown according to w3c
               }
           }
 
@@ -2465,11 +2467,7 @@ class AccountParser : public ElementParser
           virtual void Accept(const XmlAttribute& attribute)
           {
               if (attribute.name == L"multiple-accounts-support") {
-                  if (attribute.value == L"") {
-                      return;
-                  }
-
-                  if (attribute.value == L"ture") {
+                  if (attribute.value == L"true") {
                       m_multiSupport = true;
                   }
               }
@@ -2514,7 +2512,7 @@ class AccountParser : public ElementParser
         if (name == L"account-provider") {
             return DPL::MakeDelegate(this, &AccountParser::OnProviderElement);
         } else {
-            return &IgnoringParser::Create;
+            return &IgnoringParser::Create; //ignore unknown according to w3c
         }
     }
 
@@ -2560,7 +2558,7 @@ class MetadataParser : public ElementParser
     virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
                                         const DPL::String& /*name*/)
     {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 
     virtual void Accept(const XmlAttribute& attribute)
@@ -2619,14 +2617,13 @@ class MetadataParser : public ElementParser
 
 ElementParser::ActionFunc WidgetParser::GetElementParser(
     const DPL::String& /*ns*/,
-    const DPL::String&
-    name)
+    const DPL::String& name)
 {
     FuncMap::const_iterator it = m_map.find(name);
     if (it != m_map.end()) {
         return it->second;
     } else {
-        return &IgnoringParser::Create;
+        return &IgnoringParser::Create; //ignore unknown according to w3c
     }
 }
 
@@ -2835,11 +2832,11 @@ void WidgetParser::Accept(const XmlAttribute& attribute)
 
         if (!v.empty()) {
             unsigned char c = v.c_str()[0];
-            if (c >= '0' && c <= '9') {
+            if (isdigit(c)) {
                 int val = 0;
                 for (size_t i = 0; i < v.size(); ++i) {
                     c = v.c_str()[i];
-                    if (c >= '0' && c <= '9') {
+                    if (isdigit(c)) {
                         val *= 10;
                         val += (c - '0');
                     } else {