web_engine_media_resource_provider_impl.cc 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "fuchsia_web/webengine/browser/web_engine_media_resource_provider_impl.h"
  5. #include <lib/fidl/cpp/interface_handle.h>
  6. #include <lib/sys/cpp/component_context.h>
  7. #include "base/bind.h"
  8. #include "base/command_line.h"
  9. #include "base/fuchsia/process_context.h"
  10. #include "content/public/browser/browser_context.h"
  11. #include "content/public/browser/document_service.h"
  12. #include "content/public/browser/permission_controller.h"
  13. #include "content/public/browser/render_frame_host.h"
  14. #include "fuchsia_web/webengine/browser/frame_impl.h"
  15. #include "media/base/media_switches.h"
  16. void WebEngineMediaResourceProviderImpl::Bind(
  17. content::RenderFrameHost* frame_host,
  18. mojo::PendingReceiver<mojom::WebEngineMediaResourceProvider> receiver) {
  19. CHECK(frame_host);
  20. // The object will delete itself when connection to the frame is broken.
  21. new WebEngineMediaResourceProviderImpl(*frame_host, std::move(receiver));
  22. }
  23. WebEngineMediaResourceProviderImpl::WebEngineMediaResourceProviderImpl(
  24. content::RenderFrameHost& render_frame_host,
  25. mojo::PendingReceiver<mojom::WebEngineMediaResourceProvider> receiver)
  26. : DocumentService(render_frame_host, std::move(receiver)) {}
  27. WebEngineMediaResourceProviderImpl::~WebEngineMediaResourceProviderImpl() =
  28. default;
  29. void WebEngineMediaResourceProviderImpl::ShouldUseAudioConsumer(
  30. ShouldUseAudioConsumerCallback callback) {
  31. auto* frame_impl = FrameImpl::FromRenderFrameHost(&render_frame_host());
  32. DCHECK(frame_impl);
  33. std::move(callback).Run(
  34. frame_impl->media_settings().has_audio_consumer_session_id());
  35. }
  36. void WebEngineMediaResourceProviderImpl::CreateAudioConsumer(
  37. fidl::InterfaceRequest<fuchsia::media::AudioConsumer> request) {
  38. if (base::CommandLine::ForCurrentProcess()->HasSwitch(
  39. switches::kDisableAudioOutput)) {
  40. LOG(WARNING)
  41. << "Could not create AudioConsumer because audio output feature flag "
  42. "was not enabled.";
  43. return;
  44. }
  45. auto factory = base::ComponentContextForProcess()
  46. ->svc()
  47. ->Connect<fuchsia::media::SessionAudioConsumerFactory>();
  48. auto* frame_impl = FrameImpl::FromRenderFrameHost(&render_frame_host());
  49. DCHECK(frame_impl);
  50. if (!frame_impl->media_settings().has_audio_consumer_session_id()) {
  51. LOG(WARNING) << "Renderer tried creating AudioConsumer for a Frame without "
  52. "media_session_id().";
  53. return;
  54. }
  55. factory->CreateAudioConsumer(
  56. frame_impl->media_settings().audio_consumer_session_id(),
  57. std::move(request));
  58. }