From 4d5de694d154568f8c256534510256ef8f364c71 Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Tue, 7 May 2013 14:25:29 +0200 Subject: [PATCH] Configuration parser adjustment to specification [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 | 101 ++++++++++++++--------------- 1 file changed, 49 insertions(+), 52 deletions(-) diff --git a/src/configuration_parser/widget_parser.cpp b/src/configuration_parser/widget_parser.cpp index 9a7610e..4404aa6 100644 --- a/src/configuration_parser/widget_parser.cpp +++ b/src/configuration_parser/widget_parser.cpp @@ -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 { -- 2.7.4