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

Side by Side Diff: chrome/browser/media/router/presentation_session_state_observer.h

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 #ifndef CHROME_BROWSER_MEDIA_ROUTER_PRESENTATION_SESSION_STATE_OBSERVER_H_
6 #define CHROME_BROWSER_MEDIA_ROUTER_PRESENTATION_SESSION_STATE_OBSERVER_H_
7
8 #include <vector>
9
10 #include "base/gtest_prod_util.h"
11 #include "chrome/browser/media/router/media_route.h"
12 #include "chrome/browser/media/router/media_routes_observer.h"
13 #include "content/public/browser/presentation_service_delegate.h"
14
15 namespace media_router {
16
17 class MediaRouter;
18
19 // TODO(imcheng): Remove this class and use PresentationConnectionStateObserver
20 // instead (crbug.com/529893).
21 // MediaRoutesObserver implementation that allows tracking state changes from
22 // multiple presentation sessions and notifying the client via
23 // |state_changed_callback|.
24 // Clients provide the callback on construction, and incrementally add route
25 // IDs to track by calling |OnPresentationSessionConnected| as they are created,
26 // which also has the effect of invoking the callback that the session has
27 // become connected.
28 // When a presentation is disconnected, the callback will be invoked and it
29 // will be removed from the tracked set.
30 // When the routes no longer need to tracked, |Reset| can be called.
31 class PresentationSessionStateObserver : public MediaRoutesObserver {
32 public:
33 PresentationSessionStateObserver(
34 const content::SessionStateChangedCallback& state_changed_callback,
35 const MediaRouteIdToPresentationSessionMapping* route_id_to_presentation,
36 MediaRouter* router);
37 ~PresentationSessionStateObserver() override;
38
39 // Called when a presentation with |route_id| has been created in connected
40 // state and invoke the callback.
41 void OnPresentationSessionConnected(const MediaRoute::Id& route_id);
42
43 // Clears the set of presentations being tracked.
44 void Reset();
45
46 private:
47 FRIEND_TEST_ALL_PREFIXES(PresentationSessionStateObserverTest,
48 InvokeCallbackWithDisconnected);
49 FRIEND_TEST_ALL_PREFIXES(PresentationSessionStateObserverTest, Reset);
50
51 // MediaRoutesObserver override
52 void OnRoutesUpdated(const std::vector<MediaRoute>& routes) override;
53
54 // Invokes |state_changed_callback_| with PresentationSessionInfo derived from
55 // |route_id| and |new_state|, if |route_id| is valid.
56 void InvokeCallback(const MediaRoute::Id& route_id,
57 content::PresentationConnectionState new_state);
58
59 // Route IDs of presentations that are being tracked for state changes.
60 // It is built by adding entries when a presentation is started,
61 // and removing entries when the presentation is no longer in subsequent
62 // route list updates.
63 std::vector<MediaRoute::Id> tracked_route_ids_;
64
65 // Stores previous list of routes observed from MediaRouter.
66 // It is compared against the new observed list of routes for disconnected
67 // routes that are in |tracked_route_ids_|.
68 // TODO(imcheng): A more explicit set of MediaRoutesObserver APIs (e.g.,
69 // OnRoutesClosed) would be helpful here. (crbug.com/508751)
70 std::vector<MediaRoute::Id> previous_route_ids_;
71
72 // Callback to invoke when state change occurs.
73 content::SessionStateChangedCallback state_changed_callback_;
74
75 // Note that while it is declared const to prevent this class from modifying
76 // it, its contents can be changed by the PresentationFrame that owns it.
77 const MediaRouteIdToPresentationSessionMapping* const
78 route_id_to_presentation_;
79
80 DISALLOW_COPY_AND_ASSIGN(PresentationSessionStateObserver);
81 };
82
83 } // namespace media_router
84
85 #endif // CHROME_BROWSER_MEDIA_ROUTER_PRESENTATION_SESSION_STATE_OBSERVER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698