Index: content/browser/renderer_host/media/audio_renderer_host.h |
diff --git a/content/browser/renderer_host/media/audio_renderer_host.h b/content/browser/renderer_host/media/audio_renderer_host.h |
index d72a5e67c09b97a4ba8aefa601749f56c98c5589..79a59922021874b80ba6d2abc633654d9065523c 100644 |
--- a/content/browser/renderer_host/media/audio_renderer_host.h |
+++ b/content/browser/renderer_host/media/audio_renderer_host.h |
@@ -64,6 +64,10 @@ |
#include "media/audio/audio_logging.h" |
#include "media/audio/audio_output_controller.h" |
#include "media/audio/simple_sources.h" |
+#include "media/base/output_device_info.h" |
+#include "media/mojo/interfaces/audio_output.mojom.h" |
+#include "mojo/public/cpp/bindings/binding.h" |
+#include "mojo/public/cpp/bindings/interface_request.h" |
#include "url/origin.h" |
namespace media { |
@@ -79,7 +83,10 @@ class MediaStreamManager; |
class MediaStreamUIProxy; |
class ResourceContext; |
-class CONTENT_EXPORT AudioRendererHost : public BrowserMessageFilter { |
+class CONTENT_EXPORT AudioRendererHost |
+ : public base::RefCountedThreadSafe<AudioRendererHost, |
+ BrowserThread::DeleteOnIOThread>, |
+ NON_EXPORTED_BASE(private media::mojom::AudioOutput) { |
public: |
// Called from UI thread from the owner of this object. |
AudioRendererHost(int render_process_id, |
@@ -94,23 +101,22 @@ class CONTENT_EXPORT AudioRendererHost : public BrowserMessageFilter { |
const RenderProcessHost::GetAudioOutputControllersCallback& |
callback) const; |
- // BrowserMessageFilter implementation. |
- void OnChannelClosing() override; |
- void OnDestruct() const override; |
- bool OnMessageReceived(const IPC::Message& message) override; |
- |
- // Returns true if any streams managed by this host are actively playing. Can |
+ // Returns true if any streams managed by this host are actively playing. Can |
// be called from any thread. |
bool HasActiveAudio(); |
+ void BindRequest(media::mojom::AudioOutputRequest request); |
+ |
private: |
friend class AudioRendererHostTest; |
friend class BrowserThread; |
friend class base::DeleteHelper<AudioRendererHost>; |
friend class MockAudioRendererHost; |
friend class TestAudioRendererHost; |
+ friend class base::RefCounted<AudioRendererHost>; |
FRIEND_TEST_ALL_PREFIXES(AudioRendererHostTest, CreateMockStream); |
FRIEND_TEST_ALL_PREFIXES(AudioRendererHostTest, MockStreamDataConversation); |
+ int32_t next_stream_id_; |
class AudioEntry; |
typedef std::map<int, AudioEntry*> AudioEntryMap; |
@@ -136,61 +142,65 @@ class CONTENT_EXPORT AudioRendererHost : public BrowserMessageFilter { |
~AudioRendererHost() override; |
- // Methods called on IO thread ---------------------------------------------- |
- |
- // Audio related IPC message handlers. |
- |
// Request permission to use an output device for use by a stream produced |
// in the RenderFrame referenced by |render_frame_id|. |
// |session_id| is used for unified IO to find out which input device to be |
// opened for the stream. For clients that do not use unified IO, |
// |session_id| will be ignored and the given |device_id| and |
// |security_origin| will be used to select the output device. |
- // Upon completion of the process, the peer is notified with the device output |
- // parameters via the NotifyDeviceAuthorized message. |
- void OnRequestDeviceAuthorization(int stream_id, |
- int render_frame_id, |
- int session_id, |
- const std::string& device_id, |
- const url::Origin& security_origin); |
+ void RequestDeviceAuthorization( |
+ int64_t render_frame_id, |
+ int64_t session_id, |
+ const mojo::String& device_id, |
+ const url::Origin& origin, |
+ const RequestDeviceAuthorizationCallback& callback) override; |
+ |
+ void SendAuthorizationMessage(RequestDeviceAuthorizationCallback callback, |
+ int32_t stream_id, |
+ media::OutputDeviceStatus status, |
+ const media::AudioParameters& params, |
+ const std::string& matched_device_id); |
+ // Methods called on IO thread ---------------------------------------------- |
+ |
+ // Audio related IPC message handlers. |
// Creates an audio output stream with the specified format. |
// Upon success/failure, the peer is notified via the NotifyStreamCreated |
// message. |
- void OnCreateStream(int stream_id, |
+ void OnCreateStream(int32_t stream_id, |
int render_frame_id, |
const media::AudioParameters& params); |
// Play the audio stream referenced by |stream_id|. |
- void OnPlayStream(int stream_id); |
+ void OnPlayStream(int32_t stream_id); |
// Pause the audio stream referenced by |stream_id|. |
- void OnPauseStream(int stream_id); |
+ void OnPauseStream(int32_t stream_id); |
// Close the audio stream referenced by |stream_id|. |
- void OnCloseStream(int stream_id); |
+ void OnCloseStream(int32_t stream_id); |
// Set the volume of the audio stream referenced by |stream_id|. |
- void OnSetVolume(int stream_id, double volume); |
- |
- // Helper methods. |
+ void OnSetVolume(int32_t stream_id, double volume); |
// Proceed with device authorization after checking permissions. |
- void OnDeviceAuthorized(int stream_id, |
+ void OnDeviceAuthorized(int32_t stream_id, |
+ RequestDeviceAuthorizationCallback callback, |
const std::string& device_id, |
const url::Origin& security_origin, |
base::TimeTicks auth_start_time, |
bool have_access); |
// Proceed with device authorization after translating device ID. |
- void OnDeviceIDTranslated(int stream_id, |
+ void OnDeviceIDTranslated(int32_t stream_id, |
base::TimeTicks auth_start_time, |
+ RequestDeviceAuthorizationCallback callback, |
bool device_found, |
const AudioOutputDeviceInfo& device_info); |
// Start the actual creation of an audio stream, after the device |
// authorization process is complete. |
- void DoCreateStream(int stream_id, |
+ void DoCreateStream(int32_t stream_id, |
int render_frame_id, |
const media::AudioParameters& params, |
const std::string& device_unique_id, |
@@ -199,26 +209,26 @@ class CONTENT_EXPORT AudioRendererHost : public BrowserMessageFilter { |
// Complete the process of creating an audio stream. This will set up the |
// shared memory or shared socket in low latency mode and send the |
// NotifyStreamCreated message to the peer. |
- void DoCompleteCreation(int stream_id); |
+ void DoCompleteCreation(AudioEntry* entry, int32_t stream_id); |
// Send playing/paused status to the renderer. |
- void DoNotifyStreamStateChanged(int stream_id, bool is_playing); |
+ // void DoNotifyStreamStateChanged(int32_t stream_id, bool is_playing); |
RenderProcessHost::AudioOutputControllerList DoGetOutputControllers() const; |
// Send an error message to the renderer. |
- void SendErrorMessage(int stream_id); |
+ void SendErrorMessage(int32_t stream_id); |
- // Delete an audio entry, notifying observers first. This is called by |
+ // Delete an audio entry, notifying observers first. This is called by |
// AudioOutputController after it has closed. |
void DeleteEntry(std::unique_ptr<AudioEntry> entry); |
// Send an error message to the renderer, then close the stream. |
- void ReportErrorAndClose(int stream_id); |
+ void ReportErrorAndClose(int32_t stream_id); |
// A helper method to look up a AudioEntry identified by |stream_id|. |
// Returns NULL if not found. |
- AudioEntry* LookupById(int stream_id); |
+ AudioEntry* LookupById(int32_t stream_id); |
// A helper method to update the number of playing streams and alert the |
// ResourceScheduler when the renderer starts or stops playing an audiostream. |
@@ -233,7 +243,7 @@ class CONTENT_EXPORT AudioRendererHost : public BrowserMessageFilter { |
// Invoke |callback| after permission to use a device has been checked. |
void AccessChecked(std::unique_ptr<MediaStreamUIProxy> ui_proxy, |
const OutputDeviceAccessCB& callback, |
- bool have_access); |
+ ool have_access); |
// Translate the hashed |device_id| to a unique device ID. |
void TranslateDeviceID(const std::string& device_id, |
@@ -243,7 +253,7 @@ class CONTENT_EXPORT AudioRendererHost : public BrowserMessageFilter { |
// Helper method to check if the authorization procedure for stream |
// |stream_id| has started. |
- bool IsAuthorizationStarted(int stream_id); |
+ bool IsAuthorizationStarted(int32_t stream_id); |
#if DCHECK_IS_ON() |
// Called from AudioRendererHostTest to override the function that checks for |
@@ -291,6 +301,9 @@ class CONTENT_EXPORT AudioRendererHost : public BrowserMessageFilter { |
// host. Reported as UMA stat at shutdown. |
size_t max_simultaneous_streams_; |
+ // Binds AudioRendererHost to a media::mojom::AudioOutputRequest. |
+ std::unique_ptr<mojo::Binding<media::mojom::AudioOutput>> binding_; |
+ |
DISALLOW_COPY_AND_ASSIGN(AudioRendererHost); |
}; |