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_service_router.h" | |
6 | |
7 #include "content/browser/media/session/media_session_controller.h" | |
8 #include "content/browser/media/session/media_session_impl.h" | |
9 #include "content/browser/media/session/media_session_service_impl.h" | |
10 | |
11 namespace content { | |
12 | |
13 MediaSessionServiceRouter::MediaSessionServiceRouter(MediaSessionImpl* session) | |
14 : routed_service_(nullptr), session_(session) {} | |
15 | |
16 MediaSessionServiceRouter::~MediaSessionServiceRouter() {} | |
17 | |
18 void MediaSessionServiceRouter::OnServiceCreated( | |
19 MediaSessionServiceImpl* service) { | |
20 services_[service->GetRenderFrameHost()] = service; | |
21 } | |
22 | |
23 void MediaSessionServiceRouter::OnServiceDestroyed( | |
24 MediaSessionServiceImpl* service) { | |
25 services_.erase(service->GetRenderFrameHost()); | |
26 } | |
27 | |
28 void MediaSessionServiceRouter::OnMediaSessionMetadataChanged( | |
29 MediaSessionServiceImpl* service) { | |
30 if (service != routed_service_) | |
31 return; | |
32 | |
33 session_->NotifyMediaSessionMetadataChange(routed_service_->metadata()); | |
34 } | |
35 | |
36 void MediaSessionServiceRouter::OnMediaSessionActionsChanged( | |
37 MediaSessionServiceImpl* service) { | |
38 if (service != routed_service_) | |
39 return; | |
40 | |
41 session_->NotifyMediaSessionActionsChange(routed_service_->actions()); | |
42 } | |
43 | |
44 void MediaSessionServiceRouter::DidReceiveAction( | |
45 blink::mojom::MediaSessionAction action) { | |
46 if (routed_service_) | |
whywhat
2016/11/22 23:13:16
nit: s/routed_service_/!routed_service_
Zhiqiang Zhang (Slow)
2016/11/25 14:50:41
Done.
| |
47 return; | |
48 | |
49 routed_service_->GetClient()->DidReceiveAction(action); | |
50 } | |
51 | |
52 void MediaSessionServiceRouter::MostMeaningfulPlayerObserverMayHaveChanged() { | |
53 RenderFrameHost* rfh = session_->web_contents()->GetMainFrame(); | |
54 // Prefer top-level session. | |
55 if (IsServiceActiveForRenderFrameHost(rfh)) { | |
56 UpdateRoutedService(services_[rfh]); | |
57 return; | |
58 } | |
59 | |
60 // If not, select the most meaningful audio-producing frame. | |
61 MediaSessionController* controller = static_cast<MediaSessionController*>( | |
62 session_->GetMostMeaningfulPlayerObserver()); | |
63 if (!controller || | |
64 !IsServiceActiveForRenderFrameHost(controller->id().first)) { | |
65 UpdateRoutedService(nullptr); | |
66 return; | |
67 } | |
68 UpdateRoutedService(services_[controller->id().first]); | |
69 } | |
70 | |
71 bool MediaSessionServiceRouter::IsServiceActiveForRenderFrameHost( | |
72 RenderFrameHost* rfh) { | |
73 if (!services_.count(rfh)) | |
74 return false; | |
75 | |
76 return services_[rfh]->metadata().has_value() || | |
77 !services_[rfh]->actions().empty(); | |
78 } | |
79 | |
80 void MediaSessionServiceRouter::UpdateRoutedService( | |
81 MediaSessionServiceImpl* service) { | |
82 if (service == routed_service_) | |
83 return; | |
84 | |
85 routed_service_ = service; | |
86 if (!routed_service_) { | |
whywhat
2016/11/22 23:13:16
nit: s/!routed_service/routed_service
Zhiqiang Zhang (Slow)
2016/11/25 14:50:41
Done.
| |
87 session_->NotifyMediaSessionMetadataChange(routed_service_->metadata()); | |
88 session_->NotifyMediaSessionActionsChange(routed_service_->actions()); | |
89 } else { | |
90 session_->NotifyMediaSessionMetadataChange(base::nullopt); | |
91 session_->NotifyMediaSessionActionsChange( | |
92 std::set<blink::mojom::MediaSessionAction>()); | |
93 } | |
94 } | |
95 | |
96 } // namespace content | |
OLD | NEW |