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

Side by Side Diff: chrome/browser/media/router/presentation_session_state_observer.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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/media/router/presentation_session_state_observer.h"
6
7 #include "chrome/browser/media/router/media_router.h"
8
9 namespace media_router {
10
11 PresentationSessionStateObserver::PresentationSessionStateObserver(
12 const content::SessionStateChangedCallback& state_changed_callback,
13 const MediaRouteIdToPresentationSessionMapping* route_id_to_presentation,
14 MediaRouter* router)
15 : MediaRoutesObserver(router),
16 state_changed_callback_(state_changed_callback),
17 route_id_to_presentation_(route_id_to_presentation) {
18 DCHECK(route_id_to_presentation_);
19 }
20
21 PresentationSessionStateObserver::~PresentationSessionStateObserver() {
22 }
23
24 void PresentationSessionStateObserver::OnPresentationSessionConnected(
25 const MediaRoute::Id& route_id) {
26 if (!ContainsValue(tracked_route_ids_, route_id))
27 tracked_route_ids_.push_back(route_id);
28 InvokeCallback(route_id, content::PRESENTATION_CONNECTION_STATE_CONNECTED);
29 }
30
31 void PresentationSessionStateObserver::Reset() {
32 tracked_route_ids_.clear();
33 previous_route_ids_.clear();
34 }
35
36 void PresentationSessionStateObserver::OnRoutesUpdated(
37 const std::vector<MediaRoute>& routes) {
38 std::vector<MediaRoute::Id> current_route_ids_;
39 current_route_ids_.reserve(routes.size());
40 for (const MediaRoute& route : routes)
41 current_route_ids_.push_back(route.media_route_id());
42
43 for (auto it = tracked_route_ids_.begin(); it != tracked_route_ids_.end();
44 /*no-op*/) {
45 const MediaRoute::Id& route_id = *it;
46 if (ContainsValue(previous_route_ids_, route_id) &&
47 !ContainsValue(current_route_ids_, route_id)) {
48 InvokeCallback(route_id, content::PRESENTATION_CONNECTION_STATE_CLOSED);
49 it = tracked_route_ids_.erase(it);
50 } else {
51 ++it;
52 }
53 }
54 previous_route_ids_.swap(current_route_ids_);
55 }
56
57 void PresentationSessionStateObserver::InvokeCallback(
58 const MediaRoute::Id& route_id,
59 content::PresentationConnectionState new_state) {
60 const content::PresentationSessionInfo* session_info =
61 route_id_to_presentation_->Get(route_id);
62 if (session_info)
63 state_changed_callback_.Run(*session_info, new_state);
64 }
65
66 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698