Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(209)

Unified Diff: content/browser/media/session/audio_focus_manager_unittest.cc

Issue 2381963004: Reland "Letting Flash join MediaSession (stack implementaion)" (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/media/session/audio_focus_manager.cc ('k') | content/browser/media/session/media_session.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/media/session/audio_focus_manager_unittest.cc
diff --git a/content/browser/media/session/audio_focus_manager_unittest.cc b/content/browser/media/session/audio_focus_manager_unittest.cc
index 11bf186aa837b9dd44b11cda8fdcd1bd7767eef4..df66e862491718d70a5045ba82c7fbe0b1a42ab9 100644
--- a/content/browser/media/session/audio_focus_manager_unittest.cc
+++ b/content/browser/media/session/audio_focus_manager_unittest.cc
@@ -4,14 +4,30 @@
#include "content/browser/media/session/audio_focus_manager.h"
+#include "base/command_line.h"
#include "content/browser/media/session/media_session.h"
+#include "content/browser/media/session/media_session_observer.h"
#include "content/public/test/mock_render_process_host.h"
#include "content/public/test/test_browser_context.h"
#include "content/public/test/test_browser_thread.h"
#include "content/test/test_web_contents.h"
+#include "media/base/media_content_type.h"
+#include "media/base/media_switches.h"
namespace content {
+namespace {
+
+class MockMediaSessionObserver : public MediaSessionObserver {
+ public:
+ void OnSuspend(int player_id) override {}
+ void OnResume(int player_id) override {}
+ void OnSetVolumeMultiplier(
+ int player_id, double volume_multiplier) override {}
+};
+
+} // anonymous namespace
+
using AudioFocusType = AudioFocusManager::AudioFocusType;
using SuspendType = MediaSession::SuspendType;
@@ -20,9 +36,12 @@ class AudioFocusManagerTest : public testing::Test {
AudioFocusManagerTest() : ui_thread_(BrowserThread::UI, &message_loop_) {}
void SetUp() override {
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kEnableDefaultMediaSession);
rph_factory_.reset(new MockRenderProcessHostFactory());
SiteInstanceImpl::set_render_process_host_factory(rph_factory_.get());
browser_context_.reset(new TestBrowserContext());
+ pepper_observer_.reset(new MockMediaSessionObserver());
}
void TearDown() override {
@@ -31,25 +50,55 @@ class AudioFocusManagerTest : public testing::Test {
rph_factory_.reset();
}
- WebContents* GetAudioFocusedContent() const {
- if (!AudioFocusManager::GetInstance()->focus_entry_)
- return nullptr;
- return AudioFocusManager::GetInstance()->focus_entry_->web_contents();
+ MediaSession* GetAudioFocusedSession() const {
+ const auto& audio_focus_stack =
+ AudioFocusManager::GetInstance()->audio_focus_stack_;
+ for (auto iter = audio_focus_stack.rbegin();
+ iter != audio_focus_stack.rend(); ++iter) {
+ if ((*iter)->audio_focus_type() ==
+ AudioFocusManager::AudioFocusType::Gain)
+ return (*iter);
+ }
+ return nullptr;
}
int GetTransientMaybeDuckCount() const {
- return AudioFocusManager::GetInstance()->TransientMayDuckEntriesCount();
+ int count = 0;
+ const auto& audio_focus_stack =
+ AudioFocusManager::GetInstance()->audio_focus_stack_;
+ for (auto iter = audio_focus_stack.rbegin();
+ iter != audio_focus_stack.rend(); ++iter) {
+ if ((*iter)->audio_focus_type() ==
+ AudioFocusManager::AudioFocusType::GainTransientMayDuck) {
+ ++count;
+ } else {
+ break;
+ }
+ }
+
+ return count;
}
double IsSessionDucking(MediaSession* session) {
return session->is_ducking_; // Quack! Quack!
}
+ void RequestAudioFocus(MediaSession* session,
+ AudioFocusManager::AudioFocusType audio_focus_type) {
+ session->RequestSystemAudioFocus(audio_focus_type);
+ }
+
+ void AbandonAudioFocus(MediaSession* session) {
+ session->AbandonSystemAudioFocusIfNeeded();
+ }
+
WebContents* CreateWebContents() {
return TestWebContents::Create(browser_context_.get(),
SiteInstance::SiteInstance::Create(browser_context_.get()));
}
+ std::unique_ptr<MediaSessionObserver> pepper_observer_;
+
private:
base::MessageLoopForUI message_loop_;
TestBrowserThread ui_thread_;
@@ -74,48 +123,42 @@ TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_ReplaceFocusedEntry) {
std::unique_ptr<WebContents> web_contents_3(CreateWebContents());
MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get());
- ASSERT_EQ(nullptr, GetAudioFocusedContent());
+ ASSERT_EQ(nullptr, GetAudioFocusedSession());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session_1, AudioFocusManager::AudioFocusType::Gain);
- ASSERT_EQ(web_contents_1.get(), GetAudioFocusedContent());
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
+ ASSERT_EQ(media_session_1, GetAudioFocusedSession());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session_2, AudioFocusManager::AudioFocusType::Gain);
- ASSERT_EQ(web_contents_2.get(), GetAudioFocusedContent());
+ RequestAudioFocus(media_session_2, AudioFocusManager::AudioFocusType::Gain);
+ ASSERT_EQ(media_session_2, GetAudioFocusedSession());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session_3, AudioFocusManager::AudioFocusType::Gain);
- ASSERT_EQ(web_contents_3.get(), GetAudioFocusedContent());
+ RequestAudioFocus(media_session_3, AudioFocusManager::AudioFocusType::Gain);
+ ASSERT_EQ(media_session_3, GetAudioFocusedSession());
}
TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_Duplicate) {
std::unique_ptr<WebContents> web_contents(CreateWebContents());
MediaSession* media_session = MediaSession::Get(web_contents.get());
- ASSERT_EQ(nullptr, GetAudioFocusedContent());
+ ASSERT_EQ(nullptr, GetAudioFocusedSession());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session, AudioFocusManager::AudioFocusType::Gain);
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
+ ASSERT_EQ(media_session, GetAudioFocusedSession());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session, AudioFocusManager::AudioFocusType::Gain);
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
+ ASSERT_EQ(media_session, GetAudioFocusedSession());
}
TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_FromTransient) {
std::unique_ptr<WebContents> web_contents(CreateWebContents());
MediaSession* media_session = MediaSession::Get(web_contents.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
- ASSERT_EQ(nullptr, GetAudioFocusedContent());
+ ASSERT_EQ(nullptr, GetAudioFocusedSession());
ASSERT_EQ(1, GetTransientMaybeDuckCount());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session, AudioFocusManager::AudioFocusType::Gain);
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
+ ASSERT_EQ(media_session, GetAudioFocusedSession());
ASSERT_EQ(0, GetTransientMaybeDuckCount());
}
@@ -123,14 +166,13 @@ TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGain) {
std::unique_ptr<WebContents> web_contents(CreateWebContents());
MediaSession* media_session = MediaSession::Get(web_contents.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session, AudioFocusManager::AudioFocusType::Gain);
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
+ ASSERT_EQ(media_session, GetAudioFocusedSession());
ASSERT_EQ(0, GetTransientMaybeDuckCount());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
- ASSERT_EQ(nullptr, GetAudioFocusedContent());
+ ASSERT_EQ(nullptr, GetAudioFocusedSession());
ASSERT_EQ(1, GetTransientMaybeDuckCount());
ASSERT_FALSE(IsSessionDucking(media_session));
}
@@ -142,17 +184,16 @@ TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGainWhileDucking) {
std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session_1, AudioFocusManager::AudioFocusType::Gain);
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
ASSERT_EQ(0, GetTransientMaybeDuckCount());
ASSERT_FALSE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
ASSERT_EQ(1, GetTransientMaybeDuckCount());
ASSERT_TRUE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session_1, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
ASSERT_EQ(2, GetTransientMaybeDuckCount());
ASSERT_FALSE(IsSessionDucking(media_session_1));
@@ -162,31 +203,30 @@ TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesFocusedEntry) {
std::unique_ptr<WebContents> web_contents(CreateWebContents());
MediaSession* media_session = MediaSession::Get(web_contents.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session, AudioFocusManager::AudioFocusType::Gain);
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
+ ASSERT_EQ(media_session, GetAudioFocusedSession());
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session);
- ASSERT_EQ(nullptr, GetAudioFocusedContent());
+ AbandonAudioFocus(media_session);
+ ASSERT_EQ(nullptr, GetAudioFocusedSession());
}
TEST_F(AudioFocusManagerTest, AbandonAudioFocus_NoAssociatedEntry) {
std::unique_ptr<WebContents> web_contents(CreateWebContents());
MediaSession* media_session = MediaSession::Get(web_contents.get());
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session);
- ASSERT_EQ(nullptr, GetAudioFocusedContent());
+ AbandonAudioFocus(media_session);
+ ASSERT_EQ(nullptr, GetAudioFocusedSession());
}
TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesTransientEntry) {
std::unique_ptr<WebContents> web_contents(CreateWebContents());
MediaSession* media_session = MediaSession::Get(web_contents.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
ASSERT_EQ(1, GetTransientMaybeDuckCount());
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session);
+ AbandonAudioFocus(media_session);
ASSERT_EQ(0, GetTransientMaybeDuckCount());
}
@@ -197,24 +237,22 @@ TEST_F(AudioFocusManagerTest, AbandonAudioFocus_WhileDuckingThenResume) {
std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session_1, AudioFocusManager::AudioFocusType::Gain);
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
ASSERT_EQ(0, GetTransientMaybeDuckCount());
ASSERT_FALSE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
ASSERT_EQ(1, GetTransientMaybeDuckCount());
ASSERT_TRUE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_1);
+ AbandonAudioFocus(media_session_1);
ASSERT_EQ(1, GetTransientMaybeDuckCount());
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_2);
+ AbandonAudioFocus(media_session_2);
ASSERT_EQ(0, GetTransientMaybeDuckCount());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session_1, AudioFocusManager::AudioFocusType::Gain);
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
ASSERT_FALSE(IsSessionDucking(media_session_1));
}
@@ -225,17 +263,16 @@ TEST_F(AudioFocusManagerTest, AbandonAudioFocus_StopsDucking) {
std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session_1, AudioFocusManager::AudioFocusType::Gain);
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
ASSERT_EQ(0, GetTransientMaybeDuckCount());
ASSERT_FALSE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
ASSERT_EQ(1, GetTransientMaybeDuckCount());
ASSERT_TRUE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_2);
+ AbandonAudioFocus(media_session_2);
ASSERT_EQ(0, GetTransientMaybeDuckCount());
ASSERT_FALSE(IsSessionDucking(media_session_1));
}
@@ -247,28 +284,26 @@ TEST_F(AudioFocusManagerTest, DuckWhilePlaying) {
std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session_1, AudioFocusManager::AudioFocusType::Gain);
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
ASSERT_FALSE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
ASSERT_TRUE(IsSessionDucking(media_session_1));
}
-TEST_F(AudioFocusManagerTest, DuckWhenStarting) {
+TEST_F(AudioFocusManagerTest, GainSuspendsTransient) {
std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session_1, AudioFocusManager::AudioFocusType::Gain);
- ASSERT_TRUE(IsSessionDucking(media_session_1));
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
+ ASSERT_TRUE(media_session_2->IsSuspended());
}
TEST_F(AudioFocusManagerTest, DuckWithMultipleTransients) {
@@ -281,22 +316,21 @@ TEST_F(AudioFocusManagerTest, DuckWithMultipleTransients) {
std::unique_ptr<WebContents> web_contents_3(CreateWebContents());
MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session_1, AudioFocusManager::AudioFocusType::Gain);
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
ASSERT_FALSE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
ASSERT_TRUE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session_3, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
ASSERT_TRUE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_2);
+ AbandonAudioFocus(media_session_2);
ASSERT_TRUE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_3);
+ AbandonAudioFocus(media_session_3);
ASSERT_FALSE(IsSessionDucking(media_session_1));
}
@@ -304,19 +338,18 @@ TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesFocus) {
std::unique_ptr<WebContents> web_contents(CreateWebContents());
MediaSession* media_session = MediaSession::Get(web_contents.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session, AudioFocusManager::AudioFocusType::Gain);
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
+ ASSERT_EQ(media_session, GetAudioFocusedSession());
web_contents.reset();
- ASSERT_EQ(nullptr, GetAudioFocusedContent());
+ ASSERT_EQ(nullptr, GetAudioFocusedSession());
}
TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesTransients) {
std::unique_ptr<WebContents> web_contents(CreateWebContents());
MediaSession* media_session = MediaSession::Get(web_contents.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
ASSERT_EQ(1, GetTransientMaybeDuckCount());
@@ -331,11 +364,10 @@ TEST_F(AudioFocusManagerTest, WebContentsDestroyed_StopsDucking) {
std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
- AudioFocusManager::GetInstance()->RequestAudioFocus(
- media_session_1, AudioFocusManager::AudioFocusType::Gain);
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
ASSERT_FALSE(IsSessionDucking(media_session_1));
- AudioFocusManager::GetInstance()->RequestAudioFocus(
+ RequestAudioFocus(
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
ASSERT_TRUE(IsSessionDucking(media_session_1));
@@ -343,4 +375,61 @@ TEST_F(AudioFocusManagerTest, WebContentsDestroyed_StopsDucking) {
ASSERT_FALSE(IsSessionDucking(media_session_1));
}
+TEST_F(AudioFocusManagerTest, PepperRequestsGainFocus) {
+ std::unique_ptr<WebContents> web_contents(CreateWebContents());
+ MediaSession* media_session = MediaSession::Get(web_contents.get());
+
+ media_session->AddPlayer(
+ pepper_observer_.get(), 0, media::MediaContentType::Pepper);
+ ASSERT_EQ(media_session, GetAudioFocusedSession());
+
+ media_session->RemovePlayer(pepper_observer_.get(), 0);
+ ASSERT_EQ(nullptr, GetAudioFocusedSession());
+}
+
+TEST_F(AudioFocusManagerTest, GainDucksPepper) {
+ std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
+ MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
+
+ std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
+ MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
+
+ media_session_1->AddPlayer(
+ pepper_observer_.get(), 0, media::MediaContentType::Pepper);
+
+ RequestAudioFocus(
+ media_session_2, AudioFocusManager::AudioFocusType::Gain);
+
+ ASSERT_EQ(media_session_2, GetAudioFocusedSession());
+ ASSERT_TRUE(media_session_1->IsActive());
+ ASSERT_TRUE(IsSessionDucking(media_session_1));
+}
+
+TEST_F(AudioFocusManagerTest, AbandoningGainFocusRevokesTopMostPepperSession) {
+ std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
+ MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
+
+ std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
+ MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
+
+ std::unique_ptr<WebContents> web_contents_3(CreateWebContents());
+ MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get());
+
+ media_session_1->AddPlayer(
+ pepper_observer_.get(), 0, media::MediaContentType::Pepper);
+
+ RequestAudioFocus(
+ media_session_2, AudioFocusManager::AudioFocusType::Gain);
+ RequestAudioFocus(
+ media_session_3, AudioFocusManager::AudioFocusType::Gain);
+
+ ASSERT_EQ(media_session_3, GetAudioFocusedSession());
+ ASSERT_TRUE(media_session_2->IsReallySuspended());
+ ASSERT_TRUE(media_session_1->IsActive());
+ ASSERT_TRUE(IsSessionDucking(media_session_1));
+
+ AbandonAudioFocus(media_session_3);
+ ASSERT_EQ(media_session_1, GetAudioFocusedSession());
+}
+
} // namespace content
« no previous file with comments | « content/browser/media/session/audio_focus_manager.cc ('k') | content/browser/media/session/media_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698