| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/media/session/media_session.h" | 5 #include "content/browser/media/session/media_session.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <list> | 9 #include <list> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/metrics/histogram_samples.h" | 13 #include "base/metrics/histogram_samples.h" |
| 14 #include "base/test/histogram_tester.h" | 14 #include "base/test/histogram_tester.h" |
| 15 #include "base/test/simple_test_tick_clock.h" | 15 #include "base/test/simple_test_tick_clock.h" |
| 16 #include "content/browser/media/session/audio_focus_delegate.h" | 16 #include "content/browser/media/session/audio_focus_delegate.h" |
| 17 #include "content/browser/media/session/media_session_observer.h" |
| 17 #include "content/browser/media/session/mock_media_session_player_observer.h" | 18 #include "content/browser/media/session/mock_media_session_player_observer.h" |
| 18 #include "content/public/browser/web_contents.h" | 19 #include "content/public/browser/web_contents.h" |
| 19 #include "content/public/browser/web_contents_observer.h" | |
| 20 #include "content/public/test/content_browser_test.h" | 20 #include "content/public/test/content_browser_test.h" |
| 21 #include "content/shell/browser/shell.h" | 21 #include "content/shell/browser/shell.h" |
| 22 #include "media/base/media_content_type.h" | 22 #include "media/base/media_content_type.h" |
| 23 #include "testing/gmock/include/gmock/gmock.h" | 23 #include "testing/gmock/include/gmock/gmock.h" |
| 24 | 24 |
| 25 using content::WebContents; | 25 using content::WebContents; |
| 26 using content::WebContentsObserver; | |
| 27 using content::MediaSession; | 26 using content::MediaSession; |
| 28 using content::AudioFocusDelegate; | 27 using content::AudioFocusDelegate; |
| 29 using content::MediaSessionPlayerObserver; | 28 using content::MediaSessionPlayerObserver; |
| 30 using content::MediaSessionUmaHelper; | 29 using content::MediaSessionUmaHelper; |
| 31 using content::MockMediaSessionPlayerObserver; | 30 using content::MockMediaSessionPlayerObserver; |
| 32 | 31 |
| 33 using ::testing::Expectation; | 32 using ::testing::Expectation; |
| 34 | 33 |
| 35 namespace { | 34 namespace { |
| 36 | 35 |
| 37 const double kDefaultVolumeMultiplier = 1.0; | 36 const double kDefaultVolumeMultiplier = 1.0; |
| 38 const double kDuckingVolumeMultiplier = 0.2; | 37 const double kDuckingVolumeMultiplier = 0.2; |
| 39 | 38 |
| 40 class MockAudioFocusDelegate : public AudioFocusDelegate { | 39 class MockAudioFocusDelegate : public AudioFocusDelegate { |
| 41 public: | 40 public: |
| 42 bool RequestAudioFocus(content::AudioFocusManager::AudioFocusType) override { | 41 bool RequestAudioFocus(content::AudioFocusManager::AudioFocusType) override { |
| 43 return true; | 42 return true; |
| 44 } | 43 } |
| 45 | 44 |
| 46 void AbandonAudioFocus() override { | 45 void AbandonAudioFocus() override { |
| 47 } | 46 } |
| 48 }; | 47 }; |
| 49 | 48 |
| 50 class MockWebContentsObserver : public WebContentsObserver { | 49 class MockMediaSessionObserver : public content::MediaSessionObserver { |
| 51 public: | 50 public: |
| 52 MockWebContentsObserver(WebContents* web_contents) | 51 MockMediaSessionObserver(MediaSession* session) |
| 53 : WebContentsObserver(web_contents) {} | 52 : MediaSessionObserver(session) {} |
| 54 | 53 |
| 55 MOCK_METHOD2(MediaSessionStateChanged, | 54 MOCK_METHOD2(MediaSessionStateChanged, |
| 56 void(bool is_controllable, bool is_suspended)); | 55 void(bool is_controllable, bool is_suspended)); |
| 57 }; | 56 }; |
| 58 | 57 |
| 59 } // namespace | 58 } // namespace |
| 60 | 59 |
| 61 class MediaSessionBrowserTest : public content::ContentBrowserTest { | 60 class MediaSessionBrowserTest : public content::ContentBrowserTest { |
| 62 protected: | 61 protected: |
| 63 MediaSessionBrowserTest() = default; | 62 MediaSessionBrowserTest() = default; |
| 64 | 63 |
| 65 void SetUpOnMainThread() override { | 64 void SetUpOnMainThread() override { |
| 66 ContentBrowserTest::SetUpOnMainThread(); | 65 ContentBrowserTest::SetUpOnMainThread(); |
| 67 | 66 |
| 68 mock_web_contents_observer_.reset( | 67 mock_media_session_observer_.reset(new MockMediaSessionObserver( |
| 69 new MockWebContentsObserver(shell()->web_contents())); | 68 MediaSession::Get(shell()->web_contents()))); |
| 70 media_session_ = MediaSession::Get(shell()->web_contents()); | 69 media_session_ = MediaSession::Get(shell()->web_contents()); |
| 71 media_session_->SetDelegateForTests( | 70 media_session_->SetDelegateForTests( |
| 72 std::unique_ptr<AudioFocusDelegate>(new MockAudioFocusDelegate())); | 71 std::unique_ptr<AudioFocusDelegate>(new MockAudioFocusDelegate())); |
| 73 ASSERT_TRUE(media_session_); | 72 ASSERT_TRUE(media_session_); |
| 74 } | 73 } |
| 75 | 74 |
| 76 void TearDownOnMainThread() override { | 75 void TearDownOnMainThread() override { |
| 77 mock_web_contents_observer_.reset(); | 76 mock_media_session_observer_.reset(); |
| 78 | 77 |
| 79 media_session_->RemoveAllPlayersForTest(); | 78 media_session_->RemoveAllPlayersForTest(); |
| 80 media_session_ = nullptr; | 79 media_session_ = nullptr; |
| 81 | 80 |
| 82 ContentBrowserTest::TearDownOnMainThread(); | 81 ContentBrowserTest::TearDownOnMainThread(); |
| 83 } | 82 } |
| 84 | 83 |
| 85 void StartNewPlayer( | 84 void StartNewPlayer( |
| 86 MockMediaSessionPlayerObserver* player_observer, | 85 MockMediaSessionPlayerObserver* player_observer, |
| 87 media::MediaContentType media_content_type) { | 86 media::MediaContentType media_content_type) { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 } | 144 } |
| 146 | 145 |
| 147 void SystemStartDucking() { | 146 void SystemStartDucking() { |
| 148 media_session_->StartDucking(); | 147 media_session_->StartDucking(); |
| 149 } | 148 } |
| 150 | 149 |
| 151 void SystemStopDucking() { | 150 void SystemStopDucking() { |
| 152 media_session_->StopDucking(); | 151 media_session_->StopDucking(); |
| 153 } | 152 } |
| 154 | 153 |
| 155 MockWebContentsObserver* mock_web_contents_observer() { | 154 MockMediaSessionObserver* mock_media_session_observer() { |
| 156 return mock_web_contents_observer_.get(); | 155 return mock_media_session_observer_.get(); |
| 157 } | 156 } |
| 158 | 157 |
| 159 std::unique_ptr<MediaSession> CreateDummyMediaSession() { | 158 std::unique_ptr<MediaSession> CreateDummyMediaSession() { |
| 160 return std::unique_ptr<MediaSession>(new MediaSession(nullptr)); | 159 return std::unique_ptr<MediaSession>(new MediaSession(nullptr)); |
| 161 } | 160 } |
| 162 | 161 |
| 163 MediaSessionUmaHelper* GetMediaSessionUMAHelper() { | 162 MediaSessionUmaHelper* GetMediaSessionUMAHelper() { |
| 164 return media_session_->uma_helper_for_test(); | 163 return media_session_->uma_helper_for_test(); |
| 165 } | 164 } |
| 166 | 165 |
| 167 protected: | 166 protected: |
| 168 MediaSession* media_session_; | 167 MediaSession* media_session_; |
| 169 std::unique_ptr<MockWebContentsObserver> mock_web_contents_observer_; | 168 std::unique_ptr<MockMediaSessionObserver> mock_media_session_observer_; |
| 170 | 169 |
| 171 DISALLOW_COPY_AND_ASSIGN(MediaSessionBrowserTest); | 170 DISALLOW_COPY_AND_ASSIGN(MediaSessionBrowserTest); |
| 172 }; | 171 }; |
| 173 | 172 |
| 174 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 173 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 175 PlayersFromSameObserverDoNotStopEachOtherInSameSession) { | 174 PlayersFromSameObserverDoNotStopEachOtherInSameSession) { |
| 176 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 175 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 177 new MockMediaSessionPlayerObserver); | 176 new MockMediaSessionPlayerObserver); |
| 178 | 177 |
| 179 StartNewPlayer(player_observer.get(), | 178 StartNewPlayer(player_observer.get(), |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 EXPECT_TRUE(player_observer->IsPlaying(0)); | 582 EXPECT_TRUE(player_observer->IsPlaying(0)); |
| 584 EXPECT_TRUE(player_observer->IsPlaying(1)); | 583 EXPECT_TRUE(player_observer->IsPlaying(1)); |
| 585 EXPECT_TRUE(player_observer->IsPlaying(2)); | 584 EXPECT_TRUE(player_observer->IsPlaying(2)); |
| 586 EXPECT_TRUE(player_observer->IsPlaying(3)); | 585 EXPECT_TRUE(player_observer->IsPlaying(3)); |
| 587 | 586 |
| 588 EXPECT_EQ(content::AudioFocusManager::AudioFocusType::Gain, | 587 EXPECT_EQ(content::AudioFocusManager::AudioFocusType::Gain, |
| 589 GetSessionAudioFocusType()); | 588 GetSessionAudioFocusType()); |
| 590 } | 589 } |
| 591 | 590 |
| 592 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsShowForContent) { | 591 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsShowForContent) { |
| 593 EXPECT_CALL(*mock_web_contents_observer(), | 592 EXPECT_CALL(*mock_media_session_observer(), |
| 594 MediaSessionStateChanged(true, false)); | 593 MediaSessionStateChanged(true, false)); |
| 595 | 594 |
| 596 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 595 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 597 new MockMediaSessionPlayerObserver); | 596 new MockMediaSessionPlayerObserver); |
| 598 | 597 |
| 599 // Starting a player with a content type should show the media controls. | 598 // Starting a player with a content type should show the media controls. |
| 600 StartNewPlayer(player_observer.get(), | 599 StartNewPlayer(player_observer.get(), |
| 601 media::MediaContentType::Persistent); | 600 media::MediaContentType::Persistent); |
| 602 | 601 |
| 603 EXPECT_TRUE(IsControllable()); | 602 EXPECT_TRUE(IsControllable()); |
| 604 EXPECT_FALSE(IsSuspended()); | 603 EXPECT_FALSE(IsSuspended()); |
| 605 } | 604 } |
| 606 | 605 |
| 607 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsNoShowForTransient) { | 606 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsNoShowForTransient) { |
| 608 EXPECT_CALL(*mock_web_contents_observer(), | 607 EXPECT_CALL(*mock_media_session_observer(), |
| 609 MediaSessionStateChanged(false, false)); | 608 MediaSessionStateChanged(false, false)); |
| 610 | 609 |
| 611 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 610 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 612 new MockMediaSessionPlayerObserver); | 611 new MockMediaSessionPlayerObserver); |
| 613 | 612 |
| 614 // Starting a player with a transient type should not show the media controls. | 613 // Starting a player with a transient type should not show the media controls. |
| 615 StartNewPlayer(player_observer.get(), | 614 StartNewPlayer(player_observer.get(), |
| 616 media::MediaContentType::Transient); | 615 media::MediaContentType::Transient); |
| 617 | 616 |
| 618 EXPECT_FALSE(IsControllable()); | 617 EXPECT_FALSE(IsControllable()); |
| 619 EXPECT_FALSE(IsSuspended()); | 618 EXPECT_FALSE(IsSuspended()); |
| 620 } | 619 } |
| 621 | 620 |
| 622 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsHideWhenStopped) { | 621 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsHideWhenStopped) { |
| 623 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 622 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 624 MediaSessionStateChanged(true, false)); | 623 MediaSessionStateChanged(true, false)); |
| 625 EXPECT_CALL(*mock_web_contents_observer(), | 624 EXPECT_CALL(*mock_media_session_observer(), |
| 626 MediaSessionStateChanged(false, true)) | 625 MediaSessionStateChanged(false, true)) |
| 627 .After(showControls); | 626 .After(showControls); |
| 628 | 627 |
| 629 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 628 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 630 new MockMediaSessionPlayerObserver); | 629 new MockMediaSessionPlayerObserver); |
| 631 | 630 |
| 632 StartNewPlayer(player_observer.get(), | 631 StartNewPlayer(player_observer.get(), |
| 633 media::MediaContentType::Persistent); | 632 media::MediaContentType::Persistent); |
| 634 | 633 |
| 635 RemovePlayers(player_observer.get()); | 634 RemovePlayers(player_observer.get()); |
| 636 | 635 |
| 637 EXPECT_FALSE(IsControllable()); | 636 EXPECT_FALSE(IsControllable()); |
| 638 EXPECT_TRUE(IsSuspended()); | 637 EXPECT_TRUE(IsSuspended()); |
| 639 } | 638 } |
| 640 | 639 |
| 641 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsShownAcceptTransient) { | 640 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsShownAcceptTransient) { |
| 642 EXPECT_CALL(*mock_web_contents_observer(), | 641 EXPECT_CALL(*mock_media_session_observer(), |
| 643 MediaSessionStateChanged(true, false)); | 642 MediaSessionStateChanged(true, false)); |
| 644 | 643 |
| 645 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 644 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 646 new MockMediaSessionPlayerObserver); | 645 new MockMediaSessionPlayerObserver); |
| 647 | 646 |
| 648 StartNewPlayer(player_observer.get(), | 647 StartNewPlayer(player_observer.get(), |
| 649 media::MediaContentType::Persistent); | 648 media::MediaContentType::Persistent); |
| 650 | 649 |
| 651 // Transient player join the session without affecting the controls. | 650 // Transient player join the session without affecting the controls. |
| 652 StartNewPlayer(player_observer.get(), | 651 StartNewPlayer(player_observer.get(), |
| 653 media::MediaContentType::Transient); | 652 media::MediaContentType::Transient); |
| 654 | 653 |
| 655 EXPECT_TRUE(IsControllable()); | 654 EXPECT_TRUE(IsControllable()); |
| 656 EXPECT_FALSE(IsSuspended()); | 655 EXPECT_FALSE(IsSuspended()); |
| 657 } | 656 } |
| 658 | 657 |
| 659 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 658 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 660 ControlsShownAfterContentAdded) { | 659 ControlsShownAfterContentAdded) { |
| 661 Expectation dontShowControls = EXPECT_CALL( | 660 Expectation dontShowControls = EXPECT_CALL( |
| 662 *mock_web_contents_observer(), MediaSessionStateChanged(false, false)); | 661 *mock_media_session_observer(), MediaSessionStateChanged(false, false)); |
| 663 EXPECT_CALL(*mock_web_contents_observer(), | 662 EXPECT_CALL(*mock_media_session_observer(), |
| 664 MediaSessionStateChanged(true, false)) | 663 MediaSessionStateChanged(true, false)) |
| 665 .After(dontShowControls); | 664 .After(dontShowControls); |
| 666 | 665 |
| 667 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 666 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 668 new MockMediaSessionPlayerObserver); | 667 new MockMediaSessionPlayerObserver); |
| 669 | 668 |
| 670 StartNewPlayer(player_observer.get(), | 669 StartNewPlayer(player_observer.get(), |
| 671 media::MediaContentType::Transient); | 670 media::MediaContentType::Transient); |
| 672 | 671 |
| 673 // The controls are shown when the content player is added. | 672 // The controls are shown when the content player is added. |
| 674 StartNewPlayer(player_observer.get(), | 673 StartNewPlayer(player_observer.get(), |
| 675 media::MediaContentType::Persistent); | 674 media::MediaContentType::Persistent); |
| 676 | 675 |
| 677 EXPECT_TRUE(IsControllable()); | 676 EXPECT_TRUE(IsControllable()); |
| 678 EXPECT_FALSE(IsSuspended()); | 677 EXPECT_FALSE(IsSuspended()); |
| 679 } | 678 } |
| 680 | 679 |
| 681 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 680 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 682 ControlsStayIfOnlyOnePlayerHasBeenPaused) { | 681 ControlsStayIfOnlyOnePlayerHasBeenPaused) { |
| 683 EXPECT_CALL(*mock_web_contents_observer(), | 682 EXPECT_CALL(*mock_media_session_observer(), |
| 684 MediaSessionStateChanged(true, false)); | 683 MediaSessionStateChanged(true, false)); |
| 685 | 684 |
| 686 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 685 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 687 new MockMediaSessionPlayerObserver); | 686 new MockMediaSessionPlayerObserver); |
| 688 | 687 |
| 689 StartNewPlayer(player_observer.get(), | 688 StartNewPlayer(player_observer.get(), |
| 690 media::MediaContentType::Persistent); | 689 media::MediaContentType::Persistent); |
| 691 StartNewPlayer(player_observer.get(), | 690 StartNewPlayer(player_observer.get(), |
| 692 media::MediaContentType::Transient); | 691 media::MediaContentType::Transient); |
| 693 | 692 |
| 694 // Removing only content player doesn't hide the controls since the session | 693 // Removing only content player doesn't hide the controls since the session |
| 695 // is still active. | 694 // is still active. |
| 696 RemovePlayer(player_observer.get(), 0); | 695 RemovePlayer(player_observer.get(), 0); |
| 697 | 696 |
| 698 EXPECT_TRUE(IsControllable()); | 697 EXPECT_TRUE(IsControllable()); |
| 699 EXPECT_FALSE(IsSuspended()); | 698 EXPECT_FALSE(IsSuspended()); |
| 700 } | 699 } |
| 701 | 700 |
| 702 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 701 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 703 ControlsHideWhenTheLastPlayerIsRemoved) { | 702 ControlsHideWhenTheLastPlayerIsRemoved) { |
| 704 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 703 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 705 MediaSessionStateChanged(true, false)); | 704 MediaSessionStateChanged(true, false)); |
| 706 EXPECT_CALL(*mock_web_contents_observer(), | 705 EXPECT_CALL(*mock_media_session_observer(), |
| 707 MediaSessionStateChanged(false, true)) | 706 MediaSessionStateChanged(false, true)) |
| 708 .After(showControls); | 707 .After(showControls); |
| 709 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 708 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 710 new MockMediaSessionPlayerObserver); | 709 new MockMediaSessionPlayerObserver); |
| 711 | 710 |
| 712 StartNewPlayer(player_observer.get(), | 711 StartNewPlayer(player_observer.get(), |
| 713 media::MediaContentType::Persistent); | 712 media::MediaContentType::Persistent); |
| 714 StartNewPlayer(player_observer.get(), | 713 StartNewPlayer(player_observer.get(), |
| 715 media::MediaContentType::Persistent); | 714 media::MediaContentType::Persistent); |
| 716 | 715 |
| 717 RemovePlayer(player_observer.get(), 0); | 716 RemovePlayer(player_observer.get(), 0); |
| 718 | 717 |
| 719 EXPECT_TRUE(IsControllable()); | 718 EXPECT_TRUE(IsControllable()); |
| 720 EXPECT_FALSE(IsSuspended()); | 719 EXPECT_FALSE(IsSuspended()); |
| 721 | 720 |
| 722 RemovePlayer(player_observer.get(), 1); | 721 RemovePlayer(player_observer.get(), 1); |
| 723 | 722 |
| 724 EXPECT_FALSE(IsControllable()); | 723 EXPECT_FALSE(IsControllable()); |
| 725 EXPECT_TRUE(IsSuspended()); | 724 EXPECT_TRUE(IsSuspended()); |
| 726 } | 725 } |
| 727 | 726 |
| 728 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 727 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 729 ControlsHideWhenAllThePlayersAreRemoved) { | 728 ControlsHideWhenAllThePlayersAreRemoved) { |
| 730 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 729 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 731 MediaSessionStateChanged(true, false)); | 730 MediaSessionStateChanged(true, false)); |
| 732 EXPECT_CALL(*mock_web_contents_observer(), | 731 EXPECT_CALL(*mock_media_session_observer(), |
| 733 MediaSessionStateChanged(false, true)) | 732 MediaSessionStateChanged(false, true)) |
| 734 .After(showControls); | 733 .After(showControls); |
| 735 | 734 |
| 736 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 735 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 737 new MockMediaSessionPlayerObserver); | 736 new MockMediaSessionPlayerObserver); |
| 738 | 737 |
| 739 StartNewPlayer(player_observer.get(), | 738 StartNewPlayer(player_observer.get(), |
| 740 media::MediaContentType::Persistent); | 739 media::MediaContentType::Persistent); |
| 741 StartNewPlayer(player_observer.get(), | 740 StartNewPlayer(player_observer.get(), |
| 742 media::MediaContentType::Persistent); | 741 media::MediaContentType::Persistent); |
| 743 | 742 |
| 744 RemovePlayers(player_observer.get()); | 743 RemovePlayers(player_observer.get()); |
| 745 | 744 |
| 746 EXPECT_FALSE(IsControllable()); | 745 EXPECT_FALSE(IsControllable()); |
| 747 EXPECT_TRUE(IsSuspended()); | 746 EXPECT_TRUE(IsSuspended()); |
| 748 } | 747 } |
| 749 | 748 |
| 750 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 749 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 751 ControlsNotHideWhenTheLastPlayerIsPaused) { | 750 ControlsNotHideWhenTheLastPlayerIsPaused) { |
| 752 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 751 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 753 MediaSessionStateChanged(true, false)); | 752 MediaSessionStateChanged(true, false)); |
| 754 EXPECT_CALL(*mock_web_contents_observer(), | 753 EXPECT_CALL(*mock_media_session_observer(), |
| 755 MediaSessionStateChanged(true, true)) | 754 MediaSessionStateChanged(true, true)) |
| 756 .After(showControls); | 755 .After(showControls); |
| 757 | 756 |
| 758 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 757 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 759 new MockMediaSessionPlayerObserver); | 758 new MockMediaSessionPlayerObserver); |
| 760 | 759 |
| 761 StartNewPlayer(player_observer.get(), | 760 StartNewPlayer(player_observer.get(), |
| 762 media::MediaContentType::Persistent); | 761 media::MediaContentType::Persistent); |
| 763 StartNewPlayer(player_observer.get(), | 762 StartNewPlayer(player_observer.get(), |
| 764 media::MediaContentType::Persistent); | 763 media::MediaContentType::Persistent); |
| 765 | 764 |
| 766 OnPlayerPaused(player_observer.get(), 0); | 765 OnPlayerPaused(player_observer.get(), 0); |
| 767 | 766 |
| 768 EXPECT_TRUE(IsControllable()); | 767 EXPECT_TRUE(IsControllable()); |
| 769 EXPECT_FALSE(IsSuspended()); | 768 EXPECT_FALSE(IsSuspended()); |
| 770 | 769 |
| 771 OnPlayerPaused(player_observer.get(), 1); | 770 OnPlayerPaused(player_observer.get(), 1); |
| 772 | 771 |
| 773 EXPECT_TRUE(IsControllable()); | 772 EXPECT_TRUE(IsControllable()); |
| 774 EXPECT_TRUE(IsSuspended()); | 773 EXPECT_TRUE(IsSuspended()); |
| 775 } | 774 } |
| 776 | 775 |
| 777 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 776 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 778 SuspendTemporaryUpdatesControls) { | 777 SuspendTemporaryUpdatesControls) { |
| 779 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 778 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 780 MediaSessionStateChanged(true, false)); | 779 MediaSessionStateChanged(true, false)); |
| 781 EXPECT_CALL(*mock_web_contents_observer(), | 780 EXPECT_CALL(*mock_media_session_observer(), |
| 782 MediaSessionStateChanged(true, true)) | 781 MediaSessionStateChanged(true, true)) |
| 783 .After(showControls); | 782 .After(showControls); |
| 784 | 783 |
| 785 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 784 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 786 new MockMediaSessionPlayerObserver); | 785 new MockMediaSessionPlayerObserver); |
| 787 | 786 |
| 788 StartNewPlayer(player_observer.get(), | 787 StartNewPlayer(player_observer.get(), |
| 789 media::MediaContentType::Persistent); | 788 media::MediaContentType::Persistent); |
| 790 | 789 |
| 791 SystemSuspend(true); | 790 SystemSuspend(true); |
| 792 | 791 |
| 793 EXPECT_TRUE(IsControllable()); | 792 EXPECT_TRUE(IsControllable()); |
| 794 EXPECT_TRUE(IsSuspended()); | 793 EXPECT_TRUE(IsSuspended()); |
| 795 } | 794 } |
| 796 | 795 |
| 797 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsUpdatedWhenResumed) { | 796 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsUpdatedWhenResumed) { |
| 798 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 797 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 799 MediaSessionStateChanged(true, false)); | 798 MediaSessionStateChanged(true, false)); |
| 800 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(), | 799 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), |
| 801 MediaSessionStateChanged(true, true)) | 800 MediaSessionStateChanged(true, true)) |
| 802 .After(showControls); | 801 .After(showControls); |
| 803 EXPECT_CALL(*mock_web_contents_observer(), | 802 EXPECT_CALL(*mock_media_session_observer(), |
| 804 MediaSessionStateChanged(true, false)) | 803 MediaSessionStateChanged(true, false)) |
| 805 .After(pauseControls); | 804 .After(pauseControls); |
| 806 | 805 |
| 807 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 806 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 808 new MockMediaSessionPlayerObserver); | 807 new MockMediaSessionPlayerObserver); |
| 809 | 808 |
| 810 StartNewPlayer(player_observer.get(), | 809 StartNewPlayer(player_observer.get(), |
| 811 media::MediaContentType::Persistent); | 810 media::MediaContentType::Persistent); |
| 812 SystemSuspend(true); | 811 SystemSuspend(true); |
| 813 SystemResume(); | 812 SystemResume(); |
| 814 | 813 |
| 815 EXPECT_TRUE(IsControllable()); | 814 EXPECT_TRUE(IsControllable()); |
| 816 EXPECT_FALSE(IsSuspended()); | 815 EXPECT_FALSE(IsSuspended()); |
| 817 } | 816 } |
| 818 | 817 |
| 819 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 818 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 820 ControlsHideWhenSessionSuspendedPermanently) { | 819 ControlsHideWhenSessionSuspendedPermanently) { |
| 821 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 820 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 822 MediaSessionStateChanged(true, false)); | 821 MediaSessionStateChanged(true, false)); |
| 823 EXPECT_CALL(*mock_web_contents_observer(), | 822 EXPECT_CALL(*mock_media_session_observer(), |
| 824 MediaSessionStateChanged(false, true)) | 823 MediaSessionStateChanged(false, true)) |
| 825 .After(showControls); | 824 .After(showControls); |
| 826 | 825 |
| 827 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 826 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 828 new MockMediaSessionPlayerObserver); | 827 new MockMediaSessionPlayerObserver); |
| 829 | 828 |
| 830 StartNewPlayer(player_observer.get(), | 829 StartNewPlayer(player_observer.get(), |
| 831 media::MediaContentType::Persistent); | 830 media::MediaContentType::Persistent); |
| 832 | 831 |
| 833 SystemSuspend(false); | 832 SystemSuspend(false); |
| 834 | 833 |
| 835 EXPECT_FALSE(IsControllable()); | 834 EXPECT_FALSE(IsControllable()); |
| 836 EXPECT_TRUE(IsSuspended()); | 835 EXPECT_TRUE(IsSuspended()); |
| 837 } | 836 } |
| 838 | 837 |
| 839 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 838 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 840 ConstrolsHideWhenSessionStops) { | 839 ConstrolsHideWhenSessionStops) { |
| 841 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 840 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 842 MediaSessionStateChanged(true, false)); | 841 MediaSessionStateChanged(true, false)); |
| 843 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(), | 842 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), |
| 844 MediaSessionStateChanged(true, true)) | 843 MediaSessionStateChanged(true, true)) |
| 845 .After(showControls); | 844 .After(showControls); |
| 846 EXPECT_CALL(*mock_web_contents_observer(), | 845 EXPECT_CALL(*mock_media_session_observer(), |
| 847 MediaSessionStateChanged(false, true)) | 846 MediaSessionStateChanged(false, true)) |
| 848 .After(pauseControls); | 847 .After(pauseControls); |
| 849 | 848 |
| 850 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 849 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 851 new MockMediaSessionPlayerObserver); | 850 new MockMediaSessionPlayerObserver); |
| 852 | 851 |
| 853 StartNewPlayer(player_observer.get(), | 852 StartNewPlayer(player_observer.get(), |
| 854 media::MediaContentType::Persistent); | 853 media::MediaContentType::Persistent); |
| 855 | 854 |
| 856 media_session_->Stop(MediaSession::SuspendType::UI); | 855 media_session_->Stop(MediaSession::SuspendType::UI); |
| 857 | 856 |
| 858 EXPECT_FALSE(IsControllable()); | 857 EXPECT_FALSE(IsControllable()); |
| 859 EXPECT_TRUE(IsSuspended()); | 858 EXPECT_TRUE(IsSuspended()); |
| 860 } | 859 } |
| 861 | 860 |
| 862 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 861 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 863 ControlsHideWhenSessionChangesFromContentToTransient) { | 862 ControlsHideWhenSessionChangesFromContentToTransient) { |
| 864 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 863 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 865 MediaSessionStateChanged(true, false)); | 864 MediaSessionStateChanged(true, false)); |
| 866 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(), | 865 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), |
| 867 MediaSessionStateChanged(true, true)) | 866 MediaSessionStateChanged(true, true)) |
| 868 .After(showControls); | 867 .After(showControls); |
| 869 EXPECT_CALL(*mock_web_contents_observer(), | 868 EXPECT_CALL(*mock_media_session_observer(), |
| 870 MediaSessionStateChanged(false, false)) | 869 MediaSessionStateChanged(false, false)) |
| 871 .After(pauseControls); | 870 .After(pauseControls); |
| 872 | 871 |
| 873 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 872 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 874 new MockMediaSessionPlayerObserver); | 873 new MockMediaSessionPlayerObserver); |
| 875 | 874 |
| 876 StartNewPlayer(player_observer.get(), | 875 StartNewPlayer(player_observer.get(), |
| 877 media::MediaContentType::Persistent); | 876 media::MediaContentType::Persistent); |
| 878 SystemSuspend(true); | 877 SystemSuspend(true); |
| 879 | 878 |
| 880 // This should reset the session and change it to a transient, so | 879 // This should reset the session and change it to a transient, so |
| 881 // hide the controls. | 880 // hide the controls. |
| 882 StartNewPlayer(player_observer.get(), | 881 StartNewPlayer(player_observer.get(), |
| 883 media::MediaContentType::Transient); | 882 media::MediaContentType::Transient); |
| 884 | 883 |
| 885 EXPECT_FALSE(IsControllable()); | 884 EXPECT_FALSE(IsControllable()); |
| 886 EXPECT_FALSE(IsSuspended()); | 885 EXPECT_FALSE(IsSuspended()); |
| 887 } | 886 } |
| 888 | 887 |
| 889 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 888 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 890 ControlsUpdatedWhenNewPlayerResetsSession) { | 889 ControlsUpdatedWhenNewPlayerResetsSession) { |
| 891 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 890 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 892 MediaSessionStateChanged(true, false)); | 891 MediaSessionStateChanged(true, false)); |
| 893 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(), | 892 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), |
| 894 MediaSessionStateChanged(true, true)) | 893 MediaSessionStateChanged(true, true)) |
| 895 .After(showControls); | 894 .After(showControls); |
| 896 EXPECT_CALL(*mock_web_contents_observer(), | 895 EXPECT_CALL(*mock_media_session_observer(), |
| 897 MediaSessionStateChanged(true, false)) | 896 MediaSessionStateChanged(true, false)) |
| 898 .After(pauseControls); | 897 .After(pauseControls); |
| 899 | 898 |
| 900 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 899 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 901 new MockMediaSessionPlayerObserver); | 900 new MockMediaSessionPlayerObserver); |
| 902 | 901 |
| 903 StartNewPlayer(player_observer.get(), | 902 StartNewPlayer(player_observer.get(), |
| 904 media::MediaContentType::Persistent); | 903 media::MediaContentType::Persistent); |
| 905 SystemSuspend(true); | 904 SystemSuspend(true); |
| 906 | 905 |
| 907 // This should reset the session and update the controls. | 906 // This should reset the session and update the controls. |
| 908 StartNewPlayer(player_observer.get(), | 907 StartNewPlayer(player_observer.get(), |
| 909 media::MediaContentType::Persistent); | 908 media::MediaContentType::Persistent); |
| 910 | 909 |
| 911 EXPECT_TRUE(IsControllable()); | 910 EXPECT_TRUE(IsControllable()); |
| 912 EXPECT_FALSE(IsSuspended()); | 911 EXPECT_FALSE(IsSuspended()); |
| 913 } | 912 } |
| 914 | 913 |
| 915 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 914 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 916 ControlsResumedWhenPlayerIsResumed) { | 915 ControlsResumedWhenPlayerIsResumed) { |
| 917 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 916 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 918 MediaSessionStateChanged(true, false)); | 917 MediaSessionStateChanged(true, false)); |
| 919 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(), | 918 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), |
| 920 MediaSessionStateChanged(true, true)) | 919 MediaSessionStateChanged(true, true)) |
| 921 .After(showControls); | 920 .After(showControls); |
| 922 EXPECT_CALL(*mock_web_contents_observer(), | 921 EXPECT_CALL(*mock_media_session_observer(), |
| 923 MediaSessionStateChanged(true, false)) | 922 MediaSessionStateChanged(true, false)) |
| 924 .After(pauseControls); | 923 .After(pauseControls); |
| 925 | 924 |
| 926 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 925 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 927 new MockMediaSessionPlayerObserver); | 926 new MockMediaSessionPlayerObserver); |
| 928 | 927 |
| 929 StartNewPlayer(player_observer.get(), | 928 StartNewPlayer(player_observer.get(), |
| 930 media::MediaContentType::Persistent); | 929 media::MediaContentType::Persistent); |
| 931 SystemSuspend(true); | 930 SystemSuspend(true); |
| 932 | 931 |
| 933 // This should resume the session and update the controls. | 932 // This should resume the session and update the controls. |
| 934 AddPlayer(player_observer.get(), 0, | 933 AddPlayer(player_observer.get(), 0, |
| 935 media::MediaContentType::Persistent); | 934 media::MediaContentType::Persistent); |
| 936 | 935 |
| 937 EXPECT_TRUE(IsControllable()); | 936 EXPECT_TRUE(IsControllable()); |
| 938 EXPECT_FALSE(IsSuspended()); | 937 EXPECT_FALSE(IsSuspended()); |
| 939 } | 938 } |
| 940 | 939 |
| 941 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 940 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 942 ControlsUpdatedDueToResumeSessionAction) { | 941 ControlsUpdatedDueToResumeSessionAction) { |
| 943 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 942 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 944 MediaSessionStateChanged(true, false)); | 943 MediaSessionStateChanged(true, false)); |
| 945 EXPECT_CALL(*mock_web_contents_observer(), | 944 EXPECT_CALL(*mock_media_session_observer(), |
| 946 MediaSessionStateChanged(true, true)) | 945 MediaSessionStateChanged(true, true)) |
| 947 .After(showControls); | 946 .After(showControls); |
| 948 | 947 |
| 949 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 948 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 950 new MockMediaSessionPlayerObserver); | 949 new MockMediaSessionPlayerObserver); |
| 951 | 950 |
| 952 StartNewPlayer(player_observer.get(), | 951 StartNewPlayer(player_observer.get(), |
| 953 media::MediaContentType::Persistent); | 952 media::MediaContentType::Persistent); |
| 954 UISuspend(); | 953 UISuspend(); |
| 955 | 954 |
| 956 EXPECT_TRUE(IsControllable()); | 955 EXPECT_TRUE(IsControllable()); |
| 957 EXPECT_TRUE(IsSuspended()); | 956 EXPECT_TRUE(IsSuspended()); |
| 958 } | 957 } |
| 959 | 958 |
| 960 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, | 959 IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| 961 ControlsUpdatedDueToSuspendSessionAction) { | 960 ControlsUpdatedDueToSuspendSessionAction) { |
| 962 Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(), | 961 Expectation showControls = EXPECT_CALL(*mock_media_session_observer(), |
| 963 MediaSessionStateChanged(true, false)); | 962 MediaSessionStateChanged(true, false)); |
| 964 Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(), | 963 Expectation pauseControls = EXPECT_CALL(*mock_media_session_observer(), |
| 965 MediaSessionStateChanged(true, true)) | 964 MediaSessionStateChanged(true, true)) |
| 966 .After(showControls); | 965 .After(showControls); |
| 967 EXPECT_CALL(*mock_web_contents_observer(), | 966 EXPECT_CALL(*mock_media_session_observer(), |
| 968 MediaSessionStateChanged(true, false)) | 967 MediaSessionStateChanged(true, false)) |
| 969 .After(pauseControls); | 968 .After(pauseControls); |
| 970 | 969 |
| 971 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( | 970 std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| 972 new MockMediaSessionPlayerObserver); | 971 new MockMediaSessionPlayerObserver); |
| 973 | 972 |
| 974 StartNewPlayer(player_observer.get(), | 973 StartNewPlayer(player_observer.get(), |
| 975 media::MediaContentType::Persistent); | 974 media::MediaContentType::Persistent); |
| 976 UISuspend(); | 975 UISuspend(); |
| 977 UIResume(); | 976 UIResume(); |
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1347 media::MediaContentType::Persistent); | 1346 media::MediaContentType::Persistent); |
| 1348 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); | 1347 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| 1349 media_session_->Stop(MediaSession::SuspendType::UI); | 1348 media_session_->Stop(MediaSession::SuspendType::UI); |
| 1350 | 1349 |
| 1351 std::unique_ptr<base::HistogramSamples> samples( | 1350 std::unique_ptr<base::HistogramSamples> samples( |
| 1352 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); | 1351 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| 1353 EXPECT_EQ(2, samples->TotalCount()); | 1352 EXPECT_EQ(2, samples->TotalCount()); |
| 1354 EXPECT_EQ(1, samples->GetCount(1000)); | 1353 EXPECT_EQ(1, samples->GetCount(1000)); |
| 1355 EXPECT_EQ(1, samples->GetCount(10000)); | 1354 EXPECT_EQ(1, samples->GetCount(10000)); |
| 1356 } | 1355 } |
| OLD | NEW |