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

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

Issue 2583943002: Remove workaround for GetLastCommittedOrigin with non-current RFHs. (Closed)
Patch Set: Created 4 years 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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>
11 11
12 #include "base/containers/small_map.h" 12 #include "base/containers/small_map.h"
13 #include "base/guid.h" 13 #include "base/guid.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/stl_util.h"
16 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
17 #include "chrome/browser/media/router/create_presentation_connection_request.h" 16 #include "chrome/browser/media/router/create_presentation_connection_request.h"
18 #include "chrome/browser/media/router/media_route.h" 17 #include "chrome/browser/media/router/media_route.h"
19 #include "chrome/browser/media/router/media_router.h" 18 #include "chrome/browser/media/router/media_router.h"
20 #include "chrome/browser/media/router/media_router_dialog_controller.h" 19 #include "chrome/browser/media/router/media_router_dialog_controller.h"
21 #include "chrome/browser/media/router/media_router_factory.h" 20 #include "chrome/browser/media/router/media_router_factory.h"
22 #include "chrome/browser/media/router/media_sink.h" 21 #include "chrome/browser/media/router/media_sink.h"
23 #include "chrome/browser/media/router/media_source_helper.h" 22 #include "chrome/browser/media/router/media_source_helper.h"
24 #include "chrome/browser/media/router/presentation_media_sinks_observer.h" 23 #include "chrome/browser/media/router/presentation_media_sinks_observer.h"
25 #include "chrome/browser/media/router/route_message.h" 24 #include "chrome/browser/media/router/route_message.h"
(...skipping 25 matching lines...) Expand all
51 50
52 // Returns the unique identifier for the supplied RenderFrameHost. 51 // Returns the unique identifier for the supplied RenderFrameHost.
53 RenderFrameHostId GetRenderFrameHostId(RenderFrameHost* render_frame_host) { 52 RenderFrameHostId GetRenderFrameHostId(RenderFrameHost* render_frame_host) {
54 int render_process_id = render_frame_host->GetProcess()->GetID(); 53 int render_process_id = render_frame_host->GetProcess()->GetID();
55 int render_frame_id = render_frame_host->GetRoutingID(); 54 int render_frame_id = render_frame_host->GetRoutingID();
56 return RenderFrameHostId(render_process_id, render_frame_id); 55 return RenderFrameHostId(render_process_id, render_frame_id);
57 } 56 }
58 57
59 // Gets the last committed URL for the render frame specified by 58 // Gets the last committed URL for the render frame specified by
60 // |render_frame_host_id|. 59 // |render_frame_host_id|.
61 GURL GetLastCommittedURLForFrame(RenderFrameHostId render_frame_host_id, 60 GURL GetLastCommittedURLForFrame(RenderFrameHostId render_frame_host_id) {
62 content::WebContents* web_contents) {
63 RenderFrameHost* render_frame_host = RenderFrameHost::FromID( 61 RenderFrameHost* render_frame_host = RenderFrameHost::FromID(
64 render_frame_host_id.first, render_frame_host_id.second); 62 render_frame_host_id.first, render_frame_host_id.second);
65 // crbug.com/663740: The RFH may not be associated with the frame tree; in 63 if (!render_frame_host)
66 // that case, GetLastCommittedOrigin() may crash.
67 if (!render_frame_host ||
68 !base::ContainsValue(web_contents->GetAllFrames(), render_frame_host))
69 return GURL(); 64 return GURL();
70 65
71 // TODO(crbug.com/632623): Use url::Origin in place of GURL for origins 66 // TODO(crbug.com/632623): Use url::Origin in place of GURL for origins
72 return render_frame_host->GetLastCommittedOrigin().GetURL(); 67 return render_frame_host->GetLastCommittedOrigin().GetURL();
73 } 68 }
74 69
75 // Observes messages originating from the MediaSink connected to a MediaRoute 70 // Observes messages originating from the MediaSink connected to a MediaRoute
76 // that represents a presentation. Converts the messages into 71 // that represents a presentation. Converts the messages into
77 // content::PresentationSessionMessages and dispatches them via the provided 72 // content::PresentationSessionMessages and dispatches them via the provided
78 // PresentationSessionMessageCallback. 73 // PresentationSessionMessageCallback.
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 228
234 bool PresentationFrame::SetScreenAvailabilityListener( 229 bool PresentationFrame::SetScreenAvailabilityListener(
235 content::PresentationScreenAvailabilityListener* listener) { 230 content::PresentationScreenAvailabilityListener* listener) {
236 MediaSource source(GetMediaSourceFromListener(listener)); 231 MediaSource source(GetMediaSourceFromListener(listener));
237 auto& sinks_observer = url_to_sinks_observer_[source.id()]; 232 auto& sinks_observer = url_to_sinks_observer_[source.id()];
238 if (sinks_observer && sinks_observer->listener() == listener) 233 if (sinks_observer && sinks_observer->listener() == listener)
239 return false; 234 return false;
240 235
241 sinks_observer.reset(new PresentationMediaSinksObserver( 236 sinks_observer.reset(new PresentationMediaSinksObserver(
242 router_, listener, source, 237 router_, listener, source,
243 GetLastCommittedURLForFrame(render_frame_host_id_, web_contents_) 238 GetLastCommittedURLForFrame(render_frame_host_id_).GetOrigin()));
244 .GetOrigin()));
245 239
246 if (!sinks_observer->Init()) { 240 if (!sinks_observer->Init()) {
247 url_to_sinks_observer_.erase(source.id()); 241 url_to_sinks_observer_.erase(source.id());
248 listener->OnScreenAvailabilityNotSupported(); 242 listener->OnScreenAvailabilityNotSupported();
249 return false; 243 return false;
250 } 244 }
251 245
252 return true; 246 return true;
253 } 247 }
254 248
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 const RenderFrameHostId& render_frame_host_id, 552 const RenderFrameHostId& render_frame_host_id,
559 const std::vector<GURL>& default_presentation_urls, 553 const std::vector<GURL>& default_presentation_urls,
560 const content::PresentationSessionStartedCallback& callback) { 554 const content::PresentationSessionStartedCallback& callback) {
561 if (!IsMainFrame(render_frame_host_id)) 555 if (!IsMainFrame(render_frame_host_id))
562 return; 556 return;
563 557
564 if (default_presentation_urls.empty()) { 558 if (default_presentation_urls.empty()) {
565 ClearDefaultPresentationRequest(); 559 ClearDefaultPresentationRequest();
566 } else { 560 } else {
567 DCHECK(!callback.is_null()); 561 DCHECK(!callback.is_null());
568 GURL frame_url( 562 GURL frame_url(GetLastCommittedURLForFrame(render_frame_host_id));
569 GetLastCommittedURLForFrame(render_frame_host_id, web_contents_));
570 PresentationRequest request(render_frame_host_id, default_presentation_urls, 563 PresentationRequest request(render_frame_host_id, default_presentation_urls,
571 frame_url); 564 frame_url);
572 default_presentation_started_callback_ = callback; 565 default_presentation_started_callback_ = callback;
573 SetDefaultPresentationRequest(request); 566 SetDefaultPresentationRequest(request);
574 } 567 }
575 } 568 }
576 569
577 void PresentationFrameManager::AddDelegateObserver( 570 void PresentationFrameManager::AddDelegateObserver(
578 const RenderFrameHostId& render_frame_host_id, 571 const RenderFrameHostId& render_frame_host_id,
579 DelegateObserver* observer) { 572 DelegateObserver* observer) {
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 error_cb.Run(content::PresentationError( 793 error_cb.Run(content::PresentationError(
801 content::PRESENTATION_ERROR_NO_PRESENTATION_FOUND, 794 content::PRESENTATION_ERROR_NO_PRESENTATION_FOUND,
802 "Invalid presentation URL.")); 795 "Invalid presentation URL."));
803 return; 796 return;
804 } 797 }
805 798
806 RenderFrameHostId render_frame_host_id(render_process_id, render_frame_id); 799 RenderFrameHostId render_frame_host_id(render_process_id, render_frame_id);
807 std::unique_ptr<CreatePresentationConnectionRequest> request( 800 std::unique_ptr<CreatePresentationConnectionRequest> request(
808 new CreatePresentationConnectionRequest( 801 new CreatePresentationConnectionRequest(
809 render_frame_host_id, presentation_urls, 802 render_frame_host_id, presentation_urls,
810 GetLastCommittedURLForFrame(render_frame_host_id, web_contents_), 803 GetLastCommittedURLForFrame(render_frame_host_id),
811 base::Bind(&PresentationServiceDelegateImpl::OnStartSessionSucceeded, 804 base::Bind(&PresentationServiceDelegateImpl::OnStartSessionSucceeded,
812 weak_factory_.GetWeakPtr(), render_process_id, 805 weak_factory_.GetWeakPtr(), render_process_id,
813 render_frame_id, success_cb), 806 render_frame_id, success_cb),
814 error_cb)); 807 error_cb));
815 MediaRouterDialogController* controller = 808 MediaRouterDialogController* controller =
816 MediaRouterDialogController::GetOrCreateForWebContents(web_contents_); 809 MediaRouterDialogController::GetOrCreateForWebContents(web_contents_);
817 if (!controller->ShowMediaRouterDialogForPresentation(std::move(request))) { 810 if (!controller->ShowMediaRouterDialogForPresentation(std::move(request))) {
818 LOG(ERROR) << "Media router dialog already exists. Ignoring StartSession."; 811 LOG(ERROR) << "Media router dialog already exists. Ignoring StartSession.";
819 error_cb.Run(content::PresentationError(content::PRESENTATION_ERROR_UNKNOWN, 812 error_cb.Run(content::PresentationError(content::PRESENTATION_ERROR_UNKNOWN,
820 "Unable to create dialog.")); 813 "Unable to create dialog."));
(...skipping 10 matching lines...) Expand all
831 const content::PresentationSessionErrorCallback& error_cb) { 824 const content::PresentationSessionErrorCallback& error_cb) {
832 DVLOG(2) << "PresentationServiceDelegateImpl::JoinSession"; 825 DVLOG(2) << "PresentationServiceDelegateImpl::JoinSession";
833 if (presentation_urls.empty()) { 826 if (presentation_urls.empty()) {
834 error_cb.Run(content::PresentationError( 827 error_cb.Run(content::PresentationError(
835 content::PRESENTATION_ERROR_NO_PRESENTATION_FOUND, 828 content::PRESENTATION_ERROR_NO_PRESENTATION_FOUND,
836 "Invalid presentation arguments.")); 829 "Invalid presentation arguments."));
837 return; 830 return;
838 } 831 }
839 832
840 const url::Origin& origin = url::Origin(GetLastCommittedURLForFrame( 833 const url::Origin& origin = url::Origin(GetLastCommittedURLForFrame(
841 RenderFrameHostId(render_process_id, render_frame_id), web_contents_)); 834 RenderFrameHostId(render_process_id, render_frame_id)));
842 835
843 #if !defined(OS_ANDROID) 836 #if !defined(OS_ANDROID)
844 if (IsAutoJoinPresentationId(presentation_id) && 837 if (IsAutoJoinPresentationId(presentation_id) &&
845 ShouldCancelAutoJoinForOrigin(origin)) { 838 ShouldCancelAutoJoinForOrigin(origin)) {
846 error_cb.Run(content::PresentationError( 839 error_cb.Run(content::PresentationError(
847 content::PRESENTATION_ERROR_SESSION_REQUEST_CANCELLED, 840 content::PRESENTATION_ERROR_SESSION_REQUEST_CANCELLED,
848 "Auto-join request cancelled by user preferences.")); 841 "Auto-join request cancelled by user preferences."));
849 return; 842 return;
850 } 843 }
851 #endif // !defined(OS_ANDROID) 844 #endif // !defined(OS_ANDROID)
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 const base::ListValue* origins = 995 const base::ListValue* origins =
1003 Profile::FromBrowserContext(web_contents_->GetBrowserContext()) 996 Profile::FromBrowserContext(web_contents_->GetBrowserContext())
1004 ->GetPrefs() 997 ->GetPrefs()
1005 ->GetList(prefs::kMediaRouterTabMirroringSources); 998 ->GetList(prefs::kMediaRouterTabMirroringSources);
1006 return origins && 999 return origins &&
1007 origins->Find(base::StringValue(origin.Serialize())) != origins->end(); 1000 origins->Find(base::StringValue(origin.Serialize())) != origins->end();
1008 } 1001 }
1009 #endif // !defined(OS_ANDROID) 1002 #endif // !defined(OS_ANDROID)
1010 1003
1011 } // namespace media_router 1004 } // namespace media_router
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698