Skip to content

Commit

Permalink
fix: do not patch canplaytype on android chrome (#4885)
Browse files Browse the repository at this point in the history
Patching canPlayType on Android shouldn't be necessary on Android Chrome since it reports its ability to player HLS correctly.
  • Loading branch information
mister-ben authored and gkatsev committed Jan 30, 2018
1 parent a15e616 commit f03ac5e
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
3 changes: 2 additions & 1 deletion src/js/tech/html5.js
Original file line number Diff line number Diff line change
Expand Up @@ -1051,7 +1051,8 @@ const mp4RE = /^video\/mp4/i;
Html5.patchCanPlayType = function() {

// Android 4.0 and above can play HLS to some extent but it reports being unable to do so
if (browser.ANDROID_VERSION >= 4.0 && !browser.IS_FIREFOX) {
// Firefox and Chrome report correctly
if (browser.ANDROID_VERSION >= 4.0 && !browser.IS_FIREFOX && !browser.IS_CHROME) {
Html5.TEST_VID.constructor.prototype.canPlayType = function(type) {
if (type && mpegurlRE.test(type)) {
return 'maybe';
Expand Down
36 changes: 35 additions & 1 deletion test/unit/tech/html5.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -191,11 +191,13 @@ QUnit.test('patchCanPlayType patches canplaytype with our function, conditionall

const oldAV = browser.ANDROID_VERSION;
const oldIsFirefox = browser.IS_FIREFOX;
const oldIsChrome = browser.IS_CHROME;
const video = document.createElement('video');
const canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;

browser.ANDROID_VERSION = 4.0;
browser.IS_FIREFOX = false;
browser.IS_CHROME = false;
Html5.patchCanPlayType();

assert.notStrictEqual(video.canPlayType,
Expand All @@ -214,6 +216,32 @@ QUnit.test('patchCanPlayType patches canplaytype with our function, conditionall

browser.ANDROID_VERSION = oldAV;
browser.IS_FIREFOX = oldIsFirefox;
browser.IS_CHROME = oldIsChrome;
Html5.unpatchCanPlayType();
});

QUnit.test('patchCanPlayType doesn\'t patch canplaytype with our function in Chrome for Android', function(assert) {
// the patch runs automatically so we need to first unpatch
Html5.unpatchCanPlayType();

const oldAV = browser.ANDROID_VERSION;
const oldIsChrome = browser.IS_CHROME;
const oldIsFirefox = browser.IS_FIREFOX;
const video = document.createElement('video');
const canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;

browser.ANDROID_VERSION = 4.0;
browser.IS_CHROME = true;
browser.IS_FIREFOX = false;
Html5.patchCanPlayType();

assert.strictEqual(video.canPlayType,
canPlayType,
'original canPlayType and patched canPlayType should be equal');

browser.ANDROID_VERSION = oldAV;
browser.IS_CHROME = oldIsChrome;
browser.IS_FIREFOX = oldIsFirefox;
Html5.unpatchCanPlayType();
});

Expand All @@ -223,11 +251,13 @@ QUnit.test('patchCanPlayType doesn\'t patch canplaytype with our function in Fir

const oldAV = browser.ANDROID_VERSION;
const oldIsFirefox = browser.IS_FIREFOX;
const oldIsChrome = browser.IS_CHROME;
const video = document.createElement('video');
const canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;

browser.ANDROID_VERSION = 4.0;
browser.IS_FIREFOX = true;
browser.IS_CHROME = false;
Html5.patchCanPlayType();

assert.strictEqual(video.canPlayType,
Expand All @@ -236,16 +266,19 @@ QUnit.test('patchCanPlayType doesn\'t patch canplaytype with our function in Fir

browser.ANDROID_VERSION = oldAV;
browser.IS_FIREFOX = oldIsFirefox;
browser.IS_CHROME = oldIsChrome;
Html5.unpatchCanPlayType();
});

QUnit.test('should return maybe for HLS urls on Android 4.0 or above', function(assert) {
QUnit.test('should return maybe for HLS urls on Android 4.0 or above when not Chrome or Firefox', function(assert) {
const oldAV = browser.ANDROID_VERSION;
const oldIsFirefox = browser.IS_FIREFOX;
const oldIsChrome = browser.IS_CHROME;
const video = document.createElement('video');

browser.ANDROID_VERSION = 4.0;
browser.IS_FIREFOX = false;
browser.IS_CHROME = false;
Html5.patchCanPlayType();

assert.strictEqual(video.canPlayType('application/x-mpegurl'),
Expand All @@ -265,6 +298,7 @@ QUnit.test('should return maybe for HLS urls on Android 4.0 or above', function(

browser.ANDROID_VERSION = oldAV;
browser.IS_FIREFOX = oldIsFirefox;
browser.IS_CHROME = oldIsChrome;
Html5.unpatchCanPlayType();
});

Expand Down

0 comments on commit f03ac5e

Please sign in to comment.