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

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

Issue 2471573005: [Presentation API] (5th) (1-UA) integrate controller and receiver side for 1-UA messaging (Closed)
Patch Set: merge with master 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>
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/strings/string_util.h" 15 #include "base/strings/string_util.h"
16 #include "chrome/browser/media/router/browser_presentation_connection_proxy.h"
16 #include "chrome/browser/media/router/create_presentation_connection_request.h" 17 #include "chrome/browser/media/router/create_presentation_connection_request.h"
17 #include "chrome/browser/media/router/media_route.h" 18 #include "chrome/browser/media/router/media_route.h"
18 #include "chrome/browser/media/router/media_router.h" 19 #include "chrome/browser/media/router/media_router.h"
19 #include "chrome/browser/media/router/media_router_dialog_controller.h" 20 #include "chrome/browser/media/router/media_router_dialog_controller.h"
20 #include "chrome/browser/media/router/media_router_factory.h" 21 #include "chrome/browser/media/router/media_router_factory.h"
21 #include "chrome/browser/media/router/media_sink.h" 22 #include "chrome/browser/media/router/media_sink.h"
22 #include "chrome/browser/media/router/media_source_helper.h" 23 #include "chrome/browser/media/router/media_source_helper.h"
23 #include "chrome/browser/media/router/offscreen_presentation_manager.h" 24 #include "chrome/browser/media/router/offscreen_presentation_manager.h"
24 #include "chrome/browser/media/router/offscreen_presentation_manager_factory.h" 25 #include "chrome/browser/media/router/offscreen_presentation_manager_factory.h"
25 #include "chrome/browser/media/router/presentation_media_sinks_observer.h" 26 #include "chrome/browser/media/router/presentation_media_sinks_observer.h"
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 void RemoveConnection(const std::string& presentation_id, 157 void RemoveConnection(const std::string& presentation_id,
157 const MediaRoute::Id& route_id); 158 const MediaRoute::Id& route_id);
158 159
159 const MediaRoute::Id GetRouteId(const std::string& presentation_id) const; 160 const MediaRoute::Id GetRouteId(const std::string& presentation_id) const;
160 161
161 void OnPresentationSessionStarted( 162 void OnPresentationSessionStarted(
162 const content::PresentationSessionInfo& session, 163 const content::PresentationSessionInfo& session,
163 const MediaRoute& route); 164 const MediaRoute& route);
164 void OnPresentationServiceDelegateDestroyed() const; 165 void OnPresentationServiceDelegateDestroyed() const;
165 166
167 bool IsOffscreenPresentation(const std::string& presentation_id) const;
168 void ConnectToPresentation(
169 const content::PresentationSessionInfo& session,
170 content::PresentationConnectionPtr controller_connection_ptr,
171 content::PresentationConnectionRequest receiver_connection_request);
172
166 private: 173 private:
167 MediaSource GetMediaSourceFromListener( 174 MediaSource GetMediaSourceFromListener(
168 content::PresentationScreenAvailabilityListener* listener) const; 175 content::PresentationScreenAvailabilityListener* listener) const;
169 base::SmallMap<std::map<std::string, MediaRoute::Id>> 176 base::SmallMap<std::map<std::string, MediaRoute>> presentation_id_to_route_;
170 presentation_id_to_route_id_;
171 base::SmallMap< 177 base::SmallMap<
172 std::map<std::string, std::unique_ptr<PresentationMediaSinksObserver>>> 178 std::map<std::string, std::unique_ptr<PresentationMediaSinksObserver>>>
173 url_to_sinks_observer_; 179 url_to_sinks_observer_;
174 std::unordered_map< 180 std::unordered_map<
175 MediaRoute::Id, 181 MediaRoute::Id,
176 std::unique_ptr<PresentationConnectionStateSubscription>> 182 std::unique_ptr<PresentationConnectionStateSubscription>>
177 connection_state_subscriptions_; 183 connection_state_subscriptions_;
178 std::unordered_map< 184 std::unordered_map<
179 MediaRoute::Id, 185 MediaRoute::Id,
180 std::unique_ptr<PresentationSessionMessagesObserver>> 186 std::unique_ptr<PresentationSessionMessagesObserver>>
181 session_messages_observers_; 187 session_messages_observers_;
188 std::unordered_map<MediaRoute::Id,
189 std::unique_ptr<BrowserPresentationConnectionProxy>>
190 browser_connection_proxies_;
182 191
183 RenderFrameHostId render_frame_host_id_; 192 RenderFrameHostId render_frame_host_id_;
184 193
185 // References to the owning WebContents, and the corresponding MediaRouter. 194 // References to the owning WebContents, and the corresponding MediaRouter.
186 content::WebContents* web_contents_; 195 content::WebContents* web_contents_;
187 MediaRouter* router_; 196 MediaRouter* router_;
188 }; 197 };
189 198
190 PresentationFrame::PresentationFrame( 199 PresentationFrame::PresentationFrame(
191 const RenderFrameHostId& render_frame_host_id, 200 const RenderFrameHostId& render_frame_host_id,
192 content::WebContents* web_contents, 201 content::WebContents* web_contents,
193 MediaRouter* router) 202 MediaRouter* router)
194 : render_frame_host_id_(render_frame_host_id), 203 : render_frame_host_id_(render_frame_host_id),
195 web_contents_(web_contents), 204 web_contents_(web_contents),
196 router_(router) { 205 router_(router) {
197 DCHECK(web_contents_); 206 DCHECK(web_contents_);
198 DCHECK(router_); 207 DCHECK(router_);
199 } 208 }
200 209
201 PresentationFrame::~PresentationFrame() { 210 PresentationFrame::~PresentationFrame() {
202 } 211 }
203 212
204 void PresentationFrame::OnPresentationSessionStarted( 213 void PresentationFrame::OnPresentationSessionStarted(
205 const content::PresentationSessionInfo& session, 214 const content::PresentationSessionInfo& session,
206 const MediaRoute& route) { 215 const MediaRoute& route) {
207 presentation_id_to_route_id_[session.presentation_id] = 216 presentation_id_to_route_.insert(
208 route.media_route_id(); 217 std::make_pair(session.presentation_id, route));
209 } 218 }
210 219
211 const MediaRoute::Id PresentationFrame::GetRouteId( 220 const MediaRoute::Id PresentationFrame::GetRouteId(
212 const std::string& presentation_id) const { 221 const std::string& presentation_id) const {
213 auto it = presentation_id_to_route_id_.find(presentation_id); 222 auto it = presentation_id_to_route_.find(presentation_id);
214 return it != presentation_id_to_route_id_.end() ? it->second : ""; 223 return it != presentation_id_to_route_.end() ? it->second.media_route_id()
224 : "";
215 } 225 }
216 226
217 bool PresentationFrame::SetScreenAvailabilityListener( 227 bool PresentationFrame::SetScreenAvailabilityListener(
218 content::PresentationScreenAvailabilityListener* listener) { 228 content::PresentationScreenAvailabilityListener* listener) {
219 MediaSource source(GetMediaSourceFromListener(listener)); 229 MediaSource source(GetMediaSourceFromListener(listener));
220 auto& sinks_observer = url_to_sinks_observer_[source.id()]; 230 auto& sinks_observer = url_to_sinks_observer_[source.id()];
221 if (sinks_observer && sinks_observer->listener() == listener) 231 if (sinks_observer && sinks_observer->listener() == listener)
222 return false; 232 return false;
223 233
224 sinks_observer.reset(new PresentationMediaSinksObserver( 234 sinks_observer.reset(new PresentationMediaSinksObserver(
(...skipping 20 matching lines...) Expand all
245 } 255 }
246 return false; 256 return false;
247 } 257 }
248 258
249 bool PresentationFrame::HasScreenAvailabilityListenerForTest( 259 bool PresentationFrame::HasScreenAvailabilityListenerForTest(
250 const MediaSource::Id& source_id) const { 260 const MediaSource::Id& source_id) const {
251 return url_to_sinks_observer_.find(source_id) != url_to_sinks_observer_.end(); 261 return url_to_sinks_observer_.find(source_id) != url_to_sinks_observer_.end();
252 } 262 }
253 263
254 void PresentationFrame::Reset() { 264 void PresentationFrame::Reset() {
255 for (const auto& pid_route_id : presentation_id_to_route_id_) 265 auto offscreen_presentation_manager =
256 router_->DetachRoute(pid_route_id.second); 266 OffscreenPresentationManagerFactory::GetOrCreateForWebContents(
267 web_contents_);
257 268
258 presentation_id_to_route_id_.clear(); 269 for (const auto& pid_route : presentation_id_to_route_) {
270 if (IsOffscreenPresentation(pid_route.first)) {
271 offscreen_presentation_manager->UnregisterOffscreenPresentationController(
272 pid_route.first, render_frame_host_id_);
273 }
274 router_->DetachRoute(pid_route.second.media_route_id());
275 }
276
277 presentation_id_to_route_.clear();
259 url_to_sinks_observer_.clear(); 278 url_to_sinks_observer_.clear();
260 connection_state_subscriptions_.clear(); 279 connection_state_subscriptions_.clear();
261 session_messages_observers_.clear(); 280 session_messages_observers_.clear();
281 browser_connection_proxies_.clear();
262 } 282 }
263 283
264 void PresentationFrame::RemoveConnection(const std::string& presentation_id, 284 void PresentationFrame::RemoveConnection(const std::string& presentation_id,
265 const MediaRoute::Id& route_id) { 285 const MediaRoute::Id& route_id) {
266 // Remove the presentation id mapping so a later call to Reset is a no-op. 286 // Remove the presentation id mapping so a later call to Reset is a no-op.
267 presentation_id_to_route_id_.erase(presentation_id); 287 presentation_id_to_route_.erase(presentation_id);
268 288
269 // We no longer need to observe route messages. 289 // We no longer need to observe route messages.
270 session_messages_observers_.erase(route_id); 290 session_messages_observers_.erase(route_id);
271 291
292 browser_connection_proxies_.erase(route_id);
272 // We keep the PresentationConnectionStateChangedCallback registered with MR 293 // We keep the PresentationConnectionStateChangedCallback registered with MR
273 // so the MRP can tell us when terminate() completed. 294 // so the MRP can tell us when terminate() completed.
274 } 295 }
275 296
276 void PresentationFrame::ListenForConnectionStateChange( 297 void PresentationFrame::ListenForConnectionStateChange(
277 const content::PresentationSessionInfo& connection, 298 const content::PresentationSessionInfo& connection,
278 const content::PresentationConnectionStateChangedCallback& 299 const content::PresentationConnectionStateChangedCallback&
279 state_changed_cb) { 300 state_changed_cb) {
280 auto it = presentation_id_to_route_id_.find(connection.presentation_id); 301 auto it = presentation_id_to_route_.find(connection.presentation_id);
281 if (it == presentation_id_to_route_id_.end()) { 302 if (it == presentation_id_to_route_.end()) {
282 DLOG(ERROR) << __func__ << "route id not found for presentation: " 303 DLOG(ERROR) << __func__ << "route id not found for presentation: "
283 << connection.presentation_id; 304 << connection.presentation_id;
284 return; 305 return;
285 } 306 }
286 307
287 const MediaRoute::Id& route_id = it->second; 308 const MediaRoute::Id& route_id = it->second.media_route_id();
288 if (connection_state_subscriptions_.find(route_id) != 309 if (connection_state_subscriptions_.find(route_id) !=
289 connection_state_subscriptions_.end()) { 310 connection_state_subscriptions_.end()) {
290 DLOG(ERROR) << __func__ 311 DLOG(ERROR) << __func__
291 << "Already listening connection state change for route: " 312 << "Already listening connection state change for route: "
292 << route_id; 313 << route_id;
293 return; 314 return;
294 } 315 }
295 316
296 connection_state_subscriptions_.insert(std::make_pair( 317 connection_state_subscriptions_.insert(std::make_pair(
297 route_id, router_->AddPresentationConnectionStateChangedCallback( 318 route_id, router_->AddPresentationConnectionStateChangedCallback(
298 it->second, state_changed_cb))); 319 route_id, state_changed_cb)));
299 } 320 }
300 321
301 void PresentationFrame::ListenForSessionMessages( 322 void PresentationFrame::ListenForSessionMessages(
302 const content::PresentationSessionInfo& session, 323 const content::PresentationSessionInfo& session,
303 const content::PresentationConnectionMessageCallback& message_cb) { 324 const content::PresentationConnectionMessageCallback& message_cb) {
304 auto it = presentation_id_to_route_id_.find(session.presentation_id); 325 auto it = presentation_id_to_route_.find(session.presentation_id);
305 if (it == presentation_id_to_route_id_.end()) { 326 if (it == presentation_id_to_route_.end()) {
306 DVLOG(2) << "ListenForSessionMessages: no route for " 327 DVLOG(2) << "ListenForSessionMessages: no route for "
307 << session.presentation_id; 328 << session.presentation_id;
308 return; 329 return;
309 } 330 }
310 331
311 const MediaRoute::Id& route_id = it->second; 332 if (it->second.is_offscreen_presentation()) {
333 DVLOG(2) << "ListenForSessionMessages: do not listen for offscreen "
334 << "presentation [id]: " << session.presentation_id;
335 return;
336 }
337
338 const MediaRoute::Id& route_id = it->second.media_route_id();
312 if (session_messages_observers_.find(route_id) != 339 if (session_messages_observers_.find(route_id) !=
313 session_messages_observers_.end()) { 340 session_messages_observers_.end()) {
314 DLOG(ERROR) << __func__ 341 DLOG(ERROR) << __func__
315 << "Already listening for session messages for route: " 342 << "Already listening for session messages for route: "
316 << route_id; 343 << route_id;
317 return; 344 return;
318 } 345 }
319 346
320 session_messages_observers_.insert(std::make_pair( 347 session_messages_observers_.insert(std::make_pair(
321 route_id, base::MakeUnique<PresentationSessionMessagesObserver>( 348 route_id, base::MakeUnique<PresentationSessionMessagesObserver>(
322 router_, it->second, message_cb))); 349 router_, route_id, message_cb)));
323 } 350 }
324 351
325 MediaSource PresentationFrame::GetMediaSourceFromListener( 352 MediaSource PresentationFrame::GetMediaSourceFromListener(
326 content::PresentationScreenAvailabilityListener* listener) const { 353 content::PresentationScreenAvailabilityListener* listener) const {
327 // If the default presentation URL is empty then fall back to tab mirroring. 354 // If the default presentation URL is empty then fall back to tab mirroring.
328 return listener->GetAvailabilityUrl().is_empty() 355 return listener->GetAvailabilityUrl().is_empty()
329 ? MediaSourceForTab(SessionTabHelper::IdForTab(web_contents_)) 356 ? MediaSourceForTab(SessionTabHelper::IdForTab(web_contents_))
330 : MediaSourceForPresentationUrl(listener->GetAvailabilityUrl()); 357 : MediaSourceForPresentationUrl(listener->GetAvailabilityUrl());
331 } 358 }
332 359
360 bool PresentationFrame::IsOffscreenPresentation(
361 const std::string& presentation_id) const {
362 const auto it = presentation_id_to_route_.find(presentation_id);
363 if (it == presentation_id_to_route_.end()) {
364 DLOG(WARNING) << "No route for [presentation_id]: " << presentation_id;
365 return false;
366 }
367
368 return it->second.is_offscreen_presentation();
369 }
370
371 void PresentationFrame::ConnectToPresentation(
372 const content::PresentationSessionInfo& session,
373 content::PresentationConnectionPtr controller_connection_ptr,
374 content::PresentationConnectionRequest receiver_connection_request) {
375 const auto pid_route_it =
376 presentation_id_to_route_.find(session.presentation_id);
377
378 if (pid_route_it == presentation_id_to_route_.end()) {
379 DLOG(WARNING) << "No route for [presentation_id]: "
380 << session.presentation_id;
381 return;
382 }
383
384 if (IsOffscreenPresentation(session.presentation_id)) {
385 auto* const offscreen_presentation_manager =
386 OffscreenPresentationManagerFactory::GetOrCreateForWebContents(
387 web_contents_);
388 offscreen_presentation_manager->RegisterOffscreenPresentationController(
389 session.presentation_id, session.presentation_url,
390 render_frame_host_id_, std::move(controller_connection_ptr),
391 std::move(receiver_connection_request));
392 } else {
393 DVLOG(2)
394 << "Creating BrowserPresentationConnectionProxy for [presentation_id]: "
395 << session.presentation_id;
396 MediaRoute::Id route_id = pid_route_it->second.media_route_id();
397 auto* proxy = new BrowserPresentationConnectionProxy(
398 router_, route_id, std::move(receiver_connection_request),
399 std::move(controller_connection_ptr));
400
401 browser_connection_proxies_.insert(
402 std::make_pair(route_id, base::WrapUnique(proxy)));
403 }
404 }
405
333 // Used by PresentationServiceDelegateImpl to manage PresentationFrames. 406 // Used by PresentationServiceDelegateImpl to manage PresentationFrames.
334 class PresentationFrameManager { 407 class PresentationFrameManager {
335 public: 408 public:
336 PresentationFrameManager(content::WebContents* web_contents, 409 PresentationFrameManager(content::WebContents* web_contents,
337 MediaRouter* router); 410 MediaRouter* router);
338 ~PresentationFrameManager(); 411 ~PresentationFrameManager();
339 412
340 // Mirror corresponding APIs in PresentationServiceDelegateImpl. 413 // Mirror corresponding APIs in PresentationServiceDelegateImpl.
341 bool SetScreenAvailabilityListener( 414 bool SetScreenAvailabilityListener(
342 const RenderFrameHostId& render_frame_host_id, 415 const RenderFrameHostId& render_frame_host_id,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 454
382 void OnPresentationSessionStarted( 455 void OnPresentationSessionStarted(
383 const RenderFrameHostId& render_frame_host_id, 456 const RenderFrameHostId& render_frame_host_id,
384 const content::PresentationSessionInfo& session, 457 const content::PresentationSessionInfo& session,
385 const MediaRoute& route); 458 const MediaRoute& route);
386 void OnDefaultPresentationSessionStarted( 459 void OnDefaultPresentationSessionStarted(
387 const PresentationRequest& request, 460 const PresentationRequest& request,
388 const content::PresentationSessionInfo& session, 461 const content::PresentationSessionInfo& session,
389 const MediaRoute& route); 462 const MediaRoute& route);
390 463
464 void ConnectToPresentation(
465 const RenderFrameHostId& render_frame_host_id,
466 const content::PresentationSessionInfo& session,
467 content::PresentationConnectionPtr controller_connection_ptr,
468 content::PresentationConnectionRequest receiver_connection_request);
469
391 const MediaRoute::Id GetRouteId(const RenderFrameHostId& render_frame_host_id, 470 const MediaRoute::Id GetRouteId(const RenderFrameHostId& render_frame_host_id,
392 const std::string& presentation_id) const; 471 const std::string& presentation_id) const;
393 472
394 const PresentationRequest* default_presentation_request() const { 473 const PresentationRequest* default_presentation_request() const {
395 return default_presentation_request_.get(); 474 return default_presentation_request_.get();
396 } 475 }
397 476
398 private: 477 private:
399 PresentationFrame* GetOrAddPresentationFrame( 478 PresentationFrame* GetOrAddPresentationFrame(
400 const RenderFrameHostId& render_frame_host_id); 479 const RenderFrameHostId& render_frame_host_id);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 const content::PresentationSessionInfo& session, 537 const content::PresentationSessionInfo& session,
459 const MediaRoute& route) { 538 const MediaRoute& route) {
460 OnPresentationSessionStarted(request.render_frame_host_id(), session, route); 539 OnPresentationSessionStarted(request.render_frame_host_id(), session, route);
461 540
462 if (default_presentation_request_ && 541 if (default_presentation_request_ &&
463 default_presentation_request_->Equals(request)) { 542 default_presentation_request_->Equals(request)) {
464 default_presentation_started_callback_.Run(session); 543 default_presentation_started_callback_.Run(session);
465 } 544 }
466 } 545 }
467 546
547 void PresentationFrameManager::ConnectToPresentation(
548 const RenderFrameHostId& render_frame_host_id,
549 const content::PresentationSessionInfo& session,
550 content::PresentationConnectionPtr controller_connection_ptr,
551 content::PresentationConnectionRequest receiver_connection_request) {
552 auto* presentation_frame = GetOrAddPresentationFrame(render_frame_host_id);
553 presentation_frame->ConnectToPresentation(
554 session, std::move(controller_connection_ptr),
555 std::move(receiver_connection_request));
556 }
557
468 const MediaRoute::Id PresentationFrameManager::GetRouteId( 558 const MediaRoute::Id PresentationFrameManager::GetRouteId(
469 const RenderFrameHostId& render_frame_host_id, 559 const RenderFrameHostId& render_frame_host_id,
470 const std::string& presentation_id) const { 560 const std::string& presentation_id) const {
471 const auto it = presentation_frames_.find(render_frame_host_id); 561 const auto it = presentation_frames_.find(render_frame_host_id);
472 return it != presentation_frames_.end() 562 return it != presentation_frames_.end()
473 ? it->second->GetRouteId(presentation_id) : MediaRoute::Id(); 563 ? it->second->GetRouteId(presentation_id) : MediaRoute::Id();
474 } 564 }
475 565
476 bool PresentationFrameManager::SetScreenAvailabilityListener( 566 bool PresentationFrameManager::SetScreenAvailabilityListener(
477 const RenderFrameHostId& render_frame_host_id, 567 const RenderFrameHostId& render_frame_host_id,
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 int render_process_id, 975 int render_process_id,
886 int render_frame_id, 976 int render_frame_id,
887 const content::PresentationSessionInfo& connection, 977 const content::PresentationSessionInfo& connection,
888 const content::PresentationConnectionStateChangedCallback& 978 const content::PresentationConnectionStateChangedCallback&
889 state_changed_cb) { 979 state_changed_cb) {
890 frame_manager_->ListenForConnectionStateChange( 980 frame_manager_->ListenForConnectionStateChange(
891 RenderFrameHostId(render_process_id, render_frame_id), connection, 981 RenderFrameHostId(render_process_id, render_frame_id), connection,
892 state_changed_cb); 982 state_changed_cb);
893 } 983 }
894 984
895 void PresentationServiceDelegateImpl::ConnectToOffscreenPresentation( 985 void PresentationServiceDelegateImpl::ConnectToPresentation(
896 int render_process_id, 986 int render_process_id,
897 int render_frame_id, 987 int render_frame_id,
898 const content::PresentationSessionInfo& session, 988 const content::PresentationSessionInfo& session,
899 content::PresentationConnectionPtr controller_connection_ptr, 989 content::PresentationConnectionPtr controller_connection_ptr,
900 content::PresentationConnectionRequest receiver_connection_request) { 990 content::PresentationConnectionRequest receiver_connection_request) {
901 RenderFrameHostId render_frame_host_id(render_process_id, render_frame_id); 991 RenderFrameHostId render_frame_host_id(render_process_id, render_frame_id);
902 auto* const offscreen_presentation_manager = 992 frame_manager_->ConnectToPresentation(render_frame_host_id, session,
903 OffscreenPresentationManagerFactory::GetOrCreateForWebContents( 993 std::move(controller_connection_ptr),
904 web_contents_); 994 std::move(receiver_connection_request));
905 offscreen_presentation_manager->RegisterOffscreenPresentationController(
906 session.presentation_id, session.presentation_url, render_frame_host_id,
907 std::move(controller_connection_ptr),
908 std::move(receiver_connection_request));
909 } 995 }
910 996
911 void PresentationServiceDelegateImpl::OnRouteResponse( 997 void PresentationServiceDelegateImpl::OnRouteResponse(
912 const PresentationRequest& presentation_request, 998 const PresentationRequest& presentation_request,
913 const RouteRequestResult& result) { 999 const RouteRequestResult& result) {
914 if (!result.route() || 1000 if (!result.route() ||
915 !base::ContainsValue(presentation_request.presentation_urls(), 1001 !base::ContainsValue(presentation_request.presentation_urls(),
916 result.presentation_url())) { 1002 result.presentation_url())) {
917 return; 1003 return;
918 } 1004 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 const base::ListValue* origins = 1055 const base::ListValue* origins =
970 Profile::FromBrowserContext(web_contents_->GetBrowserContext()) 1056 Profile::FromBrowserContext(web_contents_->GetBrowserContext())
971 ->GetPrefs() 1057 ->GetPrefs()
972 ->GetList(prefs::kMediaRouterTabMirroringSources); 1058 ->GetList(prefs::kMediaRouterTabMirroringSources);
973 return origins && 1059 return origins &&
974 origins->Find(base::StringValue(origin.Serialize())) != origins->end(); 1060 origins->Find(base::StringValue(origin.Serialize())) != origins->end();
975 } 1061 }
976 #endif // !defined(OS_ANDROID) 1062 #endif // !defined(OS_ANDROID)
977 1063
978 } // namespace media_router 1064 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698