OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 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 #include "content/browser/media/session/media_session_delegate.h" |
| 6 |
| 7 #include "base/command_line.h" |
| 8 #include "content/browser/web_contents/web_contents_impl.h" |
| 9 #include "media/base/media_switches.h" |
| 10 |
| 11 namespace content { |
| 12 |
| 13 namespace { |
| 14 |
| 15 // MediaSessionDelegateDefault is the default implementation of |
| 16 // MediaSessionDelegate which only handles audio focus between WebContents. |
| 17 class MediaSessionDelegateDefault : public MediaSessionDelegate { |
| 18 public: |
| 19 explicit MediaSessionDelegateDefault(MediaSession* media_session); |
| 20 |
| 21 // MediaSessionDelegate implementation. |
| 22 bool RequestAudioFocus(MediaSession::Type type) override; |
| 23 void AbandonAudioFocus() override; |
| 24 |
| 25 private: |
| 26 // Weak pointer because |this| is owned by |media_session_|. |
| 27 MediaSession* media_session_; |
| 28 }; |
| 29 |
| 30 } // anonymous namespace |
| 31 |
| 32 MediaSessionDelegateDefault::MediaSessionDelegateDefault( |
| 33 MediaSession* media_session) |
| 34 : media_session_(media_session) { |
| 35 } |
| 36 |
| 37 bool MediaSessionDelegateDefault::RequestAudioFocus(MediaSession::Type) { |
| 38 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 39 switches::kEnableDefaultMediaSession)) { |
| 40 return true; |
| 41 } |
| 42 |
| 43 for (WebContentsImpl* web_contents : WebContentsImpl::GetAllWebContents()) { |
| 44 MediaSession* media_session = MediaSession::Get(web_contents); |
| 45 if (media_session == media_session_ || !media_session->IsActive()) |
| 46 continue; |
| 47 media_session->Suspend(MediaSession::SuspendType::SYSTEM); |
| 48 } |
| 49 return true; |
| 50 } |
| 51 |
| 52 void MediaSessionDelegateDefault::AbandonAudioFocus() { |
| 53 } |
| 54 |
| 55 // static |
| 56 scoped_ptr<MediaSessionDelegate> MediaSessionDelegate::Create( |
| 57 MediaSession* media_session) { |
| 58 return scoped_ptr<MediaSessionDelegate>( |
| 59 new MediaSessionDelegateDefault(media_session)); |
| 60 } |
| 61 |
| 62 } // namespace content |
OLD | NEW |