mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-26 03:35:33 +00:00
Bug 1329568 - MediaMIMEType - r=jya
MediaMIMEType factors out the main MIME "type/subtype" string from MediaExtendedMIMEType, as it is often useful to deal with just that part. Like MediaContentType and MediaExtendedMIMEType, MediaMIMEType is always valid once constructed. MozReview-Commit-ID: 5Urlk6OLo5q --HG-- extra : rebase_source : aef60fde09b13befa1311c6cd712eac19c438021
This commit is contained in:
parent
14cc7d114d
commit
ab3c0bec0e
@ -17,6 +17,12 @@ namespace mozilla {
|
||||
class MediaContentType
|
||||
{
|
||||
public:
|
||||
explicit MediaContentType(const MediaMIMEType& aType)
|
||||
: mExtendedMIMEType(aType)
|
||||
{}
|
||||
explicit MediaContentType(MediaMIMEType&& aType)
|
||||
: mExtendedMIMEType(Move(aType))
|
||||
{}
|
||||
explicit MediaContentType(const MediaExtendedMIMEType& aType)
|
||||
: mExtendedMIMEType(aType)
|
||||
{
|
||||
@ -26,10 +32,11 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
const MediaMIMEType& Type() const { return mExtendedMIMEType.Type(); }
|
||||
const MediaExtendedMIMEType& ExtendedType() const { return mExtendedMIMEType; }
|
||||
|
||||
// MIME "type/subtype". Guaranteed not to be empty.
|
||||
const nsACString& GetMIMEType() const { return mExtendedMIMEType.Type(); }
|
||||
const nsACString& GetMIMEType() const { return mExtendedMIMEType.Type().AsString(); }
|
||||
|
||||
// Was there an explicit 'codecs' parameter provided?
|
||||
bool HaveCodecs() const { return mExtendedMIMEType.HaveCodecs(); }
|
||||
|
@ -10,6 +10,44 @@
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
MediaMIMEType::MediaMIMEType(const nsACString& aType)
|
||||
: mMIMEType(aType)
|
||||
{
|
||||
}
|
||||
|
||||
Maybe<MediaMIMEType>
|
||||
MakeMediaMIMEType(const nsAString& aType)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
nsContentTypeParser parser(aType);
|
||||
nsAutoString mime;
|
||||
nsresult rv = parser.GetType(mime);
|
||||
if (!NS_SUCCEEDED(rv) || mime.IsEmpty()) {
|
||||
return Nothing();
|
||||
}
|
||||
|
||||
NS_ConvertUTF16toUTF8 mime8{mime};
|
||||
|
||||
return Some(MediaMIMEType(mime8));
|
||||
}
|
||||
|
||||
Maybe<MediaMIMEType>
|
||||
MakeMediaMIMEType(const nsACString& aType)
|
||||
{
|
||||
return MakeMediaMIMEType(NS_ConvertUTF8toUTF16(aType));
|
||||
}
|
||||
|
||||
Maybe<MediaMIMEType>
|
||||
MakeMediaMIMEType(const char* aType)
|
||||
{
|
||||
if (!aType) {
|
||||
return Nothing();
|
||||
}
|
||||
return MakeMediaMIMEType(nsDependentCString(aType));
|
||||
}
|
||||
|
||||
|
||||
static int32_t
|
||||
GetParameterAsNumber(const nsContentTypeParser& aParser,
|
||||
const char* aParameter,
|
||||
@ -32,9 +70,9 @@ MediaExtendedMIMEType::MediaExtendedMIMEType(const nsACString& aMIMEType,
|
||||
const nsAString& aCodecs,
|
||||
int32_t aWidth, int32_t aHeight,
|
||||
int32_t aFramerate, int32_t aBitrate)
|
||||
: mMIMEType(Move(aMIMEType))
|
||||
: mMIMEType(aMIMEType)
|
||||
, mHaveCodecs(aHaveCodecs)
|
||||
, mCodecs(Move(aCodecs))
|
||||
, mCodecs(aCodecs)
|
||||
, mWidth(aWidth)
|
||||
, mHeight(aHeight)
|
||||
, mFramerate(aFramerate)
|
||||
@ -42,6 +80,16 @@ MediaExtendedMIMEType::MediaExtendedMIMEType(const nsACString& aMIMEType,
|
||||
{
|
||||
}
|
||||
|
||||
MediaExtendedMIMEType::MediaExtendedMIMEType(const MediaMIMEType& aType)
|
||||
: mMIMEType(aType)
|
||||
{
|
||||
}
|
||||
|
||||
MediaExtendedMIMEType::MediaExtendedMIMEType(MediaMIMEType&& aType)
|
||||
: mMIMEType(Move(aType))
|
||||
{
|
||||
}
|
||||
|
||||
Maybe<MediaExtendedMIMEType>
|
||||
MakeMediaExtendedMIMEType(const nsAString& aType)
|
||||
{
|
||||
|
@ -12,13 +12,36 @@
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
// Class containing only pre-parsed lowercase media MIME type/subtype.
|
||||
class MediaMIMEType
|
||||
{
|
||||
public:
|
||||
// MIME "type/subtype", always lowercase.
|
||||
const nsACString& AsString() const { return mMIMEType; }
|
||||
|
||||
private:
|
||||
friend Maybe<MediaMIMEType> MakeMediaMIMEType(const nsAString& aType);
|
||||
friend class MediaExtendedMIMEType;
|
||||
explicit MediaMIMEType(const nsACString& aType);
|
||||
|
||||
nsCString mMIMEType; // UTF8 MIME "type/subtype".
|
||||
};
|
||||
|
||||
Maybe<MediaMIMEType> MakeMediaMIMEType(const nsAString& aType);
|
||||
Maybe<MediaMIMEType> MakeMediaMIMEType(const nsACString& aType);
|
||||
Maybe<MediaMIMEType> MakeMediaMIMEType(const char* aType);
|
||||
|
||||
|
||||
// Class containing pre-parsed media MIME type parameters, e.g.:
|
||||
// MIME type/subtype, optional codecs, etc.
|
||||
class MediaExtendedMIMEType
|
||||
{
|
||||
public:
|
||||
explicit MediaExtendedMIMEType(const MediaMIMEType& aType);
|
||||
explicit MediaExtendedMIMEType(MediaMIMEType&& aType);
|
||||
|
||||
// MIME "type/subtype".
|
||||
const nsACString& Type() const { return mMIMEType; }
|
||||
const MediaMIMEType& Type() const { return mMIMEType; }
|
||||
|
||||
// Was there an explicit 'codecs' parameter provided?
|
||||
bool HaveCodecs() const { return mHaveCodecs; }
|
||||
@ -43,13 +66,13 @@ private:
|
||||
return (aNumber < 0) ? Maybe<int32_t>(Nothing()) : Some(int32_t(aNumber));
|
||||
}
|
||||
|
||||
nsCString mMIMEType; // UTF8 MIME type.
|
||||
bool mHaveCodecs; // If false, mCodecs must be empty.
|
||||
MediaMIMEType mMIMEType; // MIME type/subtype.
|
||||
bool mHaveCodecs = false; // If false, mCodecs must be empty.
|
||||
nsString mCodecs;
|
||||
int32_t mWidth; // -1 if not provided.
|
||||
int32_t mHeight; // -1 if not provided.
|
||||
int32_t mFramerate; // -1 if not provided.
|
||||
int32_t mBitrate; // -1 if not provided.
|
||||
int32_t mWidth = -1; // -1 if not provided.
|
||||
int32_t mHeight = -1; // -1 if not provided.
|
||||
int32_t mFramerate = -1; // -1 if not provided.
|
||||
int32_t mBitrate = -1; // -1 if not provided.
|
||||
};
|
||||
|
||||
Maybe<MediaExtendedMIMEType> MakeMediaExtendedMIMEType(const nsAString& aType);
|
||||
|
Loading…
Reference in New Issue
Block a user