| 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 "chrome/browser/media/router/presentation_service_delegate_impl.h" | 5 #include "chrome/browser/media/router/presentation_service_delegate_impl.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <unordered_map> | 8 #include <unordered_map> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 class PresentationFrame { | 125 class PresentationFrame { |
| 126 public: | 126 public: |
| 127 PresentationFrame(const RenderFrameHostId& render_frame_host_id, | 127 PresentationFrame(const RenderFrameHostId& render_frame_host_id, |
| 128 content::WebContents* web_contents, | 128 content::WebContents* web_contents, |
| 129 MediaRouter* router); | 129 MediaRouter* router); |
| 130 ~PresentationFrame(); | 130 ~PresentationFrame(); |
| 131 | 131 |
| 132 // Mirror corresponding APIs in PresentationServiceDelegateImpl. | 132 // Mirror corresponding APIs in PresentationServiceDelegateImpl. |
| 133 bool SetScreenAvailabilityListener( | 133 bool SetScreenAvailabilityListener( |
| 134 content::PresentationScreenAvailabilityListener* listener); | 134 content::PresentationScreenAvailabilityListener* listener); |
| 135 bool RemoveScreenAvailabilityListener( | 135 void RemoveScreenAvailabilityListener( |
| 136 content::PresentationScreenAvailabilityListener* listener); | 136 content::PresentationScreenAvailabilityListener* listener); |
| 137 bool HasScreenAvailabilityListenerForTest( | 137 bool HasScreenAvailabilityListenerForTest( |
| 138 const MediaSource::Id& source_id) const; | 138 const MediaSource::Id& source_id) const; |
| 139 std::string GetDefaultPresentationId() const; | 139 std::string GetDefaultPresentationId() const; |
| 140 void ListenForConnectionStateChange( | 140 void ListenForConnectionStateChange( |
| 141 const content::PresentationInfo& connection, | 141 const content::PresentationInfo& connection, |
| 142 const content::PresentationConnectionStateChangedCallback& | 142 const content::PresentationConnectionStateChangedCallback& |
| 143 state_changed_cb); | 143 state_changed_cb); |
| 144 void ListenForConnectionMessages( | 144 void ListenForConnectionMessages( |
| 145 const content::PresentationInfo& presentation_info, | 145 const content::PresentationInfo& presentation_info, |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 const MediaRoute::Id PresentationFrame::GetRouteId( | 210 const MediaRoute::Id PresentationFrame::GetRouteId( |
| 211 const std::string& presentation_id) const { | 211 const std::string& presentation_id) const { |
| 212 auto it = presentation_id_to_route_.find(presentation_id); | 212 auto it = presentation_id_to_route_.find(presentation_id); |
| 213 return it != presentation_id_to_route_.end() ? it->second.media_route_id() | 213 return it != presentation_id_to_route_.end() ? it->second.media_route_id() |
| 214 : ""; | 214 : ""; |
| 215 } | 215 } |
| 216 | 216 |
| 217 bool PresentationFrame::SetScreenAvailabilityListener( | 217 bool PresentationFrame::SetScreenAvailabilityListener( |
| 218 content::PresentationScreenAvailabilityListener* listener) { | 218 content::PresentationScreenAvailabilityListener* listener) { |
| 219 MediaSource source(GetMediaSourceFromListener(listener)); | 219 MediaSource source(GetMediaSourceFromListener(listener)); |
| 220 if (!IsValidPresentationUrl(source.url())) { |
| 221 listener->OnScreenAvailabilityChanged(false); |
| 222 return false; |
| 223 } |
| 224 |
| 220 auto& sinks_observer = url_to_sinks_observer_[source.id()]; | 225 auto& sinks_observer = url_to_sinks_observer_[source.id()]; |
| 221 if (sinks_observer && sinks_observer->listener() == listener) | 226 if (sinks_observer && sinks_observer->listener() == listener) |
| 222 return false; | 227 return false; |
| 223 | 228 |
| 224 sinks_observer.reset(new PresentationMediaSinksObserver( | 229 sinks_observer.reset(new PresentationMediaSinksObserver( |
| 225 router_, listener, source, | 230 router_, listener, source, |
| 226 GetLastCommittedURLForFrame(render_frame_host_id_))); | 231 GetLastCommittedURLForFrame(render_frame_host_id_))); |
| 227 | 232 |
| 228 if (!sinks_observer->Init()) { | 233 if (!sinks_observer->Init()) { |
| 229 url_to_sinks_observer_.erase(source.id()); | 234 url_to_sinks_observer_.erase(source.id()); |
| 230 listener->OnScreenAvailabilityNotSupported(); | 235 listener->OnScreenAvailabilityNotSupported(); |
| 231 return false; | 236 return false; |
| 232 } | 237 } |
| 233 | 238 |
| 234 return true; | 239 return true; |
| 235 } | 240 } |
| 236 | 241 |
| 237 bool PresentationFrame::RemoveScreenAvailabilityListener( | 242 void PresentationFrame::RemoveScreenAvailabilityListener( |
| 238 content::PresentationScreenAvailabilityListener* listener) { | 243 content::PresentationScreenAvailabilityListener* listener) { |
| 239 MediaSource source(GetMediaSourceFromListener(listener)); | 244 MediaSource source(GetMediaSourceFromListener(listener)); |
| 240 auto sinks_observer_it = url_to_sinks_observer_.find(source.id()); | 245 auto sinks_observer_it = url_to_sinks_observer_.find(source.id()); |
| 241 if (sinks_observer_it != url_to_sinks_observer_.end() && | 246 if (sinks_observer_it != url_to_sinks_observer_.end() && |
| 242 sinks_observer_it->second->listener() == listener) { | 247 sinks_observer_it->second->listener() == listener) { |
| 243 url_to_sinks_observer_.erase(sinks_observer_it); | 248 url_to_sinks_observer_.erase(sinks_observer_it); |
| 244 return true; | |
| 245 } | 249 } |
| 246 return false; | |
| 247 } | 250 } |
| 248 | 251 |
| 249 bool PresentationFrame::HasScreenAvailabilityListenerForTest( | 252 bool PresentationFrame::HasScreenAvailabilityListenerForTest( |
| 250 const MediaSource::Id& source_id) const { | 253 const MediaSource::Id& source_id) const { |
| 251 return url_to_sinks_observer_.find(source_id) != url_to_sinks_observer_.end(); | 254 return url_to_sinks_observer_.find(source_id) != url_to_sinks_observer_.end(); |
| 252 } | 255 } |
| 253 | 256 |
| 254 void PresentationFrame::Reset() { | 257 void PresentationFrame::Reset() { |
| 255 | 258 |
| 256 for (const auto& pid_route : presentation_id_to_route_) { | 259 for (const auto& pid_route : presentation_id_to_route_) { |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 class PresentationFrameManager { | 390 class PresentationFrameManager { |
| 388 public: | 391 public: |
| 389 PresentationFrameManager(content::WebContents* web_contents, | 392 PresentationFrameManager(content::WebContents* web_contents, |
| 390 MediaRouter* router); | 393 MediaRouter* router); |
| 391 ~PresentationFrameManager(); | 394 ~PresentationFrameManager(); |
| 392 | 395 |
| 393 // Mirror corresponding APIs in PresentationServiceDelegateImpl. | 396 // Mirror corresponding APIs in PresentationServiceDelegateImpl. |
| 394 bool SetScreenAvailabilityListener( | 397 bool SetScreenAvailabilityListener( |
| 395 const RenderFrameHostId& render_frame_host_id, | 398 const RenderFrameHostId& render_frame_host_id, |
| 396 content::PresentationScreenAvailabilityListener* listener); | 399 content::PresentationScreenAvailabilityListener* listener); |
| 397 bool RemoveScreenAvailabilityListener( | 400 void RemoveScreenAvailabilityListener( |
| 398 const RenderFrameHostId& render_frame_host_id, | 401 const RenderFrameHostId& render_frame_host_id, |
| 399 content::PresentationScreenAvailabilityListener* listener); | 402 content::PresentationScreenAvailabilityListener* listener); |
| 400 void ListenForConnectionStateChange( | 403 void ListenForConnectionStateChange( |
| 401 const RenderFrameHostId& render_frame_host_id, | 404 const RenderFrameHostId& render_frame_host_id, |
| 402 const content::PresentationInfo& connection, | 405 const content::PresentationInfo& connection, |
| 403 const content::PresentationConnectionStateChangedCallback& | 406 const content::PresentationConnectionStateChangedCallback& |
| 404 state_changed_cb); | 407 state_changed_cb); |
| 405 void ListenForConnectionMessages( | 408 void ListenForConnectionMessages( |
| 406 const RenderFrameHostId& render_frame_host_id, | 409 const RenderFrameHostId& render_frame_host_id, |
| 407 const content::PresentationInfo& presentation_info, | 410 const content::PresentationInfo& presentation_info, |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 } | 549 } |
| 547 | 550 |
| 548 bool PresentationFrameManager::SetScreenAvailabilityListener( | 551 bool PresentationFrameManager::SetScreenAvailabilityListener( |
| 549 const RenderFrameHostId& render_frame_host_id, | 552 const RenderFrameHostId& render_frame_host_id, |
| 550 content::PresentationScreenAvailabilityListener* listener) { | 553 content::PresentationScreenAvailabilityListener* listener) { |
| 551 DCHECK(listener); | 554 DCHECK(listener); |
| 552 auto* presentation_frame = GetOrAddPresentationFrame(render_frame_host_id); | 555 auto* presentation_frame = GetOrAddPresentationFrame(render_frame_host_id); |
| 553 return presentation_frame->SetScreenAvailabilityListener(listener); | 556 return presentation_frame->SetScreenAvailabilityListener(listener); |
| 554 } | 557 } |
| 555 | 558 |
| 556 bool PresentationFrameManager::RemoveScreenAvailabilityListener( | 559 void PresentationFrameManager::RemoveScreenAvailabilityListener( |
| 557 const RenderFrameHostId& render_frame_host_id, | 560 const RenderFrameHostId& render_frame_host_id, |
| 558 content::PresentationScreenAvailabilityListener* listener) { | 561 content::PresentationScreenAvailabilityListener* listener) { |
| 559 DCHECK(listener); | 562 DCHECK(listener); |
| 560 const auto it = presentation_frames_.find(render_frame_host_id); | 563 const auto it = presentation_frames_.find(render_frame_host_id); |
| 561 return it != presentation_frames_.end() && | 564 if (it != presentation_frames_.end()) |
| 562 it->second->RemoveScreenAvailabilityListener(listener); | 565 it->second->RemoveScreenAvailabilityListener(listener); |
| 563 } | 566 } |
| 564 | 567 |
| 565 bool PresentationFrameManager::HasScreenAvailabilityListenerForTest( | 568 bool PresentationFrameManager::HasScreenAvailabilityListenerForTest( |
| 566 const RenderFrameHostId& render_frame_host_id, | 569 const RenderFrameHostId& render_frame_host_id, |
| 567 const MediaSource::Id& source_id) const { | 570 const MediaSource::Id& source_id) const { |
| 568 const auto it = presentation_frames_.find(render_frame_host_id); | 571 const auto it = presentation_frames_.find(render_frame_host_id); |
| 569 return it != presentation_frames_.end() && | 572 return it != presentation_frames_.end() && |
| 570 it->second->HasScreenAvailabilityListenerForTest(source_id); | 573 it->second->HasScreenAvailabilityListenerForTest(source_id); |
| 571 } | 574 } |
| 572 | 575 |
| (...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1079 const base::ListValue* origins = | 1082 const base::ListValue* origins = |
| 1080 Profile::FromBrowserContext(web_contents_->GetBrowserContext()) | 1083 Profile::FromBrowserContext(web_contents_->GetBrowserContext()) |
| 1081 ->GetPrefs() | 1084 ->GetPrefs() |
| 1082 ->GetList(prefs::kMediaRouterTabMirroringSources); | 1085 ->GetList(prefs::kMediaRouterTabMirroringSources); |
| 1083 return origins && | 1086 return origins && |
| 1084 origins->Find(base::Value(origin.Serialize())) != origins->end(); | 1087 origins->Find(base::Value(origin.Serialize())) != origins->end(); |
| 1085 } | 1088 } |
| 1086 #endif // !defined(OS_ANDROID) | 1089 #endif // !defined(OS_ANDROID) |
| 1087 | 1090 |
| 1088 } // namespace media_router | 1091 } // namespace media_router |
| OLD | NEW |