From f03ac5e9b57aa052dbeafb45388d398efcb5512d Mon Sep 17 00:00:00 2001 From: mister-ben Date: Tue, 30 Jan 2018 16:20:33 +0000 Subject: [PATCH] fix: do not patch canplaytype on android chrome (#4885) Patching canPlayType on Android shouldn't be necessary on Android Chrome since it reports its ability to player HLS correctly. --- src/js/tech/html5.js | 3 ++- test/unit/tech/html5.test.js | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/js/tech/html5.js b/src/js/tech/html5.js index 4ec616dc6..212d1c0b7 100644 --- a/src/js/tech/html5.js +++ b/src/js/tech/html5.js @@ -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'; diff --git a/test/unit/tech/html5.test.js b/test/unit/tech/html5.test.js index 339a809cc..991f8d2fd 100644 --- a/test/unit/tech/html5.test.js +++ b/test/unit/tech/html5.test.js @@ -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, @@ -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(); }); @@ -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, @@ -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'), @@ -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(); });