Skip to content

Commit

Permalink
fix(FEC-12574): loadThumbnailWithKs can break media load when used wi…
Browse files Browse the repository at this point in the history
…th playlist or setMedia (#571)

handle shouldAddKs being called when session is not set, which happens when using setMedia or playlist API

Resolves FEC-12574
  • Loading branch information
SivanA-Kaltura authored Sep 22, 2022
1 parent f80d113 commit 67ae49d
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 11 deletions.
8 changes: 1 addition & 7 deletions src/common/playlist/playlist-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {FakeEvent, Utils, EventManager, getLogger} from '@playkit-js/playkit-js'
import {PlaylistEventType} from './playlist-event-type';
import {Playlist} from './playlist';
import {PlaylistItem} from './playlist-item';
import {addKalturaPoster} from 'poster';
import {mergeProviderPluginsConfig} from '../utils/setup-helpers';

/**
Expand Down Expand Up @@ -238,12 +237,7 @@ class PlaylistManager {
playlistConfig && playlistConfig.items && playlistConfig.items[index] && playlistConfig.items[index].sources
);
if (Array.isArray(itemData.sources.poster)) {
addKalturaPoster(
itemData.sources,
item.sources,
this._player.dimensions,
this._player.shouldAddKs() ? this._player.config.session?.ks : ''
);
this._player.updateKalturaPoster(itemData.sources, item.sources, this._player.dimensions);
}
return {
sources: itemData.sources,
Expand Down
2 changes: 1 addition & 1 deletion src/common/thumbnail-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class ThumbnailManager {
const seekbarConfig = Utils.Object.getPropertyPath(uiConfig, 'components.seekbar');
const posterUrl = mediaConfig.sources && mediaConfig.sources.poster;
const isVod = mediaConfig.sources && mediaConfig.sources.type === MediaType.VOD;
const ks = this._player.shouldAddKs() ? mediaConfig.session?.ks : '';
const ks = this._player.shouldAddKs(mediaConfig) ? mediaConfig.session?.ks : '';
const thumbnailConfig = Utils.Object.mergeDeep(DefaultThumbnailConfig, seekbarConfig);
const thumbsSprite = isVod ? this._getThumbSlicesUrl(posterUrl, ks, thumbnailConfig) : '';
return {
Expand Down
11 changes: 8 additions & 3 deletions src/kaltura-player.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ class KalturaPlayer extends FakeEventTarget {
} else {
this._thumbnailManager = null;
}
addKalturaPoster(sources, mediaConfig.sources, this._localPlayer.dimensions, this.shouldAddKs() ? mediaConfig.session?.ks : '');
this.updateKalturaPoster(sources, mediaConfig.sources, this._localPlayer.dimensions);
addKalturaParams(this, {...playerConfig, sources});
const playback = maybeSetStreamPriority(this, sources);
if (playback) {
Expand All @@ -181,8 +181,13 @@ class KalturaPlayer extends FakeEventTarget {
this.configure({...playerConfig, sources});
}

shouldAddKs(): boolean {
return !!(this.config.provider.loadThumbnailWithKs && !this.config.session.isAnonymous);
updateKalturaPoster(playerSources: PKSourcesConfigObject, mediaSources: ProviderMediaConfigSourcesObject, dimensions: Object) {
addKalturaPoster(playerSources, mediaSources, dimensions, this.shouldAddKs() ? this.config?.session?.ks : '');
}

shouldAddKs(mediaConfig?: KPMediaConfig): boolean {
// $FlowFixMe[prop-missing]
return !!(this.config.provider.loadThumbnailWithKs && (mediaConfig || this.config)?.session?.isAnonymous === false);
}

/**
Expand Down
84 changes: 84 additions & 0 deletions test/src/kaltura-player.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,90 @@ describe('kaltura player api', function () {
});
});
});
describe('setMedia', function () {
const mediaWithUserSession = {
sources: {
dash: [
{
id: '0_nwkp7jtx_301,mpegdash',
url:
'http://qa-apache-php7.dev.kaltura.com/p/1091/sp/109100/playManifest/entryId/0_nwkp7jtx/protocol/http/format/mpegdash/flavorIds/0_iju7j519,0_98mlrldo,0_5hts3h5r,0_n6n76xp9/a.mpd',
mimetype: 'application/dash+xml'
}
]
},
session: {
isAnonymous: false,
ks: 'test-ks'
}
};
describe('shouldAddKs', () => {
describe('loadThumbnailWithKs is false', () => {
beforeEach(() => {
config.provider.loadThumbnailWithKs = false;
kalturaPlayer = setup(config);
});
afterEach(function () {
kalturaPlayer.destroy();
});
describe('session not set', () => {
it('should return false when session not set', () => {
kalturaPlayer.shouldAddKs().should.equals(false);
});
});
describe('anonymous session', () => {
it('should return false when loadThumbnailWithKs is false', () => {
kalturaPlayer.setMedia(MediaMockData.MediaConfig['0_wifqaipd']);
kalturaPlayer.shouldAddKs().should.equals(false);
kalturaPlayer.shouldAddKs(mediaWithUserSession).should.equals(false);
});
});
describe('user session', () => {
it('should return false when loadThumbnailWithKs is false', () => {
kalturaPlayer.setMedia(mediaWithUserSession);
kalturaPlayer.shouldAddKs().should.equals(false);
kalturaPlayer.shouldAddKs(mediaWithUserSession).should.equals(false);
});
});
});

describe('loadThumbnailWithKs is true', () => {
beforeEach(() => {
config.provider.loadThumbnailWithKs = true;
kalturaPlayer = setup(config);
});
afterEach(function () {
config.provider.loadThumbnailWithKs = false;
kalturaPlayer.destroy();
});
describe('session not set', () => {
it('should return false when session not set', () => {
kalturaPlayer.shouldAddKs().should.equals(false);
});
});
describe('anonymous session', () => {
it('should return false for anonymous session when called without mediaConfig parameter', () => {
kalturaPlayer.setMedia(MediaMockData.MediaConfig['0_wifqaipd']);
kalturaPlayer.shouldAddKs().should.equals(false);
});
it('should return false for anonymous session when called with mediaConfig parameter', () => {
kalturaPlayer.setMedia(mediaWithUserSession);
kalturaPlayer.shouldAddKs(MediaMockData.MediaConfig['0_wifqaipd']).should.equals(false);
});
});
describe('user session', () => {
it('should return true for user session when called without mediaConfig parameter', () => {
kalturaPlayer.setMedia(mediaWithUserSession);
kalturaPlayer.shouldAddKs().should.equals(true);
});
it('should return true for user session when called with mediaConfig parameter', () => {
kalturaPlayer.setMedia(MediaMockData.MediaConfig['0_wifqaipd']);
kalturaPlayer.shouldAddKs(mediaWithUserSession).should.equals(true);
});
});
});
});
});
describe('selectedSource', function () {
beforeEach(function () {
kalturaPlayer = setup(config);
Expand Down
1 change: 1 addition & 0 deletions ts-typed/player.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ declare namespace KalturaPlayerTypes {
y: number;
};
shouldAddKs: () => boolean;
updateKalturaPoster(playerSources: PKSourcesConfigObject, mediaSources: ProviderMediaConfigSourcesObject, dimensions: Object);
playlist: KalturaPlayerTypes.Playlist;
getTracks: (trackType: string) => Array<any>;
Track: Record<string, string>;
Expand Down

0 comments on commit 67ae49d

Please sign in to comment.