1 // Copyright 2018 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 5 #ifndef SERVICES_MEDIA_SESSION_PUBLIC_CPP_TEST_AUDIO_FOCUS_TEST_UTIL_H_ 6 #define SERVICES_MEDIA_SESSION_PUBLIC_CPP_TEST_AUDIO_FOCUS_TEST_UTIL_H_ 7 8 #include <vector> 9 10 #include "base/component_export.h" 11 #include "base/optional.h" 12 #include "base/run_loop.h" 13 #include "mojo/public/cpp/bindings/pending_remote.h" 14 #include "mojo/public/cpp/bindings/receiver.h" 15 #include "services/media_session/public/mojom/audio_focus.mojom.h" 16 17 namespace media_session { 18 namespace test { 19 COMPONENT_EXPORT(MEDIA_SESSION_TEST_SUPPORT_CPP)20class COMPONENT_EXPORT(MEDIA_SESSION_TEST_SUPPORT_CPP) TestAudioFocusObserver 21 : public mojom::AudioFocusObserver { 22 public: 23 TestAudioFocusObserver(); 24 ~TestAudioFocusObserver() override; 25 26 void OnFocusGained( 27 media_session::mojom::AudioFocusRequestStatePtr session) override; 28 void OnFocusLost( 29 media_session::mojom::AudioFocusRequestStatePtr session) override; 30 31 void WaitForGainedEvent(); 32 void WaitForLostEvent(); 33 34 mojo::PendingRemote<media_session::mojom::AudioFocusObserver> 35 BindNewPipeAndPassRemote(); 36 37 const media_session::mojom::AudioFocusRequestStatePtr& focus_gained_session() 38 const { 39 return focus_gained_session_; 40 } 41 42 const media_session::mojom::AudioFocusRequestStatePtr& focus_lost_session() 43 const { 44 return focus_lost_session_; 45 } 46 47 // These store the order of notifications that were received by the observer. 48 enum class NotificationType { 49 kFocusGained, 50 kFocusLost, 51 }; 52 const std::vector<NotificationType>& notifications() const { 53 return notifications_; 54 } 55 56 private: 57 mojo::Receiver<mojom::AudioFocusObserver> receiver_{this}; 58 59 // These store the values we received. 60 media_session::mojom::AudioFocusRequestStatePtr focus_gained_session_; 61 media_session::mojom::AudioFocusRequestStatePtr focus_lost_session_; 62 63 // If either of these are true we will quit the run loop if we observe a gain 64 // or lost event. 65 bool wait_for_gained_ = false; 66 bool wait_for_lost_ = false; 67 68 std::vector<NotificationType> notifications_; 69 70 base::RunLoop run_loop_; 71 }; 72 73 COMPONENT_EXPORT(MEDIA_SESSION_TEST_SUPPORT_CPP) 74 media_session::mojom::MediaSessionInfoPtr GetMediaSessionInfoSync( 75 media_session::mojom::MediaSession*); 76 77 } // namespace test 78 } // namespace media_session 79 80 #endif // SERVICES_MEDIA_SESSION_PUBLIC_CPP_TEST_AUDIO_FOCUS_TEST_UTIL_H_ 81