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

Side by Side Diff: chrome/browser/media/router/media_router_mojo_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: 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 "chrome/browser/media/router/media_router_mojo_impl.h" 5 #include "chrome/browser/media/router/media_router_mojo_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/guid.h" 8 #include "base/guid.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_vector.h" 10 #include "base/memory/scoped_vector.h"
11 #include "base/observer_list.h" 11 #include "base/observer_list.h"
12 #include "base/stl_util.h" 12 #include "base/stl_util.h"
13 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
14 #include "chrome/browser/media/router/issues_observer.h" 14 #include "chrome/browser/media/router/issues_observer.h"
15 #include "chrome/browser/media/router/local_media_routes_observer.h" 15 #include "chrome/browser/media/router/local_media_routes_observer.h"
16 #include "chrome/browser/media/router/media_router_factory.h" 16 #include "chrome/browser/media/router/media_router_factory.h"
17 #include "chrome/browser/media/router/media_router_type_converters.h" 17 #include "chrome/browser/media/router/media_router_type_converters.h"
18 #include "chrome/browser/media/router/media_routes_observer.h" 18 #include "chrome/browser/media/router/media_routes_observer.h"
19 #include "chrome/browser/media/router/media_sinks_observer.h" 19 #include "chrome/browser/media/router/media_sinks_observer.h"
20 #include "chrome/browser/media/router/presentation_connection_state_observer.h"
21 #include "chrome/browser/media/router/presentation_session_messages_observer.h" 20 #include "chrome/browser/media/router/presentation_session_messages_observer.h"
22 #include "chrome/browser/sessions/session_tab_helper.h" 21 #include "chrome/browser/sessions/session_tab_helper.h"
23 #include "extensions/browser/process_manager.h" 22 #include "extensions/browser/process_manager.h"
24 23
25 #define DVLOG_WITH_INSTANCE(level) \ 24 #define DVLOG_WITH_INSTANCE(level) \
26 DVLOG(level) << "MR #" << instance_id_ << ": " 25 DVLOG(level) << "MR #" << instance_id_ << ": "
27 26
28 #define DLOG_WITH_INSTANCE(level) DLOG(level) << "MR #" << instance_id_ << ": " 27 #define DLOG_WITH_INSTANCE(level) DLOG(level) << "MR #" << instance_id_ << ": "
29 28
30 namespace media_router { 29 namespace media_router {
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 void MediaRouterMojoImpl::UnregisterLocalMediaRoutesObserver( 498 void MediaRouterMojoImpl::UnregisterLocalMediaRoutesObserver(
500 LocalMediaRoutesObserver* observer) { 499 LocalMediaRoutesObserver* observer) {
501 DCHECK(thread_checker_.CalledOnValidThread()); 500 DCHECK(thread_checker_.CalledOnValidThread());
502 DCHECK(observer); 501 DCHECK(observer);
503 502
504 if (!local_routes_observers_.HasObserver(observer)) 503 if (!local_routes_observers_.HasObserver(observer))
505 return; 504 return;
506 local_routes_observers_.RemoveObserver(observer); 505 local_routes_observers_.RemoveObserver(observer);
507 } 506 }
508 507
509 void MediaRouterMojoImpl::RegisterPresentationConnectionStateObserver(
510 PresentationConnectionStateObserver* observer) {
511 DCHECK(thread_checker_.CalledOnValidThread());
512 DCHECK(observer);
513
514 const MediaRoute::Id route_id = observer->route_id();
515 auto* observers = presentation_connection_state_observers_.get(route_id);
516 if (!observers) {
517 observers = new PresentationConnectionStateObserverList;
518 presentation_connection_state_observers_.add(route_id,
519 make_scoped_ptr(observers));
520 }
521
522 if (observers->HasObserver(observer))
523 return;
524
525 observers->AddObserver(observer);
526 }
527
528 void MediaRouterMojoImpl::UnregisterPresentationConnectionStateObserver(
529 PresentationConnectionStateObserver* observer) {
530 DCHECK(thread_checker_.CalledOnValidThread());
531 DCHECK(observer);
532
533 const MediaRoute::Id route_id = observer->route_id();
534 auto* observers = presentation_connection_state_observers_.get(route_id);
535 if (!observers)
536 return;
537
538 observers->RemoveObserver(observer);
539 if (!observers->might_have_observers())
540 presentation_connection_state_observers_.erase(route_id);
541 }
542
543 void MediaRouterMojoImpl::DoCreateRoute( 508 void MediaRouterMojoImpl::DoCreateRoute(
544 const MediaSource::Id& source_id, 509 const MediaSource::Id& source_id,
545 const MediaSink::Id& sink_id, 510 const MediaSink::Id& sink_id,
546 const std::string& origin, 511 const std::string& origin,
547 int tab_id, 512 int tab_id,
548 const std::vector<MediaRouteResponseCallback>& callbacks) { 513 const std::vector<MediaRouteResponseCallback>& callbacks) {
549 std::string presentation_id("mr_"); 514 std::string presentation_id("mr_");
550 presentation_id += base::GenerateGUID(); 515 presentation_id += base::GenerateGUID();
551 DVLOG_WITH_INSTANCE(1) << "DoCreateRoute " << source_id << "=>" << sink_id 516 DVLOG_WITH_INSTANCE(1) << "DoCreateRoute " << source_id << "=>" << sink_id
552 << ", presentation ID: " << presentation_id; 517 << ", presentation ID: " << presentation_id;
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 652
688 void MediaRouterMojoImpl::OnPresentationConnectionStateChanged( 653 void MediaRouterMojoImpl::OnPresentationConnectionStateChanged(
689 const mojo::String& route_id, 654 const mojo::String& route_id,
690 interfaces::MediaRouter::PresentationConnectionState state) { 655 interfaces::MediaRouter::PresentationConnectionState state) {
691 if (!interfaces::MediaRouter::PresentationConnectionState_IsValidValue( 656 if (!interfaces::MediaRouter::PresentationConnectionState_IsValidValue(
692 state)) { 657 state)) {
693 DLOG(WARNING) << "Unknown PresentationConnectionState value " << state; 658 DLOG(WARNING) << "Unknown PresentationConnectionState value " << state;
694 return; 659 return;
695 } 660 }
696 661
697 auto* observers = presentation_connection_state_observers_.get(route_id); 662 NotifyPresentationConnectionStateChange(
698 if (!observers) 663 route_id, mojo::PresentationConnectionStateFromMojo(state));
699 return;
700
701 content::PresentationConnectionState converted_state =
702 mojo::PresentationConnectionStateFromMojo(state);
703 FOR_EACH_OBSERVER(PresentationConnectionStateObserver, *observers,
704 OnStateChanged(converted_state));
705 } 664 }
706 665
707 void MediaRouterMojoImpl::DoOnPresentationSessionDetached( 666 void MediaRouterMojoImpl::DoOnPresentationSessionDetached(
708 const MediaRoute::Id& route_id) { 667 const MediaRoute::Id& route_id) {
709 DVLOG_WITH_INSTANCE(1) << "DoOnPresentationSessionDetached " << route_id; 668 DVLOG_WITH_INSTANCE(1) << "DoOnPresentationSessionDetached " << route_id;
710 media_route_provider_->OnPresentationSessionDetached(route_id); 669 media_route_provider_->OnPresentationSessionDetached(route_id);
711 } 670 }
712 671
713 bool MediaRouterMojoImpl::HasLocalDisplayRoute() const { 672 bool MediaRouterMojoImpl::HasLocalDisplayRoute() const {
714 return has_local_display_route_; 673 return has_local_display_route_;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 } 797 }
839 798
840 void MediaRouterMojoImpl::DrainPendingRequests() { 799 void MediaRouterMojoImpl::DrainPendingRequests() {
841 DLOG_WITH_INSTANCE(ERROR) 800 DLOG_WITH_INSTANCE(ERROR)
842 << "Draining request queue. (queue-length=" << pending_requests_.size() 801 << "Draining request queue. (queue-length=" << pending_requests_.size()
843 << ")"; 802 << ")";
844 pending_requests_.clear(); 803 pending_requests_.clear();
845 } 804 }
846 805
847 } // namespace media_router 806 } // namespace media_router
OLDNEW
« no previous file with comments | « chrome/browser/media/router/media_router_mojo_impl.h ('k') | chrome/browser/media/router/media_router_mojo_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698