Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Unified Diff: content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.h

Issue 2812883003: Browser test dry runs with mojo audio streams.
Patch Set: Rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.h
diff --git a/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.h b/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.h
index de72f68211914ce925ec120e93c42153ca203ead..326757066a97bfb3c21490a89d19e7deee4d8e95 100644
--- a/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.h
+++ b/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.h
@@ -8,10 +8,12 @@
#include <memory>
#include <string>
+#include "content/browser/renderer_host/media/audio_output_authorization_handler.h"
+#include "content/browser/renderer_host/media/render_frame_audio_output_stream_factory.h"
#include "content/browser/renderer_host/media/renderer_audio_output_stream_factory_context.h"
#include "content/common/media/renderer_audio_output_stream_factory.mojom.h"
-#include "mojo/public/cpp/bindings/interface_request.h"
-#include "mojo/public/cpp/bindings/strong_binding_set.h"
+#include "content/public/browser/browser_thread.h"
+#include "mojo/public/cpp/bindings/binding.h"
namespace media {
class AudioManager;
@@ -39,10 +41,28 @@ class MediaStreamManager;
// | owns (one).
// |
// media::MojoAudioOutputStream
-
+//
class CONTENT_EXPORT RendererAudioOutputStreamFactoryContextImpl
: public RendererAudioOutputStreamFactoryContext {
public:
+ struct CONTENT_EXPORT FactoryHandle {
+ public:
+ ~FactoryHandle();
+
+ private:
+ friend class RendererAudioOutputStreamFactoryContextImpl;
+
+ FactoryHandle(RendererAudioOutputStreamFactoryContextImpl* context,
+ int frame_id);
+
+ void Init(mojom::RendererAudioOutputStreamFactoryRequest request);
+
+ RenderFrameAudioOutputStreamFactory impl_;
+ mojo::Binding<mojom::RendererAudioOutputStreamFactory> binding_;
+
+ DISALLOW_COPY_AND_ASSIGN(FactoryHandle);
+ };
+
RendererAudioOutputStreamFactoryContextImpl(
int render_process_id,
media::AudioSystem* audio_system,
@@ -52,13 +72,17 @@ class CONTENT_EXPORT RendererAudioOutputStreamFactoryContextImpl
~RendererAudioOutputStreamFactoryContextImpl() override;
- // Creates a factory and binds it to the request. Intended to be registered
- // in a RenderFrameHosts InterfaceRegistry.
- void CreateFactory(
- int frame_host_id,
+ // Creates a factory and binds it to the request. The returned FactoryHandle
+ // is used to manage the lifetime of the created factory. It should not
+ // outlive |this|. This function should be called on the UI thread.
+ std::unique_ptr<RendererAudioOutputStreamFactoryContextImpl::FactoryHandle,
+ BrowserThread::DeleteOnIOThread>
+ CreateFactory(
+ int frame_id,
mojo::InterfaceRequest<mojom::RendererAudioOutputStreamFactory> request);
- // RendererAudioOutputStreamFactoryContext implementation.
+ // RendererAudioOutputStreamFactoryContext implementation. To be called on
+ // the IO thread
int GetRenderProcessId() const override;
std::string GetHMACForDeviceId(
@@ -78,6 +102,8 @@ class CONTENT_EXPORT RendererAudioOutputStreamFactoryContextImpl
const media::AudioParameters& params,
media::AudioOutputDelegate::EventHandler* handler) override;
+ static bool UseMojoFactories();
+
private:
// Used for hashing the device_id.
const std::string salt_;
@@ -90,13 +116,13 @@ class CONTENT_EXPORT RendererAudioOutputStreamFactoryContextImpl
// All streams requires ids for logging, so we keep a count for that.
int next_stream_id_ = 0;
- // The factories created by |this| is kept here, so that we can make sure they
- // don't keep danging references to |this|.
- mojo::StrongBindingSet<mojom::RendererAudioOutputStreamFactory> factories_;
-
DISALLOW_COPY_AND_ASSIGN(RendererAudioOutputStreamFactoryContextImpl);
};
+using UniqueAudioOutputStreamFactoryPtr =
+ std::unique_ptr<RendererAudioOutputStreamFactoryContextImpl::FactoryHandle,
+ BrowserThread::DeleteOnIOThread>;
+
} // namespace content
#endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_RENDERER_AUDIO_OUTPUT_STREAM_FACTORY_CONTEXT_IMPL_H_

Powered by Google App Engine
This is Rietveld 408576698