Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: chrome/browser/media/router/presentation_service_delegate_impl.cc

Issue 2627463003: Convert MediaRouter mojom apis to intake url::Origin objects instead of strings (Closed)
Patch Set: Add missing dependency for extensions_renderer_resources target Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 53
54 // Returns the unique identifier for the supplied RenderFrameHost. 54 // Returns the unique identifier for the supplied RenderFrameHost.
55 RenderFrameHostId GetRenderFrameHostId(RenderFrameHost* render_frame_host) { 55 RenderFrameHostId GetRenderFrameHostId(RenderFrameHost* render_frame_host) {
56 int render_process_id = render_frame_host->GetProcess()->GetID(); 56 int render_process_id = render_frame_host->GetProcess()->GetID();
57 int render_frame_id = render_frame_host->GetRoutingID(); 57 int render_frame_id = render_frame_host->GetRoutingID();
58 return RenderFrameHostId(render_process_id, render_frame_id); 58 return RenderFrameHostId(render_process_id, render_frame_id);
59 } 59 }
60 60
61 // Gets the last committed URL for the render frame specified by 61 // Gets the last committed URL for the render frame specified by
62 // |render_frame_host_id|. 62 // |render_frame_host_id|.
63 GURL GetLastCommittedURLForFrame(RenderFrameHostId render_frame_host_id) { 63 url::Origin GetLastCommittedURLForFrame(
64 RenderFrameHostId render_frame_host_id) {
64 RenderFrameHost* render_frame_host = RenderFrameHost::FromID( 65 RenderFrameHost* render_frame_host = RenderFrameHost::FromID(
65 render_frame_host_id.first, render_frame_host_id.second); 66 render_frame_host_id.first, render_frame_host_id.second);
66 if (!render_frame_host) 67 DCHECK(render_frame_host);
67 return GURL(); 68 return render_frame_host->GetLastCommittedOrigin();
68
69 // TODO(crbug.com/632623): Use url::Origin in place of GURL for origins
70 return render_frame_host->GetLastCommittedOrigin().GetURL();
71 } 69 }
72 70
73 // Observes messages originating from the MediaSink connected to a MediaRoute 71 // Observes messages originating from the MediaSink connected to a MediaRoute
74 // that represents a presentation. Converts the messages into 72 // that represents a presentation. Converts the messages into
75 // content::PresentationSessionMessages and dispatches them via the provided 73 // content::PresentationSessionMessages and dispatches them via the provided
76 // PresentationSessionMessageCallback. 74 // PresentationSessionMessageCallback.
77 class PresentationSessionMessagesObserver : public RouteMessageObserver { 75 class PresentationSessionMessagesObserver : public RouteMessageObserver {
78 public: 76 public:
79 // |message_cb|: The callback to invoke whenever messages are received. 77 // |message_cb|: The callback to invoke whenever messages are received.
80 // |route_id|: ID of MediaRoute to listen for messages. 78 // |route_id|: ID of MediaRoute to listen for messages.
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 214
217 bool PresentationFrame::SetScreenAvailabilityListener( 215 bool PresentationFrame::SetScreenAvailabilityListener(
218 content::PresentationScreenAvailabilityListener* listener) { 216 content::PresentationScreenAvailabilityListener* listener) {
219 MediaSource source(GetMediaSourceFromListener(listener)); 217 MediaSource source(GetMediaSourceFromListener(listener));
220 auto& sinks_observer = url_to_sinks_observer_[source.id()]; 218 auto& sinks_observer = url_to_sinks_observer_[source.id()];
221 if (sinks_observer && sinks_observer->listener() == listener) 219 if (sinks_observer && sinks_observer->listener() == listener)
222 return false; 220 return false;
223 221
224 sinks_observer.reset(new PresentationMediaSinksObserver( 222 sinks_observer.reset(new PresentationMediaSinksObserver(
225 router_, listener, source, 223 router_, listener, source,
226 GetLastCommittedURLForFrame(render_frame_host_id_).GetOrigin())); 224 GetLastCommittedURLForFrame(render_frame_host_id_)));
227 225
228 if (!sinks_observer->Init()) { 226 if (!sinks_observer->Init()) {
229 url_to_sinks_observer_.erase(source.id()); 227 url_to_sinks_observer_.erase(source.id());
230 listener->OnScreenAvailabilityNotSupported(); 228 listener->OnScreenAvailabilityNotSupported();
231 return false; 229 return false;
232 } 230 }
233 231
234 return true; 232 return true;
235 } 233 }
236 234
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 const RenderFrameHostId& render_frame_host_id, 524 const RenderFrameHostId& render_frame_host_id,
527 const std::vector<GURL>& default_presentation_urls, 525 const std::vector<GURL>& default_presentation_urls,
528 const content::PresentationSessionStartedCallback& callback) { 526 const content::PresentationSessionStartedCallback& callback) {
529 if (!IsMainFrame(render_frame_host_id)) 527 if (!IsMainFrame(render_frame_host_id))
530 return; 528 return;
531 529
532 if (default_presentation_urls.empty()) { 530 if (default_presentation_urls.empty()) {
533 ClearDefaultPresentationRequest(); 531 ClearDefaultPresentationRequest();
534 } else { 532 } else {
535 DCHECK(!callback.is_null()); 533 DCHECK(!callback.is_null());
536 GURL frame_url(GetLastCommittedURLForFrame(render_frame_host_id)); 534 const auto& frame_origin =
535 GetLastCommittedURLForFrame(render_frame_host_id);
537 PresentationRequest request(render_frame_host_id, default_presentation_urls, 536 PresentationRequest request(render_frame_host_id, default_presentation_urls,
538 frame_url); 537 frame_origin);
539 default_presentation_started_callback_ = callback; 538 default_presentation_started_callback_ = callback;
540 SetDefaultPresentationRequest(request); 539 SetDefaultPresentationRequest(request);
541 } 540 }
542 } 541 }
543 542
544 void PresentationFrameManager::AddDefaultPresentationRequestObserver( 543 void PresentationFrameManager::AddDefaultPresentationRequestObserver(
545 PresentationServiceDelegateImpl::DefaultPresentationRequestObserver* 544 PresentationServiceDelegateImpl::DefaultPresentationRequestObserver*
546 observer) { 545 observer) {
547 default_presentation_request_observers_.AddObserver(observer); 546 default_presentation_request_observers_.AddObserver(observer);
548 } 547 }
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 const content::PresentationSessionStartedCallback& success_cb, 780 const content::PresentationSessionStartedCallback& success_cb,
782 const content::PresentationSessionErrorCallback& error_cb) { 781 const content::PresentationSessionErrorCallback& error_cb) {
783 DVLOG(2) << "PresentationServiceDelegateImpl::JoinSession"; 782 DVLOG(2) << "PresentationServiceDelegateImpl::JoinSession";
784 if (presentation_urls.empty()) { 783 if (presentation_urls.empty()) {
785 error_cb.Run(content::PresentationError( 784 error_cb.Run(content::PresentationError(
786 content::PRESENTATION_ERROR_NO_PRESENTATION_FOUND, 785 content::PRESENTATION_ERROR_NO_PRESENTATION_FOUND,
787 "Invalid presentation arguments.")); 786 "Invalid presentation arguments."));
788 return; 787 return;
789 } 788 }
790 789
791 const url::Origin& origin = url::Origin(GetLastCommittedURLForFrame( 790 const url::Origin& origin = GetLastCommittedURLForFrame(
792 RenderFrameHostId(render_process_id, render_frame_id))); 791 RenderFrameHostId(render_process_id, render_frame_id));
793 792
794 #if !defined(OS_ANDROID) 793 #if !defined(OS_ANDROID)
795 if (IsAutoJoinPresentationId(presentation_id) && 794 if (IsAutoJoinPresentationId(presentation_id) &&
796 ShouldCancelAutoJoinForOrigin(origin)) { 795 ShouldCancelAutoJoinForOrigin(origin)) {
797 error_cb.Run(content::PresentationError( 796 error_cb.Run(content::PresentationError(
798 content::PRESENTATION_ERROR_SESSION_REQUEST_CANCELLED, 797 content::PRESENTATION_ERROR_SESSION_REQUEST_CANCELLED,
799 "Auto-join request cancelled by user preferences.")); 798 "Auto-join request cancelled by user preferences."));
800 return; 799 return;
801 } 800 }
802 #endif // !defined(OS_ANDROID) 801 #endif // !defined(OS_ANDROID)
803 802
804 // TODO(crbug.com/627655): Handle multiple URLs. 803 // TODO(crbug.com/627655): Handle multiple URLs.
805 const GURL& presentation_url = presentation_urls[0]; 804 const GURL& presentation_url = presentation_urls[0];
806 bool incognito = web_contents_->GetBrowserContext()->IsOffTheRecord(); 805 bool incognito = web_contents_->GetBrowserContext()->IsOffTheRecord();
807 std::vector<MediaRouteResponseCallback> route_response_callbacks; 806 std::vector<MediaRouteResponseCallback> route_response_callbacks;
808 route_response_callbacks.push_back( 807 route_response_callbacks.push_back(
809 base::Bind(&PresentationServiceDelegateImpl::OnJoinRouteResponse, 808 base::Bind(&PresentationServiceDelegateImpl::OnJoinRouteResponse,
810 weak_factory_.GetWeakPtr(), render_process_id, render_frame_id, 809 weak_factory_.GetWeakPtr(), render_process_id, render_frame_id,
811 presentation_url, presentation_id, success_cb, error_cb)); 810 presentation_url, presentation_id, success_cb, error_cb));
812 router_->JoinRoute(MediaSourceForPresentationUrl(presentation_url).id(), 811 router_->JoinRoute(MediaSourceForPresentationUrl(presentation_url).id(),
813 presentation_id, origin.GetURL(), web_contents_, 812 presentation_id, origin, web_contents_,
814 route_response_callbacks, base::TimeDelta(), incognito); 813 route_response_callbacks, base::TimeDelta(), incognito);
815 } 814 }
816 815
817 void PresentationServiceDelegateImpl::CloseConnection( 816 void PresentationServiceDelegateImpl::CloseConnection(
818 int render_process_id, 817 int render_process_id,
819 int render_frame_id, 818 int render_frame_id,
820 const std::string& presentation_id) { 819 const std::string& presentation_id) {
821 const RenderFrameHostId rfh_id(render_process_id, render_frame_id); 820 const RenderFrameHostId rfh_id(render_process_id, render_frame_id);
822 const MediaRoute::Id& route_id = 821 const MediaRoute::Id& route_id =
823 frame_manager_->GetRouteId(rfh_id, presentation_id); 822 frame_manager_->GetRouteId(rfh_id, presentation_id);
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 const base::ListValue* origins = 968 const base::ListValue* origins =
970 Profile::FromBrowserContext(web_contents_->GetBrowserContext()) 969 Profile::FromBrowserContext(web_contents_->GetBrowserContext())
971 ->GetPrefs() 970 ->GetPrefs()
972 ->GetList(prefs::kMediaRouterTabMirroringSources); 971 ->GetList(prefs::kMediaRouterTabMirroringSources);
973 return origins && 972 return origins &&
974 origins->Find(base::StringValue(origin.Serialize())) != origins->end(); 973 origins->Find(base::StringValue(origin.Serialize())) != origins->end();
975 } 974 }
976 #endif // !defined(OS_ANDROID) 975 #endif // !defined(OS_ANDROID)
977 976
978 } // namespace media_router 977 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698