Commit 4e66bb29 authored by Chandan Padhi's avatar Chandan Padhi Committed by Commit Bot

Clone MediaStreamTrack's readyState property

MediaStreamTrack's clone should have the same state.
This CL ensures that MediaStreamTrack.clone().readyState
returns the same value as MediaStreamTrack.readyState.

Bug: 669212
Change-Id: I7547aff039ecdef5fb6d059957ea3566c798d86f
Reviewed-on: https://chromium-review.googlesource.com/996837
Commit-Queue: Chandan Padhi <c.padhi@samsung.com>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Cr-Commit-Position: refs/heads/master@{#548699}
parent ff1c7f14
......@@ -32,6 +32,18 @@ test(t => {
"Tracks enabled status should not be linked.");
}, "Clones of disabled MediaStreamTracks are still disabled.");
test(t => {
track = createTrack();
assert_equals(track.readyState, "live");
cloned_track1 = track.clone();
assert_equals(cloned_track1.readyState, "live");
track.stop();
assert_equals(track.readyState, "ended");
cloned_track2 = track.clone();
assert_equals(cloned_track2.readyState, "ended");
assert_equals(cloned_track1.readyState, "live");
}, "Cloned MediaStreamTracks have same states");
promise_test(function() {
return navigator.mediaDevices.getUserMedia({audio: { echoCancellation: true }})
.then(function(s) {
......
......@@ -140,10 +140,18 @@ MediaStreamTrack* MediaStreamTrack::Create(ExecutionContext* context,
MediaStreamTrack::MediaStreamTrack(ExecutionContext* context,
MediaStreamComponent* component)
: MediaStreamTrack(context,
component,
component->Source()->GetReadyState(),
false /* stopped */) {}
MediaStreamTrack::MediaStreamTrack(ExecutionContext* context,
MediaStreamComponent* component,
MediaStreamSource::ReadyState ready_state,
bool stopped)
: ContextLifecycleObserver(context),
ready_state_(component->Source()->GetReadyState()),
is_iterating_registered_media_streams_(false),
stopped_(false),
ready_state_(ready_state),
stopped_(stopped),
component_(component) {
component_->Source()->AddObserver(this);
......@@ -291,11 +299,10 @@ void MediaStreamTrack::stopTrack(ExecutionContext* execution_context) {
}
MediaStreamTrack* MediaStreamTrack::clone(ScriptState* script_state) {
// TODO(pbos): Make sure m_readyState and m_stopped carries over on cloned
// tracks.
MediaStreamComponent* cloned_component = Component()->Clone();
MediaStreamTrack* cloned_track = MediaStreamTrack::Create(
ExecutionContext::From(script_state), cloned_component);
MediaStreamTrack* cloned_track =
new MediaStreamTrack(ExecutionContext::From(script_state),
cloned_component, ready_state_, stopped_);
MediaStreamCenter::Instance().DidCloneMediaStreamTrack(Component(),
cloned_component);
return cloned_track;
......
......@@ -113,6 +113,10 @@ class MODULES_EXPORT MediaStreamTrack
friend class CanvasCaptureMediaStreamTrack;
MediaStreamTrack(ExecutionContext*, MediaStreamComponent*);
MediaStreamTrack(ExecutionContext*,
MediaStreamComponent*,
MediaStreamSource::ReadyState,
bool stopped);
// MediaStreamSourceObserver
void SourceChangedState() override;
......@@ -123,7 +127,7 @@ class MODULES_EXPORT MediaStreamTrack
MediaStreamSource::ReadyState ready_state_;
HeapHashSet<Member<MediaStream>> registered_media_streams_;
bool is_iterating_registered_media_streams_;
bool is_iterating_registered_media_streams_ = false;
bool stopped_;
Member<MediaStreamComponent> component_;
Member<ImageCapture> image_capture_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment