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

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

Issue 2927503002: [Presentation API / Media Router] Relax PresentationRequest URL check. (Closed)
Patch Set: Really add #include Created 3 years, 6 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
« no previous file with comments | « no previous file | chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc » ('j') | 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>
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698