Skip to content

Commit

Permalink
fix: allow for techs that init slowly in rvfc (#7864)
Browse files Browse the repository at this point in the history
Don't call tech.paused() in the requestVideoFrameCallback fallback if the tech is not ready. I've seen this is an issue in the Flash tech, as its methods are set up after the swf loads. Yes, Flash, it's 2022, but in theory another tech could be impacted if it's also async.
  • Loading branch information
mister-ben committed Sep 9, 2022
1 parent ed4524e commit d736541
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/js/tech/tech.js
Original file line number Diff line number Diff line change
Expand Up @@ -869,7 +869,7 @@ class Tech extends Component {
requestVideoFrameCallback(cb) {
const id = Guid.newGUID();

if (this.paused()) {
if (!this.isReady_ || this.paused()) {
this.queuedHanders_.add(id);
this.one('playing', () => {
if (this.queuedHanders_.has(id)) {
Expand Down
18 changes: 18 additions & 0 deletions test/unit/tech/tech.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -770,3 +770,21 @@ QUnit.test('returns an empty object for getVideoPlaybackQuality', function(asser
assert.deepEqual(tech.getVideoPlaybackQuality(), {}, 'returns an empty object');
tech.dispose();
});

QUnit.test('requestVideoFrameCallback waits if tech not ready', function(assert) {
const tech = new Tech();
const cbSpy = sinon.spy();

tech.paused = sinon.spy();
tech.isReady_ = false;

tech.requestVideoFrameCallback(cbSpy);

assert.notOk(tech.paused.called, 'paused not called on tech that is not ready');

tech.trigger('playing');

assert.ok(cbSpy.called, 'callback was called on tech playing');

tech.dispose();
});

0 comments on commit d736541

Please sign in to comment.