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_impl.h" | 5 #include "content/browser/media/session/media_session_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include "content/browser/media/session/audio_focus_delegate.h" | 8 #include "content/browser/media/session/audio_focus_delegate.h" |
9 #include "content/browser/media/session/media_session_controller.h" | 9 #include "content/browser/media/session/media_session_controller.h" |
10 #include "content/browser/media/session/media_session_player_observer.h" | 10 #include "content/browser/media/session/media_session_player_observer.h" |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 // TODO(zqzhang): refactor MediaSessionImpl, maybe move the interface used to | 103 // TODO(zqzhang): refactor MediaSessionImpl, maybe move the interface used to |
104 // talk with AudioFocusManager out to a seperate class. The AudioFocusManager | 104 // talk with AudioFocusManager out to a seperate class. The AudioFocusManager |
105 // unit tests then could mock the interface and abandon audio focus when | 105 // unit tests then could mock the interface and abandon audio focus when |
106 // WebContents is destroyed. See https://crbug.com/651069 | 106 // WebContents is destroyed. See https://crbug.com/651069 |
107 normal_players_.clear(); | 107 normal_players_.clear(); |
108 pepper_players_.clear(); | 108 pepper_players_.clear(); |
109 one_shot_players_.clear(); | 109 one_shot_players_.clear(); |
110 AbandonSystemAudioFocusIfNeeded(); | 110 AbandonSystemAudioFocusIfNeeded(); |
111 } | 111 } |
112 | 112 |
| 113 void MediaSessionImpl::RenderFrameDeleted(RenderFrameHost* rfh) { |
| 114 if (services_.count(rfh)) |
| 115 OnServiceDestroyed(services_[rfh]); |
| 116 } |
| 117 |
113 void MediaSessionImpl::AddObserver(MediaSessionObserver* observer) { | 118 void MediaSessionImpl::AddObserver(MediaSessionObserver* observer) { |
114 observers_.AddObserver(observer); | 119 observers_.AddObserver(observer); |
115 } | 120 } |
116 | 121 |
117 void MediaSessionImpl::RemoveObserver(MediaSessionObserver* observer) { | 122 void MediaSessionImpl::RemoveObserver(MediaSessionObserver* observer) { |
118 observers_.RemoveObserver(observer); | 123 observers_.RemoveObserver(observer); |
119 } | 124 } |
120 | 125 |
121 void MediaSessionImpl::NotifyMediaSessionMetadataChange( | 126 void MediaSessionImpl::NotifyMediaSessionMetadataChange( |
122 const base::Optional<MediaMetadata>& metadata) { | 127 const base::Optional<MediaMetadata>& metadata) { |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 | 572 |
568 one_shot_players_.insert(PlayerIdentifier(observer, player_id)); | 573 one_shot_players_.insert(PlayerIdentifier(observer, player_id)); |
569 NotifyAboutStateChange(); | 574 NotifyAboutStateChange(); |
570 | 575 |
571 return true; | 576 return true; |
572 } | 577 } |
573 | 578 |
574 // MediaSessionService-related methods | 579 // MediaSessionService-related methods |
575 | 580 |
576 void MediaSessionImpl::OnServiceCreated(MediaSessionServiceImpl* service) { | 581 void MediaSessionImpl::OnServiceCreated(MediaSessionServiceImpl* service) { |
577 services_[service->GetRenderFrameHost()] = service; | 582 RenderFrameHost* rfh = service->GetRenderFrameHost(); |
| 583 if (!rfh) |
| 584 return; |
| 585 |
| 586 services_[rfh] = service; |
578 UpdateRoutedService(); | 587 UpdateRoutedService(); |
579 } | 588 } |
580 | 589 |
581 void MediaSessionImpl::OnServiceDestroyed(MediaSessionServiceImpl* service) { | 590 void MediaSessionImpl::OnServiceDestroyed(MediaSessionServiceImpl* service) { |
582 services_.erase(service->GetRenderFrameHost()); | 591 services_.erase(service->GetRenderFrameHost()); |
583 if (routed_service_ == service) { | 592 if (routed_service_ == service) { |
584 routed_service_ = nullptr; | 593 routed_service_ = nullptr; |
585 UpdateRoutedService(); | 594 UpdateRoutedService(); |
586 } | 595 } |
587 } | 596 } |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
700 if (!IsServiceActiveForRenderFrameHost(frame)) | 709 if (!IsServiceActiveForRenderFrameHost(frame)) |
701 continue; | 710 continue; |
702 best_frame = frame; | 711 best_frame = frame; |
703 min_depth = depth; | 712 min_depth = depth; |
704 } | 713 } |
705 | 714 |
706 return best_frame ? services_[best_frame] : nullptr; | 715 return best_frame ? services_[best_frame] : nullptr; |
707 } | 716 } |
708 | 717 |
709 } // namespace content | 718 } // namespace content |
OLD | NEW |