summaryrefslogtreecommitdiff
path: root/chromium/content/browser/renderer_host/media
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/content/browser/renderer_host/media
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/content/browser/renderer_host/media')
-rw-r--r--chromium/content/browser/renderer_host/media/audio_input_device_manager.cc22
-rw-r--r--chromium/content/browser/renderer_host/media/audio_input_device_manager.h1
-rw-r--r--chromium/content/browser/renderer_host/media/audio_output_authorization_handler.cc9
-rw-r--r--chromium/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc72
-rw-r--r--chromium/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc7
-rw-r--r--chromium/content/browser/renderer_host/media/media_capture_devices_impl.cc21
-rw-r--r--chromium/content/browser/renderer_host/media/media_devices_dispatcher_host.cc27
-rw-r--r--chromium/content/browser/renderer_host/media/media_devices_manager.cc17
-rw-r--r--chromium/content/browser/renderer_host/media/media_stream_dispatcher_host.cc12
-rw-r--r--chromium/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc3
-rw-r--r--chromium/content/browser/renderer_host/media/media_stream_manager.cc83
-rw-r--r--chromium/content/browser/renderer_host/media/media_stream_manager.h9
-rw-r--r--chromium/content/browser/renderer_host/media/media_stream_manager_unittest.cc6
-rw-r--r--chromium/content/browser/renderer_host/media/media_stream_ui_proxy.cc29
-rw-r--r--chromium/content/browser/renderer_host/media/media_stream_ui_proxy_unittest.cc10
-rw-r--r--chromium/content/browser/renderer_host/media/peer_connection_tracker_host.cc13
-rw-r--r--chromium/content/browser/renderer_host/media/peer_connection_tracker_host.h2
-rw-r--r--chromium/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc21
-rw-r--r--chromium/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc7
-rw-r--r--chromium/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc9
-rw-r--r--chromium/content/browser/renderer_host/media/render_frame_audio_output_stream_factory_unittest.cc7
-rw-r--r--chromium/content/browser/renderer_host/media/service_video_capture_device_launcher.cc4
-rw-r--r--chromium/content/browser/renderer_host/media/service_video_capture_provider.cc17
-rw-r--r--chromium/content/browser/renderer_host/media/video_capture_browsertest.cc9
-rw-r--r--chromium/content/browser/renderer_host/media/video_capture_controller.cc11
-rw-r--r--chromium/content/browser/renderer_host/media/video_capture_controller_unittest.cc13
-rw-r--r--chromium/content/browser/renderer_host/media/video_capture_host.cc21
27 files changed, 256 insertions, 206 deletions
diff --git a/chromium/content/browser/renderer_host/media/audio_input_device_manager.cc b/chromium/content/browser/renderer_host/media/audio_input_device_manager.cc
index f32a49429ae..b86fbf71e23 100644
--- a/chromium/content/browser/renderer_host/media/audio_input_device_manager.cc
+++ b/chromium/content/browser/renderer_host/media/audio_input_device_manager.cc
@@ -12,7 +12,6 @@
#include "base/command_line.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/stringprintf.h"
-#include "base/task/post_task.h"
#include "build/build_config.h"
#include "content/browser/renderer_host/media/media_stream_manager.h"
#include "content/public/browser/browser_task_traits.h"
@@ -136,7 +135,6 @@ base::UnguessableToken AudioInputDeviceManager::Open(
audio_system_->GetAssociatedOutputDeviceID(
device.id, base::BindOnce(&AudioInputDeviceManager::OpenedOnIOThread,
base::Unretained(this), session_id, device,
- base::TimeTicks::Now(),
base::Optional<media::AudioParameters>()));
} else {
// TODO(tommi): As is, we hit this code path when device.type is
@@ -152,8 +150,7 @@ base::UnguessableToken AudioInputDeviceManager::Open(
audio_system_->GetInputDeviceInfo(
device.id, base::BindOnce(&AudioInputDeviceManager::OpenedOnIOThread,
- base::Unretained(this), session_id, device,
- base::TimeTicks::Now()));
+ base::Unretained(this), session_id, device));
}
return session_id;
@@ -170,8 +167,8 @@ void AudioInputDeviceManager::Close(const base::UnguessableToken& session_id) {
// Post a callback through the listener on IO thread since
// MediaStreamManager is expecting the callback asynchronously.
- base::PostTask(FROM_HERE, {BrowserThread::IO},
- base::BindOnce(&AudioInputDeviceManager::ClosedOnIOThread,
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&AudioInputDeviceManager::ClosedOnIOThread,
this, stream_type, session_id));
}
@@ -200,8 +197,8 @@ void AudioInputDeviceManager::KeyboardMicRegistration::DeregisterIfNeeded() {
--*shared_registration_count_;
DCHECK_GE(*shared_registration_count_, 0);
if (*shared_registration_count_ == 0) {
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&SetKeyboardMicStreamActiveOnUIThread, false));
}
}
@@ -217,9 +214,8 @@ void AudioInputDeviceManager::RegisterKeyboardMicStream(
++keyboard_mic_streams_count_;
if (keyboard_mic_streams_count_ == 1) {
- base::PostTaskAndReply(
- FROM_HERE, {BrowserThread::UI},
- base::BindOnce(&SetKeyboardMicStreamActiveOnUIThread, true),
+ GetUIThreadTaskRunner({})->PostTaskAndReply(
+ FROM_HERE, base::BindOnce(&SetKeyboardMicStreamActiveOnUIThread, true),
base::BindOnce(std::move(callback),
KeyboardMicRegistration(&keyboard_mic_streams_count_)));
} else {
@@ -232,7 +228,6 @@ void AudioInputDeviceManager::RegisterKeyboardMicStream(
void AudioInputDeviceManager::OpenedOnIOThread(
const base::UnguessableToken& session_id,
const blink::MediaStreamDevice& device,
- base::TimeTicks start_time,
const base::Optional<media::AudioParameters>& input_params,
const base::Optional<std::string>& matched_output_device_id) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
@@ -240,10 +235,7 @@ void AudioInputDeviceManager::OpenedOnIOThread(
DCHECK(!input_params || input_params->IsValid());
DCHECK(!matched_output_device_id || !matched_output_device_id->empty());
- UMA_HISTOGRAM_TIMES("Media.AudioInputDeviceManager.OpenOnDeviceThreadTime",
- base::TimeTicks::Now() - start_time);
SendAudioLogMessage("Opened({session_id=" + session_id.ToString() + "})");
-
blink::MediaStreamDevice media_stream_device(device.type, device.id,
device.name);
media_stream_device.set_session_id(session_id);
diff --git a/chromium/content/browser/renderer_host/media/audio_input_device_manager.h b/chromium/content/browser/renderer_host/media/audio_input_device_manager.h
index c534ea09c63..17008e13bec 100644
--- a/chromium/content/browser/renderer_host/media/audio_input_device_manager.h
+++ b/chromium/content/browser/renderer_host/media/audio_input_device_manager.h
@@ -94,7 +94,6 @@ class CONTENT_EXPORT AudioInputDeviceManager : public MediaStreamProvider {
void OpenedOnIOThread(
const base::UnguessableToken& session_id,
const blink::MediaStreamDevice& device,
- base::TimeTicks start_time,
const base::Optional<media::AudioParameters>& input_params,
const base::Optional<std::string>& matched_output_device_id);
diff --git a/chromium/content/browser/renderer_host/media/audio_output_authorization_handler.cc b/chromium/content/browser/renderer_host/media/audio_output_authorization_handler.cc
index 760a8169262..adfe08bc33f 100644
--- a/chromium/content/browser/renderer_host/media/audio_output_authorization_handler.cc
+++ b/chromium/content/browser/renderer_host/media/audio_output_authorization_handler.cc
@@ -6,7 +6,6 @@
#include "base/bind.h"
#include "base/metrics/histogram_macros.h"
-#include "base/task/post_task.h"
#include "base/task_runner_util.h"
#include "base/trace_event/trace_event.h"
#include "content/browser/media/media_devices_permission_checker.h"
@@ -170,8 +169,8 @@ void AudioOutputAuthorizationHandler::RequestDeviceAuthorization(
trace_scope->UsingSessionId(session_id, device->id);
// We don't need the origin for authorization in this case, but it's used
// for hashing the device id before sending it back to the renderer.
- base::PostTaskAndReplyWithResult(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTaskAndReplyWithResult(
+ FROM_HERE,
base::BindOnce(&GetMediaDeviceSaltAndOrigin, render_process_id_,
render_frame_id),
base::BindOnce(&AudioOutputAuthorizationHandler::HashDeviceId,
@@ -191,8 +190,8 @@ void AudioOutputAuthorizationHandler::RequestDeviceAuthorization(
trace_scope->CheckAccessStart(device_id);
// Check device permissions if nondefault device is requested.
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&CheckAccessOnUIThread, render_process_id_,
render_frame_id, override_permissions_,
permissions_override_value_,
diff --git a/chromium/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc b/chromium/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
index 3ae089addba..173428c097b 100644
--- a/chromium/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
+++ b/chromium/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
@@ -9,9 +9,9 @@
#include "base/bind.h"
#include "base/command_line.h"
#include "base/run_loop.h"
-#include "base/task/post_task.h"
#include "base/test/mock_callback.h"
#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/test/mock_render_process_host.h"
#include "content/public/test/test_browser_context.h"
#include "content/public/test/test_renderer_host.h"
@@ -118,15 +118,15 @@ class AudioOutputAuthorizationHandlerTest : public RenderViewHostTestHarness {
// enough for our code.
for (int i = 0; i < 20; ++i) {
base::RunLoop().RunUntilIdle();
- SyncWith(base::CreateSingleThreadTaskRunner({BrowserThread::IO}));
+ SyncWith(GetIOThreadTaskRunner({}));
SyncWith(audio_manager_->GetWorkerTaskRunner());
}
}
std::string GetRawNondefaultId() {
std::string id;
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandlerTest::GetRawNondefaultIdOnIOThread,
base::Unretained(this), base::Unretained(&id)));
@@ -187,15 +187,15 @@ TEST_F(AudioOutputAuthorizationHandlerTest, AuthorizeDefaultDevice_Ok) {
std::make_unique<AudioOutputAuthorizationHandler>(
GetAudioSystem(), GetMediaStreamManager(), process()->GetID());
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::RequestDeviceAuthorization,
base::Unretained(handler.get()), main_rfh()->GetRoutingID(),
base::UnguessableToken(), kDefaultDeviceId, listener.Get()));
SyncWithAllThreads();
- base::DeleteSoon(FROM_HERE, {BrowserThread::IO}, handler.release());
+ GetIOThreadTaskRunner({})->DeleteSoon(FROM_HERE, handler.release());
SyncWithAllThreads();
}
@@ -209,15 +209,15 @@ TEST_F(AudioOutputAuthorizationHandlerTest,
std::make_unique<AudioOutputAuthorizationHandler>(
GetAudioSystem(), GetMediaStreamManager(), process()->GetID());
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::RequestDeviceAuthorization,
base::Unretained(handler.get()), main_rfh()->GetRoutingID(),
base::UnguessableToken(), kEmptyDeviceId, listener.Get()));
SyncWithAllThreads();
- base::DeleteSoon(FROM_HERE, {BrowserThread::IO}, handler.release());
+ GetIOThreadTaskRunner({})->DeleteSoon(FROM_HERE, handler.release());
SyncWithAllThreads();
}
@@ -234,8 +234,8 @@ TEST_F(AudioOutputAuthorizationHandlerTest,
std::unique_ptr<AudioOutputAuthorizationHandler> handler =
std::make_unique<AudioOutputAuthorizationHandler>(
GetAudioSystem(), GetMediaStreamManager(), process()->GetID());
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::OverridePermissionsForTesting,
base::Unretained(handler.get()), false));
@@ -245,15 +245,15 @@ TEST_F(AudioOutputAuthorizationHandlerTest,
std::string(), std::string()))
.Times(1);
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::RequestDeviceAuthorization,
base::Unretained(handler.get()), main_rfh()->GetRoutingID(),
base::UnguessableToken(), hashed_id, listener.Get()));
SyncWithAllThreads();
- base::DeleteSoon(FROM_HERE, {BrowserThread::IO}, handler.release());
+ GetIOThreadTaskRunner({})->DeleteSoon(FROM_HERE, handler.release());
SyncWithAllThreads();
}
@@ -269,8 +269,8 @@ TEST_F(AudioOutputAuthorizationHandlerTest,
std::unique_ptr<AudioOutputAuthorizationHandler> handler =
std::make_unique<AudioOutputAuthorizationHandler>(
GetAudioSystem(), GetMediaStreamManager(), process()->GetID());
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::OverridePermissionsForTesting,
base::Unretained(handler.get()), true));
@@ -279,15 +279,15 @@ TEST_F(AudioOutputAuthorizationHandlerTest,
raw_nondefault_id, std::string()))
.Times(1);
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::RequestDeviceAuthorization,
base::Unretained(handler.get()), main_rfh()->GetRoutingID(),
base::UnguessableToken(), hashed_id, listener.Get()));
SyncWithAllThreads();
- base::DeleteSoon(FROM_HERE, {BrowserThread::IO}, handler.release());
+ GetIOThreadTaskRunner({})->DeleteSoon(FROM_HERE, handler.release());
SyncWithAllThreads();
}
@@ -301,8 +301,8 @@ TEST_F(AudioOutputAuthorizationHandlerTest, AuthorizeInvalidDeviceId_NotFound) {
std::string(), std::string()))
.Times(1);
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::RequestDeviceAuthorization,
base::Unretained(handler.get()), main_rfh()->GetRoutingID(),
@@ -312,7 +312,7 @@ TEST_F(AudioOutputAuthorizationHandlerTest, AuthorizeInvalidDeviceId_NotFound) {
// It is possible to request an invalid device id from JS APIs,
// so we don't want to crash the renderer for this.
EXPECT_EQ(process()->bad_msg_count(), 0);
- base::DeleteSoon(FROM_HERE, {BrowserThread::IO}, handler.release());
+ GetIOThreadTaskRunner({})->DeleteSoon(FROM_HERE, handler.release());
SyncWithAllThreads();
}
@@ -336,8 +336,8 @@ TEST_F(AudioOutputAuthorizationHandlerTest,
std::string(), std::string()))
.Times(1);
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::RequestDeviceAuthorization,
base::Unretained(handler.get()), main_rfh()->GetRoutingID(),
@@ -345,7 +345,7 @@ TEST_F(AudioOutputAuthorizationHandlerTest,
SyncWithAllThreads();
EXPECT_EQ(process()->bad_msg_count(), 0);
- base::DeleteSoon(FROM_HERE, {BrowserThread::IO}, handler.release());
+ GetIOThreadTaskRunner({})->DeleteSoon(FROM_HERE, handler.release());
SyncWithAllThreads();
}
@@ -360,15 +360,15 @@ TEST_F(AudioOutputAuthorizationHandlerTest,
std::string()))
.Times(1);
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::RequestDeviceAuthorization,
base::Unretained(handler.get()), main_rfh()->GetRoutingID(),
base::UnguessableToken::Create(), std::string(), listener.Get()));
SyncWithAllThreads();
- base::DeleteSoon(FROM_HERE, {BrowserThread::IO}, handler.release());
+ GetIOThreadTaskRunner({})->DeleteSoon(FROM_HERE, handler.release());
SyncWithAllThreads();
}
@@ -384,16 +384,16 @@ TEST_F(AudioOutputAuthorizationHandlerTest,
std::unique_ptr<AudioOutputAuthorizationHandler> handler =
std::make_unique<AudioOutputAuthorizationHandler>(
GetAudioSystem(), GetMediaStreamManager(), process()->GetID());
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::OverridePermissionsForTesting,
base::Unretained(handler.get()), true));
EXPECT_CALL(listener, Run(media::OUTPUT_DEVICE_STATUS_OK, _,
raw_nondefault_id, std::string()));
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::RequestDeviceAuthorization,
base::Unretained(handler.get()), main_rfh()->GetRoutingID(),
@@ -408,15 +408,15 @@ TEST_F(AudioOutputAuthorizationHandlerTest,
context->set_media_device_id_salt("new salt");
EXPECT_CALL(listener, Run(media::OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND, _, _,
std::string()));
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&AudioOutputAuthorizationHandler::RequestDeviceAuthorization,
base::Unretained(handler.get()), main_rfh()->GetRoutingID(),
base::UnguessableToken(), hashed_id, listener.Get()));
SyncWithAllThreads();
- base::DeleteSoon(FROM_HERE, {BrowserThread::IO}, handler.release());
+ GetIOThreadTaskRunner({})->DeleteSoon(FROM_HERE, handler.release());
SyncWithAllThreads();
}
diff --git a/chromium/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc b/chromium/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc
index def79b7ed57..a0d5196417f 100644
--- a/chromium/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc
+++ b/chromium/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc
@@ -11,7 +11,6 @@
#include "base/command_line.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/stringprintf.h"
-#include "base/task/post_task.h"
#include "build/build_config.h"
#include "content/browser/renderer_host/media/in_process_launched_video_capture_device.h"
#include "content/browser/renderer_host/media/video_capture_controller.h"
@@ -55,8 +54,7 @@ namespace {
std::unique_ptr<media::VideoCaptureJpegDecoder> CreateGpuJpegDecoder(
media::VideoCaptureJpegDecoder::DecodeDoneCB decode_done_cb,
base::RepeatingCallback<void(const std::string&)> send_log_message_cb) {
- auto io_task_runner =
- base::CreateSingleThreadTaskRunner({content::BrowserThread::IO});
+ auto io_task_runner = content::GetIOThreadTaskRunner({});
return std::make_unique<media::ScopedVideoCaptureJpegDecoder>(
std::make_unique<media::VideoCaptureJpegDecoderImpl>(
base::BindRepeating(
@@ -111,8 +109,7 @@ void InProcessVideoCaptureDeviceLauncher::LaunchDeviceAsync(
// Wrap the receiver, to trampoline all its method calls from the device
// to the IO thread.
auto receiver = std::make_unique<media::VideoFrameReceiverOnTaskRunner>(
- receiver_on_io_thread,
- base::CreateSingleThreadTaskRunner({BrowserThread::IO}));
+ receiver_on_io_thread, GetIOThreadTaskRunner({}));
base::OnceClosure start_capture_closure;
// Use of Unretained |this| is safe, because |done_cb| guarantees that |this|
diff --git a/chromium/content/browser/renderer_host/media/media_capture_devices_impl.cc b/chromium/content/browser/renderer_host/media/media_capture_devices_impl.cc
index 41d390bd896..a00bedff6e0 100644
--- a/chromium/content/browser/renderer_host/media/media_capture_devices_impl.cc
+++ b/chromium/content/browser/renderer_host/media/media_capture_devices_impl.cc
@@ -5,7 +5,6 @@
#include "content/browser/renderer_host/media/media_capture_devices_impl.h"
#include "base/bind.h"
-#include "base/task/post_task.h"
#include "content/browser/browser_main_loop.h"
#include "content/browser/renderer_host/media/media_stream_manager.h"
#include "content/public/browser/browser_task_traits.h"
@@ -17,8 +16,8 @@ namespace {
void EnsureMonitorCaptureDevices() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&MediaStreamManager::EnsureDeviceMonitorStarted,
base::Unretained(
@@ -60,8 +59,8 @@ void MediaCaptureDevicesImpl::AddVideoCaptureObserver(
MediaStreamManager* media_stream_manager =
BrowserMainLoop::GetInstance()->media_stream_manager();
if (media_stream_manager != nullptr) {
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaStreamManager::AddVideoCaptureObserver,
base::Unretained(media_stream_manager), observer));
} else {
@@ -73,8 +72,8 @@ void MediaCaptureDevicesImpl::RemoveAllVideoCaptureObservers() {
MediaStreamManager* media_stream_manager =
BrowserMainLoop::GetInstance()->media_stream_manager();
if (media_stream_manager != nullptr) {
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaStreamManager::RemoveAllVideoCaptureObservers,
base::Unretained(media_stream_manager)));
} else {
@@ -87,8 +86,8 @@ void MediaCaptureDevicesImpl::OnAudioCaptureDevicesChanged(
if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
UpdateAudioDevicesOnUIThread(devices);
} else {
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaCaptureDevicesImpl::UpdateAudioDevicesOnUIThread,
base::Unretained(this), devices));
}
@@ -99,8 +98,8 @@ void MediaCaptureDevicesImpl::OnVideoCaptureDevicesChanged(
if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
UpdateVideoDevicesOnUIThread(devices);
} else {
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaCaptureDevicesImpl::UpdateVideoDevicesOnUIThread,
base::Unretained(this), devices));
}
diff --git a/chromium/content/browser/renderer_host/media/media_devices_dispatcher_host.cc b/chromium/content/browser/renderer_host/media/media_devices_dispatcher_host.cc
index a06e23c2aa4..eb26134fc0f 100644
--- a/chromium/content/browser/renderer_host/media/media_devices_dispatcher_host.cc
+++ b/chromium/content/browser/renderer_host/media/media_devices_dispatcher_host.cc
@@ -12,9 +12,12 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/command_line.h"
+#include "base/run_loop.h"
#include "base/task/post_task.h"
#include "base/task_runner_util.h"
#include "content/browser/bad_message.h"
+#include "content/browser/frame_host/back_forward_cache_impl.h"
+#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/media/media_devices_permission_checker.h"
#include "content/browser/renderer_host/media/media_stream_manager.h"
#include "content/browser/renderer_host/media/video_capture_manager.h"
@@ -22,7 +25,6 @@
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/media_device_id.h"
-#include "content/public/browser/render_frame_host.h"
#include "media/audio/audio_system.h"
#include "media/base/media_switches.h"
#include "media/base/video_facing.h"
@@ -71,6 +73,21 @@ void MediaDevicesDispatcherHost::Create(
std::make_unique<MediaDevicesDispatcherHost>(
render_process_id, render_frame_id, media_stream_manager),
std::move(receiver));
+
+ base::PostTask(FROM_HERE, {BrowserThread::UI},
+ base::BindOnce(
+ [](int render_process_id, int render_frame_id) {
+ RenderFrameHost* render_frame_host =
+ RenderFrameHost::FromID(render_process_id,
+ render_frame_id);
+
+ if (!render_frame_host)
+ return;
+
+ BackForwardCache::DisableForRenderFrameHost(
+ render_frame_host, "MediaDevicesDispatcherHost");
+ },
+ render_process_id, render_frame_id));
}
MediaDevicesDispatcherHost::MediaDevicesDispatcherHost(
@@ -132,7 +149,7 @@ void MediaDevicesDispatcherHost::GetVideoInputCapabilities(
GetVideoInputCapabilitiesCallback client_callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
base::PostTaskAndReplyWithResult(
- base::CreateSingleThreadTaskRunner({BrowserThread::UI}).get(), FROM_HERE,
+ GetUIThreadTaskRunner({}).get(), FROM_HERE,
base::BindOnce(media_stream_manager_->media_devices_manager()
->salt_and_origin_callback(),
render_process_id_, render_frame_id_),
@@ -159,7 +176,7 @@ void MediaDevicesDispatcherHost::GetAvailableVideoInputDeviceFormats(
void MediaDevicesDispatcherHost::GetAudioInputCapabilities(
GetAudioInputCapabilitiesCallback client_callback) {
base::PostTaskAndReplyWithResult(
- base::CreateSingleThreadTaskRunner({BrowserThread::UI}).get(), FROM_HERE,
+ GetUIThreadTaskRunner({}).get(), FROM_HERE,
base::BindOnce(media_stream_manager_->media_devices_manager()
->salt_and_origin_callback(),
render_process_id_, render_frame_id_),
@@ -249,6 +266,8 @@ void MediaDevicesDispatcherHost::FinalizeGetVideoInputCapabilities(
media_stream_manager_->media_devices_manager()->GetVideoInputFormats(
device_info.device_id, true /* try_in_use_first */);
capabilities->facing_mode = device_info.video_facing;
+ capabilities->pan_tilt_zoom_supported =
+ device_info.pan_tilt_zoom_supported.value_or(false);
if (device_info.device_id == default_device_id) {
video_input_capabilities.insert(video_input_capabilities.begin(),
std::move(capabilities));
@@ -266,7 +285,7 @@ void MediaDevicesDispatcherHost::GetVideoInputDeviceFormats(
GetVideoInputDeviceFormatsCallback client_callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
base::PostTaskAndReplyWithResult(
- base::CreateSingleThreadTaskRunner({BrowserThread::UI}).get(), FROM_HERE,
+ GetUIThreadTaskRunner({}).get(), FROM_HERE,
base::BindOnce(media_stream_manager_->media_devices_manager()
->salt_and_origin_callback(),
render_process_id_, render_frame_id_),
diff --git a/chromium/content/browser/renderer_host/media/media_devices_manager.cc b/chromium/content/browser/renderer_host/media/media_devices_manager.cc
index 10610f0c455..c3337edfa39 100644
--- a/chromium/content/browser/renderer_host/media/media_devices_manager.cc
+++ b/chromium/content/browser/renderer_host/media/media_devices_manager.cc
@@ -334,8 +334,8 @@ class MediaDevicesManager::AudioServiceDeviceListener
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(!mojo_audio_device_notifier_);
DCHECK(!receiver_.is_bound());
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&BindDeviceNotifierFromUIThread,
mojo_audio_device_notifier_.BindNewPipeAndPassReceiver()));
@@ -439,7 +439,7 @@ void MediaDevicesManager::EnumerateDevices(
request_video_input_capabilities ? "true" : "false"));
base::PostTaskAndReplyWithResult(
- base::CreateSingleThreadTaskRunner({BrowserThread::UI}).get(), FROM_HERE,
+ GetUIThreadTaskRunner({}).get(), FROM_HERE,
base::BindOnce(salt_and_origin_callback_, render_process_id,
render_frame_id),
base::BindOnce(&MediaDevicesManager::CheckPermissionsForEnumerateDevices,
@@ -525,8 +525,8 @@ void MediaDevicesManager::StartMonitoring() {
}
#if defined(OS_MACOSX)
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(&MediaDevicesManager::StartMonitoringOnUIThread,
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&MediaDevicesManager::StartMonitoringOnUIThread,
base::Unretained(this)));
#endif
}
@@ -769,8 +769,8 @@ void MediaDevicesManager::GetAudioInputCapabilities(
size_t capabilities_index =
enumeration_states_[state_id].audio_capabilities.size() - 1;
if (use_fake_devices_) {
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaDevicesManager::GotAudioInputCapabilities,
weak_factory_.GetWeakPtr(), state_id,
capabilities_index,
@@ -1111,8 +1111,7 @@ void MediaDevicesManager::NotifyDeviceChangeSubscribers(
const SubscriptionRequest& request = subscription.second;
if (request.subscribe_types[type]) {
base::PostTaskAndReplyWithResult(
- base::CreateSingleThreadTaskRunner({BrowserThread::UI}).get(),
- FROM_HERE,
+ GetUIThreadTaskRunner({}).get(), FROM_HERE,
base::BindOnce(salt_and_origin_callback_, request.render_process_id,
request.render_frame_id),
base::BindOnce(&MediaDevicesManager::CheckPermissionForDeviceChange,
diff --git a/chromium/content/browser/renderer_host/media/media_stream_dispatcher_host.cc b/chromium/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
index cf2716e593b..3e43ba7ad5c 100644
--- a/chromium/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
+++ b/chromium/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
@@ -102,8 +102,8 @@ MediaStreamDispatcherHost::GetMediaStreamDeviceObserver() {
media_stream_device_observer_.set_disconnect_handler(base::BindOnce(
&MediaStreamDispatcherHost::OnMediaStreamDeviceObserverConnectionError,
weak_factory_.GetWeakPtr()));
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&BindMediaStreamDeviceObserverReceiver, render_process_id_,
render_frame_id_, std::move(dispatcher_receiver)));
return media_stream_device_observer_;
@@ -138,7 +138,7 @@ void MediaStreamDispatcherHost::GenerateStream(
}
base::PostTaskAndReplyWithResult(
- base::CreateSingleThreadTaskRunner({BrowserThread::UI}).get(), FROM_HERE,
+ GetUIThreadTaskRunner({}).get(), FROM_HERE,
base::BindOnce(salt_and_origin_callback_, render_process_id_,
render_frame_id_),
base::BindOnce(&MediaStreamDispatcherHost::DoGenerateStream,
@@ -159,8 +159,8 @@ void MediaStreamDispatcherHost::DoGenerateStream(
salt_and_origin.origin)) {
std::move(callback).Run(
blink::mojom::MediaStreamRequestResult::INVALID_SECURITY_ORIGIN,
- std::string(), blink::MediaStreamDevices(),
- blink::MediaStreamDevices());
+ std::string(), blink::MediaStreamDevices(), blink::MediaStreamDevices(),
+ /*pan_tilt_zoom_allowed=*/false);
return;
}
@@ -198,7 +198,7 @@ void MediaStreamDispatcherHost::OpenDevice(int32_t page_request_id,
DCHECK_CURRENTLY_ON(BrowserThread::IO);
base::PostTaskAndReplyWithResult(
- base::CreateSingleThreadTaskRunner({BrowserThread::UI}).get(), FROM_HERE,
+ GetUIThreadTaskRunner({}).get(), FROM_HERE,
base::BindOnce(salt_and_origin_callback_, render_process_id_,
render_frame_id_),
base::BindOnce(&MediaStreamDispatcherHost::DoOpenDevice,
diff --git a/chromium/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc b/chromium/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
index beccf8a5425..d1e3cf88016 100644
--- a/chromium/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
+++ b/chromium/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
@@ -160,7 +160,8 @@ class MockMediaStreamDispatcherHost
blink::mojom::MediaStreamRequestResult result,
const std::string& label,
const blink::MediaStreamDevices& audio_devices,
- const blink::MediaStreamDevices& video_devices) {
+ const blink::MediaStreamDevices& video_devices,
+ bool pan_tilt_zoom_allowed) {
if (result != blink::mojom::MediaStreamRequestResult::OK) {
OnStreamGenerationFailed(request_id, result);
return;
diff --git a/chromium/content/browser/renderer_host/media/media_stream_manager.cc b/chromium/content/browser/renderer_host/media/media_stream_manager.cc
index 3d4610db625..0929cab302e 100644
--- a/chromium/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/chromium/content/browser/renderer_host/media/media_stream_manager.cc
@@ -19,12 +19,12 @@
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/power_monitor/power_monitor.h"
+#include "base/power_monitor/power_monitor_source.h"
#include "base/rand_util.h"
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
-#include "base/task/post_task.h"
#include "base/task_runner_util.h"
#include "base/threading/thread.h"
#include "base/threading/thread_local.h"
@@ -32,6 +32,7 @@
#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/media/capture/desktop_capture_device_uma_types.h"
+#include "content/browser/media/media_devices_permission_checker.h"
#include "content/browser/renderer_host/media/audio_input_device_manager.h"
#include "content/browser/renderer_host/media/audio_service_listener.h"
#include "content/browser/renderer_host/media/in_process_video_capture_provider.h"
@@ -605,7 +606,8 @@ class MediaStreamManager::DeviceRequest {
if (generate_stream_cb) {
std::move(generate_stream_cb)
.Run(MediaStreamRequestResult::FAILED_DUE_TO_SHUTDOWN, std::string(),
- MediaStreamDevices(), MediaStreamDevices());
+ MediaStreamDevices(), MediaStreamDevices(),
+ /*pan_tilt_zoom_allowed=*/false);
}
if (open_device_cb) {
@@ -679,8 +681,8 @@ class MediaStreamManager::DeviceRequest {
// static
void MediaStreamManager::SendMessageToNativeLog(const std::string& message) {
if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaStreamManager::SendMessageToNativeLog, message));
return;
}
@@ -767,7 +769,7 @@ MediaStreamManager::MediaStreamManager(
video_capture_provider = InProcessVideoCaptureProvider::CreateInstance(
std::make_unique<media::VideoCaptureSystemImpl>(
media::CreateVideoCaptureDeviceFactory(
- base::CreateSingleThreadTaskRunner({BrowserThread::UI}))),
+ GetUIThreadTaskRunner({}))),
std::move(device_task_runner),
base::BindRepeating(&SendVideoCaptureLogMessage));
}
@@ -859,8 +861,8 @@ std::string MediaStreamManager::MakeMediaAccessRequest(
// and thus can not handle a response. Using base::Unretained is safe since
// MediaStreamManager is deleted on the UI thread, after the IO thread has
// been stopped.
- base::PostTask(FROM_HERE, {BrowserThread::IO},
- base::BindOnce(&MediaStreamManager::SetUpRequest,
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&MediaStreamManager::SetUpRequest,
base::Unretained(this), label));
return label;
}
@@ -910,8 +912,8 @@ void MediaStreamManager::GenerateStream(
// and thus can not handle a response. Using base::Unretained is safe since
// MediaStreamManager is deleted on the UI thread, after the IO thread has
// been stopped.
- base::PostTask(FROM_HERE, {BrowserThread::IO},
- base::BindOnce(&MediaStreamManager::SetUpRequest,
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&MediaStreamManager::SetUpRequest,
base::Unretained(this), label));
}
@@ -1133,8 +1135,8 @@ void MediaStreamManager::OpenDevice(int render_process_id,
// and thus can not handle a response. Using base::Unretained is safe since
// MediaStreamManager is deleted on the UI thread, after the IO thread has
// been stopped.
- base::PostTask(FROM_HERE, {BrowserThread::IO},
- base::BindOnce(&MediaStreamManager::SetUpRequest,
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&MediaStreamManager::SetUpRequest,
base::Unretained(this), label));
}
@@ -1333,8 +1335,6 @@ void MediaStreamManager::ReadOutputParamsAndPostRequestToUI(
// Actual audio parameters are required only for
// MEDIA_GUM_TAB_AUDIO_CAPTURE.
- // TODO(guidou): MEDIA_GUM_TAB_AUDIO_CAPTURE should not be a special
- // case. See https://crbug.com/584287.
if (request->audio_type() == MediaStreamType::GUM_TAB_AUDIO_CAPTURE) {
// Using base::Unretained is safe: |audio_system_| will post
// PostRequestToUI() to IO thread, and MediaStreamManager is deleted on the
@@ -1555,8 +1555,8 @@ bool MediaStreamManager::SetUpTabCaptureRequest(DeviceRequest* request,
return false;
}
- base::PostTaskAndReplyWithResult(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTaskAndReplyWithResult(
+ FROM_HERE,
base::BindOnce(&MediaStreamManager::ResolveTabCaptureDeviceIdOnUIThread,
base::Unretained(this), capture_device_id,
request->requesting_process_id,
@@ -1763,8 +1763,38 @@ void MediaStreamManager::FinalizeGenerateStream(const std::string& label,
NOTREACHED();
}
+ // It is safe to bind base::Unretained(this) because MediaStreamManager is
+ // owned by BrowserMainLoop and so outlives the IO thread.
+ GetUIThreadTaskRunner({})->PostTaskAndReplyWithResult(
+ FROM_HERE,
+ base::BindOnce(&MediaDevicesPermissionChecker::
+ HasPanTiltZoomPermissionGrantedOnUIThread,
+ request->requesting_process_id,
+ request->requesting_frame_id),
+ base::BindOnce(&MediaStreamManager::PanTiltZoomPermissionChecked,
+ base::Unretained(this), label, audio_devices,
+ video_devices));
+}
+
+void MediaStreamManager::PanTiltZoomPermissionChecked(
+ const std::string& label,
+ MediaStreamDevices audio_devices,
+ MediaStreamDevices video_devices,
+ bool pan_tilt_zoom_allowed) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DeviceRequest* request = FindRequest(label);
+ if (!request)
+ return;
+
+ SendLogMessage(base::StringPrintf(
+ "PanTiltZoomPermissionChecked({label=%s}, {requester_id="
+ "%d}, {request_type=%s}, {pan_tilt_zoom_allowed=%d})",
+ label.c_str(), request->requester_id,
+ RequestTypeToString(request->request_type()), pan_tilt_zoom_allowed));
+
std::move(request->generate_stream_cb)
- .Run(MediaStreamRequestResult::OK, label, audio_devices, video_devices);
+ .Run(MediaStreamRequestResult::OK, label, audio_devices, video_devices,
+ pan_tilt_zoom_allowed);
}
void MediaStreamManager::FinalizeRequestFailed(
@@ -1781,7 +1811,7 @@ void MediaStreamManager::FinalizeRequestFailed(
DCHECK(request->generate_stream_cb);
std::move(request->generate_stream_cb)
.Run(result, std::string(), MediaStreamDevices(),
- MediaStreamDevices());
+ MediaStreamDevices(), /*pan_tilt_zoom_allowed=*/false);
break;
}
case blink::MEDIA_OPEN_DEVICE_PEPPER_ONLY: {
@@ -1804,8 +1834,8 @@ void MediaStreamManager::FinalizeRequestFailed(
if (device.type == MediaStreamType::GUM_DESKTOP_VIDEO_CAPTURE) {
DesktopMediaID source = DesktopMediaID::Parse(device.id);
DCHECK(source.type == DesktopMediaID::TYPE_WEB_CONTENTS);
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaStreamManager::ActivateTabOnUIThread,
base::Unretained(this), source));
break;
@@ -1891,8 +1921,8 @@ void MediaStreamManager::InitializeMaybeAsync(
// initialization is done synchronously. Other clients call this from a
// different thread and expect initialization to run asynchronously.
if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
- base::PostTask(FROM_HERE, {BrowserThread::IO},
- base::BindOnce(&MediaStreamManager::InitializeMaybeAsync,
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&MediaStreamManager::InitializeMaybeAsync,
base::Unretained(this),
std::move(video_capture_provider)));
return;
@@ -2068,6 +2098,14 @@ void MediaStreamManager::OnResume() {
SendLogMessage(base::StringPrintf("OnResume([this=%p])", this));
}
+void MediaStreamManager::OnThermalStateChange(
+ base::PowerObserver::DeviceThermalState new_state) {
+ const char* state_name =
+ base::PowerMonitorSource::DeviceThermalStateToString(new_state);
+ SendLogMessage(base::StringPrintf(
+ "OnThermalStateChange({this=%p}, {new_state=%s})", this, state_name));
+}
+
void MediaStreamManager::UseFakeUIFactoryForTests(
base::RepeatingCallback<std::unique_ptr<FakeMediaStreamUIProxy>(void)>
fake_ui_factory) {
@@ -2510,7 +2548,8 @@ MediaStreamDevices MediaStreamManager::ConvertToMediaStreamDevices(
MediaStreamDevices devices;
for (const auto& info : device_infos) {
devices.emplace_back(stream_type, info.device_id, info.label,
- info.video_facing, info.group_id);
+ info.video_facing, info.group_id,
+ info.pan_tilt_zoom_supported);
}
return devices;
diff --git a/chromium/content/browser/renderer_host/media/media_stream_manager.h b/chromium/content/browser/renderer_host/media/media_stream_manager.h
index e0057e5727f..4468b5c9064 100644
--- a/chromium/content/browser/renderer_host/media/media_stream_manager.h
+++ b/chromium/content/browser/renderer_host/media/media_stream_manager.h
@@ -90,7 +90,8 @@ class CONTENT_EXPORT MediaStreamManager
base::OnceCallback<void(blink::mojom::MediaStreamRequestResult result,
const std::string& label,
const blink::MediaStreamDevices& audio_devices,
- const blink::MediaStreamDevices& video_devices)>;
+ const blink::MediaStreamDevices& video_devices,
+ bool pan_tilt_zoom_allowed)>;
using OpenDeviceCallback =
base::OnceCallback<void(bool success,
@@ -278,6 +279,8 @@ class CONTENT_EXPORT MediaStreamManager
// base::PowerObserver overrides.
void OnSuspend() override;
void OnResume() override;
+ void OnThermalStateChange(
+ base::PowerObserver::DeviceThermalState new_state) override;
// Called by the tests to specify a factory for creating
// FakeMediaStreamUIProxys to be used for generated streams.
@@ -456,6 +459,10 @@ class CONTENT_EXPORT MediaStreamManager
MediaRequestState* existing_request_state) const;
void FinalizeGenerateStream(const std::string& label, DeviceRequest* request);
+ void PanTiltZoomPermissionChecked(const std::string& label,
+ blink::MediaStreamDevices audio_devices,
+ blink::MediaStreamDevices video_devices,
+ bool pan_tilt_zoom_allowed);
void FinalizeRequestFailed(const std::string& label,
DeviceRequest* request,
blink::mojom::MediaStreamRequestResult result);
diff --git a/chromium/content/browser/renderer_host/media/media_stream_manager_unittest.cc b/chromium/content/browser/renderer_host/media/media_stream_manager_unittest.cc
index a6489ccad9e..53722c38ca3 100644
--- a/chromium/content/browser/renderer_host/media/media_stream_manager_unittest.cc
+++ b/chromium/content/browser/renderer_host/media/media_stream_manager_unittest.cc
@@ -325,7 +325,8 @@ class MediaStreamManagerTest : public ::testing::Test {
blink::mojom::MediaStreamRequestResult result,
const std::string& label,
const blink::MediaStreamDevices& audio_devices,
- const blink::MediaStreamDevices& video_devices) {
+ const blink::MediaStreamDevices& video_devices,
+ bool pan_tilt_zoom_allowed) {
if (request_audio) {
EXPECT_EQ(1u, audio_devices.size());
*audio_device = audio_devices[0];
@@ -697,7 +698,8 @@ TEST_F(MediaStreamManagerTest, GetDisplayMediaRequestCallsUIProxy) {
base::BindOnce([](blink::mojom::MediaStreamRequestResult result,
const std::string& label,
const blink::MediaStreamDevices& audio_devices,
- const blink::MediaStreamDevices& video_devices) {});
+ const blink::MediaStreamDevices& video_devices,
+ bool pan_tilt_zoom_allowed) {});
EXPECT_CALL(
*media_observer_,
OnMediaRequestStateChanged(
diff --git a/chromium/content/browser/renderer_host/media/media_stream_ui_proxy.cc b/chromium/content/browser/renderer_host/media/media_stream_ui_proxy.cc
index 4966540938f..63d1744a77c 100644
--- a/chromium/content/browser/renderer_host/media/media_stream_ui_proxy.cc
+++ b/chromium/content/browser/renderer_host/media/media_stream_ui_proxy.cc
@@ -9,7 +9,6 @@
#include "base/bind.h"
#include "base/command_line.h"
#include "base/macros.h"
-#include "base/task/post_task.h"
#include "content/browser/frame_host/frame_tree_node.h"
#include "content/browser/frame_host/render_frame_host_delegate.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
@@ -183,8 +182,8 @@ void MediaStreamUIProxy::Core::ProcessAccessRequestResponse(
if (host && result == blink::mojom::MediaStreamRequestResult::OK)
host->OnGrantedMediaStreamAccess();
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaStreamUIProxy::ProcessAccessRequestResponse, proxy_,
filtered_devices, result));
}
@@ -192,8 +191,8 @@ void MediaStreamUIProxy::Core::ProcessAccessRequestResponse(
void MediaStreamUIProxy::Core::ProcessStopRequestFromUI() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaStreamUIProxy::ProcessStopRequestFromUI, proxy_));
}
@@ -201,8 +200,8 @@ void MediaStreamUIProxy::Core::ProcessChangeSourceRequestFromUI(
const DesktopMediaID& media_id) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaStreamUIProxy::ProcessChangeSourceRequestFromUI,
proxy_, media_id));
}
@@ -245,8 +244,8 @@ void MediaStreamUIProxy::RequestAccess(
DCHECK_CURRENTLY_ON(BrowserThread::IO);
response_callback_ = std::move(response_callback);
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&Core::RequestAccess, base::Unretained(core_.get()),
std::move(request)));
}
@@ -263,8 +262,8 @@ void MediaStreamUIProxy::OnStarted(
// Owned by the PostTaskAndReply callback.
gfx::NativeViewId* window_id = new gfx::NativeViewId(0);
- base::PostTaskAndReply(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTaskAndReply(
+ FROM_HERE,
base::BindOnce(&Core::OnStarted, base::Unretained(core_.get()), window_id,
!!source_callback_),
base::BindOnce(&MediaStreamUIProxy::OnWindowId,
@@ -334,8 +333,8 @@ void FakeMediaStreamUIProxy::RequestAccess(
if (base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
switches::kUseFakeUIForMediaStream) == "deny") {
// Immediately deny the request.
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&MediaStreamUIProxy::Core::ProcessAccessRequestResponse,
base::Unretained(core_.get()), request->render_process_id,
@@ -377,8 +376,8 @@ void FakeMediaStreamUIProxy::RequestAccess(
devices_to_use.clear();
}
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaStreamUIProxy::Core::ProcessAccessRequestResponse,
base::Unretained(core_.get()), request->render_process_id,
request->render_frame_id, devices_to_use,
diff --git a/chromium/content/browser/renderer_host/media/media_stream_ui_proxy_unittest.cc b/chromium/content/browser/renderer_host/media/media_stream_ui_proxy_unittest.cc
index d8bd747edd1..802c06f0d90 100644
--- a/chromium/content/browser/renderer_host/media/media_stream_ui_proxy_unittest.cc
+++ b/chromium/content/browser/renderer_host/media/media_stream_ui_proxy_unittest.cc
@@ -10,11 +10,11 @@
#include "base/bind.h"
#include "base/callback_helpers.h"
#include "base/run_loop.h"
-#include "base/task/post_task.h"
#include "base/test/gmock_move_support.h"
#include "build/build_config.h"
#include "content/browser/frame_host/render_frame_host_delegate.h"
#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/media_stream_request.h"
#include "content/public/test/browser_task_environment.h"
#include "content/test/test_render_frame_host.h"
@@ -393,8 +393,8 @@ class MediaStreamUIProxyFeaturePolicyTest
DCHECK_CURRENTLY_ON(BrowserThread::UI);
base::RunLoop run_loop;
quit_closure_ = run_loop.QuitClosure();
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&MediaStreamUIProxyFeaturePolicyTest::GetResultForRequestOnIOThread,
base::Unretained(this), std::move(request)));
@@ -453,8 +453,8 @@ class MediaStreamUIProxyFeaturePolicyTest
blink::mojom::MediaStreamRequestResult result) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
proxy_.reset();
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&MediaStreamUIProxyFeaturePolicyTest::FinishedGetResult,
base::Unretained(this), devices, result));
}
diff --git a/chromium/content/browser/renderer_host/media/peer_connection_tracker_host.cc b/chromium/content/browser/renderer_host/media/peer_connection_tracker_host.cc
index 87c9ea24fe9..a1d323a6c63 100644
--- a/chromium/content/browser/renderer_host/media/peer_connection_tracker_host.cc
+++ b/chromium/content/browser/renderer_host/media/peer_connection_tracker_host.cc
@@ -21,6 +21,13 @@ PeerConnectionTrackerHost::PeerConnectionTrackerHost(RenderProcessHost* rph)
DCHECK_CURRENTLY_ON(BrowserThread::UI);
base::PowerMonitor::AddObserver(this);
rph->BindReceiver(tracker_.BindNewPipeAndPassReceiver());
+ // Ensure that the initial thermal state is known by the |tracker_|.
+ base::PowerObserver::DeviceThermalState initial_thermal_state =
+ base::PowerMonitor::GetCurrentThermalState();
+ if (initial_thermal_state !=
+ base::PowerObserver::DeviceThermalState::kUnknown) {
+ OnThermalStateChange(initial_thermal_state);
+ }
}
PeerConnectionTrackerHost::~PeerConnectionTrackerHost() {
@@ -143,6 +150,12 @@ void PeerConnectionTrackerHost::OnSuspend() {
tracker_->OnSuspend();
}
+void PeerConnectionTrackerHost::OnThermalStateChange(
+ base::PowerObserver::DeviceThermalState new_state) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ tracker_->OnThermalStateChange(new_state);
+}
+
void PeerConnectionTrackerHost::StartEventLog(int lid, int output_period_ms) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
tracker_->StartEventLog(lid, output_period_ms);
diff --git a/chromium/content/browser/renderer_host/media/peer_connection_tracker_host.h b/chromium/content/browser/renderer_host/media/peer_connection_tracker_host.h
index 65045c68b60..fecc08dfcd5 100644
--- a/chromium/content/browser/renderer_host/media/peer_connection_tracker_host.h
+++ b/chromium/content/browser/renderer_host/media/peer_connection_tracker_host.h
@@ -36,6 +36,8 @@ class PeerConnectionTrackerHost
// base::PowerObserver override.
void OnSuspend() override;
+ void OnThermalStateChange(
+ base::PowerObserver::DeviceThermalState new_state) override;
// These methods call out to blink::mojom::PeerConnectionManager on renderer
// side.
diff --git a/chromium/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc b/chromium/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc
index fd591ee5428..acc14c66913 100644
--- a/chromium/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc
+++ b/chromium/content/browser/renderer_host/media/render_frame_audio_input_stream_factory.cc
@@ -13,7 +13,6 @@
#include "base/check_op.h"
#include "base/location.h"
#include "base/memory/weak_ptr.h"
-#include "base/task/post_task.h"
#include "base/trace_event/trace_event.h"
#include "base/unguessable_token.h"
#include "content/browser/media/audio_stream_broker.h"
@@ -91,8 +90,8 @@ void GetSaltOriginAndPermissionsOnUIThread(
auto salt_and_origin = GetMediaDeviceSaltAndOrigin(process_id, frame_id);
bool access = MediaDevicesPermissionChecker().CheckPermissionOnUIThread(
blink::MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, process_id, frame_id);
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(std::move(cb), std::move(salt_and_origin), access));
}
@@ -169,8 +168,8 @@ RenderFrameAudioInputStreamFactory::~RenderFrameAudioInputStreamFactory() {
// as it doesn't post in case it is already executed on the right thread. That
// causes issues in unit tests where the UI thread and the IO thread are the
// same.
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce([](std::unique_ptr<Core>) {}, std::move(core_)));
}
@@ -198,8 +197,8 @@ RenderFrameAudioInputStreamFactory::Core::Core(
// Unretained is safe since the destruction of |this| is posted to the IO
// thread.
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&Core::Init, base::Unretained(this), std::move(receiver)));
}
@@ -244,8 +243,8 @@ void RenderFrameAudioInputStreamFactory::Core::CreateStream(
// TODO(qiangchen): Analyze audio constraints to make a duplicating or
// diverting decision. It would give web developer more flexibility.
- base::PostTaskAndReplyWithResult(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTaskAndReplyWithResult(
+ FROM_HERE,
base::BindOnce(&GetLoopbackSourceOnUIThread,
capture_id.render_process_id,
capture_id.main_render_frame_id),
@@ -294,8 +293,8 @@ void RenderFrameAudioInputStreamFactory::Core::AssociateInputAndOutputForAec(
if (!IsValidDeviceId(output_device_id))
return;
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&GetSaltOriginAndPermissionsOnUIThread, process_id_, frame_id_,
base::BindOnce(
diff --git a/chromium/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc b/chromium/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
index 115a2967682..e62a47e5b25 100644
--- a/chromium/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
+++ b/chromium/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
@@ -11,7 +11,6 @@
#include "base/bind_helpers.h"
#include "base/macros.h"
#include "base/run_loop.h"
-#include "base/task/post_task.h"
#include "build/build_config.h"
#include "content/browser/media/forwarding_audio_stream_factory.h"
#include "content/browser/renderer_host/media/audio_input_device_manager.h"
@@ -61,9 +60,9 @@ class MAYBE_RenderFrameAudioInputStreamFactoryTest
audio_manager_(std::make_unique<media::TestAudioThread>(),
&log_factory_),
audio_system_(media::AudioSystemImpl::CreateInstance()),
- media_stream_manager_(std::make_unique<MediaStreamManager>(
- audio_system_.get(),
- base::CreateSingleThreadTaskRunner({BrowserThread::UI}))) {}
+ media_stream_manager_(
+ std::make_unique<MediaStreamManager>(audio_system_.get(),
+ GetUIThreadTaskRunner({}))) {}
~MAYBE_RenderFrameAudioInputStreamFactoryTest() override {}
diff --git a/chromium/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc b/chromium/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc
index 6c2363b02ef..5f2a7fc6859 100644
--- a/chromium/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc
+++ b/chromium/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc
@@ -16,7 +16,6 @@
#include "base/location.h"
#include "base/memory/weak_ptr.h"
#include "base/optional.h"
-#include "base/task/post_task.h"
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
#include "base/unguessable_token.h"
@@ -170,8 +169,8 @@ RenderFrameAudioOutputStreamFactory::~RenderFrameAudioOutputStreamFactory() {
// as it doesn't post in case it is already executed on the right thread. That
// causes issues in unit tests where the UI thread and the IO thread are the
// same.
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce([](std::unique_ptr<Core>) {}, std::move(core_)));
}
@@ -204,8 +203,8 @@ RenderFrameAudioOutputStreamFactory::Core::Core(
// Unretained is safe since the destruction of |this| is posted to the IO
// thread.
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&Core::Init, base::Unretained(this), std::move(receiver)));
}
diff --git a/chromium/content/browser/renderer_host/media/render_frame_audio_output_stream_factory_unittest.cc b/chromium/content/browser/renderer_host/media/render_frame_audio_output_stream_factory_unittest.cc
index 1950b393af9..dbe40d2e00a 100644
--- a/chromium/content/browser/renderer_host/media/render_frame_audio_output_stream_factory_unittest.cc
+++ b/chromium/content/browser/renderer_host/media/render_frame_audio_output_stream_factory_unittest.cc
@@ -12,7 +12,6 @@
#include "base/bind_helpers.h"
#include "base/macros.h"
#include "base/run_loop.h"
-#include "base/task/post_task.h"
#include "base/test/mock_callback.h"
#include "base/test/task_environment.h"
#include "base/unguessable_token.h"
@@ -53,9 +52,9 @@ class RenderFrameAudioOutputStreamFactoryTest
: audio_manager_(std::make_unique<media::TestAudioThread>(),
&log_factory_),
audio_system_(media::AudioSystemImpl::CreateInstance()),
- media_stream_manager_(std::make_unique<MediaStreamManager>(
- audio_system_.get(),
- base::CreateSingleThreadTaskRunner({BrowserThread::UI}))) {}
+ media_stream_manager_(
+ std::make_unique<MediaStreamManager>(audio_system_.get(),
+ GetUIThreadTaskRunner({}))) {}
~RenderFrameAudioOutputStreamFactoryTest() override {}
diff --git a/chromium/content/browser/renderer_host/media/service_video_capture_device_launcher.cc b/chromium/content/browser/renderer_host/media/service_video_capture_device_launcher.cc
index 9d85f8cbd22..b953c5d85c4 100644
--- a/chromium/content/browser/renderer_host/media/service_video_capture_device_launcher.cc
+++ b/chromium/content/browser/renderer_host/media/service_video_capture_device_launcher.cc
@@ -9,7 +9,6 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/command_line.h"
-#include "base/task/post_task.h"
#include "content/browser/renderer_host/media/service_launched_video_capture_device.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
@@ -117,8 +116,7 @@ void ServiceVideoCaptureDeviceLauncher::LaunchDeviceAsync(
auto receiver_adapter =
std::make_unique<video_capture::ReceiverMediaToMojoAdapter>(
std::make_unique<media::VideoFrameReceiverOnTaskRunner>(
- std::move(receiver),
- base::CreateSingleThreadTaskRunner({BrowserThread::IO})));
+ std::move(receiver), GetIOThreadTaskRunner({})));
mojo::PendingRemote<video_capture::mojom::VideoFrameHandler>
pending_remote_proxy;
mojo::MakeSelfOwnedReceiver(
diff --git a/chromium/content/browser/renderer_host/media/service_video_capture_provider.cc b/chromium/content/browser/renderer_host/media/service_video_capture_provider.cc
index e3f8cea24ec..38164896644 100644
--- a/chromium/content/browser/renderer_host/media/service_video_capture_provider.cc
+++ b/chromium/content/browser/renderer_host/media/service_video_capture_provider.cc
@@ -8,7 +8,6 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
-#include "base/task/post_task.h"
#include "build/build_config.h"
#include "content/browser/renderer_host/media/service_video_capture_device_launcher.h"
#include "content/browser/renderer_host/media/virtual_video_capture_devices_changed_observer.h"
@@ -59,8 +58,7 @@ class ServiceVideoCaptureProvider::ServiceProcessObserver
public:
ServiceProcessObserver(base::RepeatingClosure start_callback,
base::RepeatingClosure stop_callback)
- : io_task_runner_(
- base::CreateSingleThreadTaskRunner({BrowserThread::IO})),
+ : io_task_runner_(GetIOThreadTaskRunner({})),
start_callback_(std::move(start_callback)),
stop_callback_(std::move(stop_callback)) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
@@ -117,18 +115,17 @@ ServiceVideoCaptureProvider::ServiceVideoCaptureProvider(
#endif // defined(OS_CHROMEOS)
if (features::IsVideoCaptureServiceEnabledForOutOfProcess()) {
service_process_observer_.emplace(
- base::CreateSingleThreadTaskRunner({BrowserThread::UI}),
+ GetUIThreadTaskRunner({}),
base::BindRepeating(&ServiceVideoCaptureProvider::OnServiceStarted,
weak_ptr_factory_.GetWeakPtr()),
base::BindRepeating(&ServiceVideoCaptureProvider::OnServiceStopped,
weak_ptr_factory_.GetWeakPtr()));
} else if (features::IsVideoCaptureServiceEnabledForBrowserProcess()) {
// Connect immediately and permanently when the service runs in-process.
- base::CreateSingleThreadTaskRunner({BrowserThread::IO})
- ->PostTask(
- FROM_HERE,
- base::BindOnce(&ServiceVideoCaptureProvider::OnServiceStarted,
- weak_ptr_factory_.GetWeakPtr()));
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
+ base::BindOnce(&ServiceVideoCaptureProvider::OnServiceStarted,
+ weak_ptr_factory_.GetWeakPtr()));
}
}
@@ -216,7 +213,7 @@ ServiceVideoCaptureProvider::LazyConnectToService() {
launcher_has_connected_to_source_provider_ = false;
time_of_last_connect_ = base::TimeTicks::Now();
- auto ui_task_runner = base::CreateSingleThreadTaskRunner({BrowserThread::UI});
+ auto ui_task_runner = GetUIThreadTaskRunner({});
#if defined(OS_CHROMEOS)
mojo::PendingRemote<video_capture::mojom::AcceleratorFactory>
accelerator_factory;
diff --git a/chromium/content/browser/renderer_host/media/video_capture_browsertest.cc b/chromium/content/browser/renderer_host/media/video_capture_browsertest.cc
index f0373bbb0b4..a5039b99ae7 100644
--- a/chromium/content/browser/renderer_host/media/video_capture_browsertest.cc
+++ b/chromium/content/browser/renderer_host/media/video_capture_browsertest.cc
@@ -6,7 +6,6 @@
#include "base/bind_helpers.h"
#include "base/command_line.h"
#include "base/run_loop.h"
-#include "base/task/post_task.h"
#include "base/test/scoped_feature_list.h"
#include "build/build_config.h"
#include "content/browser/browser_main_loop.h"
@@ -254,8 +253,8 @@ IN_PROC_BROWSER_TEST_P(VideoCaptureBrowserTest, StartAndImmediatelyStop) {
base::BindOnce(&VideoCaptureBrowserTest::TearDownCaptureDeviceOnIOThread,
base::Unretained(this),
std::move(quit_run_loop_on_current_thread_cb), true);
- base::PostTask(
- FROM_HERE, {content::BrowserThread::IO},
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&VideoCaptureBrowserTest::SetUpAndStartCaptureDeviceOnIOThread,
base::Unretained(this), std::move(after_start_continuation)));
@@ -338,8 +337,8 @@ IN_PROC_BROWSER_TEST_P(VideoCaptureBrowserTest,
}
}));
- base::PostTask(
- FROM_HERE, {content::BrowserThread::IO},
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(
&VideoCaptureBrowserTest::SetUpAndStartCaptureDeviceOnIOThread,
base::Unretained(this), base::DoNothing::Once()));
diff --git a/chromium/content/browser/renderer_host/media/video_capture_controller.cc b/chromium/content/browser/renderer_host/media/video_capture_controller.cc
index 8a3f1c3be3d..09afd022035 100644
--- a/chromium/content/browser/renderer_host/media/video_capture_controller.cc
+++ b/chromium/content/browser/renderer_host/media/video_capture_controller.cc
@@ -548,11 +548,8 @@ void VideoCaptureController::OnFrameReadyInBuffer(
frame_info->coded_size.height());
double frame_rate = 0.0f;
if (video_capture_format_) {
- media::VideoFrameMetadata metadata;
- metadata.MergeInternalValuesFrom(frame_info->metadata);
- if (!metadata.GetDouble(VideoFrameMetadata::FRAME_RATE, &frame_rate)) {
- frame_rate = video_capture_format_->frame_rate;
- }
+ frame_rate = frame_info->metadata.frame_rate.value_or(
+ video_capture_format_->frame_rate);
}
UMA_HISTOGRAM_COUNTS_1M("Media.VideoCapture.FrameRate", frame_rate);
UMA_HISTOGRAM_TIMES("Media.VideoCapture.DelayUntilFirstFrame",
@@ -709,6 +706,10 @@ void VideoCaptureController::ReleaseDeviceAsync(base::OnceClosure done_cb) {
device_launcher_->AbortLaunch();
return;
}
+ // |buffer_contexts_| contain references to |launched_device_| as observers.
+ // Clear those observer references prior to resetting |launced_device_|.
+ for (auto& entry : buffer_contexts_)
+ entry.set_consumer_feedback_observer(nullptr);
launched_device_.reset();
}
diff --git a/chromium/content/browser/renderer_host/media/video_capture_controller_unittest.cc b/chromium/content/browser/renderer_host/media/video_capture_controller_unittest.cc
index c4db5b9877f..2a487b37a22 100644
--- a/chromium/content/browser/renderer_host/media/video_capture_controller_unittest.cc
+++ b/chromium/content/browser/renderer_host/media/video_capture_controller_unittest.cc
@@ -19,7 +19,6 @@
#include "base/memory/ref_counted.h"
#include "base/run_loop.h"
#include "base/single_thread_task_runner.h"
-#include "base/task/post_task.h"
#include "base/test/bind_test_util.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/threading/thread_task_runner_handle.h"
@@ -109,11 +108,7 @@ class MockVideoCaptureControllerEventHandler
const media::mojom::VideoFrameInfoPtr& frame_info) override {
EXPECT_EQ(expected_pixel_format_, frame_info->pixel_format);
EXPECT_EQ(expected_color_space_, frame_info->color_space);
- media::VideoFrameMetadata metadata;
- metadata.MergeInternalValuesFrom(frame_info->metadata);
- base::TimeTicks reference_time;
- EXPECT_TRUE(metadata.GetTimeTicks(media::VideoFrameMetadata::REFERENCE_TIME,
- &reference_time));
+ EXPECT_TRUE(frame_info->metadata.reference_time.has_value());
DoBufferReady(id, frame_info->coded_size);
if (enable_auto_return_buffer_on_buffer_ready_) {
base::ThreadTaskRunnerHandle::Get()->PostTask(
@@ -188,15 +183,13 @@ class VideoCaptureControllerTest
device_client_.reset(new media::VideoCaptureDeviceClient(
media::VideoCaptureBufferType::kSharedMemory,
std::make_unique<media::VideoFrameReceiverOnTaskRunner>(
- controller_->GetWeakPtrForIOThread(),
- base::CreateSingleThreadTaskRunner({BrowserThread::IO})),
+ controller_->GetWeakPtrForIOThread(), GetIOThreadTaskRunner({})),
buffer_pool_, media::VideoCaptureJpegDecoderFactoryCB()));
#else
device_client_.reset(new media::VideoCaptureDeviceClient(
media::VideoCaptureBufferType::kSharedMemory,
std::make_unique<media::VideoFrameReceiverOnTaskRunner>(
- controller_->GetWeakPtrForIOThread(),
- base::CreateSingleThreadTaskRunner({BrowserThread::IO})),
+ controller_->GetWeakPtrForIOThread(), GetIOThreadTaskRunner({})),
buffer_pool_));
#endif // defined(OS_CHROMEOS)
}
diff --git a/chromium/content/browser/renderer_host/media/video_capture_host.cc b/chromium/content/browser/renderer_host/media/video_capture_host.cc
index c726b06c722..a5b883c7eef 100644
--- a/chromium/content/browser/renderer_host/media/video_capture_host.cc
+++ b/chromium/content/browser/renderer_host/media/video_capture_host.cc
@@ -8,7 +8,6 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
-#include "base/task/post_task.h"
#include "content/browser/browser_main_loop.h"
#include "content/browser/renderer_host/media/media_stream_manager.h"
#include "content/browser/renderer_host/media/video_capture_manager.h"
@@ -103,16 +102,16 @@ VideoCaptureHost::~VideoCaptureHost() {
}
NotifyAllStreamsRemoved();
- base::DeleteSoon(FROM_HERE, {BrowserThread::UI},
- render_process_host_delegate_.release());
+ GetUIThreadTaskRunner({})->DeleteSoon(
+ FROM_HERE, render_process_host_delegate_.release());
}
void VideoCaptureHost::OnError(const VideoCaptureControllerID& controller_id,
media::VideoCaptureError error) {
DVLOG(1) << __func__;
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&VideoCaptureHost::DoError, weak_factory_.GetWeakPtr(),
controller_id, error));
}
@@ -160,8 +159,8 @@ void VideoCaptureHost::OnBufferReady(
void VideoCaptureHost::OnEnded(const VideoCaptureControllerID& controller_id) {
DVLOG(1) << __func__;
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- base::PostTask(FROM_HERE, {BrowserThread::IO},
- base::BindOnce(&VideoCaptureHost::DoEnded,
+ GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&VideoCaptureHost::DoEnded,
weak_factory_.GetWeakPtr(), controller_id));
}
@@ -434,8 +433,8 @@ void VideoCaptureHost::NotifyStreamAdded() {
++number_of_active_streams_;
// base::Unretained() usage is safe because |render_process_host_delegate_|
// is destroyed on UI thread.
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&RenderProcessHostDelegate::NotifyStreamAdded,
base::Unretained(render_process_host_delegate_.get())));
}
@@ -451,8 +450,8 @@ void VideoCaptureHost::NotifyStreamRemoved() {
--number_of_active_streams_;
// base::Unretained() usage is safe because |render_process_host_delegate_| is
// destroyed on UI thread.
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&RenderProcessHostDelegate::NotifyStreamRemoved,
base::Unretained(render_process_host_delegate_.get())));
}