When prompted, accept to share your video stream.

Description

This test checks that the MediaStream object returned by the success callback in getUserMedia can be properly assigned to a video element via the srcObject attribute.



Harness Error (TIMEOUT), message = null

PASS Tests that a MediaStream can be assigned to a video element with srcObject 
PASS Tests that a MediaStream assigned to a video element is not seekable 
PASS Tests that a MediaStream assigned to a video element is in readyState HAVE_NOTHING initially 
TIMEOUT Tests that a MediaStream assigned to a video element has expected duration Test timed out
NOTRUN Tests that a video element with a MediaStream assigned is not preloaded 
NOTRUN Tests that a video element with a MediaStream assigned ignores playbackRate attributes (defaultPlaybackRate is identical) 
NOTRUN Tests that a video element with a MediaStream assigned ignores playbackRate attributes (defaultPlaybackRate is different) 
NOTRUN Tests that a media element with an assigned MediaStream reports the played attribute as expected 
NOTRUN Tests that a media element with an assigned MediaStream reports the currentTime attribute as expected 
NOTRUN Tests that a media element with an assigned MediaStream starts its timeline at 0 regardless of when the MediaStream was created 
NOTRUN Tests that a media element with an assigned MediaStream does not advance currentTime while paused 
NOTRUN Tests that the loop attribute has no effect on a media element with an assigned MediaStream 
NOTRUN Tests that a media element with an assigned MediaStream ends when the MediaStream becomes inactive through tracks ending 
NOTRUN Tests that an audio element with an assigned MediaStream ends when the MediaStream becomes inaudible through audio tracks ending 
NOTRUN Tests that a media element with an assigned MediaStream ends when the MediaStream becomes inactive through track removal 
NOTRUN Tests that an audio element with an assigned MediaStream ends when the MediaStream becomes inaudible through track removal 

