Commit 8b6f975d authored by danakj's avatar danakj Committed by Commit Bot

Use a repeating |started_callback_| in LocalMediaStreamAudioSource.

The LocalMediaStreamAudioSource can stop and recreate the
AudioInputDevice, passing the same |this| to each, and running the same
|started_callback_| when it starts. This means the callback needs to
support being run more than once.

R=guidou@chromium.org

Bug: 968499, 953861, 751838
Change-Id: I293db74f3068dfa6971550cf09321837b311f07c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1636827Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Commit-Queue: danakj <danakj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#664880}
parent d45a4356
......@@ -17,7 +17,7 @@ LocalMediaStreamAudioSource::LocalMediaStreamAudioSource(
const blink::MediaStreamDevice& device,
const int* requested_buffer_size,
bool disable_local_echo,
ConstraintsOnceCallback started_callback,
ConstraintsRepeatingCallback started_callback,
scoped_refptr<base::SingleThreadTaskRunner> task_runner)
: blink::MediaStreamAudioSource(std::move(task_runner),
true /* is_local_source */,
......@@ -105,7 +105,7 @@ void LocalMediaStreamAudioSource::EnsureSourceIsStopped() {
}
void LocalMediaStreamAudioSource::OnCaptureStarted() {
std::move(started_callback_).Run(this, blink::MEDIA_DEVICE_OK, "");
started_callback_.Run(this, blink::MEDIA_DEVICE_OK, "");
}
void LocalMediaStreamAudioSource::Capture(const media::AudioBus* audio_bus,
......
......@@ -31,7 +31,7 @@ class CONTENT_EXPORT LocalMediaStreamAudioSource
const blink::MediaStreamDevice& device,
const int* requested_buffer_size,
bool disable_local_echo,
ConstraintsOnceCallback started_callback,
ConstraintsRepeatingCallback started_callback,
scoped_refptr<base::SingleThreadTaskRunner> task_runner);
~LocalMediaStreamAudioSource() final;
......@@ -61,7 +61,7 @@ class CONTENT_EXPORT LocalMediaStreamAudioSource
scoped_refptr<media::AudioCapturerSource> source_;
// Callback that's called when the audio source has been initialized.
ConstraintsOnceCallback started_callback_;
ConstraintsRepeatingCallback started_callback_;
// In debug builds, check that all methods that could cause object graph
// or data flow changes are being called on the main thread.
......
......@@ -358,8 +358,8 @@ class UserMediaProcessorUnderTest : public UserMediaProcessor {
std::unique_ptr<blink::MediaStreamAudioSource> CreateAudioSource(
const blink::MediaStreamDevice& device,
blink::WebPlatformMediaStreamSource::ConstraintsOnceCallback source_ready)
override {
blink::WebPlatformMediaStreamSource::ConstraintsRepeatingCallback
source_ready) override {
std::unique_ptr<blink::MediaStreamAudioSource> source;
if (create_source_that_fails_) {
class FailedAtLifeAudioSource : public blink::MediaStreamAudioSource {
......
......@@ -828,8 +828,9 @@ void UserMediaProcessor::OnAudioSourceStartedOnAudioThread(
MediaStreamRequestResult result,
const blink::WebString& result_name) {
task_runner->PostTask(
FROM_HERE, base::BindOnce(&UserMediaProcessor::OnAudioSourceStarted,
weak_ptr, source, result, result_name));
FROM_HERE,
base::BindOnce(&UserMediaProcessor::OnAudioSourceStarted,
std::move(weak_ptr), source, result, result_name));
}
void UserMediaProcessor::OnAudioSourceStarted(
......@@ -975,9 +976,10 @@ blink::WebMediaStreamSource UserMediaProcessor::InitializeAudioSourceObject(
// See OnAudioSourceStarted for more details.
pending_local_sources_.push_back(source);
blink::WebPlatformMediaStreamSource::ConstraintsOnceCallback source_ready =
base::BindOnce(&UserMediaProcessor::OnAudioSourceStartedOnAudioThread,
task_runner_, weak_factory_.GetWeakPtr());
blink::WebPlatformMediaStreamSource::ConstraintsRepeatingCallback
source_ready = base::BindRepeating(
&UserMediaProcessor::OnAudioSourceStartedOnAudioThread, task_runner_,
weak_factory_.GetWeakPtr());
std::unique_ptr<blink::MediaStreamAudioSource> audio_source =
CreateAudioSource(device, std::move(source_ready));
......@@ -1031,7 +1033,8 @@ blink::WebMediaStreamSource UserMediaProcessor::InitializeAudioSourceObject(
std::unique_ptr<blink::MediaStreamAudioSource>
UserMediaProcessor::CreateAudioSource(
const MediaStreamDevice& device,
blink::WebPlatformMediaStreamSource::ConstraintsOnceCallback source_ready) {
blink::WebPlatformMediaStreamSource::ConstraintsRepeatingCallback
source_ready) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(current_request_info_);
......
......@@ -133,7 +133,7 @@ class CONTENT_EXPORT UserMediaProcessor
// These are virtual for test purposes.
virtual std::unique_ptr<blink::MediaStreamAudioSource> CreateAudioSource(
const blink::MediaStreamDevice& device,
blink::WebPlatformMediaStreamSource::ConstraintsOnceCallback
blink::WebPlatformMediaStreamSource::ConstraintsRepeatingCallback
source_ready);
virtual std::unique_ptr<blink::MediaStreamVideoSource> CreateVideoSource(
const blink::MediaStreamDevice& device,
......
......@@ -34,6 +34,10 @@ class BLINK_PLATFORM_EXPORT WebPlatformMediaStreamSource {
base::Callback<void(WebPlatformMediaStreamSource* source,
MediaStreamRequestResult result,
const WebString& result_name)>;
using ConstraintsRepeatingCallback =
base::RepeatingCallback<void(WebPlatformMediaStreamSource* source,
MediaStreamRequestResult result,
const WebString& result_name)>;
using ConstraintsOnceCallback =
base::OnceCallback<void(WebPlatformMediaStreamSource* source,
MediaStreamRequestResult result,
......
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