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

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 and refactor Created 3 years, 11 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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 158
158 void OnPresentationSessionStarted( 159 void OnPresentationSessionStarted(
159 const content::PresentationSessionInfo& session, 160 const content::PresentationSessionInfo& session,
160 const MediaRoute& route); 161 const MediaRoute& route);
161 void OnPresentationServiceDelegateDestroyed() const; 162 void OnPresentationServiceDelegateDestroyed() const;
162 163
163 void set_delegate_observer(DelegateObserver* observer) { 164 void set_delegate_observer(DelegateObserver* observer) {
164 delegate_observer_ = observer; 165 delegate_observer_ = observer;
165 } 166 }
166 167
168 bool IsOffscreenPresentation(const std::string& presentation_id);
169 void OnBrowserConnectionAvailable(
170 const content::PresentationSessionInfo& session,
171 content::PresentationConnectionPtr source_conn,
mark a. foltz 2017/01/23 22:29:34 source_connection
zhaobin 2017/01/24 19:28:46 Done.
172 content::PresentationConnectionRequest target_conn_request);
mark a. foltz 2017/01/23 22:29:34 target_connection_request
zhaobin 2017/01/24 19:28:46 Done.
173
167 private: 174 private:
168 MediaSource GetMediaSourceFromListener( 175 MediaSource GetMediaSourceFromListener(
169 content::PresentationScreenAvailabilityListener* listener) const; 176 content::PresentationScreenAvailabilityListener* listener) const;
170 base::SmallMap<std::map<std::string, MediaRoute::Id>> 177 base::SmallMap<std::map<std::string, MediaRoute>> presentation_id_to_route_;
171 presentation_id_to_route_id_;
172 base::SmallMap< 178 base::SmallMap<
173 std::map<std::string, std::unique_ptr<PresentationMediaSinksObserver>>> 179 std::map<std::string, std::unique_ptr<PresentationMediaSinksObserver>>>
174 url_to_sinks_observer_; 180 url_to_sinks_observer_;
175 std::unordered_map< 181 std::unordered_map<
176 MediaRoute::Id, 182 MediaRoute::Id,
177 std::unique_ptr<PresentationConnectionStateSubscription>> 183 std::unique_ptr<PresentationConnectionStateSubscription>>
178 connection_state_subscriptions_; 184 connection_state_subscriptions_;
179 std::unordered_map< 185 std::unordered_map<
180 MediaRoute::Id, 186 MediaRoute::Id,
181 std::unique_ptr<PresentationSessionMessagesObserver>> 187 std::unique_ptr<PresentationSessionMessagesObserver>>
182 session_messages_observers_; 188 session_messages_observers_;
189 std::set<std::unique_ptr<BrowserPresentationConnectionProxy>>
190 browser_connection_proxies_;
183 191
184 RenderFrameHostId render_frame_host_id_; 192 RenderFrameHostId render_frame_host_id_;
185 193
186 // References to the owning WebContents, and the corresponding MediaRouter. 194 // References to the owning WebContents, and the corresponding MediaRouter.
187 content::WebContents* web_contents_; 195 content::WebContents* web_contents_;
188 MediaRouter* router_; 196 MediaRouter* router_;
189 197
190 DelegateObserver* delegate_observer_; 198 DelegateObserver* delegate_observer_;
191 }; 199 };
192 200
193 PresentationFrame::PresentationFrame( 201 PresentationFrame::PresentationFrame(
194 const RenderFrameHostId& render_frame_host_id, 202 const RenderFrameHostId& render_frame_host_id,
195 content::WebContents* web_contents, 203 content::WebContents* web_contents,
196 MediaRouter* router) 204 MediaRouter* router)
197 : render_frame_host_id_(render_frame_host_id), 205 : render_frame_host_id_(render_frame_host_id),
198 web_contents_(web_contents), 206 web_contents_(web_contents),
199 router_(router) { 207 router_(router) {
200 DCHECK(web_contents_); 208 DCHECK(web_contents_);
201 DCHECK(router_); 209 DCHECK(router_);
202 } 210 }
203 211
204 PresentationFrame::~PresentationFrame() { 212 PresentationFrame::~PresentationFrame() {
205 } 213 }
206 214
207 void PresentationFrame::OnPresentationSessionStarted( 215 void PresentationFrame::OnPresentationSessionStarted(
208 const content::PresentationSessionInfo& session, 216 const content::PresentationSessionInfo& session,
209 const MediaRoute& route) { 217 const MediaRoute& route) {
210 presentation_id_to_route_id_[session.presentation_id] = 218 presentation_id_to_route_.insert(
211 route.media_route_id(); 219 std::make_pair(session.presentation_id, route));
212 } 220 }
213 221
214 const MediaRoute::Id PresentationFrame::GetRouteId( 222 const MediaRoute::Id PresentationFrame::GetRouteId(
215 const std::string& presentation_id) const { 223 const std::string& presentation_id) const {
216 auto it = presentation_id_to_route_id_.find(presentation_id); 224 auto it = presentation_id_to_route_.find(presentation_id);
217 return it != presentation_id_to_route_id_.end() ? it->second : ""; 225 return it != presentation_id_to_route_.end() ? it->second.media_route_id()
226 : "";
218 } 227 }
219 228
220 const std::vector<MediaRoute::Id> PresentationFrame::GetRouteIds() const { 229 const std::vector<MediaRoute::Id> PresentationFrame::GetRouteIds() const {
221 std::vector<MediaRoute::Id> route_ids; 230 std::vector<MediaRoute::Id> route_ids;
222 for (const auto& e : presentation_id_to_route_id_) 231 for (const auto& e : presentation_id_to_route_)
223 route_ids.push_back(e.second); 232 route_ids.push_back(e.second.media_route_id());
224 return route_ids; 233 return route_ids;
225 } 234 }
226 235
227 bool PresentationFrame::SetScreenAvailabilityListener( 236 bool PresentationFrame::SetScreenAvailabilityListener(
228 content::PresentationScreenAvailabilityListener* listener) { 237 content::PresentationScreenAvailabilityListener* listener) {
229 MediaSource source(GetMediaSourceFromListener(listener)); 238 MediaSource source(GetMediaSourceFromListener(listener));
230 auto& sinks_observer = url_to_sinks_observer_[source.id()]; 239 auto& sinks_observer = url_to_sinks_observer_[source.id()];
231 if (sinks_observer && sinks_observer->listener() == listener) 240 if (sinks_observer && sinks_observer->listener() == listener)
232 return false; 241 return false;
233 242
(...skipping 21 matching lines...) Expand all
255 } 264 }
256 return false; 265 return false;
257 } 266 }
258 267
259 bool PresentationFrame::HasScreenAvailabilityListenerForTest( 268 bool PresentationFrame::HasScreenAvailabilityListenerForTest(
260 const MediaSource::Id& source_id) const { 269 const MediaSource::Id& source_id) const {
261 return url_to_sinks_observer_.find(source_id) != url_to_sinks_observer_.end(); 270 return url_to_sinks_observer_.find(source_id) != url_to_sinks_observer_.end();
262 } 271 }
263 272
264 void PresentationFrame::Reset() { 273 void PresentationFrame::Reset() {
265 for (const auto& pid_route_id : presentation_id_to_route_id_) 274 auto offscreen_presentation_manager =
266 router_->DetachRoute(pid_route_id.second); 275 OffscreenPresentationManagerFactory::GetOrCreateForWebContents(
276 web_contents_);
267 277
268 presentation_id_to_route_id_.clear(); 278 for (const auto& pid_route : presentation_id_to_route_) {
279 offscreen_presentation_manager->UnregisterOffscreenPresentationController(
280 pid_route.first, render_frame_host_id_);
281 router_->DetachRoute(pid_route.second.media_route_id());
282 }
283
284 presentation_id_to_route_.clear();
269 url_to_sinks_observer_.clear(); 285 url_to_sinks_observer_.clear();
270 connection_state_subscriptions_.clear(); 286 connection_state_subscriptions_.clear();
271 session_messages_observers_.clear(); 287 session_messages_observers_.clear();
272 } 288 }
273 289
274 void PresentationFrame::RemoveConnection(const std::string& presentation_id, 290 void PresentationFrame::RemoveConnection(const std::string& presentation_id,
275 const MediaRoute::Id& route_id) { 291 const MediaRoute::Id& route_id) {
276 // Remove the presentation id mapping so a later call to Reset is a no-op. 292 // Remove the presentation id mapping so a later call to Reset is a no-op.
277 presentation_id_to_route_id_.erase(presentation_id); 293 presentation_id_to_route_.erase(presentation_id);
278 294
279 // We no longer need to observe route messages. 295 // We no longer need to observe route messages.
280 session_messages_observers_.erase(route_id); 296 session_messages_observers_.erase(route_id);
281 297
282 // We keep the PresentationConnectionStateChangedCallback registered with MR 298 // We keep the PresentationConnectionStateChangedCallback registered with MR
283 // so the MRP can tell us when terminate() completed. 299 // so the MRP can tell us when terminate() completed.
284 } 300 }
285 301
286 void PresentationFrame::ListenForConnectionStateChange( 302 void PresentationFrame::ListenForConnectionStateChange(
287 const content::PresentationSessionInfo& connection, 303 const content::PresentationSessionInfo& connection,
288 const content::PresentationConnectionStateChangedCallback& 304 const content::PresentationConnectionStateChangedCallback&
289 state_changed_cb) { 305 state_changed_cb) {
290 auto it = presentation_id_to_route_id_.find(connection.presentation_id); 306 auto it = presentation_id_to_route_.find(connection.presentation_id);
291 if (it == presentation_id_to_route_id_.end()) { 307 if (it == presentation_id_to_route_.end()) {
292 DLOG(ERROR) << __func__ << "route id not found for presentation: " 308 DLOG(ERROR) << __func__ << "route id not found for presentation: "
293 << connection.presentation_id; 309 << connection.presentation_id;
294 return; 310 return;
295 } 311 }
296 312
297 const MediaRoute::Id& route_id = it->second; 313 const MediaRoute::Id& route_id = it->second.media_route_id();
298 if (connection_state_subscriptions_.find(route_id) != 314 if (connection_state_subscriptions_.find(route_id) !=
299 connection_state_subscriptions_.end()) { 315 connection_state_subscriptions_.end()) {
300 DLOG(ERROR) << __func__ 316 DLOG(ERROR) << __func__
301 << "Already listening connection state change for route: " 317 << "Already listening connection state change for route: "
302 << route_id; 318 << route_id;
303 return; 319 return;
304 } 320 }
305 321
306 connection_state_subscriptions_.insert(std::make_pair( 322 connection_state_subscriptions_.insert(std::make_pair(
307 route_id, router_->AddPresentationConnectionStateChangedCallback( 323 route_id, router_->AddPresentationConnectionStateChangedCallback(
308 it->second, state_changed_cb))); 324 route_id, state_changed_cb)));
309 } 325 }
310 326
311 void PresentationFrame::ListenForSessionMessages( 327 void PresentationFrame::ListenForSessionMessages(
312 const content::PresentationSessionInfo& session, 328 const content::PresentationSessionInfo& session,
313 const content::PresentationConnectionMessageCallback& message_cb) { 329 const content::PresentationConnectionMessageCallback& message_cb) {
314 auto it = presentation_id_to_route_id_.find(session.presentation_id); 330 auto it = presentation_id_to_route_.find(session.presentation_id);
315 if (it == presentation_id_to_route_id_.end()) { 331 if (it == presentation_id_to_route_.end()) {
316 DVLOG(2) << "ListenForSessionMessages: no route for " 332 DVLOG(2) << "ListenForSessionMessages: no route for "
317 << session.presentation_id; 333 << session.presentation_id;
318 return; 334 return;
319 } 335 }
320 336
321 const MediaRoute::Id& route_id = it->second; 337 if (it->second.is_offscreen_presentation()) {
338 DVLOG(2) << "ListenForSessionMessages: do not listen for offscreen "
339 << "presentation [id]: " << session.presentation_id;
340 return;
341 }
342
343 const MediaRoute::Id& route_id = it->second.media_route_id();
322 if (session_messages_observers_.find(route_id) != 344 if (session_messages_observers_.find(route_id) !=
323 session_messages_observers_.end()) { 345 session_messages_observers_.end()) {
324 DLOG(ERROR) << __func__ 346 DLOG(ERROR) << __func__
325 << "Already listening for session messages for route: " 347 << "Already listening for session messages for route: "
326 << route_id; 348 << route_id;
327 return; 349 return;
328 } 350 }
329 351
330 session_messages_observers_.insert(std::make_pair( 352 session_messages_observers_.insert(std::make_pair(
331 route_id, base::MakeUnique<PresentationSessionMessagesObserver>( 353 route_id, base::MakeUnique<PresentationSessionMessagesObserver>(
332 router_, it->second, message_cb))); 354 router_, route_id, message_cb)));
333 } 355 }
334 356
335 MediaSource PresentationFrame::GetMediaSourceFromListener( 357 MediaSource PresentationFrame::GetMediaSourceFromListener(
336 content::PresentationScreenAvailabilityListener* listener) const { 358 content::PresentationScreenAvailabilityListener* listener) const {
337 // If the default presentation URL is empty then fall back to tab mirroring. 359 // If the default presentation URL is empty then fall back to tab mirroring.
338 return listener->GetAvailabilityUrl().is_empty() 360 return listener->GetAvailabilityUrl().is_empty()
339 ? MediaSourceForTab(SessionTabHelper::IdForTab(web_contents_)) 361 ? MediaSourceForTab(SessionTabHelper::IdForTab(web_contents_))
340 : MediaSourceForPresentationUrl(listener->GetAvailabilityUrl()); 362 : MediaSourceForPresentationUrl(listener->GetAvailabilityUrl());
341 } 363 }
342 364
365 bool PresentationFrame::IsOffscreenPresentation(
366 const std::string& presentation_id) {
367 DCHECK(base::ContainsKey(presentation_id_to_route_, presentation_id));
368 auto it = presentation_id_to_route_.find(presentation_id);
369 return it->second.is_offscreen_presentation();
370 }
371
372 void PresentationFrame::OnBrowserConnectionAvailable(
373 const content::PresentationSessionInfo& session,
374 content::PresentationConnectionPtr source_conn,
375 content::PresentationConnectionRequest target_conn_request) {
376 DCHECK(source_conn);
377 DCHECK(base::ContainsKey(presentation_id_to_route_, session.presentation_id));
378 auto it = presentation_id_to_route_.find(session.presentation_id);
379
380 std::unique_ptr<BrowserPresentationConnectionProxy> proxy =
381 base::MakeUnique<BrowserPresentationConnectionProxy>(session, router_,
382 &it->second);
383
384 proxy->Bind(std::move(target_conn_request));
385 proxy->SetTargetConnection(std::move(source_conn));
386
387 browser_connection_proxies_.insert(std::move(proxy));
mark a. foltz 2017/01/23 22:29:34 Where are entries removed from browser_connection_
zhaobin 2017/01/24 19:28:46 Should be removed in PresentationFrame::RemoveConn
388 }
389
343 // Used by PresentationServiceDelegateImpl to manage PresentationFrames. 390 // Used by PresentationServiceDelegateImpl to manage PresentationFrames.
344 class PresentationFrameManager { 391 class PresentationFrameManager {
345 public: 392 public:
346 PresentationFrameManager(content::WebContents* web_contents, 393 PresentationFrameManager(content::WebContents* web_contents,
347 MediaRouter* router); 394 MediaRouter* router);
348 ~PresentationFrameManager(); 395 ~PresentationFrameManager();
349 396
350 // Mirror corresponding APIs in PresentationServiceDelegateImpl. 397 // Mirror corresponding APIs in PresentationServiceDelegateImpl.
351 bool SetScreenAvailabilityListener( 398 bool SetScreenAvailabilityListener(
352 const RenderFrameHostId& render_frame_host_id, 399 const RenderFrameHostId& render_frame_host_id,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 438
392 void OnPresentationSessionStarted( 439 void OnPresentationSessionStarted(
393 const RenderFrameHostId& render_frame_host_id, 440 const RenderFrameHostId& render_frame_host_id,
394 const content::PresentationSessionInfo& session, 441 const content::PresentationSessionInfo& session,
395 const MediaRoute& route); 442 const MediaRoute& route);
396 void OnDefaultPresentationSessionStarted( 443 void OnDefaultPresentationSessionStarted(
397 const PresentationRequest& request, 444 const PresentationRequest& request,
398 const content::PresentationSessionInfo& session, 445 const content::PresentationSessionInfo& session,
399 const MediaRoute& route); 446 const MediaRoute& route);
400 447
448 bool IsOffscreenPresentation(const RenderFrameHostId& render_frame_host_id,
449 const std::string& presentation_id);
450 void OnBrowserConnectionAvailable(
451 const RenderFrameHostId& render_frame_host_id,
452 const content::PresentationSessionInfo& session,
453 content::PresentationConnectionPtr source_conn,
454 content::PresentationConnectionRequest target_conn_request);
455
401 const MediaRoute::Id GetRouteId(const RenderFrameHostId& render_frame_host_id, 456 const MediaRoute::Id GetRouteId(const RenderFrameHostId& render_frame_host_id,
402 const std::string& presentation_id) const; 457 const std::string& presentation_id) const;
403 const std::vector<MediaRoute::Id> GetRouteIds( 458 const std::vector<MediaRoute::Id> GetRouteIds(
404 const RenderFrameHostId& render_frame_host_id) const; 459 const RenderFrameHostId& render_frame_host_id) const;
405 460
406 const PresentationRequest* default_presentation_request() const { 461 const PresentationRequest* default_presentation_request() const {
407 return default_presentation_request_.get(); 462 return default_presentation_request_.get();
408 } 463 }
409 464
410 private: 465 private:
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 const auto it = presentation_frames_.find(request.render_frame_host_id()); 527 const auto it = presentation_frames_.find(request.render_frame_host_id());
473 if (it != presentation_frames_.end()) 528 if (it != presentation_frames_.end())
474 it->second->OnPresentationSessionStarted(session, route); 529 it->second->OnPresentationSessionStarted(session, route);
475 530
476 if (default_presentation_request_ && 531 if (default_presentation_request_ &&
477 default_presentation_request_->Equals(request)) { 532 default_presentation_request_->Equals(request)) {
478 default_presentation_started_callback_.Run(session); 533 default_presentation_started_callback_.Run(session);
479 } 534 }
480 } 535 }
481 536
537 bool PresentationFrameManager::IsOffscreenPresentation(
538 const RenderFrameHostId& render_frame_host_id,
539 const std::string& presentation_id) {
540 const auto it = presentation_frames_.find(render_frame_host_id);
541 if (it != presentation_frames_.end())
542 return it->second->IsOffscreenPresentation(presentation_id);
543 return false;
544 }
545
546 void PresentationFrameManager::OnBrowserConnectionAvailable(
547 const RenderFrameHostId& render_frame_host_id,
548 const content::PresentationSessionInfo& session,
549 content::PresentationConnectionPtr source_conn,
550 content::PresentationConnectionRequest target_conn_request) {
551 const auto it = presentation_frames_.find(render_frame_host_id);
552 if (it != presentation_frames_.end())
mark a. foltz 2017/01/23 22:29:34 If there is no target presentation frame for the c
zhaobin 2017/01/24 19:28:46 Done.
553 return it->second->OnBrowserConnectionAvailable(
554 session, std::move(source_conn), std::move(target_conn_request));
555 }
556
482 const MediaRoute::Id PresentationFrameManager::GetRouteId( 557 const MediaRoute::Id PresentationFrameManager::GetRouteId(
483 const RenderFrameHostId& render_frame_host_id, 558 const RenderFrameHostId& render_frame_host_id,
484 const std::string& presentation_id) const { 559 const std::string& presentation_id) const {
485 const auto it = presentation_frames_.find(render_frame_host_id); 560 const auto it = presentation_frames_.find(render_frame_host_id);
486 return it != presentation_frames_.end() 561 return it != presentation_frames_.end()
487 ? it->second->GetRouteId(presentation_id) : MediaRoute::Id(); 562 ? it->second->GetRouteId(presentation_id) : MediaRoute::Id();
488 } 563 }
489 564
490 const std::vector<MediaRoute::Id> PresentationFrameManager::GetRouteIds( 565 const std::vector<MediaRoute::Id> PresentationFrameManager::GetRouteIds(
491 const RenderFrameHostId& render_frame_host_id) const { 566 const RenderFrameHostId& render_frame_host_id) const {
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 int render_process_id, 979 int render_process_id,
905 int render_frame_id, 980 int render_frame_id,
906 const content::PresentationSessionInfo& connection, 981 const content::PresentationSessionInfo& connection,
907 const content::PresentationConnectionStateChangedCallback& 982 const content::PresentationConnectionStateChangedCallback&
908 state_changed_cb) { 983 state_changed_cb) {
909 frame_manager_->ListenForConnectionStateChange( 984 frame_manager_->ListenForConnectionStateChange(
910 RenderFrameHostId(render_process_id, render_frame_id), connection, 985 RenderFrameHostId(render_process_id, render_frame_id), connection,
911 state_changed_cb); 986 state_changed_cb);
912 } 987 }
913 988
914 void PresentationServiceDelegateImpl::ConnectToOffscreenPresentation( 989 void PresentationServiceDelegateImpl::ConnectToPresentation(
915 int render_process_id, 990 int render_process_id,
916 int render_frame_id, 991 int render_frame_id,
917 const content::PresentationSessionInfo& session, 992 const content::PresentationSessionInfo& session,
918 content::PresentationConnectionPtr controller_connection_ptr, 993 content::PresentationConnectionPtr controller_connection_ptr,
919 content::PresentationConnectionRequest receiver_connection_request) { 994 content::PresentationConnectionRequest receiver_connection_request) {
920 RenderFrameHostId render_frame_host_id(render_process_id, render_frame_id); 995 RenderFrameHostId render_frame_host_id(render_process_id, render_frame_id);
921 auto* const offscreen_presentation_manager = 996
922 OffscreenPresentationManagerFactory::GetOrCreateForWebContents( 997 if (frame_manager_->IsOffscreenPresentation(render_frame_host_id,
923 web_contents_); 998 session.presentation_id)) {
924 offscreen_presentation_manager->RegisterOffscreenPresentationController( 999 auto* const offscreen_presentation_manager =
925 session.presentation_id, session.presentation_url, render_frame_host_id, 1000 OffscreenPresentationManagerFactory::GetOrCreateForWebContents(
926 std::move(controller_connection_ptr), 1001 web_contents_);
927 std::move(receiver_connection_request)); 1002 offscreen_presentation_manager->RegisterOffscreenPresentationController(
1003 session.presentation_id, session.presentation_url, render_frame_host_id,
1004 std::move(controller_connection_ptr),
1005 std::move(receiver_connection_request));
1006 } else {
1007 frame_manager_->OnBrowserConnectionAvailable(
1008 render_frame_host_id, session, std::move(controller_connection_ptr),
1009 std::move(receiver_connection_request));
1010 }
928 } 1011 }
929 1012
930 void PresentationServiceDelegateImpl::OnRouteResponse( 1013 void PresentationServiceDelegateImpl::OnRouteResponse(
931 const PresentationRequest& presentation_request, 1014 const PresentationRequest& presentation_request,
932 const RouteRequestResult& result) { 1015 const RouteRequestResult& result) {
933 if (!result.route() || 1016 if (!result.route() ||
934 !base::ContainsValue(presentation_request.presentation_urls(), 1017 !base::ContainsValue(presentation_request.presentation_urls(),
935 result.presentation_url())) { 1018 result.presentation_url())) {
936 return; 1019 return;
937 } 1020 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 const base::ListValue* origins = 1071 const base::ListValue* origins =
989 Profile::FromBrowserContext(web_contents_->GetBrowserContext()) 1072 Profile::FromBrowserContext(web_contents_->GetBrowserContext())
990 ->GetPrefs() 1073 ->GetPrefs()
991 ->GetList(prefs::kMediaRouterTabMirroringSources); 1074 ->GetList(prefs::kMediaRouterTabMirroringSources);
992 return origins && 1075 return origins &&
993 origins->Find(base::StringValue(origin.Serialize())) != origins->end(); 1076 origins->Find(base::StringValue(origin.Serialize())) != origins->end();
994 } 1077 }
995 #endif // !defined(OS_ANDROID) 1078 #endif // !defined(OS_ANDROID)
996 1079
997 } // namespace media_router 1080 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698