Bug 1398102 - canPlayType should return 'maybe' if the codec parameter is empty. r=gerald

MozReview-Commit-ID: BmzIUOuaTj9

--HG--
extra : rebase_source : 530b713cf259920b65181d9459323f5f14bae39e
This commit is contained in:
James Cheng 2017-09-11 17:17:55 +08:00
parent 650dd7945a
commit ae3bc947af
2 changed files with 14 additions and 11 deletions

View File

@ -4647,6 +4647,17 @@ HTMLMediaElement::GetCanPlay(const nsAString& aType,
// demuxer can handle VP9 in fragmented MP4.
return CANPLAY_NO;
}
if (status == CANPLAY_YES &&
(*containerType).ExtendedType().Codecs().IsEmpty()) {
// Per spec: 'Generally, a user agent should never return "probably" for a
// type that allows the `codecs` parameter if that parameter is not present.'
// As all our currently-supported types allow for `codecs`, we can do this
// check here.
// TODO: Instead, missing `codecs` should be checked in each decoder's
// `IsSupportedType` call from `CanHandleCodecsType()`.
// See bug 1399023.
return CANPLAY_MAYBE;
}
return status;
}
@ -4664,10 +4675,12 @@ HTMLMediaElement::CanPlayType(const nsAString& aType, nsAString& aResult)
case CANPLAY_YES:
aResult.AssignLiteral("probably");
break;
default:
case CANPLAY_MAYBE:
aResult.AssignLiteral("maybe");
break;
default:
MOZ_ASSERT_UNREACHABLE("Unexpected case.");
break;
}
LOG(LogLevel::Debug, ("%p CanPlayType(%s) = \"%s\"", this,

View File

@ -1,10 +1,5 @@
[canPlayType.html]
type: testharness
[audio/mp4 (optional)]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
[audio/mp4; codecs="mp4a.40.2" (optional)]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
@ -19,11 +14,6 @@
[video/3gpp; codecs="mp4v.20.8" (optional)]
expected: FAIL
[video/mp4 (optional)]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
[video/mp4; codecs="mp4a.40.2" (optional)]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL