| 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 <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 int render_process_id = render_frame_host->GetProcess()->GetID(); | 46 int render_process_id = render_frame_host->GetProcess()->GetID(); |
| 47 int render_frame_id = render_frame_host->GetRoutingID(); | 47 int render_frame_id = render_frame_host->GetRoutingID(); |
| 48 return RenderFrameHostId(render_process_id, render_frame_id); | 48 return RenderFrameHostId(render_process_id, render_frame_id); |
| 49 } | 49 } |
| 50 | 50 |
| 51 // Gets the last committed URL for the render frame specified by | 51 // Gets the last committed URL for the render frame specified by |
| 52 // |render_frame_host_id|. | 52 // |render_frame_host_id|. |
| 53 GURL GetLastCommittedURLForFrame(RenderFrameHostId render_frame_host_id) { | 53 GURL GetLastCommittedURLForFrame(RenderFrameHostId render_frame_host_id) { |
| 54 RenderFrameHost* render_frame_host = RenderFrameHost::FromID( | 54 RenderFrameHost* render_frame_host = RenderFrameHost::FromID( |
| 55 render_frame_host_id.first, render_frame_host_id.second); | 55 render_frame_host_id.first, render_frame_host_id.second); |
| 56 DCHECK(render_frame_host); | 56 return render_frame_host ? render_frame_host->GetLastCommittedURL() : GURL(); |
| 57 return render_frame_host->GetLastCommittedURL(); | |
| 58 } | 57 } |
| 59 | 58 |
| 60 } // namespace | 59 } // namespace |
| 61 | 60 |
| 62 // Used by PresentationServiceDelegateImpl to manage | 61 // Used by PresentationServiceDelegateImpl to manage |
| 63 // listeners and default presentation info in a render frame. | 62 // listeners and default presentation info in a render frame. |
| 64 // Its lifetime: | 63 // Its lifetime: |
| 65 // * PresentationFrameManager AddDelegateObserver | 64 // * PresentationFrameManager AddDelegateObserver |
| 66 // * Reset 0+ times. | 65 // * Reset 0+ times. |
| 67 // * PresentationFrameManager.RemoveDelegateObserver. | 66 // * PresentationFrameManager.RemoveDelegateObserver. |
| 68 class PresentationFrame { | 67 class PresentationFrame { |
| 69 public: | 68 public: |
| 70 PresentationFrame(content::WebContents* web_contents, MediaRouter* router); | 69 PresentationFrame(const RenderFrameHostId& render_frame_host_id, |
| 70 content::WebContents* web_contents, |
| 71 MediaRouter* router); |
| 71 ~PresentationFrame(); | 72 ~PresentationFrame(); |
| 72 | 73 |
| 73 // Mirror corresponding APIs in PresentationServiceDelegateImpl. | 74 // Mirror corresponding APIs in PresentationServiceDelegateImpl. |
| 74 bool SetScreenAvailabilityListener( | 75 bool SetScreenAvailabilityListener( |
| 75 content::PresentationScreenAvailabilityListener* listener); | 76 content::PresentationScreenAvailabilityListener* listener); |
| 76 bool RemoveScreenAvailabilityListener( | 77 bool RemoveScreenAvailabilityListener( |
| 77 content::PresentationScreenAvailabilityListener* listener); | 78 content::PresentationScreenAvailabilityListener* listener); |
| 78 bool HasScreenAvailabilityListenerForTest( | 79 bool HasScreenAvailabilityListenerForTest( |
| 79 const MediaSource::Id& source_id) const; | 80 const MediaSource::Id& source_id) const; |
| 80 std::string GetDefaultPresentationId() const; | 81 std::string GetDefaultPresentationId() const; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 106 MediaSource GetMediaSourceFromListener( | 107 MediaSource GetMediaSourceFromListener( |
| 107 content::PresentationScreenAvailabilityListener* listener) const; | 108 content::PresentationScreenAvailabilityListener* listener) const; |
| 108 base::SmallMap<std::map<std::string, MediaRoute::Id>> | 109 base::SmallMap<std::map<std::string, MediaRoute::Id>> |
| 109 presentation_id_to_route_id_; | 110 presentation_id_to_route_id_; |
| 110 scoped_ptr<PresentationMediaSinksObserver> sinks_observer_; | 111 scoped_ptr<PresentationMediaSinksObserver> sinks_observer_; |
| 111 base::ScopedPtrHashMap<MediaRoute::Id, | 112 base::ScopedPtrHashMap<MediaRoute::Id, |
| 112 scoped_ptr<PresentationConnectionStateSubscription>> | 113 scoped_ptr<PresentationConnectionStateSubscription>> |
| 113 connection_state_subscriptions_; | 114 connection_state_subscriptions_; |
| 114 ScopedVector<PresentationSessionMessagesObserver> session_messages_observers_; | 115 ScopedVector<PresentationSessionMessagesObserver> session_messages_observers_; |
| 115 | 116 |
| 117 RenderFrameHostId render_frame_host_id_; |
| 118 |
| 116 // References to the owning WebContents, and the corresponding MediaRouter. | 119 // References to the owning WebContents, and the corresponding MediaRouter. |
| 117 const content::WebContents* web_contents_; | 120 const content::WebContents* web_contents_; |
| 118 MediaRouter* router_; | 121 MediaRouter* router_; |
| 119 | 122 |
| 120 DelegateObserver* delegate_observer_; | 123 DelegateObserver* delegate_observer_; |
| 121 }; | 124 }; |
| 122 | 125 |
| 123 PresentationFrame::PresentationFrame(content::WebContents* web_contents, | 126 PresentationFrame::PresentationFrame( |
| 124 MediaRouter* router) | 127 const RenderFrameHostId& render_frame_host_id, |
| 125 : web_contents_(web_contents), | 128 content::WebContents* web_contents, |
| 129 MediaRouter* router) |
| 130 : render_frame_host_id_(render_frame_host_id), |
| 131 web_contents_(web_contents), |
| 126 router_(router), | 132 router_(router), |
| 127 delegate_observer_(nullptr) { | 133 delegate_observer_(nullptr) { |
| 128 DCHECK(web_contents_); | 134 DCHECK(web_contents_); |
| 129 DCHECK(router_); | 135 DCHECK(router_); |
| 130 } | 136 } |
| 131 | 137 |
| 132 PresentationFrame::~PresentationFrame() { | 138 PresentationFrame::~PresentationFrame() { |
| 133 } | 139 } |
| 134 | 140 |
| 135 void PresentationFrame::OnPresentationServiceDelegateDestroyed() const { | 141 void PresentationFrame::OnPresentationServiceDelegateDestroyed() const { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 155 route_ids.push_back(e.second); | 161 route_ids.push_back(e.second); |
| 156 return route_ids; | 162 return route_ids; |
| 157 } | 163 } |
| 158 | 164 |
| 159 bool PresentationFrame::SetScreenAvailabilityListener( | 165 bool PresentationFrame::SetScreenAvailabilityListener( |
| 160 content::PresentationScreenAvailabilityListener* listener) { | 166 content::PresentationScreenAvailabilityListener* listener) { |
| 161 if (sinks_observer_ && sinks_observer_->listener() == listener) | 167 if (sinks_observer_ && sinks_observer_->listener() == listener) |
| 162 return false; | 168 return false; |
| 163 | 169 |
| 164 MediaSource source(GetMediaSourceFromListener(listener)); | 170 MediaSource source(GetMediaSourceFromListener(listener)); |
| 165 sinks_observer_.reset( | 171 sinks_observer_.reset(new PresentationMediaSinksObserver( |
| 166 new PresentationMediaSinksObserver(router_, listener, source)); | 172 router_, listener, source, |
| 173 GetLastCommittedURLForFrame(render_frame_host_id_).GetOrigin())); |
| 167 | 174 |
| 168 if (!sinks_observer_->Init()) { | 175 if (!sinks_observer_->Init()) { |
| 169 sinks_observer_.reset(); | 176 sinks_observer_.reset(); |
| 170 listener->OnScreenAvailabilityNotSupported(); | 177 listener->OnScreenAvailabilityNotSupported(); |
| 171 return false; | 178 return false; |
| 172 } | 179 } |
| 173 | 180 |
| 174 return true; | 181 return true; |
| 175 } | 182 } |
| 176 | 183 |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 539 auto presentation_frame = presentation_frames_.get(render_frame_host_id); | 546 auto presentation_frame = presentation_frames_.get(render_frame_host_id); |
| 540 if (presentation_frame) | 547 if (presentation_frame) |
| 541 presentation_frame->RemoveConnection(route_id, presentation_id); | 548 presentation_frame->RemoveConnection(route_id, presentation_id); |
| 542 } | 549 } |
| 543 | 550 |
| 544 PresentationFrame* PresentationFrameManager::GetOrAddPresentationFrame( | 551 PresentationFrame* PresentationFrameManager::GetOrAddPresentationFrame( |
| 545 const RenderFrameHostId& render_frame_host_id) { | 552 const RenderFrameHostId& render_frame_host_id) { |
| 546 if (!presentation_frames_.contains(render_frame_host_id)) { | 553 if (!presentation_frames_.contains(render_frame_host_id)) { |
| 547 presentation_frames_.add( | 554 presentation_frames_.add( |
| 548 render_frame_host_id, | 555 render_frame_host_id, |
| 549 scoped_ptr<PresentationFrame>( | 556 scoped_ptr<PresentationFrame>(new PresentationFrame( |
| 550 new PresentationFrame(web_contents_, router_))); | 557 render_frame_host_id, web_contents_, router_))); |
| 551 } | 558 } |
| 552 return presentation_frames_.get(render_frame_host_id); | 559 return presentation_frames_.get(render_frame_host_id); |
| 553 } | 560 } |
| 554 | 561 |
| 555 void PresentationFrameManager::ClearDefaultPresentationRequest() { | 562 void PresentationFrameManager::ClearDefaultPresentationRequest() { |
| 556 default_presentation_started_callback_.Reset(); | 563 default_presentation_started_callback_.Reset(); |
| 557 if (!default_presentation_request_) | 564 if (!default_presentation_request_) |
| 558 return; | 565 return; |
| 559 | 566 |
| 560 default_presentation_request_.reset(); | 567 default_presentation_request_.reset(); |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 875 bool PresentationServiceDelegateImpl::HasScreenAvailabilityListenerForTest( | 882 bool PresentationServiceDelegateImpl::HasScreenAvailabilityListenerForTest( |
| 876 int render_process_id, | 883 int render_process_id, |
| 877 int render_frame_id, | 884 int render_frame_id, |
| 878 const MediaSource::Id& source_id) const { | 885 const MediaSource::Id& source_id) const { |
| 879 RenderFrameHostId render_frame_host_id(render_process_id, render_frame_id); | 886 RenderFrameHostId render_frame_host_id(render_process_id, render_frame_id); |
| 880 return frame_manager_->HasScreenAvailabilityListenerForTest( | 887 return frame_manager_->HasScreenAvailabilityListenerForTest( |
| 881 render_frame_host_id, source_id); | 888 render_frame_host_id, source_id); |
| 882 } | 889 } |
| 883 | 890 |
| 884 } // namespace media_router | 891 } // namespace media_router |
| OLD | NEW |