diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /dom/base/MimeType.h | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/base/MimeType.h')
-rw-r--r-- | dom/base/MimeType.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/dom/base/MimeType.h b/dom/base/MimeType.h new file mode 100644 index 0000000000..8c980c7f63 --- /dev/null +++ b/dom/base/MimeType.h @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_MimeType_h +#define mozilla_dom_MimeType_h + +#include "mozilla/TextUtils.h" +#include "mozilla/UniquePtr.h" +#include "nsTHashMap.h" +#include "nsTArray.h" + +template <typename char_type> +struct HashKeyType; +template <> +struct HashKeyType<char16_t> { + using HashType = nsStringHashKey; +}; +template <> +struct HashKeyType<char> { + using HashType = nsCStringHashKey; +}; + +template <typename char_type> +class TMimeType final { + private: + class ParameterValue : public nsTString<char_type> { + public: + bool mRequiresQuoting; + + ParameterValue() : mRequiresQuoting(false) {} + }; + + static nsTArray<nsTDependentSubstring<char_type>> SplitMimetype( + const nsTSubstring<char_type>& aMimeType); + + bool mIsBase64{false}; + nsTString<char_type> mType; + nsTString<char_type> mSubtype; + nsTHashMap<typename HashKeyType<char_type>::HashType, ParameterValue> + mParameters; + nsTArray<nsTString<char_type>> mParameterNames; + + public: + TMimeType(const nsTSubstring<char_type>& aType, + const nsTSubstring<char_type>& aSubtype) + : mType(aType), mSubtype(aSubtype) {} + + static mozilla::UniquePtr<TMimeType<char_type>> Parse( + const nsTSubstring<char_type>& aStr); + + // @param aMimeType - the mimetype string + // @param aOutEssence - will hold the value of the content-type + // @param aOutCharset - will hold the value of the charset + // @return true if the mimetype was parsed, false otherwise. + static bool Parse(const nsTSubstring<char_type>& aMimeType, + nsTSubstring<char_type>& aOutEssence, + nsTSubstring<char_type>& aOutCharset); + + void Serialize(nsTSubstring<char_type>& aStr) const; + + // Returns the `<mType>/<mSubtype>` + void GetEssence(nsTSubstring<char_type>& aOutput) const; + + bool IsBase64() const { return mIsBase64; } + + // @param aName - the name of the parameter + // @return true if the parameter name is found, false otherwise. + bool HasParameter(const nsTSubstring<char_type>& aName) const; + + // @param aName - the name of the parameter + // @param aOutput - will hold the value of the parameter (quoted if necessary) + // @param aAppend - if true, the method will append to the string; + // otherwise the string is truncated before appending. + // @param aWithQuotes - if true, output can contain quoted string + // @return true if the parameter name is found, false otherwise. + bool GetParameterValue(const nsTSubstring<char_type>& aName, + nsTSubstring<char_type>& aOutput, bool aAppend = false, + bool aWithQuotes = true) const; + + // @param aName - the name of the parameter + // @param aValue - the value of the parameter + void SetParameterValue(const nsTSubstring<char_type>& aName, + const nsTSubstring<char_type>& aValue); +}; + +using MimeType = TMimeType<char16_t>; +using CMimeType = TMimeType<char>; + +#endif // mozilla_dom_MimeType_h |