Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
c4065f7b
Commit
c4065f7b
authored
Jan 07, 2016
by
muhammad-ammar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Avoid emitting play_video event during buffering
TNL-2178
parent
dfbcd84e
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
66 additions
and
5 deletions
+66
-5
common/lib/xmodule/xmodule/js/spec/video/video_events_plugin_spec.js
+9
-2
common/lib/xmodule/xmodule/js/spec/video/video_player_spec.js
+41
-1
common/lib/xmodule/xmodule/js/src/video/03_video_player.js
+14
-1
common/lib/xmodule/xmodule/js/src/video/09_events_plugin.js
+2
-0
common/test/acceptance/tests/video/test_video_events.py
+0
-1
No files found.
common/lib/xmodule/xmodule/js/spec/video/video_events_plugin_spec.js
View file @
c4065f7b
(
function
(
undefined
)
{
(
function
(
undefined
)
{
'use strict'
;
'use strict'
;
describe
(
'VideoPlayer Events plugin'
,
function
()
{
describe
(
'VideoPlayer Events plugin'
,
function
()
{
var
state
,
oldOTBD
;
var
state
,
oldOTBD
,
Logger
=
window
.
Logger
;
beforeEach
(
function
()
{
beforeEach
(
function
()
{
oldOTBD
=
window
.
onTouchBasedDevice
;
oldOTBD
=
window
.
onTouchBasedDevice
;
...
@@ -32,7 +32,8 @@
...
@@ -32,7 +32,8 @@
});
});
});
});
it
(
'can emit "play_video" event'
,
function
()
{
it
(
'can emit "play_video" event when canEmitPlayVideoEvent returns true'
,
function
()
{
spyOn
(
state
.
videoPlayer
,
'canEmitPlayVideoEvent'
).
andReturn
(
true
);
state
.
el
.
trigger
(
'play'
);
state
.
el
.
trigger
(
'play'
);
expect
(
Logger
.
log
).
toHaveBeenCalledWith
(
'play_video'
,
{
expect
(
Logger
.
log
).
toHaveBeenCalledWith
(
'play_video'
,
{
id
:
'id'
,
id
:
'id'
,
...
@@ -41,6 +42,12 @@
...
@@ -41,6 +42,12 @@
});
});
});
});
it
(
'can not emit "play_video" event when canEmitPlayVideoEvent returns false'
,
function
()
{
spyOn
(
state
.
videoPlayer
,
'canEmitPlayVideoEvent'
).
andReturn
(
false
);
state
.
el
.
trigger
(
'play'
);
expect
(
Logger
.
log
).
not
.
toHaveBeenCalled
();
});
it
(
'can emit "pause_video" event'
,
function
()
{
it
(
'can emit "pause_video" event'
,
function
()
{
state
.
el
.
trigger
(
'pause'
);
state
.
el
.
trigger
(
'pause'
);
expect
(
Logger
.
log
).
toHaveBeenCalledWith
(
'pause_video'
,
{
expect
(
Logger
.
log
).
toHaveBeenCalledWith
(
'pause_video'
,
{
...
...
common/lib/xmodule/xmodule/js/spec/video/video_player_spec.js
View file @
c4065f7b
...
@@ -5,7 +5,7 @@ require(
...
@@ -5,7 +5,7 @@ require(
[
'video/03_video_player.js'
],
[
'video/03_video_player.js'
],
function
(
VideoPlayer
)
{
function
(
VideoPlayer
)
{
describe
(
'VideoPlayer'
,
function
()
{
describe
(
'VideoPlayer'
,
function
()
{
var
state
,
oldOTBD
;
var
state
,
oldOTBD
,
Logger
=
window
.
Logger
,
YT
=
window
.
YT
;
beforeEach
(
function
()
{
beforeEach
(
function
()
{
oldOTBD
=
window
.
onTouchBasedDevice
;
oldOTBD
=
window
.
onTouchBasedDevice
;
...
@@ -333,6 +333,46 @@ function (VideoPlayer) {
...
@@ -333,6 +333,46 @@ function (VideoPlayer) {
expect
(
$
.
fn
.
trigger
).
toHaveBeenCalledWith
(
'ended'
,
{});
expect
(
$
.
fn
.
trigger
).
toHaveBeenCalledWith
(
'ended'
,
{});
});
});
});
});
describe
(
'Video Player'
,
function
()
{
beforeEach
(
function
()
{
state
=
jasmine
.
initializePlayer
();
state
.
videoEl
=
$
(
'video, iframe'
);
spyOn
(
Logger
,
'log'
);
});
it
(
'will set emitPlayVideoEvent to false after onPlay is called'
,
function
()
{
expect
(
state
.
videoPlayer
.
emitPlayVideoEvent
).
toBeTruthy
();
state
.
videoPlayer
.
onPlay
();
expect
(
state
.
videoPlayer
.
emitPlayVideoEvent
).
toBeFalsy
();
});
it
(
'will set emitPlayVideoEvent to correct value in different states'
,
function
()
{
// Initially emitPlayVideoEvent should be set to true
expect
(
state
.
videoPlayer
.
emitPlayVideoEvent
).
toBeTruthy
();
/**
* @param {Integer} playerState - New state of the video player.
* @param {Boolean} emitPlayVideoEvent - Expected value of emitPlayVideoEvent after
* video player goes into playerState.
*/
var
verifyEmitPlayVideoEventValue
=
function
(
playerState
,
emitPlayVideoEvent
)
{
state
.
videoPlayer
.
onStateChange
({
data
:
playerState
});
expect
(
state
.
videoPlayer
.
emitPlayVideoEvent
).
toBe
(
emitPlayVideoEvent
);
};
verifyEmitPlayVideoEventValue
(
YT
.
PlayerState
.
BUFFERING
,
true
);
verifyEmitPlayVideoEventValue
(
YT
.
PlayerState
.
PLAYING
,
false
);
verifyEmitPlayVideoEventValue
(
YT
.
PlayerState
.
BUFFERING
,
false
);
verifyEmitPlayVideoEventValue
(
YT
.
PlayerState
.
PLAYING
,
false
);
verifyEmitPlayVideoEventValue
(
YT
.
PlayerState
.
PAUSED
,
true
);
verifyEmitPlayVideoEventValue
(
YT
.
PlayerState
.
PLAYING
,
false
);
verifyEmitPlayVideoEventValue
(
YT
.
PlayerState
.
ENDED
,
true
);
verifyEmitPlayVideoEventValue
(
YT
.
PlayerState
.
PLAYING
,
false
);
});
});
});
});
describe
(
'onSeek Youtube'
,
function
(){
describe
(
'onSeek Youtube'
,
function
(){
...
...
common/lib/xmodule/xmodule/js/src/video/03_video_player.js
View file @
c4065f7b
...
@@ -51,7 +51,8 @@ function (HTML5Video, Resizer) {
...
@@ -51,7 +51,8 @@ function (HTML5Video, Resizer) {
update
:
update
,
update
:
update
,
figureOutStartEndTime
:
figureOutStartEndTime
,
figureOutStartEndTime
:
figureOutStartEndTime
,
figureOutStartingTime
:
figureOutStartingTime
,
figureOutStartingTime
:
figureOutStartingTime
,
updatePlayTime
:
updatePlayTime
updatePlayTime
:
updatePlayTime
,
canEmitPlayVideoEvent
:
canEmitPlayVideoEvent
};
};
VideoPlayer
.
prototype
=
methodsDict
;
VideoPlayer
.
prototype
=
methodsDict
;
...
@@ -128,6 +129,8 @@ function (HTML5Video, Resizer) {
...
@@ -128,6 +129,8 @@ function (HTML5Video, Resizer) {
state
.
videoPlayer
.
PlayerState
=
HTML5Video
.
PlayerState
;
state
.
videoPlayer
.
PlayerState
=
HTML5Video
.
PlayerState
;
}
}
state
.
videoPlayer
.
emitPlayVideoEvent
=
true
;
state
.
videoPlayer
.
currentTime
=
0
;
state
.
videoPlayer
.
currentTime
=
0
;
state
.
videoPlayer
.
goToStartTime
=
true
;
state
.
videoPlayer
.
goToStartTime
=
true
;
...
@@ -198,6 +201,14 @@ function (HTML5Video, Resizer) {
...
@@ -198,6 +201,14 @@ function (HTML5Video, Resizer) {
}
}
}
}
function
canEmitPlayVideoEvent
()
{
if
(
this
.
videoPlayer
.
emitPlayVideoEvent
)
{
this
.
videoPlayer
.
emitPlayVideoEvent
=
false
;
return
true
;
}
return
false
;
}
function
_updateVcrAndRegion
(
state
,
isYoutube
)
{
function
_updateVcrAndRegion
(
state
,
isYoutube
)
{
var
update
=
function
(
state
)
{
var
update
=
function
(
state
)
{
var
duration
=
state
.
videoPlayer
.
duration
(),
var
duration
=
state
.
videoPlayer
.
duration
(),
...
@@ -720,6 +731,7 @@ function (HTML5Video, Resizer) {
...
@@ -720,6 +731,7 @@ function (HTML5Video, Resizer) {
case
this
.
videoPlayer
.
PlayerState
.
PAUSED
:
case
this
.
videoPlayer
.
PlayerState
.
PAUSED
:
this
.
el
.
addClass
(
'is-paused'
);
this
.
el
.
addClass
(
'is-paused'
);
this
.
videoPlayer
.
onPause
();
this
.
videoPlayer
.
onPause
();
this
.
videoPlayer
.
emitPlayVideoEvent
=
true
;
break
;
break
;
case
this
.
videoPlayer
.
PlayerState
.
BUFFERING
:
case
this
.
videoPlayer
.
PlayerState
.
BUFFERING
:
this
.
el
.
addClass
(
'is-buffered'
);
this
.
el
.
addClass
(
'is-buffered'
);
...
@@ -728,6 +740,7 @@ function (HTML5Video, Resizer) {
...
@@ -728,6 +740,7 @@ function (HTML5Video, Resizer) {
case
this
.
videoPlayer
.
PlayerState
.
ENDED
:
case
this
.
videoPlayer
.
PlayerState
.
ENDED
:
this
.
el
.
addClass
(
'is-ended'
);
this
.
el
.
addClass
(
'is-ended'
);
this
.
videoPlayer
.
onEnded
();
this
.
videoPlayer
.
onEnded
();
this
.
videoPlayer
.
emitPlayVideoEvent
=
true
;
break
;
break
;
case
this
.
videoPlayer
.
PlayerState
.
CUED
:
case
this
.
videoPlayer
.
PlayerState
.
CUED
:
this
.
el
.
addClass
(
'is-cued'
);
this
.
el
.
addClass
(
'is-cued'
);
...
...
common/lib/xmodule/xmodule/js/src/video/09_events_plugin.js
View file @
c4065f7b
...
@@ -61,7 +61,9 @@ define('video/09_events_plugin.js', [], function() {
...
@@ -61,7 +61,9 @@ define('video/09_events_plugin.js', [], function() {
},
},
onPlay
:
function
()
{
onPlay
:
function
()
{
if
(
this
.
state
.
videoPlayer
.
canEmitPlayVideoEvent
())
{
this
.
log
(
'play_video'
,
{
currentTime
:
this
.
getCurrentTime
()});
this
.
log
(
'play_video'
,
{
currentTime
:
this
.
getCurrentTime
()});
}
},
},
onPause
:
function
()
{
onPause
:
function
()
{
...
...
common/test/acceptance/tests/video/test_video_events.py
View file @
c4065f7b
...
@@ -61,7 +61,6 @@ class VideoEventsTestMixin(EventsTestMixin, VideoBaseTest):
...
@@ -61,7 +61,6 @@ class VideoEventsTestMixin(EventsTestMixin, VideoBaseTest):
class
VideoEventsTest
(
VideoEventsTestMixin
):
class
VideoEventsTest
(
VideoEventsTestMixin
):
""" Test video player event emission """
""" Test video player event emission """
@unittest.skip
(
'AN-5867'
)
def
test_video_control_events
(
self
):
def
test_video_control_events
(
self
):
"""
"""
Scenario: Video component is rendered in the LMS in Youtube mode without HTML5 sources
Scenario: Video component is rendered in the LMS in Youtube mode without HTML5 sources
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment