media_controller_unittest.cc 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  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. #include "ash/media/media_controller_impl.h"
  5. #include <memory>
  6. #include "ash/constants/ash_features.h"
  7. #include "ash/constants/ash_pref_names.h"
  8. #include "ash/session/session_controller_impl.h"
  9. #include "ash/shell.h"
  10. #include "ash/test/ash_test_base.h"
  11. #include "base/test/scoped_feature_list.h"
  12. #include "components/prefs/testing_pref_service.h"
  13. #include "services/media_session/public/cpp/test/test_media_controller.h"
  14. namespace ash {
  15. class MediaControllerTest : public AshTestBase {
  16. public:
  17. MediaControllerTest() = default;
  18. MediaControllerTest(const MediaControllerTest&) = delete;
  19. MediaControllerTest& operator=(const MediaControllerTest&) = delete;
  20. ~MediaControllerTest() override = default;
  21. // AshTestBase
  22. void SetUp() override {
  23. AshTestBase::SetUp();
  24. controller_ = std::make_unique<media_session::test::TestMediaController>();
  25. MediaControllerImpl* media_controller = Shell::Get()->media_controller();
  26. media_controller->SetMediaSessionControllerForTest(
  27. controller_->CreateMediaControllerRemote());
  28. media_controller->FlushForTesting();
  29. {
  30. std::vector<media_session::mojom::MediaSessionAction> actions;
  31. actions.push_back(media_session::mojom::MediaSessionAction::kPlay);
  32. controller_->SimulateMediaSessionActionsChanged(actions);
  33. }
  34. {
  35. media_session::mojom::MediaSessionInfoPtr session_info(
  36. media_session::mojom::MediaSessionInfo::New());
  37. session_info->state =
  38. media_session::mojom::MediaSessionInfo::SessionState::kActive;
  39. session_info->playback_state =
  40. media_session::mojom::MediaPlaybackState::kPlaying;
  41. controller_->SimulateMediaSessionInfoChanged(std::move(session_info));
  42. }
  43. Flush();
  44. }
  45. media_session::test::TestMediaController* controller() const {
  46. return controller_.get();
  47. }
  48. void SimulateSessionLock() {
  49. SessionInfo info;
  50. info.state = session_manager::SessionState::LOCKED;
  51. Shell::Get()->session_controller()->SetSessionInfo(info);
  52. }
  53. void Flush() {
  54. controller_->Flush();
  55. Shell::Get()->media_controller()->FlushForTesting();
  56. }
  57. void HandleMediaKeys() {
  58. Shell::Get()->media_controller()->HandleMediaPlayPause();
  59. Flush();
  60. Shell::Get()->media_controller()->HandleMediaPlay();
  61. Flush();
  62. Shell::Get()->media_controller()->HandleMediaPause();
  63. Flush();
  64. Shell::Get()->media_controller()->HandleMediaStop();
  65. Flush();
  66. Shell::Get()->media_controller()->HandleMediaPrevTrack();
  67. Flush();
  68. Shell::Get()->media_controller()->HandleMediaNextTrack();
  69. Flush();
  70. Shell::Get()->media_controller()->HandleMediaSeekBackward();
  71. Flush();
  72. Shell::Get()->media_controller()->HandleMediaSeekForward();
  73. Flush();
  74. }
  75. private:
  76. std::unique_ptr<media_session::test::TestMediaController> controller_;
  77. };
  78. class MediaControllerLockScreenEnabledTest : public MediaControllerTest {
  79. public:
  80. MediaControllerLockScreenEnabledTest() {
  81. scoped_feature_list_.InitAndEnableFeature(
  82. features::kLockScreenMediaControls);
  83. }
  84. private:
  85. base::test::ScopedFeatureList scoped_feature_list_;
  86. };
  87. class MediaControllerLockScreenDisabledTest : public MediaControllerTest {
  88. public:
  89. MediaControllerLockScreenDisabledTest() {
  90. scoped_feature_list_.InitAndDisableFeature(
  91. features::kLockScreenMediaControls);
  92. }
  93. private:
  94. base::test::ScopedFeatureList scoped_feature_list_;
  95. };
  96. TEST_F(MediaControllerTest, EnableMediaKeysWhenUnlocked) {
  97. EXPECT_EQ(0, controller()->suspend_count());
  98. EXPECT_EQ(0, controller()->resume_count());
  99. EXPECT_EQ(0, controller()->stop_count());
  100. EXPECT_EQ(0, controller()->previous_track_count());
  101. EXPECT_EQ(0, controller()->next_track_count());
  102. EXPECT_EQ(0, controller()->seek_backward_count());
  103. EXPECT_EQ(0, controller()->seek_forward_count());
  104. HandleMediaKeys();
  105. EXPECT_EQ(2, controller()->suspend_count());
  106. EXPECT_EQ(1, controller()->resume_count());
  107. EXPECT_EQ(1, controller()->stop_count());
  108. EXPECT_EQ(1, controller()->previous_track_count());
  109. EXPECT_EQ(1, controller()->next_track_count());
  110. EXPECT_EQ(1, controller()->seek_backward_count());
  111. EXPECT_EQ(1, controller()->seek_forward_count());
  112. }
  113. TEST_F(MediaControllerLockScreenEnabledTest, EnableLockScreenMediaKeys) {
  114. PrefService* prefs =
  115. Shell::Get()->session_controller()->GetLastActiveUserPrefService();
  116. prefs->SetBoolean(prefs::kLockScreenMediaControlsEnabled, true);
  117. EXPECT_TRUE(
  118. Shell::Get()->media_controller()->AreLockScreenMediaKeysEnabled());
  119. }
  120. TEST_F(MediaControllerLockScreenDisabledTest,
  121. DisableLockScreenMediaKeysIfFeatureDisabled) {
  122. PrefService* prefs =
  123. Shell::Get()->session_controller()->GetPrimaryUserPrefService();
  124. prefs->SetBoolean(prefs::kLockScreenMediaControlsEnabled, true);
  125. EXPECT_FALSE(
  126. Shell::Get()->media_controller()->AreLockScreenMediaKeysEnabled());
  127. prefs->SetBoolean(prefs::kLockScreenMediaControlsEnabled, false);
  128. EXPECT_FALSE(
  129. Shell::Get()->media_controller()->AreLockScreenMediaKeysEnabled());
  130. }
  131. TEST_F(MediaControllerLockScreenEnabledTest,
  132. DisableLockScreenMediaKeysIfPreferenceDisabled) {
  133. PrefService* prefs =
  134. Shell::Get()->session_controller()->GetPrimaryUserPrefService();
  135. prefs->SetBoolean(prefs::kLockScreenMediaControlsEnabled, false);
  136. EXPECT_FALSE(
  137. Shell::Get()->media_controller()->AreLockScreenMediaKeysEnabled());
  138. }
  139. TEST_F(MediaControllerLockScreenEnabledTest,
  140. EnableMediaKeysWhenLockedAndControlsEnabled) {
  141. PrefService* prefs =
  142. Shell::Get()->session_controller()->GetPrimaryUserPrefService();
  143. prefs->SetBoolean(prefs::kLockScreenMediaControlsEnabled, true);
  144. EXPECT_EQ(0, controller()->suspend_count());
  145. EXPECT_EQ(0, controller()->resume_count());
  146. EXPECT_EQ(0, controller()->stop_count());
  147. EXPECT_EQ(0, controller()->previous_track_count());
  148. EXPECT_EQ(0, controller()->next_track_count());
  149. EXPECT_EQ(0, controller()->seek_backward_count());
  150. EXPECT_EQ(0, controller()->seek_forward_count());
  151. SimulateSessionLock();
  152. HandleMediaKeys();
  153. EXPECT_EQ(2, controller()->suspend_count());
  154. EXPECT_EQ(1, controller()->resume_count());
  155. EXPECT_EQ(1, controller()->stop_count());
  156. EXPECT_EQ(1, controller()->previous_track_count());
  157. EXPECT_EQ(1, controller()->next_track_count());
  158. EXPECT_EQ(1, controller()->seek_backward_count());
  159. EXPECT_EQ(1, controller()->seek_forward_count());
  160. }
  161. TEST_F(MediaControllerLockScreenEnabledTest,
  162. DisableMediaKeysWhenLockedAndControlsDisabled) {
  163. PrefService* prefs =
  164. Shell::Get()->session_controller()->GetPrimaryUserPrefService();
  165. prefs->SetBoolean(prefs::kLockScreenMediaControlsEnabled, false);
  166. EXPECT_EQ(0, controller()->suspend_count());
  167. EXPECT_EQ(0, controller()->resume_count());
  168. EXPECT_EQ(0, controller()->stop_count());
  169. EXPECT_EQ(0, controller()->previous_track_count());
  170. EXPECT_EQ(0, controller()->next_track_count());
  171. EXPECT_EQ(0, controller()->seek_backward_count());
  172. EXPECT_EQ(0, controller()->seek_forward_count());
  173. SimulateSessionLock();
  174. HandleMediaKeys();
  175. EXPECT_EQ(0, controller()->suspend_count());
  176. EXPECT_EQ(0, controller()->resume_count());
  177. EXPECT_EQ(0, controller()->stop_count());
  178. EXPECT_EQ(0, controller()->previous_track_count());
  179. EXPECT_EQ(0, controller()->next_track_count());
  180. EXPECT_EQ(0, controller()->seek_backward_count());
  181. EXPECT_EQ(0, controller()->seek_forward_count());
  182. }
  183. } // namespace ash