Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / dom / custom / CustomElement.cpp
index 9e543df..e526bff 100644 (file)
@@ -66,6 +66,24 @@ void CustomElement::addEmbedderCustomElementName(const AtomicString& name)
     embedderCustomElementNames().append(lower);
 }
 
+static inline bool isValidNCName(const AtomicString& name)
+{
+    if (kNotFound != name.find(':'))
+        return false;
+
+    if (!name.string().is8Bit()) {
+        const UChar32 c = name.characters16()[0];
+        // These characters comes under CombiningChar in NCName and according to
+        // NCName only BaseChar and Ideodgraphic can come as first chars.
+        // Also these characters come under Letter_Other in UnicodeData, thats
+        // why they pass as valid document name.
+        if (c == 0x0B83 || c == 0x0F88 || c == 0x0F89 || c == 0x0F8A || c == 0x0F8B)
+            return false;
+    }
+
+    return Document::isValidName(name.string());
+}
+
 bool CustomElement::isValidName(const AtomicString& name, NameSet validNames)
 {
     if ((validNames & EmbedderNames) && kNotFound != embedderCustomElementNames().find(name))
@@ -74,19 +92,12 @@ bool CustomElement::isValidName(const AtomicString& name, NameSet validNames)
     if ((validNames & StandardNames) && kNotFound != name.find('-')) {
         DEFINE_STATIC_LOCAL(Vector<AtomicString>, reservedNames, ());
         if (reservedNames.isEmpty()) {
+            // FIXME(crbug.com/426605): We should be able to remove this.
             reservedNames.append(MathMLNames::annotation_xmlTag.localName());
-#if ENABLE(SVG_FONTS)
-            reservedNames.append(SVGNames::font_faceTag.localName());
-            reservedNames.append(SVGNames::font_face_srcTag.localName());
-            reservedNames.append(SVGNames::font_face_uriTag.localName());
-            reservedNames.append(SVGNames::font_face_formatTag.localName());
-            reservedNames.append(SVGNames::font_face_nameTag.localName());
-            reservedNames.append(SVGNames::missing_glyphTag.localName());
-#endif
         }
 
         if (kNotFound == reservedNames.find(name))
-            return Document::isValidName(name.string());
+            return isValidNCName(name);
     }
 
     return false;