Onion soup AudioDeviceFactory, AudioRendererMixerManager
... and AudioRendererSinkCacheImpl
Most files got moved to blink/renderer/modules/media/audio, but
audio_device_factory.h. This one is used by Pepper and fuchsia code
as well as //chromecast, so it has made it to the Blink public API
at blink/public/web/modules/media/audio/.
The 'Web' prefix will be added in a follow up.
More details:
1/ AudioRendererMixerManager was a RenderThreadImpl variable, so a
renderer process level scoped. As part of this CL, DEFINE_STATIC_LOCAL
was used in the newly added GetInstance() method.
All references to AudioRendererMixerManager were removed from
//content.
2/ AudioRendererSinkCacheImpl::ObserveFrame was instantiated in
RenderFrameImpl::Initialize. It used to inherit from
RenderFrameObserver and deleted itself from its OnDestruct() override.
As part of this CL, it now inherits from Supplement<LocalFrame> and
get installed by ModulesInitializer::InstallSupplements().
It also inherits from ExecutionContextLifecycleObserver so its
existing functionality is kept.
3/ @audio_renderer_sink_cache_test.cc, base::test::TestEnvironment
was replaced by base::TestMockTimeTaskRunner.
4/ blink::Platform::GetHungRendererDelay() was added to supply
content::kHungRendererDelay.
BUG=787252
R=guidou@chromium.org, haraken@chromium.org
TBR=spang@chromium.org
Change-Id: I3ccfe526632ec5156cc346d6b868287fc45a0a23
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2414551
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Guido Urdaneta <guidou@chromium.org>
Commit-Queue: Antonio Gomes (GMT-4) <tonikitoo@igalia.com>
Cr-Commit-Position: refs/heads/master@{#808960}
diff --git a/chromecast/media/DEPS b/chromecast/media/DEPS
index 4ba981c..4bd50854 100644
--- a/chromecast/media/DEPS
+++ b/chromecast/media/DEPS
@@ -4,7 +4,6 @@
"+content/public/test/browser_task_environment.h",
"+content/public/test/test_browser_thread.h",
"+content/public/test/test_utils.h",
- "+content/renderer/media/audio/audio_device_factory.h",
"+media/audio",
"+media/base",
"+media/cdm",
@@ -18,6 +17,7 @@
"+services/service_manager/public",
"+third_party/blink/public/common/tokens/tokens.h",
"+third_party/blink/public/platform/audio/web_audio_device_source_type.h",
+ "+third_party/blink/public/web/modules/media/audio/audio_device_factory.h",
"+third_party/blink/public/web/modules/media/audio/web_audio_output_ipc_factory.h",
"+third_party/widevine/cdm/buildflags.h",
"+third_party/widevine/cdm/widevine_cdm_common.h",
diff --git a/chromecast/media/audio/cast_audio_device_factory.cc b/chromecast/media/audio/cast_audio_device_factory.cc
index f8d2bb9..2936865 100644
--- a/chromecast/media/audio/cast_audio_device_factory.cc
+++ b/chromecast/media/audio/cast_audio_device_factory.cc
@@ -91,8 +91,7 @@
return device;
}
-CastAudioDeviceFactory::CastAudioDeviceFactory()
- : content::AudioDeviceFactory() {
+CastAudioDeviceFactory::CastAudioDeviceFactory() : blink::AudioDeviceFactory() {
DVLOG(1) << "Register CastAudioDeviceFactory";
}
diff --git a/chromecast/media/audio/cast_audio_device_factory.h b/chromecast/media/audio/cast_audio_device_factory.h
index 1675bfa..8344d75 100644
--- a/chromecast/media/audio/cast_audio_device_factory.h
+++ b/chromecast/media/audio/cast_audio_device_factory.h
@@ -8,10 +8,10 @@
#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
-#include "content/renderer/media/audio/audio_device_factory.h"
#include "media/audio/audio_sink_parameters.h"
#include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/blink/public/platform/audio/web_audio_device_source_type.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
namespace media {
class AudioCapturerSource;
@@ -22,7 +22,7 @@
namespace chromecast {
namespace media {
-class CastAudioDeviceFactory : public content::AudioDeviceFactory {
+class CastAudioDeviceFactory : public blink::AudioDeviceFactory {
public:
CastAudioDeviceFactory();
~CastAudioDeviceFactory() final;
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index 54f2588..f99ff5c 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -129,12 +129,6 @@
"media/android/stream_texture_factory.h",
"media/android/stream_texture_wrapper_impl.cc",
"media/android/stream_texture_wrapper_impl.h",
- "media/audio/audio_device_factory.cc",
- "media/audio/audio_device_factory.h",
- "media/audio/audio_renderer_mixer_manager.cc",
- "media/audio/audio_renderer_mixer_manager.h",
- "media/audio/audio_renderer_sink_cache_impl.cc",
- "media/audio/audio_renderer_sink_cache_impl.h",
"media/audio_decoder.cc",
"media/audio_decoder.h",
"media/batching_media_log.cc",
diff --git a/content/renderer/media/audio/fuchsia_audio_device_factory.h b/content/renderer/media/audio/fuchsia_audio_device_factory.h
index df5ed13..b2c1d54 100644
--- a/content/renderer/media/audio/fuchsia_audio_device_factory.h
+++ b/content/renderer/media/audio/fuchsia_audio_device_factory.h
@@ -5,12 +5,12 @@
#ifndef CONTENT_RENDERER_MEDIA_AUDIO_FUCHSIA_AUDIO_DEVICE_FACTORY_H_
#define CONTENT_RENDERER_MEDIA_AUDIO_FUCHSIA_AUDIO_DEVICE_FACTORY_H_
-#include "content/renderer/media/audio/audio_device_factory.h"
#include "third_party/blink/public/common/tokens/tokens.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
namespace content {
-class FuchsiaAudioDeviceFactory : public AudioDeviceFactory {
+class FuchsiaAudioDeviceFactory : public blink::AudioDeviceFactory {
public:
FuchsiaAudioDeviceFactory();
~FuchsiaAudioDeviceFactory() final;
diff --git a/content/renderer/media/audio/mock_audio_device_factory.h b/content/renderer/media/audio/mock_audio_device_factory.h
index 0e213bc..19bc40d 100644
--- a/content/renderer/media/audio/mock_audio_device_factory.h
+++ b/content/renderer/media/audio/mock_audio_device_factory.h
@@ -7,11 +7,11 @@
#include <string>
-#include "content/renderer/media/audio/audio_device_factory.h"
#include "media/base/audio_capturer_source.h"
#include "media/base/audio_renderer_sink.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "third_party/blink/public/common/tokens/tokens.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
namespace content {
@@ -35,7 +35,7 @@
// Creates one MockCapturerSource instance for unit testing. This replaces the
// need for unit tests to open a real platform audio output. Instantiating this
// class sets the global content::AudioDeviceFactory implementation to |this|.
-class MockAudioDeviceFactory : public AudioDeviceFactory {
+class MockAudioDeviceFactory : public blink::AudioDeviceFactory {
public:
MockAudioDeviceFactory();
~MockAudioDeviceFactory() override;
diff --git a/content/renderer/media/media_factory.cc b/content/renderer/media/media_factory.cc
index 4f1a3a8..62e7696 100644
--- a/content/renderer/media/media_factory.cc
+++ b/content/renderer/media/media_factory.cc
@@ -21,7 +21,6 @@
#include "content/public/common/content_client.h"
#include "content/public/renderer/content_renderer_client.h"
#include "content/public/renderer/render_frame_media_playback_options.h"
-#include "content/renderer/media/audio/audio_device_factory.h"
#include "content/renderer/media/batching_media_log.h"
#include "content/renderer/media/inspector_media_event_handler.h"
#include "content/renderer/media/media_interface_factory.h"
@@ -57,6 +56,7 @@
#include "third_party/blink/public/platform/web_surface_layer_bridge.h"
#include "third_party/blink/public/platform/web_video_frame_submitter.h"
#include "third_party/blink/public/web/blink.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
#include "third_party/blink/public/web/modules/mediastream/webmediaplayer_ms.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "url/origin.h"
@@ -373,7 +373,7 @@
return nullptr;
scoped_refptr<media::SwitchableAudioRendererSink> audio_renderer_sink =
- AudioDeviceFactory::NewSwitchableAudioRendererSink(
+ blink::AudioDeviceFactory::NewSwitchableAudioRendererSink(
blink::WebAudioDeviceSourceType::kMediaElement,
render_frame_->GetWebFrame()->GetLocalFrameToken(),
media::AudioSinkParameters(/*session_id=*/base::UnguessableToken(),
diff --git a/content/renderer/media/renderer_webaudiodevice_impl.cc b/content/renderer/media/renderer_webaudiodevice_impl.cc
index 4b3a687..9328972 100644
--- a/content/renderer/media/renderer_webaudiodevice_impl.cc
+++ b/content/renderer/media/renderer_webaudiodevice_impl.cc
@@ -16,16 +16,17 @@
#include "base/task/task_traits.h"
#include "base/task/thread_pool.h"
#include "base/time/time.h"
-#include "content/renderer/media/audio/audio_device_factory.h"
#include "content/renderer/render_frame_impl.h"
#include "content/renderer/render_thread_impl.h"
#include "media/base/audio_timestamp_helper.h"
#include "media/base/limits.h"
#include "media/base/silent_sink_suspender.h"
#include "third_party/blink/public/platform/audio/web_audio_device_source_type.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/public/web/web_view.h"
+using blink::AudioDeviceFactory;
using blink::WebAudioDevice;
using blink::WebAudioLatencyHint;
using blink::WebLocalFrame;
diff --git a/content/renderer/media/renderer_webaudiodevice_impl_unittest.cc b/content/renderer/media/renderer_webaudiodevice_impl_unittest.cc
index 5dd6633b..6092035 100644
--- a/content/renderer/media/renderer_webaudiodevice_impl_unittest.cc
+++ b/content/renderer/media/renderer_webaudiodevice_impl_unittest.cc
@@ -9,7 +9,6 @@
#include "base/test/task_environment.h"
#include "base/threading/thread_task_runner_handle.h"
#include "build/build_config.h"
-#include "content/renderer/media/audio/audio_device_factory.h"
#include "media/base/audio_capturer_source.h"
#include "media/base/limits.h"
#include "media/base/mock_audio_renderer_sink.h"
@@ -17,6 +16,7 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
using testing::_;
@@ -63,7 +63,7 @@
class RendererWebAudioDeviceImplTest
: public blink::WebAudioDevice::RenderCallback,
- public AudioDeviceFactory,
+ public blink::AudioDeviceFactory,
public testing::Test {
protected:
RendererWebAudioDeviceImplTest() {}
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc
index de5fe546..e1d22677 100644
--- a/content/renderer/pepper/pepper_plugin_instance_impl.cc
+++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
@@ -27,7 +27,6 @@
#include "content/common/frame_messages.h"
#include "content/public/common/content_constants.h"
#include "content/public/renderer/content_renderer_client.h"
-#include "content/renderer/media/audio/audio_device_factory.h"
#include "content/renderer/pepper/event_conversion.h"
#include "content/renderer/pepper/fullscreen_container.h"
#include "content/renderer/pepper/gfx_conversion.h"
@@ -107,6 +106,7 @@
#include "third_party/blink/public/platform/web_url.h"
#include "third_party/blink/public/platform/web_url_error.h"
#include "third_party/blink/public/platform/web_url_request.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
#include "third_party/blink/public/web/web_document.h"
#include "third_party/blink/public/web/web_document_loader.h"
#include "third_party/blink/public/web/web_frame_widget.h"
@@ -2516,7 +2516,7 @@
uint32_t PepperPluginInstanceImpl::GetAudioHardwareOutputSampleRate(
PP_Instance instance) {
return render_frame()
- ? AudioDeviceFactory::GetOutputDeviceInfo(
+ ? blink::AudioDeviceFactory::GetOutputDeviceInfo(
render_frame()->GetWebFrame()->GetLocalFrameToken(),
media::AudioSinkParameters())
.output_params()
@@ -2527,7 +2527,7 @@
uint32_t PepperPluginInstanceImpl::GetAudioHardwareOutputBufferSize(
PP_Instance instance) {
return render_frame()
- ? AudioDeviceFactory::GetOutputDeviceInfo(
+ ? blink::AudioDeviceFactory::GetOutputDeviceInfo(
render_frame()->GetWebFrame()->GetLocalFrameToken(),
media::AudioSinkParameters())
.output_params()
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index b1f5e0c4..3f94641e 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -107,8 +107,6 @@
#include "content/renderer/loader/web_url_loader_impl.h"
#include "content/renderer/loader/web_url_request_util.h"
#include "content/renderer/loader/web_worker_fetch_context_impl.h"
-#include "content/renderer/media/audio/audio_device_factory.h"
-#include "content/renderer/media/audio/audio_renderer_sink_cache_impl.h"
#include "content/renderer/media/media_permission_dispatcher.h"
#include "content/renderer/mhtml_handle_writer.h"
#include "content/renderer/mojo/blink_interface_registry_impl.h"
@@ -185,6 +183,7 @@
#include "third_party/blink/public/platform/web_url_response.h"
#include "third_party/blink/public/platform/web_vector.h"
#include "third_party/blink/public/web/blink.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
#include "third_party/blink/public/web/modules/media/audio/web_audio_output_ipc_factory.h"
#include "third_party/blink/public/web/modules/media/webmediaplayer_util.h"
#include "third_party/blink/public/web/modules/mediastream/web_media_stream_device_observer.h"
@@ -2049,8 +2048,6 @@
GetBrowserInterfaceBroker());
}
- AudioRendererSinkCacheImpl::ObserveFrame(this);
-
const base::CommandLine& command_line =
*base::CommandLine::ForCurrentProcess();
if (command_line.HasSwitch(switches::kDomAutomationController))
@@ -6496,12 +6493,14 @@
std::move(receiver), GetTaskRunner(blink::TaskType::kInternalDefault));
}
+// TODO(https://crbug.com/787252): Move this method to Blink, and eliminate
+// the plumbing logic through blink::WebLocalFrameClient.
void RenderFrameImpl::CheckIfAudioSinkExistsAndIsAuthorized(
const blink::WebString& sink_id,
blink::WebSetSinkIdCompleteCallback completion_callback) {
std::move(
blink::ConvertToOutputDeviceStatusCB(std::move(completion_callback)))
- .Run(AudioDeviceFactory::GetOutputDeviceInfo(
+ .Run(blink::AudioDeviceFactory::GetOutputDeviceInfo(
GetWebFrame()->GetLocalFrameToken(),
media::AudioSinkParameters(base::UnguessableToken(),
sink_id.Utf8()))
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 671d685..9fef15fc 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -77,7 +77,6 @@
#include "content/renderer/categorized_worker_pool.h"
#include "content/renderer/effective_connection_type_helper.h"
#include "content/renderer/loader/resource_dispatcher.h"
-#include "content/renderer/media/audio/audio_renderer_mixer_manager.h"
#include "content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h"
#include "content/renderer/media/render_media_client.h"
#include "content/renderer/net_info_helper.h"
@@ -1249,14 +1248,6 @@
#endif
-AudioRendererMixerManager* RenderThreadImpl::GetAudioRendererMixerManager() {
- if (!audio_renderer_mixer_manager_) {
- audio_renderer_mixer_manager_ = AudioRendererMixerManager::Create();
- }
-
- return audio_renderer_mixer_manager_.get();
-}
-
base::WaitableEvent* RenderThreadImpl::GetShutdownEvent() {
return ChildProcess::current()->GetShutDownEvent();
}
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index 0c3b3d0..9e67e7d 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -100,7 +100,6 @@
namespace content {
class AgentSchedulingGroup;
-class AudioRendererMixerManager;
class CategorizedWorkerPool;
class GpuVideoAcceleratorFactoriesImpl;
class RenderThreadObserver;
@@ -294,11 +293,6 @@
scoped_refptr<viz::ContextProviderCommandBuffer>
SharedMainThreadContextProvider();
- // AudioRendererMixerManager instance which manages renderer side mixer
- // instances shared based on configured audio parameters. Lazily created on
- // first call.
- AudioRendererMixerManager* GetAudioRendererMixerManager();
-
class UnfreezableMessageFilter : public IPC::MessageFilter {
public:
explicit UnfreezableMessageFilter(RenderThreadImpl* render_thread_impl);
@@ -584,8 +578,6 @@
scoped_refptr<viz::RasterContextProvider> shared_worker_context_provider_;
- std::unique_ptr<AudioRendererMixerManager> audio_renderer_mixer_manager_;
-
HistogramCustomizer histogram_customizer_;
std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_;
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 715de43..da6477c 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -65,7 +65,6 @@
#include "content/renderer/history_serialization.h"
#include "content/renderer/internal_document_state_data.h"
#include "content/renderer/loader/request_extra_data.h"
-#include "content/renderer/media/audio/audio_device_factory.h"
#include "content/renderer/render_frame_impl.h"
#include "content/renderer/render_frame_proxy.h"
#include "content/renderer/render_process.h"
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
index dc5b1fd..96a17ee 100644
--- a/content/renderer/renderer_blink_platform_impl.cc
+++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -31,6 +31,7 @@
#include "build/build_config.h"
#include "components/url_formatter/url_formatter.h"
#include "content/child/child_process.h"
+#include "content/common/content_constants_internal.h"
#include "content/common/frame_messages.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
@@ -42,7 +43,6 @@
#include "content/renderer/loader/child_url_loader_factory_bundle.h"
#include "content/renderer/loader/resource_dispatcher.h"
#include "content/renderer/loader/web_url_loader_impl.h"
-#include "content/renderer/media/audio/audio_device_factory.h"
#include "content/renderer/media/audio_decoder.h"
#include "content/renderer/media/renderer_webaudiodevice_impl.h"
#include "content/renderer/render_frame_impl.h"
@@ -88,6 +88,7 @@
#include "third_party/blink/public/platform/web_url_loader_factory.h"
#include "third_party/blink/public/platform/web_url_request.h"
#include "third_party/blink/public/platform/web_vector.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/sqlite/sqlite3.h"
#include "ui/base/ui_base_switches.h"
@@ -121,6 +122,7 @@
namespace {
+// TODO(https://crbug.com/787252): Move this method and its callers to Blink.
media::AudioParameters GetAudioHardwareParams() {
blink::WebLocalFrame* const web_frame =
blink::WebLocalFrame::FrameForCurrentContext();
@@ -128,7 +130,7 @@
if (!render_frame)
return media::AudioParameters::UnavailableDeviceParams();
- return AudioDeviceFactory::GetOutputDeviceInfo(
+ return blink::AudioDeviceFactory::GetOutputDeviceInfo(
render_frame->GetWebFrame()->GetLocalFrameToken(),
media::AudioSinkParameters())
.output_params();
@@ -458,6 +460,10 @@
return GetAudioHardwareParams().channels();
}
+base::TimeDelta RendererBlinkPlatformImpl::GetHungRendererDelay() {
+ return kHungRendererDelay;
+}
+
std::unique_ptr<WebAudioDevice> RendererBlinkPlatformImpl::CreateAudioDevice(
unsigned input_channels,
unsigned channels,
@@ -490,7 +496,7 @@
RendererBlinkPlatformImpl::NewAudioCapturerSource(
blink::WebLocalFrame* web_frame,
const media::AudioSourceParameters& params) {
- return AudioDeviceFactory::NewAudioCapturerSource(
+ return blink::AudioDeviceFactory::NewAudioCapturerSource(
web_frame->GetLocalFrameToken(), params);
}
@@ -524,14 +530,14 @@
blink::WebAudioDeviceSourceType source_type,
blink::WebLocalFrame* web_frame,
const media::AudioSinkParameters& params) {
- return AudioDeviceFactory::NewAudioRendererSink(
+ return blink::AudioDeviceFactory::NewAudioRendererSink(
source_type, web_frame->GetLocalFrameToken(), params);
}
media::AudioLatency::LatencyType
RendererBlinkPlatformImpl::GetAudioSourceLatencyType(
blink::WebAudioDeviceSourceType source_type) {
- return AudioDeviceFactory::GetSourceLatencyType(source_type);
+ return blink::AudioDeviceFactory::GetSourceLatencyType(source_type);
}
base::Optional<std::string>
diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h
index cfced91..30af7f4 100644
--- a/content/renderer/renderer_blink_platform_impl.h
+++ b/content/renderer/renderer_blink_platform_impl.h
@@ -121,6 +121,7 @@
double AudioHardwareSampleRate() override;
size_t AudioHardwareBufferSize() override;
unsigned AudioHardwareOutputChannels() override;
+ base::TimeDelta GetHungRendererDelay() override;
std::unique_ptr<blink::WebAudioDevice> CreateAudioDevice(
unsigned input_channels,
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index f8f88b2..6c2f5a5 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -2045,8 +2045,6 @@
"../renderer/loader/test_request_peer.h",
"../renderer/loader/url_loader_client_impl_unittest.cc",
"../renderer/loader/web_url_loader_impl_unittest.cc",
- "../renderer/media/audio/audio_renderer_mixer_manager_unittest.cc",
- "../renderer/media/audio/audio_renderer_sink_cache_unittest.cc",
"../renderer/media/audio/mock_audio_device_factory.cc",
"../renderer/media/audio/mock_audio_device_factory.h",
"../renderer/media/batching_media_log_unittest.cc",
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn
index 4366635..121f651 100644
--- a/third_party/blink/public/BUILD.gn
+++ b/third_party/blink/public/BUILD.gn
@@ -277,6 +277,7 @@
"platform/websocket_handshake_throttle.h",
"web/blink.h",
"web/modules/autofill/web_form_element_observer.h",
+ "web/modules/media/audio/audio_device_factory.h",
"web/modules/media/audio/audio_renderer_sink_cache.h",
"web/modules/media/audio/web_audio_input_ipc_factory.h",
"web/modules/media/audio/web_audio_output_ipc_factory.h",
diff --git a/third_party/blink/public/platform/platform.h b/third_party/blink/public/platform/platform.h
index abfcd20b..4c05fb9 100644
--- a/third_party/blink/public/platform/platform.h
+++ b/third_party/blink/public/platform/platform.h
@@ -191,6 +191,7 @@
virtual double AudioHardwareSampleRate() { return 0; }
virtual size_t AudioHardwareBufferSize() { return 0; }
virtual unsigned AudioHardwareOutputChannels() { return 0; }
+ virtual base::TimeDelta GetHungRendererDelay() { return base::TimeDelta(); }
// SavableResource ----------------------------------------------------
diff --git a/third_party/blink/public/web/modules/media/DEPS b/third_party/blink/public/web/modules/media/DEPS
index 5604de1..105fd89 100644
--- a/third_party/blink/public/web/modules/media/DEPS
+++ b/third_party/blink/public/web/modules/media/DEPS
@@ -1,4 +1,6 @@
include_rules = [
+ "+media/audio/audio_sink_parameters.h",
+ "+media/audio/audio_source_parameters.h",
"+media/base/audio_renderer_sink.h",
"+media/base/eme_constants.h",
"+media/base/pipeline_status.h",
diff --git a/content/renderer/media/audio/audio_device_factory.h b/third_party/blink/public/web/modules/media/audio/audio_device_factory.h
similarity index 78%
rename from content/renderer/media/audio/audio_device_factory.h
rename to third_party/blink/public/web/modules/media/audio/audio_device_factory.h
index 7b752d9..baa5084 100644
--- a/content/renderer/media/audio/audio_device_factory.h
+++ b/third_party/blink/public/web/modules/media/audio/audio_device_factory.h
@@ -2,21 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_RENDERER_MEDIA_AUDIO_AUDIO_DEVICE_FACTORY_H_
-#define CONTENT_RENDERER_MEDIA_AUDIO_AUDIO_DEVICE_FACTORY_H_
+#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_MEDIA_AUDIO_AUDIO_DEVICE_FACTORY_H_
+#define THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_MEDIA_AUDIO_AUDIO_DEVICE_FACTORY_H_
#include <string>
#include "base/callback.h"
#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "content/common/content_export.h"
+#include "base/memory/scoped_refptr.h"
#include "media/audio/audio_sink_parameters.h"
#include "media/audio/audio_source_parameters.h"
#include "media/base/audio_latency.h"
#include "media/base/output_device_info.h"
#include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/blink/public/platform/audio/web_audio_device_source_type.h"
+#include "third_party/blink/public/platform/web_common.h"
namespace media {
class AudioRendererSink;
@@ -24,18 +24,20 @@
class AudioCapturerSource;
} // namespace media
-namespace content {
+namespace blink {
// A factory for creating AudioRendererSinks and AudioCapturerSources. There is
// a global factory function that can be installed for the purposes of testing
// to provide specialized implementations.
// TODO(olka): rename it, probably split it into AudioRendererSinkFactory and
// AudioCapturerSourceFactory.
-class CONTENT_EXPORT AudioDeviceFactory {
+//
+// TODO(https://crrev.com/787252): Add a 'Web' prefix to the class name.
+class BLINK_MODULES_EXPORT AudioDeviceFactory {
public:
// Maps the source type to the audio latency it requires.
static media::AudioLatency::LatencyType GetSourceLatencyType(
- blink::WebAudioDeviceSourceType source);
+ WebAudioDeviceSourceType source);
// Creates a sink for AudioRendererMixer. |frame_token| refers to the
// RenderFrame containing the entity producing the audio. Note: These sinks do
@@ -43,7 +45,7 @@
// required to use the GetOutputDeviceInfoAsync() API. As such they are
// configured with no authorization timeout value.
static scoped_refptr<media::AudioRendererSink> NewAudioRendererMixerSink(
- const blink::LocalFrameToken& frame_token,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params);
// Creates an AudioRendererSink bound to an AudioOutputDevice.
@@ -52,29 +54,29 @@
// TODO(olka): merge it with NewRestartableOutputDevice() as soon as
// AudioOutputDevice is fixed to be restartable.
static scoped_refptr<media::AudioRendererSink> NewAudioRendererSink(
- blink::WebAudioDeviceSourceType source_type,
- const blink::LocalFrameToken& frame_token,
+ WebAudioDeviceSourceType source_type,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params);
// Creates a SwitchableAudioRendererSink bound to an AudioOutputDevice
// Basing on |source_type| and build configuration, audio played out through
// the sink goes to AOD directly or can be mixed with other audio before that.
static scoped_refptr<media::SwitchableAudioRendererSink>
- NewSwitchableAudioRendererSink(blink::WebAudioDeviceSourceType source_type,
- const blink::LocalFrameToken& frame_token,
+ NewSwitchableAudioRendererSink(WebAudioDeviceSourceType source_type,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params);
// A helper to get device info in the absence of AudioOutputDevice.
// Must be called on renderer thread only.
static media::OutputDeviceInfo GetOutputDeviceInfo(
- const blink::LocalFrameToken& frame_token,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params);
// Creates an AudioCapturerSource using the currently registered factory.
// |frame_token| refers to the RenderFrame containing the entity
// consuming the audio.
static scoped_refptr<media::AudioCapturerSource> NewAudioCapturerSource(
- const blink::LocalFrameToken& frame_token,
+ const LocalFrameToken& frame_token,
const media::AudioSourceParameters& params);
protected:
@@ -90,23 +92,23 @@
// output device. |auth_timeout| is the authorization timeout allowed for the
// underlying AudioOutputDevice instance; a timeout of zero means no timeout.
virtual scoped_refptr<media::AudioRendererSink> CreateFinalAudioRendererSink(
- const blink::LocalFrameToken& frame_token,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params,
base::TimeDelta auth_timeout) = 0;
virtual scoped_refptr<media::AudioRendererSink> CreateAudioRendererSink(
- blink::WebAudioDeviceSourceType source_type,
- const blink::LocalFrameToken& frame_token,
+ WebAudioDeviceSourceType source_type,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params) = 0;
virtual scoped_refptr<media::SwitchableAudioRendererSink>
CreateSwitchableAudioRendererSink(
- blink::WebAudioDeviceSourceType source_type,
- const blink::LocalFrameToken& frame_token,
+ WebAudioDeviceSourceType source_type,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params) = 0;
virtual scoped_refptr<media::AudioCapturerSource> CreateAudioCapturerSource(
- const blink::LocalFrameToken& frame_token,
+ const LocalFrameToken& frame_token,
const media::AudioSourceParameters& params) = 0;
private:
@@ -115,13 +117,13 @@
static AudioDeviceFactory* factory_;
static scoped_refptr<media::AudioRendererSink> NewFinalAudioRendererSink(
- const blink::LocalFrameToken& frame_token,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params,
base::TimeDelta auth_timeout);
DISALLOW_COPY_AND_ASSIGN(AudioDeviceFactory);
};
-} // namespace content
+} // namespace blink
-#endif // CONTENT_RENDERER_MEDIA_AUDIO_AUDIO_DEVICE_FACTORY_H_
+#endif // THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_MEDIA_AUDIO_AUDIO_DEVICE_FACTORY_H_
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn
index 244cbcf..5046242 100644
--- a/third_party/blink/renderer/modules/BUILD.gn
+++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -325,6 +325,8 @@
"manifest/manifest_manager_unittest.cc",
"manifest/manifest_parser_unittest.cc",
"manifest/manifest_type_converters_unittest.cc",
+ "media/audio/audio_renderer_mixer_manager_test.cc",
+ "media/audio/audio_renderer_sink_cache_test.cc",
"media/audio/mojo_audio_input_ipc_test.cc",
"media/audio/mojo_audio_output_ipc_test.cc",
"media/audio/web_audio_output_ipc_factory_test.cc",
diff --git a/third_party/blink/renderer/modules/media/BUILD.gn b/third_party/blink/renderer/modules/media/BUILD.gn
index 5751044..ebfa34c4 100644
--- a/third_party/blink/renderer/modules/media/BUILD.gn
+++ b/third_party/blink/renderer/modules/media/BUILD.gn
@@ -6,6 +6,11 @@
blink_modules_sources("media") {
sources = [
+ "audio/audio_device_factory.cc",
+ "audio/audio_renderer_mixer_manager.cc",
+ "audio/audio_renderer_mixer_manager.h",
+ "audio/audio_renderer_sink_cache_impl.cc",
+ "audio/audio_renderer_sink_cache_impl.h",
"audio/mojo_audio_input_ipc.cc",
"audio/mojo_audio_input_ipc.h",
"audio/mojo_audio_output_ipc.cc",
diff --git a/third_party/blink/renderer/modules/media/audio/DEPS b/third_party/blink/renderer/modules/media/audio/DEPS
index 81d44df..00a272cf 100644
--- a/third_party/blink/renderer/modules/media/audio/DEPS
+++ b/third_party/blink/renderer/modules/media/audio/DEPS
@@ -1,7 +1,16 @@
include_rules = [
+ "+base/unguessable_token.h",
+ "+base/threading/platform_thread.h",
"+media/audio",
- "+media/base/audio_parameters.h",
+ "+media/base",
"+media/mojo",
+
+ # TODO(https://crbug.com/787252): Replace this use by a Blink singleton
+ # construction.
+ "+base/no_destructor.h",
+
+ # TODO(https://crbug.com/787252): Replace the use by WTF::HashMap.
+ "+base/containers/flat_map.h",
]
specific_include_rules = {
@@ -10,6 +19,7 @@
"+base/run_loop.h",
"+base/test/bind_test_util.h",
"+base/test/gtest_util.h",
+ "+base/test/test_mock_time_task_runner.h",
"+base/threading/thread.h",
],
}
diff --git a/content/renderer/media/audio/audio_device_factory.cc b/third_party/blink/renderer/modules/media/audio/audio_device_factory.cc
similarity index 88%
rename from content/renderer/media/audio/audio_device_factory.cc
rename to third_party/blink/renderer/modules/media/audio/audio_device_factory.cc
index 24321a5..b910b91 100644
--- a/content/renderer/media/audio/audio_device_factory.cc
+++ b/third_party/blink/renderer/modules/media/audio/audio_device_factory.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/renderer/media/audio/audio_device_factory.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
#include <algorithm>
@@ -15,20 +15,17 @@
#include "base/task/thread_pool.h"
#include "base/threading/platform_thread.h"
#include "build/build_config.h"
-#include "content/common/content_constants_internal.h"
-#include "content/renderer/media/audio/audio_renderer_mixer_manager.h"
-#include "content/renderer/media/audio/audio_renderer_sink_cache_impl.h"
-#include "content/renderer/render_frame_impl.h"
-#include "content/renderer/render_thread_impl.h"
#include "media/audio/audio_input_device.h"
#include "media/audio/audio_output_device.h"
#include "media/base/audio_renderer_mixer_input.h"
-#include "media/base/media_switches.h"
-#include "third_party/blink/public/mojom/media/renderer_audio_input_stream_factory.mojom.h"
+#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/web/modules/media/audio/web_audio_input_ipc_factory.h"
#include "third_party/blink/public/web/modules/media/audio/web_audio_output_ipc_factory.h"
+#include "third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager.h"
+#include "third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_impl.h"
+#include "third_party/blink/renderer/platform/wtf/wtf.h"
-namespace content {
+namespace blink {
// static
AudioDeviceFactory* AudioDeviceFactory::factory_ = nullptr;
@@ -51,7 +48,8 @@
base::TimeDelta GetDefaultAuthTimeout() {
// Set authorization request timeout at 80% of renderer hung timeout,
// but no more than kMaxAuthorizationTimeout.
- return std::min(kHungRendererDelay * 8 / 10, kMaxAuthorizationTimeout);
+ return std::min(Platform::Current()->GetHungRendererDelay() * 8 / 10,
+ kMaxAuthorizationTimeout);
}
scoped_refptr<media::AudioOutputDevice> NewOutputDevice(
@@ -79,11 +77,9 @@
blink::WebAudioDeviceSourceType source_type,
const blink::LocalFrameToken& frame_token,
const media::AudioSinkParameters& params) {
- RenderThreadImpl* render_thread = RenderThreadImpl::current();
- DCHECK(render_thread) << "RenderThreadImpl is not instantiated, or "
- << "GetOutputDeviceInfo() is called on a wrong thread ";
+ DCHECK(IsMainThread()) << __func__ << "() is called on a wrong thread.";
DCHECK(!params.processing_id.has_value());
- return render_thread->GetAudioRendererMixerManager()->CreateInput(
+ return AudioRendererMixerManager::GetInstance().CreateInput(
frame_token, params.session_id, params.device_id,
AudioDeviceFactory::GetSourceLatencyType(source_type));
}
@@ -192,14 +188,14 @@
media::OutputDeviceInfo AudioDeviceFactory::GetOutputDeviceInfo(
const blink::LocalFrameToken& frame_token,
const media::AudioSinkParameters& params) {
- DCHECK(RenderThreadImpl::current())
- << "RenderThreadImpl is not instantiated, or "
- << "GetOutputDeviceInfo() is called on a wrong thread ";
-
+ DCHECK(IsMainThread()) << __func__ << "() is called on a wrong thread.";
constexpr base::TimeDelta kDeleteTimeout =
base::TimeDelta::FromMilliseconds(5000);
// There's one process wide instance that lives on the render thread.
+ //
+ // TODO(crbug.com/787252): Replace the use of base::ThreadPool below by
+ // worker_pool::PostTask().
static base::NoDestructor<AudioRendererSinkCacheImpl> cache(
base::ThreadPool::CreateSequencedTaskRunner(
{base::TaskPriority::BEST_EFFORT,
@@ -236,4 +232,4 @@
return NewOutputDevice(frame_token, params, auth_timeout);
}
-} // namespace content
+} // namespace blink
diff --git a/content/renderer/media/audio/audio_renderer_mixer_manager.cc b/third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager.cc
similarity index 94%
rename from content/renderer/media/audio/audio_renderer_mixer_manager.cc
rename to third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager.cc
index c905d5b..491f09c 100644
--- a/content/renderer/media/audio/audio_renderer_mixer_manager.cc
+++ b/third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/renderer/media/audio/audio_renderer_mixer_manager.h"
+#include "third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager.h"
#include <algorithm>
#include <limits>
@@ -16,10 +16,11 @@
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "build/build_config.h"
-#include "content/renderer/media/audio/audio_device_factory.h"
#include "media/audio/audio_device_description.h"
#include "media/base/audio_renderer_mixer.h"
#include "media/base/audio_renderer_mixer_input.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
+#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
namespace {
@@ -102,7 +103,7 @@
} // namespace
-namespace content {
+namespace blink {
AudioRendererMixerManager::AudioRendererMixerManager(
CreateSinkCB create_sink_cb)
@@ -117,9 +118,11 @@
}
// static
-std::unique_ptr<AudioRendererMixerManager> AudioRendererMixerManager::Create() {
- return base::WrapUnique(new AudioRendererMixerManager(
- base::BindRepeating(&AudioDeviceFactory::NewAudioRendererMixerSink)));
+AudioRendererMixerManager& AudioRendererMixerManager::GetInstance() {
+ DEFINE_THREAD_SAFE_STATIC_LOCAL(
+ AudioRendererMixerManager, instance,
+ (base::BindRepeating(&AudioDeviceFactory::NewAudioRendererMixerSink)));
+ return instance;
}
scoped_refptr<media::AudioRendererMixerInput>
@@ -244,4 +247,4 @@
AudioRendererMixerManager::MixerKey::~MixerKey() = default;
-} // namespace content
+} // namespace blink
diff --git a/content/renderer/media/audio/audio_renderer_mixer_manager.h b/third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager.h
similarity index 89%
rename from content/renderer/media/audio/audio_renderer_mixer_manager.h
rename to third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager.h
index 076ea10..fe3a7388 100644
--- a/content/renderer/media/audio/audio_renderer_mixer_manager.h
+++ b/third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_RENDERER_MEDIA_AUDIO_AUDIO_RENDERER_MIXER_MANAGER_H_
-#define CONTENT_RENDERER_MEDIA_AUDIO_AUDIO_RENDERER_MIXER_MANAGER_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_AUDIO_AUDIO_RENDERER_MIXER_MANAGER_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_AUDIO_AUDIO_RENDERER_MIXER_MANAGER_H_
#include <bitset>
#include <map>
@@ -14,7 +14,6 @@
#include "base/macros.h"
#include "base/synchronization/lock.h"
#include "base/unguessable_token.h"
-#include "content/common/content_export.h"
#include "media/audio/audio_device_description.h"
#include "media/audio/audio_sink_parameters.h"
#include "media/base/audio_latency.h"
@@ -22,14 +21,15 @@
#include "media/base/audio_renderer_mixer_pool.h"
#include "media/base/output_device_info.h"
#include "third_party/blink/public/common/tokens/tokens.h"
+#include "third_party/blink/public/platform/web_common.h"
namespace media {
class AudioRendererMixer;
class AudioRendererMixerInput;
class AudioRendererSink;
-}
+} // namespace media
-namespace content {
+namespace blink {
// Manages sharing of an AudioRendererMixer among AudioRendererMixerInputs based
// on their AudioParameters configuration. Inputs with the same AudioParameters
@@ -40,12 +40,15 @@
//
// There should only be one instance of AudioRendererMixerManager per render
// thread.
-class CONTENT_EXPORT AudioRendererMixerManager
+class BLINK_MODULES_EXPORT AudioRendererMixerManager
: public media::AudioRendererMixerPool {
public:
~AudioRendererMixerManager() final;
- static std::unique_ptr<AudioRendererMixerManager> Create();
+ // AudioRendererMixerManager instance which manages renderer side mixer
+ // instances shared based on configured audio parameters. Lazily created on
+ // first call.
+ static AudioRendererMixerManager& GetInstance();
// Creates an AudioRendererMixerInput with the proper callbacks necessary to
// retrieve an AudioRendererMixer instance from AudioRendererMixerManager.
@@ -66,7 +69,7 @@
void ReturnMixer(media::AudioRendererMixer* mixer) final;
// media::AudioRendererMixerPool look-alikes, with strongly typed tokens.
- // Clients in content/ should use these functions.
+ // Clients in blink/ should use these functions.
media::AudioRendererMixer* GetMixer(
const blink::LocalFrameToken& source_frame_token,
const media::AudioParameters& input_params,
@@ -92,7 +95,7 @@
// media::AudioRendererMixerPool implementation. This interface faces
// code in media/ which uses untyped tokens, and is kept private so that
- // content/ clients prefer to use the strongly-typed-token variants.
+ // blink/ clients prefer to use the strongly-typed-token variants.
media::AudioRendererMixer* GetMixer(
const base::UnguessableToken& source_frame_token,
const media::AudioParameters& input_params,
@@ -173,6 +176,6 @@
DISALLOW_COPY_AND_ASSIGN(AudioRendererMixerManager);
};
-} // namespace content
+} // namespace blink
-#endif // CONTENT_RENDERER_MEDIA_AUDIO_AUDIO_RENDERER_MIXER_MANAGER_H_
+#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_AUDIO_AUDIO_RENDERER_MIXER_MANAGER_H_
diff --git a/content/renderer/media/audio/audio_renderer_mixer_manager_unittest.cc b/third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager_test.cc
similarity index 95%
rename from content/renderer/media/audio/audio_renderer_mixer_manager_unittest.cc
rename to third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager_test.cc
index c26fe50..8cbbd2b 100644
--- a/content/renderer/media/audio/audio_renderer_mixer_manager_unittest.cc
+++ b/third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager_test.cc
@@ -2,16 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/renderer/media/audio/audio_renderer_mixer_manager.h"
+#include "third_party/blink/renderer/modules/media/audio/audio_renderer_mixer_manager.h"
#include <memory>
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/macros.h"
-#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_refptr.h"
#include "base/notreached.h"
-#include "base/test/task_environment.h"
+#include "base/run_loop.h"
#include "build/build_config.h"
#include "media/audio/audio_device_description.h"
#include "media/base/audio_parameters.h"
@@ -22,7 +22,7 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
-namespace content {
+namespace blink {
namespace {
const int kSampleRate = 48000;
@@ -37,8 +37,8 @@
const char kMatchedDeviceId[] = "matched-device-id";
const char kNonexistentDeviceId[] = "nonexistent-device-id";
-const blink::LocalFrameToken kFrameToken;
-const blink::LocalFrameToken kAnotherFrameToken;
+const LocalFrameToken kFrameToken;
+const LocalFrameToken kAnotherFrameToken;
} // namespace
using media::AudioLatency;
@@ -74,12 +74,11 @@
}
enum class SinkUseState { kExistingSink, kNewSink };
- media::AudioRendererMixer* GetMixer(
- const blink::LocalFrameToken& source_frame_token,
- const media::AudioParameters& params,
- AudioLatency::LatencyType latency,
- const std::string& device_id,
- SinkUseState sink_state) {
+ media::AudioRendererMixer* GetMixer(const LocalFrameToken& source_frame_token,
+ const media::AudioParameters& params,
+ AudioLatency::LatencyType latency,
+ const std::string& device_id,
+ SinkUseState sink_state) {
auto sink = GetSink(
source_frame_token,
media::AudioSinkParameters(base::UnguessableToken(), device_id));
@@ -95,7 +94,7 @@
}
scoped_refptr<media::AudioRendererMixerInput> CreateInputHelper(
- const blink::LocalFrameToken& source_frame_token,
+ const LocalFrameToken& source_frame_token,
const base::UnguessableToken& session_id,
const std::string& device_id,
media::AudioLatency::LatencyType latency,
@@ -105,7 +104,7 @@
device_id, latency);
input->GetOutputDeviceInfoAsync(
base::DoNothing()); // Primes input, needed for tests.
- task_env_.RunUntilIdle();
+ base::RunLoop().RunUntilIdle();
input->Initialize(params, callback);
return input;
}
@@ -115,7 +114,7 @@
protected:
scoped_refptr<media::MockAudioRendererSink> GetSink(
- const blink::LocalFrameToken& source_frame_token,
+ const LocalFrameToken& source_frame_token,
const media::AudioSinkParameters& params) {
if ((params.device_id == kDefaultDeviceId) ||
(params.device_id == kAnotherDeviceId)) {
@@ -138,13 +137,12 @@
return nullptr;
}
- base::test::TaskEnvironment task_env_;
std::unique_ptr<AudioRendererMixerManager> manager_;
scoped_refptr<media::MockAudioRendererSink> mock_sink_;
private:
scoped_refptr<media::AudioRendererSink> GetPlainSink(
- const blink::LocalFrameToken& source_frame_token,
+ const LocalFrameToken& source_frame_token,
const media::AudioSinkParameters& params) {
return GetSink(source_frame_token, params);
}
@@ -202,9 +200,7 @@
EXPECT_EQ(mixer_count(), 0);
media::AudioParameters params1(AudioParameters::AUDIO_PCM_LINEAR,
- kChannelLayout,
- kSampleRate,
- kBufferSize);
+ kChannelLayout, kSampleRate, kBufferSize);
media::AudioRendererMixer* mixer1 =
GetMixer(kFrameToken, params1, AudioLatency::LATENCY_PLAYBACK,
kDefaultDeviceId, SinkUseState::kNewSink);
@@ -214,8 +210,7 @@
// Different sample rates, formats, bit depths, and buffer sizes should not
// result in a different mixer.
media::AudioParameters params2(AudioParameters::AUDIO_PCM_LOW_LATENCY,
- kChannelLayout,
- kSampleRate * 2,
+ kChannelLayout, kSampleRate * 2,
kBufferSize * 2);
media::AudioRendererMixer* mixer2 =
GetMixer(kFrameToken, params2, AudioLatency::LATENCY_PLAYBACK,
@@ -227,8 +222,7 @@
// Modify some parameters that do matter: channel layout
media::AudioParameters params3(AudioParameters::AUDIO_PCM_LOW_LATENCY,
- kAnotherChannelLayout,
- kSampleRate,
+ kAnotherChannelLayout, kSampleRate,
kBufferSize);
ASSERT_NE(params3.channel_layout(), params1.channel_layout());
media::AudioRendererMixer* mixer3 =
@@ -789,4 +783,4 @@
ReturnMixer(mixer);
}
-} // namespace content
+} // namespace blink
diff --git a/content/renderer/media/audio/audio_renderer_sink_cache_impl.cc b/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_impl.cc
similarity index 81%
rename from content/renderer/media/audio/audio_renderer_sink_cache_impl.cc
rename to third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_impl.cc
index 15d1eb3..4e752ca 100644
--- a/content/renderer/media/audio/audio_renderer_sink_cache_impl.cc
+++ b/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_impl.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/renderer/media/audio/audio_renderer_sink_cache_impl.h"
+#include "third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_impl.h"
#include <algorithm>
#include <memory>
@@ -16,47 +16,62 @@
#include "base/synchronization/lock.h"
#include "base/task/post_task.h"
#include "base/trace_event/trace_event.h"
-#include "content/public/renderer/render_frame.h"
-#include "content/public/renderer/render_frame_observer.h"
-#include "content/renderer/media/audio/audio_device_factory.h"
#include "media/audio/audio_device_description.h"
#include "media/base/audio_renderer_sink.h"
+#include "third_party/blink/public/web/modules/media/audio/audio_device_factory.h"
#include "third_party/blink/public/web/web_local_frame.h"
+#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
+#include "third_party/blink/renderer/core/frame/local_dom_window.h"
+#include "third_party/blink/renderer/core/frame/local_frame.h"
+#include "third_party/blink/renderer/platform/supplementable.h"
-namespace content {
+namespace blink {
AudioRendererSinkCacheImpl* AudioRendererSinkCacheImpl::instance_ = nullptr;
-class AudioRendererSinkCacheImpl::FrameObserver : public RenderFrameObserver {
+class AudioRendererSinkCacheImpl::FrameObserver final
+ : public GarbageCollected<AudioRendererSinkCacheImpl::FrameObserver>,
+ public Supplement<LocalFrame>,
+ public ExecutionContextLifecycleObserver {
public:
- explicit FrameObserver(content::RenderFrame* render_frame)
- : RenderFrameObserver(render_frame) {}
- ~FrameObserver() override {}
+ static const char kSupplementName[];
+ static FrameObserver* From(LocalFrame& frame) {
+ return Supplement<LocalFrame>::From<FrameObserver>(frame);
+ }
+
+ explicit FrameObserver(LocalFrame& frame)
+ : Supplement<LocalFrame>(frame),
+ ExecutionContextLifecycleObserver(frame.DomWindow()) {}
+ ~FrameObserver() { DCHECK(dropped_frame_cached_); }
+
+ void Trace(Visitor* visitor) const final {
+ Supplement<LocalFrame>::Trace(visitor);
+ ExecutionContextLifecycleObserver::Trace(visitor);
+ }
+
+ // ExecutionContextLifecycleObserver implementation.
+ void ContextDestroyed() override { DropFrameCache(); }
private:
- // content::RenderFrameObserver implementation:
- void DidCommitProvisionalLoad(ui::PageTransition transition) override {
- DropFrameCache();
- }
-
- void OnDestruct() override {
- DropFrameCache();
- delete this;
- }
-
void DropFrameCache() {
+ dropped_frame_cached_ = true;
+
if (!AudioRendererSinkCacheImpl::instance_)
return;
- if (!render_frame())
+ if (!GetSupplementable())
return;
- blink::LocalFrameToken frame_token =
- render_frame()->GetWebFrame()->GetLocalFrameToken();
+
+ LocalFrameToken frame_token = GetSupplementable()->GetLocalFrameToken();
AudioRendererSinkCacheImpl::instance_->DropSinksForFrame(frame_token);
}
+ bool dropped_frame_cached_ = false;
DISALLOW_COPY_AND_ASSIGN(FrameObserver);
};
+const char AudioRendererSinkCacheImpl::FrameObserver::kSupplementName[] =
+ "AudioRendererSinkCacheImpl::FrameObserver";
+
namespace {
enum GetOutputDeviceInfoCacheUtilization {
@@ -83,15 +98,19 @@
// Cached sink data.
struct AudioRendererSinkCacheImpl::CacheEntry {
- blink::LocalFrameToken source_frame_token;
+ LocalFrameToken source_frame_token;
std::string device_id;
scoped_refptr<media::AudioRendererSink> sink; // Sink instance
bool used; // True if in use by a client.
};
// static
-void AudioRendererSinkCacheImpl::ObserveFrame(RenderFrame* frame) {
- new AudioRendererSinkCacheImpl::FrameObserver(frame);
+void AudioRendererSinkCacheImpl::InstallFrameObserver(LocalFrame& frame) {
+ if (AudioRendererSinkCacheImpl::FrameObserver::From(frame))
+ return;
+ Supplement<LocalFrame>::ProvideTo(
+ frame,
+ MakeGarbageCollected<AudioRendererSinkCacheImpl::FrameObserver>(frame));
}
AudioRendererSinkCacheImpl::AudioRendererSinkCacheImpl(
@@ -107,8 +126,8 @@
AudioRendererSinkCacheImpl::~AudioRendererSinkCacheImpl() {
// We just release all the cached sinks here. Stop them first.
- // We can stop all the sinks, no matter they are used or not, since everything
- // is being destroyed anyways.
+ // We can stop all the sinks, no matter they are used or not, since
+ // everything is being destroyed anyways.
for (auto& entry : cache_)
entry.sink->Stop();
@@ -117,7 +136,7 @@
}
media::OutputDeviceInfo AudioRendererSinkCacheImpl::GetSinkInfo(
- const blink::LocalFrameToken& source_frame_token,
+ const LocalFrameToken& source_frame_token,
const base::UnguessableToken& session_id,
const std::string& device_id) {
TRACE_EVENT_BEGIN2("audio", "AudioRendererSinkCacheImpl::GetSinkInfo",
@@ -171,13 +190,13 @@
TRACE_EVENT_END1("audio", "AudioRendererSinkCacheImpl::GetSinkInfo", "result",
"Cache miss");
- // |sink| is ref-counted, so it's ok if it is removed from cache before we get
- // here.
+ // |sink| is ref-counted, so it's ok if it is removed from cache before we
+ // get here.
return sink->GetOutputDeviceInfo();
}
scoped_refptr<media::AudioRendererSink> AudioRendererSinkCacheImpl::GetSink(
- const blink::LocalFrameToken& source_frame_token,
+ const LocalFrameToken& source_frame_token,
const std::string& device_id) {
UMA_HISTOGRAM_BOOLEAN("Media.Audio.Render.SinkCache.UsedForSinkCreation",
true);
@@ -285,7 +304,7 @@
AudioRendererSinkCacheImpl::CacheContainer::iterator
AudioRendererSinkCacheImpl::FindCacheEntry_Locked(
- const blink::LocalFrameToken& source_frame_token,
+ const LocalFrameToken& source_frame_token,
const std::string& device_id,
bool unused_only) {
return std::find_if(
@@ -297,8 +316,8 @@
return false;
if (media::AudioDeviceDescription::IsDefaultDevice(device_id) &&
media::AudioDeviceDescription::IsDefaultDevice(val.device_id)) {
- // Both device IDs represent the same default device => do not compare
- // them;
+ // Both device IDs represent the same default device => do not
+ // compare them;
return true;
}
return val.device_id == device_id;
@@ -306,7 +325,7 @@
}
void AudioRendererSinkCacheImpl::CacheOrStopUnusedSink(
- const blink::LocalFrameToken& source_frame_token,
+ const LocalFrameToken& source_frame_token,
const std::string& device_id,
scoped_refptr<media::AudioRendererSink> sink) {
if (!SinkIsHealthy(sink.get())) {
@@ -329,7 +348,7 @@
}
void AudioRendererSinkCacheImpl::DropSinksForFrame(
- const blink::LocalFrameToken& source_frame_token) {
+ const LocalFrameToken& source_frame_token) {
base::AutoLock auto_lock(cache_lock_);
base::EraseIf(cache_, [source_frame_token](const CacheEntry& val) {
if (val.source_frame_token == source_frame_token) {
@@ -340,8 +359,8 @@
});
}
-int AudioRendererSinkCacheImpl::GetCacheSizeForTesting() {
+size_t AudioRendererSinkCacheImpl::GetCacheSizeForTesting() {
return cache_.size();
}
-} // namespace content
+} // namespace blink
diff --git a/content/renderer/media/audio/audio_renderer_sink_cache_impl.h b/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_impl.h
similarity index 74%
rename from content/renderer/media/audio/audio_renderer_sink_cache_impl.h
rename to third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_impl.h
index f2ba401..38ee44a6 100644
--- a/content/renderer/media/audio/audio_renderer_sink_cache_impl.h
+++ b/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_impl.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_RENDERER_MEDIA_AUDIO_AUDIO_RENDERER_SINK_CACHE_IMPL_H_
-#define CONTENT_RENDERER_MEDIA_AUDIO_AUDIO_RENDERER_SINK_CACHE_IMPL_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_AUDIO_AUDIO_RENDERER_SINK_CACHE_IMPL_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_AUDIO_AUDIO_RENDERER_SINK_CACHE_IMPL_H_
#include "third_party/blink/public/web/modules/media/audio/audio_renderer_sink_cache.h"
@@ -14,33 +14,29 @@
#include "base/sequenced_task_runner.h"
#include "base/synchronization/lock.h"
#include "base/time/time.h"
-#include "content/common/content_export.h"
#include "media/audio/audio_sink_parameters.h"
#include "third_party/blink/public/common/tokens/tokens.h"
+#include "third_party/blink/renderer/modules/modules_export.h"
-namespace content {
+namespace blink {
-class RenderFrame;
+class LocalFrame;
// AudioRendererSinkCache implementation.
-class CONTENT_EXPORT AudioRendererSinkCacheImpl
- : public blink::AudioRendererSinkCache {
+class MODULES_EXPORT AudioRendererSinkCacheImpl
+ : public AudioRendererSinkCache {
public:
class FrameObserver;
// Callback to be used for AudioRendererSink creation
using CreateSinkCallback =
base::RepeatingCallback<scoped_refptr<media::AudioRendererSink>(
- const blink::LocalFrameToken& frame_token,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params)>;
// If called, the cache will drop sinks belonging to the specified frame on
// navigation.
- //
- // TODO(https://crbug.com/787252): Move the declaration back to
- // AudioRendererSinkCache when this header moves to
- // blink/renderer/modules/media/audio.
- static void ObserveFrame(RenderFrame* frame);
+ static void InstallFrameObserver(LocalFrame& frame);
// |cleanup_task_runner| will be used to delete sinks when they are unused,
// AudioRendererSinkCacheImpl must outlive any tasks posted to it. Since
@@ -53,12 +49,11 @@
~AudioRendererSinkCacheImpl() final;
// AudioRendererSinkCache implementation:
- media::OutputDeviceInfo GetSinkInfo(
- const blink::LocalFrameToken& source_frame_token,
- const base::UnguessableToken& session_id,
- const std::string& device_id) final;
+ media::OutputDeviceInfo GetSinkInfo(const LocalFrameToken& source_frame_token,
+ const base::UnguessableToken& session_id,
+ const std::string& device_id) final;
scoped_refptr<media::AudioRendererSink> GetSink(
- const blink::LocalFrameToken& source_frame_token,
+ const LocalFrameToken& source_frame_token,
const std::string& device_id) final;
void ReleaseSink(const media::AudioRendererSink* sink_ptr) final;
@@ -81,18 +76,18 @@
bool force_delete_used);
CacheContainer::iterator FindCacheEntry_Locked(
- const blink::LocalFrameToken& source_frame_token,
+ const LocalFrameToken& source_frame_token,
const std::string& device_id,
bool unused_only);
- void CacheOrStopUnusedSink(const blink::LocalFrameToken& source_frame_token,
+ void CacheOrStopUnusedSink(const LocalFrameToken& source_frame_token,
const std::string& device_id,
scoped_refptr<media::AudioRendererSink> sink);
- void DropSinksForFrame(const blink::LocalFrameToken& source_frame_token);
+ void DropSinksForFrame(const LocalFrameToken& source_frame_token);
// To avoid publishing CacheEntry structure in the header.
- int GetCacheSizeForTesting();
+ size_t GetCacheSizeForTesting();
// Global instance, set in constructor and unset in destructor.
static AudioRendererSinkCacheImpl* instance_;
@@ -118,6 +113,6 @@
DISALLOW_COPY_AND_ASSIGN(AudioRendererSinkCacheImpl);
};
-} // namespace content
+} // namespace blink
-#endif // CONTENT_RENDERER_MEDIA_AUDIO_AUDIO_RENDERER_SINK_CACHE_IMPL_H_
+#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_AUDIO_AUDIO_RENDERER_SINK_CACHE_IMPL_H_
diff --git a/content/renderer/media/audio/audio_renderer_sink_cache_unittest.cc b/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_test.cc
similarity index 88%
rename from content/renderer/media/audio/audio_renderer_sink_cache_unittest.cc
rename to third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_test.cc
index 58289b6e..7220d31 100644
--- a/content/renderer/media/audio/audio_renderer_sink_cache_unittest.cc
+++ b/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_test.cc
@@ -2,14 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/renderer/media/audio/audio_renderer_sink_cache_impl.h"
+#include "third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_impl.h"
#include <utility>
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/check.h"
-#include "base/test/task_environment.h"
+#include "base/test/test_mock_time_task_runner.h"
#include "base/threading/thread.h"
#include "media/audio/audio_device_description.h"
#include "media/base/audio_parameters.h"
@@ -17,14 +17,14 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
-namespace content {
+namespace blink {
namespace {
const char* const kDefaultDeviceId =
media::AudioDeviceDescription::kDefaultDeviceId;
const char kAnotherDeviceId[] = "another-device-id";
const char kUnhealthyDeviceId[] = "i-am-sick";
-const blink::LocalFrameToken kFrameToken;
+const LocalFrameToken kFrameToken;
constexpr base::TimeDelta kDeleteTimeout =
base::TimeDelta::FromMilliseconds(500);
} // namespace
@@ -32,18 +32,22 @@
class AudioRendererSinkCacheTest : public testing::Test {
public:
AudioRendererSinkCacheTest()
- : task_env_(base::test::TaskEnvironment::TimeSource::MOCK_TIME,
- base::test::TaskEnvironment::ThreadPoolExecutionMode::QUEUED),
+ : task_runner_(base::MakeRefCounted<base::TestMockTimeTaskRunner>(
+ base::Time::Now(),
+ base::TimeTicks::Now())),
+ task_runner_context_(
+ std::make_unique<base::TestMockTimeTaskRunner::ScopedContext>(
+ task_runner_)),
cache_(std::make_unique<AudioRendererSinkCacheImpl>(
- task_env_.GetMainThreadTaskRunner(),
+ task_runner_,
base::BindRepeating(&AudioRendererSinkCacheTest::CreateSink,
base::Unretained(this)),
kDeleteTimeout)) {}
~AudioRendererSinkCacheTest() override {
- task_env_.FastForwardUntilNoTasksRemain();
+ task_runner_->FastForwardUntilNoTasksRemain();
}
- void GetSink(const blink::LocalFrameToken& frame_token,
+ void GetSink(const LocalFrameToken& frame_token,
const std::string& device_id,
media::AudioRendererSink** sink) {
*sink = cache_->GetSink(frame_token, device_id).get();
@@ -51,17 +55,17 @@
protected:
int sink_count() {
- DCHECK(task_env_.GetMainThreadTaskRunner()->BelongsToCurrentThread());
+ DCHECK(task_runner_->BelongsToCurrentThread());
return cache_->GetCacheSizeForTesting();
}
scoped_refptr<media::AudioRendererSink> CreateSink(
- const blink::LocalFrameToken& frame_token,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params) {
return new testing::NiceMock<media::MockAudioRendererSink>(
params.device_id, (params.device_id == kUnhealthyDeviceId)
- ? media::OUTPUT_DEVICE_STATUS_ERROR_INTERNAL
- : media::OUTPUT_DEVICE_STATUS_OK);
+ ? media::OUTPUT_DEVICE_STATUS_ERROR_INTERNAL
+ : media::OUTPUT_DEVICE_STATUS_OK);
}
void ExpectNotToStop(media::AudioRendererSink* sink) {
@@ -85,11 +89,16 @@
e.Wait();
}
- void DropSinksForFrame(const blink::LocalFrameToken& frame_token) {
+ void DropSinksForFrame(const LocalFrameToken& frame_token) {
cache_->DropSinksForFrame(frame_token);
}
- base::test::TaskEnvironment task_env_;
+ scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
+ // Ensure all things run on |task_runner_| instead of the default task
+ // runner initialized by blink_unittests.
+ std::unique_ptr<base::TestMockTimeTaskRunner::ScopedContext>
+ task_runner_context_;
+
std::unique_ptr<AudioRendererSinkCacheImpl> cache_;
private:
@@ -194,7 +203,7 @@
// Wait for garbage collection. Doesn't actually sleep, just advances the mock
// clock.
- task_env_.FastForwardBy(kDeleteTimeout);
+ task_runner_->FastForwardBy(kDeleteTimeout);
// All the sinks should be garbage-collected by now.
EXPECT_EQ(0, sink_count());
@@ -212,7 +221,7 @@
// Wait less than garbage collection timeout.
base::TimeDelta wait_a_bit =
kDeleteTimeout - base::TimeDelta::FromMilliseconds(1);
- task_env_.FastForwardBy(wait_a_bit);
+ task_runner_->FastForwardBy(wait_a_bit);
// Sink is not deleted yet.
EXPECT_EQ(1, sink_count());
@@ -224,7 +233,7 @@
EXPECT_EQ(1, sink_count());
// Wait more to hit garbage collection timeout.
- task_env_.FastForwardBy(kDeleteTimeout);
+ task_runner_->FastForwardBy(kDeleteTimeout);
// The sink is still in place.
EXPECT_EQ(1, sink_count());
@@ -251,10 +260,10 @@
cache_.reset(); // Destruct first so there's only one cache at a time.
cache_ = std::make_unique<AudioRendererSinkCacheImpl>(
- task_env_.GetMainThreadTaskRunner(),
+ task_runner_,
base::BindRepeating(
[](scoped_refptr<media::AudioRendererSink> sink,
- const blink::LocalFrameToken& frame_token,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params) {
EXPECT_EQ(kFrameToken, frame_token);
EXPECT_TRUE(params.session_id.is_empty());
@@ -279,10 +288,10 @@
cache_.reset(); // Destruct first so there's only one cache at a time.
cache_ = std::make_unique<AudioRendererSinkCacheImpl>(
- task_env_.GetMainThreadTaskRunner(),
+ task_runner_,
base::BindRepeating(
[](scoped_refptr<media::AudioRendererSink> sink,
- const blink::LocalFrameToken& frame_token,
+ const LocalFrameToken& frame_token,
const media::AudioSinkParameters& params) {
EXPECT_EQ(kFrameToken, frame_token);
EXPECT_TRUE(!params.session_id.is_empty());
@@ -324,7 +333,7 @@
kFrameToken, base::UnguessableToken(), kAnotherDeviceId);
EXPECT_EQ(1, sink_count()); // This sink is scheduled for deletion now.
- task_env_.FastForwardBy(kDeleteTimeout);
+ task_runner_->FastForwardBy(kDeleteTimeout);
// Nothing crashed and the second sink deleted on schedule.
EXPECT_EQ(0, sink_count());
@@ -372,7 +381,7 @@
// Release the sink on the second thread.
PostAndWaitUntilDone(
thread2,
- base::BindOnce(&blink::AudioRendererSinkCache::ReleaseSink,
+ base::BindOnce(&AudioRendererSinkCache::ReleaseSink,
base::Unretained(cache_.get()), base::RetainedRef(sink)));
EXPECT_EQ(0, sink_count());
@@ -397,7 +406,7 @@
scoped_refptr<media::AudioRendererSink> sink1 =
cache_->GetSink(kFrameToken, "device1").get();
scoped_refptr<media::AudioRendererSink> another_sink =
- cache_->GetSink(blink::LocalFrameToken(), "device1").get();
+ cache_->GetSink(LocalFrameToken(), "device1").get();
scoped_refptr<media::AudioRendererSink> sink2 =
cache_->GetSink(kFrameToken, "device2").get();
EXPECT_EQ(3, sink_count());
@@ -410,4 +419,4 @@
Stop());
}
-} // namespace content
+} // namespace blink
diff --git a/third_party/blink/renderer/modules/modules_initializer.cc b/third_party/blink/renderer/modules/modules_initializer.cc
index a3b1c92..40237c58 100644
--- a/third_party/blink/renderer/modules/modules_initializer.cc
+++ b/third_party/blink/renderer/modules/modules_initializer.cc
@@ -62,6 +62,7 @@
#include "third_party/blink/renderer/modules/launch/file_handling_expiry_impl.h"
#include "third_party/blink/renderer/modules/launch/web_launch_service_impl.h"
#include "third_party/blink/renderer/modules/manifest/manifest_manager.h"
+#include "third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache_impl.h"
#include "third_party/blink/renderer/modules/media_controls/media_controls_impl.h"
#include "third_party/blink/renderer/modules/mediasource/media_source_registry_impl.h"
#include "third_party/blink/renderer/modules/mediastream/user_media_client.h"
@@ -187,6 +188,7 @@
DCHECK(WebLocalFrameImpl::FromFrame(&frame)->Client());
InspectorAccessibilityAgent::ProvideTo(&frame);
ImageDownloaderImpl::ProvideTo(frame);
+ AudioRendererSinkCacheImpl::InstallFrameObserver(frame);
}
MediaControls* ModulesInitializer::CreateMediaControls(
diff --git a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
index 8f40f367..36c0cb6 100755
--- a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
+++ b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
@@ -845,8 +845,13 @@
# once the directory is fully Onion soup'ed.
'base::Bind.*',
'base::Unretained',
- 'mojo::WrapCallbackWithDefaultInvokeIfNotRun',
+ 'base::NoDestructor',
+ 'base::flat_map',
+ 'base::AutoLock',
+ 'base::Lock',
+ 'base::EraseIf',
'base::ScopedPlatformFile',
+ 'mojo::WrapCallbackWithDefaultInvokeIfNotRun',
]
},
{