Skip to content

Commit

Permalink
fix(Cast): Incorrect detection of MediaCapabilities on Chromecast (sh…
Browse files Browse the repository at this point in the history
  • Loading branch information
avelad committed May 28, 2024
1 parent e3f85eb commit 00c5c1d
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 11 deletions.
12 changes: 7 additions & 5 deletions lib/polyfill/media_capabilities.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,8 @@ shaka.polyfill.MediaCapabilities = class {
* @export
*/
static install() {
// Since MediaCapabilities implementation is buggy on the Chromecast
// platform (see https://github.com/shaka-project/shaka-player/issues/4569),
// we should always install polyfills on all Chromecast models.
// TODO: re-evaluate MediaCapabilities in the future versions of Chromecast.
// We can enable MediaCapabilities in Android and Fuchsia devices, but not
// in Linux devices because the implementation is buggy.
// Since MediaCapabilities implementation is buggy in Apple browsers, we
// should always install polyfill for Apple browsers.
// See: https://github.com/shaka-project/shaka-player/issues/3530
Expand All @@ -51,12 +49,16 @@ shaka.polyfill.MediaCapabilities = class {
// Since MediaCapabilities implementation is buggy in Hisense browsers, we
// should always install polyfill for Hisense browsers.
let canUseNativeMCap = true;
if (shaka.util.Platform.isChromecast() &&
!shaka.util.Platform.isAndroidCastDevice() &&
!shaka.util.Platform.isFuchsiaCastDevice()) {
canUseNativeMCap = false;
}
if (shaka.util.Platform.isApple() ||
shaka.util.Platform.isPS5() ||
shaka.util.Platform.isPS4() ||
shaka.util.Platform.isWebOS() ||
shaka.util.Platform.isTizen() ||
shaka.util.Platform.isChromecast() ||
shaka.util.Platform.isEOS() ||
shaka.util.Platform.isHisense()) {
canUseNativeMCap = false;
Expand Down
12 changes: 6 additions & 6 deletions test/polyfill/media_capabilities_unit.js
Original file line number Diff line number Diff line change
Expand Up @@ -194,10 +194,10 @@ describe('MediaCapabilities', () => {
await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig);

expect(mockCanDisplayType).not.toHaveBeenCalled();
// 1 (during install()) +
// 3 (during install()) +
// 1 (for video config check) +
// 1 (for audio config check).
expect(isChromecastSpy).toHaveBeenCalledTimes(3);
expect(isChromecastSpy).toHaveBeenCalledTimes(5);
// 1 (fallback in canCastDisplayType()) +
// 1 (mockDecodingConfig.audio).
expect(supportMap.has(mockDecodingConfig.video.contentType))
Expand All @@ -219,10 +219,10 @@ describe('MediaCapabilities', () => {
await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig);

expect(mockCanDisplayType).not.toHaveBeenCalled();
// 1 (during install()) +
// 3 (during install()) +
// 1 (for video config check) +
// 1 (for audio config check).
expect(isChromecastSpy).toHaveBeenCalledTimes(3);
expect(isChromecastSpy).toHaveBeenCalledTimes(5);
// 1 (fallback in canCastDisplayType()) +
// 1 (mockDecodingConfig.audio).
expect(supportMap.has(mockDecodingConfig.video.contentType))
Expand Down Expand Up @@ -268,10 +268,10 @@ describe('MediaCapabilities', () => {
shaka.polyfill.MediaCapabilities.install();
await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig);

// 1 (during install()) +
// 3 (during install()) +
// 1 (for video config check) +
// 1 (for audio config check).
expect(isChromecastSpy).toHaveBeenCalledTimes(3);
expect(isChromecastSpy).toHaveBeenCalledTimes(5);
// 1 (mockDecodingConfig.audio).
expect(supportMap.has(chromecastType)).toBe(true);
// Called once in canCastDisplayType.
Expand Down

0 comments on commit 00c5c1d

Please sign in to comment.