Skip to content

Commit

Permalink
fix: Work around override of MediaCapabilities polyfill in Apple brow…
Browse files Browse the repository at this point in the history
…sers (shaka-project#3668)

See also shaka-project#3696

Closes shaka-project#3530

Change-Id: Ied2e644f8a5d170ef70386dc2a39b51fc95a691f
  • Loading branch information
Álvaro Velad Galván authored and tecteun committed Feb 10, 2022
1 parent 0cc6aa0 commit cd29ab4
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 12 deletions.
16 changes: 16 additions & 0 deletions externs/media_capabilities.js
@@ -0,0 +1,16 @@
/*! @license
* Shaka Player
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/

/**
* @fileoverview Externs for Shaka MediaCapabilities which were missing in the
* Closure compiler.
*
* @externs
*/


/** @type {MediaCapabilities} */
window.shakaMediaCapabilities;
4 changes: 2 additions & 2 deletions lib/util/stream_utils.js
Expand Up @@ -416,7 +416,7 @@ shaka.util.StreamUtils = class {
*/
static async filterManifestByMediaCapabilities(
manifest, usePersistentLicenses) {
goog.asserts.assert(navigator.mediaCapabilities,
goog.asserts.assert(window.shakaMediaCapabilities,
'MediaCapabilities should be valid.');

await shaka.util.StreamUtils.getDecodingInfosForVariants(
Expand Down Expand Up @@ -500,7 +500,7 @@ shaka.util.StreamUtils = class {
return;
}

const mediaCapabilities = navigator.mediaCapabilities;
const mediaCapabilities = window.shakaMediaCapabilities;

const operations = [];
const getVariantDecodingInfos = (async (variant, decodingConfig) => {
Expand Down
6 changes: 3 additions & 3 deletions test/media/drm_engine_unit.js
Expand Up @@ -31,7 +31,7 @@ describe('DrmEngine', () => {
navigator.requestMediaKeySystemAccess;
const originalLogError = shaka.log.error;
const originalBatchTime = shaka.media.DrmEngine.KEY_STATUS_BATCH_TIME;
const originalDecodingInfo = navigator.mediaCapabilities.decodingInfo;
const originalDecodingInfo = window.shakaMediaCapabilities.decodingInfo;

/** @type {!jasmine.Spy} */
let decodingInfoSpy;
Expand Down Expand Up @@ -76,7 +76,7 @@ describe('DrmEngine', () => {

beforeEach(() => {
decodingInfoSpy = jasmine.createSpy('decodingInfo');
navigator.mediaCapabilities.decodingInfo =
window.shakaMediaCapabilities.decodingInfo =
shaka.test.Util.spyFunc(decodingInfoSpy);

logErrorSpy = jasmine.createSpy('shaka.log.error');
Expand Down Expand Up @@ -153,7 +153,7 @@ describe('DrmEngine', () => {

navigator.requestMediaKeySystemAccess =
originalRequestMediaKeySystemAccess;
navigator.mediaCapabilities.decodingInfo = originalDecodingInfo;
window.shakaMediaCapabilities.decodingInfo = originalDecodingInfo;
shaka.log.error = originalLogError;
});

Expand Down
8 changes: 4 additions & 4 deletions test/player_unit.js
Expand Up @@ -36,7 +36,7 @@ describe('Player', () => {
const originalLogWarn = shaka.log.warning;
const originalLogAlwaysWarn = shaka.log.alwaysWarn;
const originalIsTypeSupported = window.MediaSource.isTypeSupported;
const originalDecodingInfo = navigator.mediaCapabilities.decodingInfo;
const originalDecodingInfo = window.shakaMediaCapabilities.decodingInfo;

const fakeManifestUri = 'fake-manifest-uri';
const fakeMimeType = 'application/test';
Expand Down Expand Up @@ -93,7 +93,7 @@ describe('Player', () => {
// Since this is not an integration test, we don't want MediaCapabilities to
// fail assertions based on browser support for types. Pretend that all
// video and audio types are supported.
navigator.mediaCapabilities.decodingInfo = async (config) => {
window.shakaMediaCapabilities.decodingInfo = async (config) => {
await Promise.resolve();
const videoType = config['video'] ?
config['video'].contentType.split('/')[0] : null;
Expand Down Expand Up @@ -177,7 +177,7 @@ describe('Player', () => {
shaka.log.alwaysWarn = originalLogAlwaysWarn;
window.MediaSource.isTypeSupported = originalIsTypeSupported;
shaka.media.ManifestParser.unregisterParserByMime(fakeMimeType);
navigator.mediaCapabilities.decodingInfo = originalDecodingInfo;
window.shakaMediaCapabilities.decodingInfo = originalDecodingInfo;
}
});

Expand Down Expand Up @@ -2463,7 +2463,7 @@ describe('Player', () => {
it('throws CONTENT_UNSUPPORTED_BY_BROWSER', async () => {
window.MediaSource.isTypeSupported = (mimeType) => false;

navigator.mediaCapabilities.decodingInfo = async (config) => {
window.shakaMediaCapabilities.decodingInfo = async (config) => {
await Promise.resolve();
return {supported: false};
};
Expand Down
6 changes: 3 additions & 3 deletions test/util/stream_utils_unit.js
Expand Up @@ -16,14 +16,14 @@ describe('StreamUtils', () => {
/** @type {!jasmine.Spy} */
let decodingInfoSpy;

const originalDecodingInfo = navigator.mediaCapabilities.decodingInfo;
const originalDecodingInfo = window.shakaMediaCapabilities.decodingInfo;

beforeEach(() => {
decodingInfoSpy = jasmine.createSpy('decodingInfo');
});

afterEach(() => {
navigator.mediaCapabilities.decodingInfo = originalDecodingInfo;
window.shakaMediaCapabilities.decodingInfo = originalDecodingInfo;
});

describe('filterStreamsByLanguageAndRole', () => {
Expand Down Expand Up @@ -511,7 +511,7 @@ describe('StreamUtils', () => {
});

it('handles decodingInfo exception', async () => {
navigator.mediaCapabilities.decodingInfo =
window.shakaMediaCapabilities.decodingInfo =
shaka.test.Util.spyFunc(decodingInfoSpy);
// If decodingInfo() fails, setDecodingInfo should finish without throwing
// an exception, and the variant should have no decodingInfo result.
Expand Down

0 comments on commit cd29ab4

Please sign in to comment.