Delete WebMetal implementation in favor of WebGPU
[WebKit-https.git] / Source / WebCore / platform / ContentType.cpp
index d8d45de..f0d2c10 100644 (file)
 #include "config.h"
 #include "ContentType.h"
 #include "HTMLParserIdioms.h"
+#include <wtf/JSONValues.h>
 #include <wtf/NeverDestroyed.h>
 
 namespace WebCore {
 
+ContentType::ContentType(String&& contentType)
+    : m_type(WTFMove(contentType))
+{
+}
+
 ContentType::ContentType(const String& contentType)
     : m_type(contentType)
 {
@@ -39,13 +45,13 @@ ContentType::ContentType(const String& contentType)
 
 const String& ContentType::codecsParameter()
 {
-    static NeverDestroyed<String> codecs { ASCIILiteral("codecs") };
+    static NeverDestroyed<String> codecs { "codecs"_s };
     return codecs;
 }
 
 const String& ContentType::profilesParameter()
 {
-    static NeverDestroyed<String> profiles { ASCIILiteral("profiles") };
+    static NeverDestroyed<String> profiles { "profiles"_s };
     return profiles;
 }
 
@@ -57,7 +63,7 @@ String ContentType::parameter(const String& parameterName) const
     // a MIME type can have one or more "param=value" after a semi-colon, and separated from each other by semi-colons
     size_t semi = strippedType.find(';');
     if (semi != notFound) {
-        size_t start = strippedType.find(parameterName, semi + 1, false);
+        size_t start = strippedType.findIgnoringASCIICase(parameterName, semi + 1);
         if (start != notFound) {
             start = strippedType.find('=', start + parameterName.length());
             if (start != notFound) {
@@ -90,19 +96,39 @@ String ContentType::containerType() const
     return strippedType;
 }
 
-static String stripHTMLWhiteSpace(const String& string)
+static inline Vector<String> splitParameters(StringView parametersView)
 {
-    return string.stripWhiteSpace(isHTMLSpace);
+    Vector<String> result;
+    for (auto view : parametersView.split(','))
+        result.append(view.stripLeadingAndTrailingMatchedCharacters(isHTMLSpace<UChar>).toString());
+    return result;
 }
 
 Vector<String> ContentType::codecs() const
 {
-    return parameter(codecsParameter()).split(',').map(stripHTMLWhiteSpace);
+    return splitParameters(parameter(codecsParameter()));
 }
 
 Vector<String> ContentType::profiles() const
 {
-    return parameter(profilesParameter()).split(',').map(stripHTMLWhiteSpace);
+    return splitParameters(parameter(profilesParameter()));
+}
+
+String ContentType::toJSONString() const
+{
+    auto object = JSON::Object::create();
+
+    object->setString("containerType"_s, containerType());
+
+    auto codecs = codecsParameter();
+    if (!codecs.isEmpty())
+        object->setString("codecs"_s, codecs);
+
+    auto profiles = profilesParameter();
+    if (!profiles.isEmpty())
+        object->setString("profiles"_s, profiles);
+
+    return object->toJSONString();
 }
 
 } // namespace WebCore