Chromium Code Reviews| Index: content/browser/media/session/media_session_browsertest.cc |
| diff --git a/content/browser/media/android/media_session_browsertest.cc b/content/browser/media/session/media_session_browsertest.cc |
| similarity index 93% |
| rename from content/browser/media/android/media_session_browsertest.cc |
| rename to content/browser/media/session/media_session_browsertest.cc |
| index f613c6783dee5511742b30ccf61da74556ea586e..ebf3a83544ddb01552776333833a746f727efc37 100644 |
| --- a/content/browser/media/android/media_session_browsertest.cc |
| +++ b/content/browser/media/session/media_session_browsertest.cc |
| @@ -2,27 +2,31 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#include "content/browser/media/android/media_session.h" |
| +#include "content/browser/media/session/media_session.h" |
| #include <stddef.h> |
| #include <list> |
| #include <vector> |
| +#include "base/command_line.h" |
| #include "base/macros.h" |
| #include "base/metrics/histogram_samples.h" |
| #include "base/test/histogram_tester.h" |
| #include "base/test/simple_test_clock.h" |
| -#include "content/browser/media/android/media_session_observer.h" |
| +#include "content/browser/media/session/media_session_delegate.h" |
| +#include "content/browser/media/session/media_session_observer.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/browser/web_contents_observer.h" |
| #include "content/public/test/content_browser_test.h" |
| #include "content/shell/browser/shell.h" |
| +#include "media/base/media_switches.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| using content::WebContents; |
| using content::WebContentsObserver; |
| using content::MediaSession; |
| +using content::MediaSessionDelegate; |
| using content::MediaSessionObserver; |
| using content::MediaSessionUmaHelper; |
| @@ -30,6 +34,16 @@ using ::testing::Expectation; |
| namespace { |
| +class MockMediaSessionDelegate : public MediaSessionDelegate { |
| + public: |
| + bool RequestAudioFocus(MediaSession::Type) override { |
| + return true; |
| + } |
| + |
| + void AbandonAudioFocus() override { |
| + } |
| +}; |
| + |
| class MockMediaSessionObserver : public MediaSessionObserver { |
| public: |
| MockMediaSessionObserver() |
| @@ -133,10 +147,15 @@ class MediaSessionBrowserTest : public content::ContentBrowserTest { |
| mock_web_contents_observer_.reset( |
| new MockWebContentsObserver(shell()->web_contents())); |
| media_session_ = MediaSession::Get(shell()->web_contents()); |
| - media_session_->ResetJavaRefForTest(); |
| + media_session_->SetDelegateForTest( |
| + scoped_ptr<MediaSessionDelegate>(new MockMediaSessionDelegate())); |
| ASSERT_TRUE(media_session_); |
| } |
| + void SetUpCommandLine(base::CommandLine* command_line) override { |
| + command_line->AppendSwitch(switches::kEnableDefaultMediaSession); |
| + } |
| + |
| void TearDownOnMainThread() override { |
| mock_web_contents_observer_.reset(); |
| @@ -186,24 +205,26 @@ class MediaSessionBrowserTest : public content::ContentBrowserTest { |
| bool IsSuspended() { return media_session_->IsSuspended(); } |
| void UIResume() { |
| - media_session_->Resume(); |
| + media_session_->Resume(MediaSession::SuspendType::UI); |
| } |
| void SystemResume() { |
| - media_session_->OnResume(nullptr, nullptr); |
| + media_session_->OnResumeInternal(MediaSession::SuspendType::SYSTEM); |
| } |
| void UISuspend() { |
| - media_session_->Suspend(); |
| + media_session_->Suspend(MediaSession::SuspendType::UI); |
| } |
| void SystemSuspend(bool temporary) { |
| - media_session_->OnSuspend(nullptr, nullptr, temporary); |
| + media_session_->OnSuspendInternal( |
| + MediaSession::SuspendType::SYSTEM, |
| + temporary ? MediaSession::State::SUSPENDED |
| + : MediaSession::State::INACTIVE); |
| } |
| void SystemSetVolumeMultiplier(double volume_multiplier) { |
| - media_session_->OnSetVolumeMultiplier( |
| - nullptr, nullptr, volume_multiplier); |
| + media_session_->SetVolumeMultiplier(volume_multiplier); |
| } |
| MockWebContentsObserver* mock_web_contents_observer() { |
| @@ -364,7 +385,7 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, StopGivesAwayAudioFocus) { |
| StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| - media_session_->Stop(); |
| + media_session_->Stop(MediaSession::SuspendType::UI); |
| EXPECT_FALSE(HasAudioFocus()); |
| } |
| @@ -797,7 +818,7 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| - media_session_->Stop(); |
| + media_session_->Stop(MediaSession::SuspendType::UI); |
| EXPECT_FALSE(IsControllable()); |
| EXPECT_TRUE(IsSuspended()); |
| @@ -1080,7 +1101,7 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, UMA_Suspended_Stop) { |
| base::HistogramTester tester; |
| StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| - media_session_->Stop(); |
| + media_session_->Stop(MediaSession::SuspendType::UI); |
| scoped_ptr<base::HistogramSamples> samples( |
| tester.GetHistogramSamplesSinceCreation("Media.Session.Suspended")); |
| @@ -1117,7 +1138,7 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| - media_session_->Stop(); |
| + media_session_->Stop(MediaSession::SuspendType::UI); |
| scoped_ptr<base::HistogramSamples> samples( |
| tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| @@ -1146,7 +1167,7 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| UIResume(); |
| clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| - media_session_->Stop(); |
| + media_session_->Stop(MediaSession::SuspendType::UI); |
| scoped_ptr<base::HistogramSamples> samples( |
| tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| @@ -1175,7 +1196,7 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| SystemResume(); |
| clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| - media_session_->Stop(); |
| + media_session_->Stop(MediaSession::SuspendType::UI); |
| scoped_ptr<base::HistogramSamples> samples( |
| tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| @@ -1231,12 +1252,12 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| clock->Advance(base::TimeDelta::FromMilliseconds(500)); |
| SystemSuspend(true); |
| - media_session_->Stop(); |
| + media_session_->Stop(MediaSession::SuspendType::UI); |
| StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| clock->Advance(base::TimeDelta::FromMilliseconds(5000)); |
| SystemResume(); |
| - media_session_->Stop(); |
| + media_session_->Stop(MediaSession::SuspendType::UI); |
| scoped_ptr<base::HistogramSamples> samples( |
| tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| @@ -1263,7 +1284,7 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content); |
| clock->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| - media_session_->Stop(); |
| + media_session_->Stop(MediaSession::SuspendType::UI); |
| scoped_ptr<base::HistogramSamples> samples( |
| tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); |
| @@ -1271,3 +1292,41 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
| EXPECT_EQ(1, samples->GetCount(1000)); |
| EXPECT_EQ(1, samples->GetCount(10000)); |
| } |
| + |
| +#if !defined(OS_ANDROID) |
| +class DefaultMediaSessionBrowserTest : public content::ContentBrowserTest { |
|
mlamouri (slow - plz ping)
2016/02/17 19:30:12
I'm going to move this test to media_session_deleg
mlamouri (slow - plz ping)
2016/02/23 20:27:55
Done.
|
| + protected: |
| + void SetUpCommandLine(base::CommandLine* command_line) override { |
| + command_line->AppendSwitch(switches::kEnableDefaultMediaSession); |
| + } |
| +}; |
| + |
| +IN_PROC_BROWSER_TEST_F(DefaultMediaSessionBrowserTest, |
| + ActiveWebContentsPauseOthers) { |
| + scoped_ptr<MockMediaSessionObserver> media_session_observer( |
| + new MockMediaSessionObserver); |
| + |
| + MediaSession* media_session = MediaSession::Get(shell()->web_contents()); |
| + ASSERT_TRUE(media_session); |
| + |
| + WebContents* other_web_contents = CreateBrowser()->web_contents(); |
| + MediaSession* other_media_session = MediaSession::Get(other_web_contents); |
| + ASSERT_TRUE(other_media_session); |
| + |
| + media_session_observer->StartNewPlayer(); |
| + media_session->AddPlayer( |
| + media_session_observer.get(), 0, MediaSession::Type::Content); |
| + EXPECT_TRUE(media_session->IsActive()); |
| + EXPECT_FALSE(other_media_session->IsActive()); |
| + |
| + media_session_observer->StartNewPlayer(); |
| + other_media_session->AddPlayer( |
| + media_session_observer.get(), 1, MediaSession::Type::Content); |
| + EXPECT_FALSE(media_session->IsActive()); |
| + EXPECT_TRUE(other_media_session->IsActive()); |
| + |
| + media_session->Stop(MediaSession::SuspendType::UI); |
| + other_media_session->Stop(MediaSession::SuspendType::UI); |
| +} |
| + |
| +#endif // !OS_ANDROID |