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

Side by Side Diff: content/browser/presentation/presentation_service_impl.cc

Issue 1430413003: [Media Router] Connection state change listening redesign part 2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compile Created 5 years, 1 month 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 "content/browser/presentation/presentation_service_impl.h" 5 #include "content/browser/presentation/presentation_service_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 const NewSessionMojoCallback& callback) { 288 const NewSessionMojoCallback& callback) {
289 if (pending_join_session_cbs_.size() >= kMaxNumQueuedSessionRequests) 289 if (pending_join_session_cbs_.size() >= kMaxNumQueuedSessionRequests)
290 return kInvalidRequestSessionId; 290 return kInvalidRequestSessionId;
291 291
292 int request_id = GetNextRequestSessionId(); 292 int request_id = GetNextRequestSessionId();
293 pending_join_session_cbs_[request_id].reset( 293 pending_join_session_cbs_[request_id].reset(
294 new NewSessionMojoCallbackWrapper(callback)); 294 new NewSessionMojoCallbackWrapper(callback));
295 return request_id; 295 return request_id;
296 } 296 }
297 297
298 void PresentationServiceImpl::ListenForConnectionStateChange(
299 const PresentationSessionInfo& connection) {
300 if (delegate_) {
301 delegate_->ListenForConnectionStateChange(
302 render_process_id_, render_frame_id_, connection,
303 base::Bind(&PresentationServiceImpl::OnConnectionStateChanged,
304 weak_factory_.GetWeakPtr()));
305 }
306 }
307
298 void PresentationServiceImpl::OnStartSessionSucceeded( 308 void PresentationServiceImpl::OnStartSessionSucceeded(
299 int request_session_id, 309 int request_session_id,
300 const PresentationSessionInfo& session_info) { 310 const PresentationSessionInfo& session_info) {
301 if (request_session_id == start_session_request_id_) { 311 if (request_session_id != start_session_request_id_)
302 CHECK(pending_start_session_cb_.get()); 312 return;
303 pending_start_session_cb_->Run( 313
304 presentation::PresentationSessionInfo::From(session_info), 314 CHECK(pending_start_session_cb_.get());
305 presentation::PresentationErrorPtr()); 315 pending_start_session_cb_->Run(
306 pending_start_session_cb_.reset(); 316 presentation::PresentationSessionInfo::From(session_info),
307 start_session_request_id_ = kInvalidRequestSessionId; 317 presentation::PresentationErrorPtr());
308 } 318 ListenForConnectionStateChange(session_info);
319 pending_start_session_cb_.reset();
320 start_session_request_id_ = kInvalidRequestSessionId;
309 } 321 }
310 322
311 void PresentationServiceImpl::OnStartSessionError( 323 void PresentationServiceImpl::OnStartSessionError(
312 int request_session_id, 324 int request_session_id,
313 const PresentationError& error) { 325 const PresentationError& error) {
314 if (request_session_id == start_session_request_id_) { 326 if (request_session_id != start_session_request_id_)
315 CHECK(pending_start_session_cb_.get()); 327 return;
316 pending_start_session_cb_->Run( 328
317 presentation::PresentationSessionInfoPtr(), 329 CHECK(pending_start_session_cb_.get());
318 presentation::PresentationError::From(error)); 330 pending_start_session_cb_->Run(presentation::PresentationSessionInfoPtr(),
319 pending_start_session_cb_.reset(); 331 presentation::PresentationError::From(error));
320 start_session_request_id_ = kInvalidRequestSessionId; 332 pending_start_session_cb_.reset();
321 } 333 start_session_request_id_ = kInvalidRequestSessionId;
322 } 334 }
323 335
324 void PresentationServiceImpl::OnJoinSessionSucceeded( 336 void PresentationServiceImpl::OnJoinSessionSucceeded(
325 int request_session_id, 337 int request_session_id,
326 const PresentationSessionInfo& session_info) { 338 const PresentationSessionInfo& session_info) {
327 RunAndEraseJoinSessionMojoCallback( 339 if (RunAndEraseJoinSessionMojoCallback(
328 request_session_id, 340 request_session_id,
329 presentation::PresentationSessionInfo::From(session_info), 341 presentation::PresentationSessionInfo::From(session_info),
330 presentation::PresentationErrorPtr()); 342 presentation::PresentationErrorPtr())) {
343 ListenForConnectionStateChange(session_info);
344 }
331 } 345 }
332 346
333 void PresentationServiceImpl::OnJoinSessionError( 347 void PresentationServiceImpl::OnJoinSessionError(
334 int request_session_id, 348 int request_session_id,
335 const PresentationError& error) { 349 const PresentationError& error) {
336 RunAndEraseJoinSessionMojoCallback( 350 RunAndEraseJoinSessionMojoCallback(
337 request_session_id, 351 request_session_id,
338 presentation::PresentationSessionInfoPtr(), 352 presentation::PresentationSessionInfoPtr(),
339 presentation::PresentationError::From(error)); 353 presentation::PresentationError::From(error));
340 } 354 }
341 355
342 void PresentationServiceImpl::RunAndEraseJoinSessionMojoCallback( 356 bool PresentationServiceImpl::RunAndEraseJoinSessionMojoCallback(
343 int request_session_id, 357 int request_session_id,
344 presentation::PresentationSessionInfoPtr session, 358 presentation::PresentationSessionInfoPtr session,
345 presentation::PresentationErrorPtr error) { 359 presentation::PresentationErrorPtr error) {
346 auto it = pending_join_session_cbs_.find(request_session_id); 360 auto it = pending_join_session_cbs_.find(request_session_id);
347 if (it == pending_join_session_cbs_.end()) 361 if (it == pending_join_session_cbs_.end())
348 return; 362 return false;
349 363
350 DCHECK(it->second.get()); 364 DCHECK(it->second.get());
351 it->second->Run(session.Pass(), error.Pass()); 365 it->second->Run(session.Pass(), error.Pass());
352 pending_join_session_cbs_.erase(it); 366 pending_join_session_cbs_.erase(it);
367 return true;
353 } 368 }
354 369
355 void PresentationServiceImpl::SetDefaultPresentationURL( 370 void PresentationServiceImpl::SetDefaultPresentationURL(
356 const mojo::String& url) { 371 const mojo::String& url) {
357 DVLOG(2) << "SetDefaultPresentationURL"; 372 DVLOG(2) << "SetDefaultPresentationURL";
358 if (!delegate_) 373 if (!delegate_)
359 return; 374 return;
360 375
361 const std::string& new_default_url = url.get(); 376 const std::string& new_default_url = url.get();
362 if (default_presentation_url_ == new_default_url) 377 if (default_presentation_url_ == new_default_url)
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 417
403 void PresentationServiceImpl::CloseSession( 418 void PresentationServiceImpl::CloseSession(
404 const mojo::String& presentation_url, 419 const mojo::String& presentation_url,
405 const mojo::String& presentation_id) { 420 const mojo::String& presentation_id) {
406 DVLOG(2) << "CloseSession " << presentation_id; 421 DVLOG(2) << "CloseSession " << presentation_id;
407 if (delegate_) 422 if (delegate_)
408 delegate_->CloseSession(render_process_id_, render_frame_id_, 423 delegate_->CloseSession(render_process_id_, render_frame_id_,
409 presentation_id); 424 presentation_id);
410 } 425 }
411 426
412 void PresentationServiceImpl::ListenForSessionStateChange() { 427 void PresentationServiceImpl::OnConnectionStateChanged(
413 if (!delegate_) 428 const PresentationSessionInfo& connection,
414 return; 429 PresentationConnectionState state) {
415
416 delegate_->ListenForSessionStateChange(
417 render_process_id_, render_frame_id_,
418 base::Bind(&PresentationServiceImpl::OnSessionStateChanged,
419 weak_factory_.GetWeakPtr()));
420 }
421
422 void PresentationServiceImpl::OnSessionStateChanged(
423 const PresentationSessionInfo& session_info,
424 PresentationConnectionState session_state) {
425 DCHECK(client_.get()); 430 DCHECK(client_.get());
426 client_->OnSessionStateChanged( 431 client_->OnConnectionStateChanged(
427 presentation::PresentationSessionInfo::From(session_info), 432 presentation::PresentationSessionInfo::From(connection),
428 PresentationConnectionStateToMojo(session_state)); 433 PresentationConnectionStateToMojo(state));
429 } 434 }
430 435
431 bool PresentationServiceImpl::FrameMatches( 436 bool PresentationServiceImpl::FrameMatches(
432 content::RenderFrameHost* render_frame_host) const { 437 content::RenderFrameHost* render_frame_host) const {
433 if (!render_frame_host) 438 if (!render_frame_host)
434 return false; 439 return false;
435 440
436 return render_frame_host->GetProcess()->GetID() == render_process_id_ && 441 return render_frame_host->GetProcess()->GetID() == render_process_id_ &&
437 render_frame_host->GetRoutingID() == render_frame_id_; 442 render_frame_host->GetRoutingID() == render_frame_id_;
438 } 443 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 } 534 }
530 } 535 }
531 536
532 void PresentationServiceImpl::OnDelegateDestroyed() { 537 void PresentationServiceImpl::OnDelegateDestroyed() {
533 DVLOG(2) << "PresentationServiceImpl::OnDelegateDestroyed"; 538 DVLOG(2) << "PresentationServiceImpl::OnDelegateDestroyed";
534 delegate_ = nullptr; 539 delegate_ = nullptr;
535 Reset(); 540 Reset();
536 } 541 }
537 542
538 void PresentationServiceImpl::OnDefaultPresentationStarted( 543 void PresentationServiceImpl::OnDefaultPresentationStarted(
539 const PresentationSessionInfo& session_info) { 544 const PresentationSessionInfo& connection) {
540 DCHECK(client_.get()); 545 DCHECK(client_.get());
541 client_->OnDefaultSessionStarted( 546 client_->OnDefaultSessionStarted(
542 presentation::PresentationSessionInfo::From(session_info)); 547 presentation::PresentationSessionInfo::From(connection));
548 ListenForConnectionStateChange(connection);
543 } 549 }
544 550
545 PresentationServiceImpl::ScreenAvailabilityListenerImpl 551 PresentationServiceImpl::ScreenAvailabilityListenerImpl
546 ::ScreenAvailabilityListenerImpl( 552 ::ScreenAvailabilityListenerImpl(
547 const std::string& availability_url, 553 const std::string& availability_url,
548 PresentationServiceImpl* service) 554 PresentationServiceImpl* service)
549 : availability_url_(availability_url), 555 : availability_url_(availability_url),
550 service_(service) { 556 service_(service) {
551 DCHECK(service_); 557 DCHECK(service_);
552 DCHECK(service_->client_.get()); 558 DCHECK(service_->client_.get());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 590
585 void PresentationServiceImpl::NewSessionMojoCallbackWrapper::Run( 591 void PresentationServiceImpl::NewSessionMojoCallbackWrapper::Run(
586 presentation::PresentationSessionInfoPtr session, 592 presentation::PresentationSessionInfoPtr session,
587 presentation::PresentationErrorPtr error) { 593 presentation::PresentationErrorPtr error) {
588 DCHECK(!callback_.is_null()); 594 DCHECK(!callback_.is_null());
589 callback_.Run(session.Pass(), error.Pass()); 595 callback_.Run(session.Pass(), error.Pass());
590 callback_.reset(); 596 callback_.reset();
591 } 597 }
592 598
593 } // namespace content 599 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698