From 5fbe11ba45e669f6d93c819fd1bdf449972f5c5a Mon Sep 17 00:00:00 2001 From: Yuval Keidar <48407737+Yuvalke@users.noreply.github.com> Date: Thu, 2 Jul 2020 15:58:47 +0300 Subject: [PATCH] fix(FEC-10122): destroy cleanup process (#326) static class added listeners to the player instance which weren't cleared on destroy. Add destroy to playlist manager. --- src/common/playlist/playlist-manager.js | 4 ++++ src/common/storage/storage-manager.js | 21 ++++++++++++++------- src/kaltura-player.js | 1 + 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/common/playlist/playlist-manager.js b/src/common/playlist/playlist-manager.js index a168660c5..df32a56fd 100644 --- a/src/common/playlist/playlist-manager.js +++ b/src/common/playlist/playlist-manager.js @@ -282,6 +282,10 @@ class PlaylistManager { } return Promise.reject(); } + + destroy(): void { + this._eventManager.destroy(); + } } export {PlaylistManager}; diff --git a/src/common/storage/storage-manager.js b/src/common/storage/storage-manager.js index 8c15c8fb3..b3c624a10 100644 --- a/src/common/storage/storage-manager.js +++ b/src/common/storage/storage-manager.js @@ -1,7 +1,7 @@ // @flow import StorageWrapper from './storage-wrapper'; import getLogger from '../utils/logger'; -import {Utils} from '@playkit-js/playkit-js'; +import {EventManager, Utils} from '@playkit-js/playkit-js'; export default class StorageManager { static StorageKeys: {[key: string]: string} = { @@ -32,17 +32,19 @@ export default class StorageManager { */ static attach(player: Player): void { StorageManager._logger.debug('Attach local storage'); - player.addEventListener(player.Event.UI.USER_CLICKED_MUTE, () => { + let eventManager = new EventManager(); + eventManager.listen(player, player.Event.UI.USER_CLICKED_MUTE, () => { if (!player.isCasting()) { StorageWrapper.setItem(StorageManager.StorageKeys.MUTED, player.muted); } }); - player.addEventListener(player.Event.UI.USER_CLICKED_UNMUTE, () => { + eventManager.listen(player, player.Event.UI.USER_CLICKED_UNMUTE, () => { if (!player.isCasting()) { StorageWrapper.setItem(StorageManager.StorageKeys.MUTED, player.muted); } }); - player.addEventListener(player.Event.UI.USER_CHANGED_VOLUME, () => { + + eventManager.listen(player, player.Event.UI.USER_CHANGED_VOLUME, () => { if (!player.isCasting()) { if (player.volume > 0) { StorageWrapper.setItem(StorageManager.StorageKeys.MUTED, false); @@ -52,15 +54,18 @@ export default class StorageManager { StorageWrapper.setItem(StorageManager.StorageKeys.VOLUME, player.volume); } }); - player.addEventListener(player.Event.UI.USER_SELECTED_AUDIO_TRACK, event => { + + eventManager.listen(player, player.Event.UI.USER_SELECTED_AUDIO_TRACK, event => { const audioTrack = event.payload.audioTrack; StorageWrapper.setItem(StorageManager.StorageKeys.AUDIO_LANG, audioTrack.language); }); - player.addEventListener(player.Event.UI.USER_SELECTED_CAPTION_TRACK, event => { + + eventManager.listen(player, player.Event.UI.USER_SELECTED_CAPTION_TRACK, event => { const textTrack = event.payload.captionTrack; StorageWrapper.setItem(StorageManager.StorageKeys.TEXT_LANG, textTrack.language); }); - player.addEventListener(player.Event.UI.USER_SELECTED_CAPTIONS_STYLE, event => { + + eventManager.listen(player, player.Event.UI.USER_SELECTED_CAPTIONS_STYLE, event => { try { const textStyle = JSON.stringify(event.payload.captionsStyle); StorageWrapper.setItem(StorageManager.StorageKeys.TEXT_STYLE, textStyle); @@ -68,6 +73,8 @@ export default class StorageManager { this._logger.error(e.message); } }); + + eventManager.listen(player, player.Event.PLAYER_DESTROY, () => eventManager.destroy()); } /** diff --git a/src/kaltura-player.js b/src/kaltura-player.js index c11012f87..0720874f6 100644 --- a/src/kaltura-player.js +++ b/src/kaltura-player.js @@ -220,6 +220,7 @@ class KalturaPlayer extends FakeEventTarget { this._localPlayer.destroy(); this._uiWrapper.destroy(); this._eventManager.destroy(); + this._playlistManager.destroy(); const targetContainer = document.getElementById(targetId); if (targetContainer && targetContainer.parentNode) { Utils.Dom.removeChild(targetContainer.parentNode, targetContainer);