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 : c46b480b9fc63eab9170b052c7f9ea9b7bbd048e
This commit is contained in:
Gerald Squelart 2016-12-01 16:57:31 +11:00
Родитель d6f0cf3f9c
Коммит fe26cb66da
3 изменённых файлов: 88 добавлений и 10 удалений

Просмотреть файл

@ -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);