summaryrefslogtreecommitdiffstats
path: root/chrome/browser/media/router/media_router_mojo_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/media/router/media_router_mojo_impl.h')
-rw-r--r--chrome/browser/media/router/media_router_mojo_impl.h48
1 files changed, 33 insertions, 15 deletions
diff --git a/chrome/browser/media/router/media_router_mojo_impl.h b/chrome/browser/media/router/media_router_mojo_impl.h
index 723163e..32a9821 100644
--- a/chrome/browser/media/router/media_router_mojo_impl.h
+++ b/chrome/browser/media/router/media_router_mojo_impl.h
@@ -6,6 +6,7 @@
#define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MOJO_IMPL_H_
#include <map>
+#include <set>
#include <string>
#include <vector>
@@ -77,16 +78,7 @@ class MediaRouterMojoImpl : public MediaRouter,
const MediaRoute::Id& route_id,
scoped_ptr<std::vector<uint8>> data,
const SendRouteMessageCallback& callback) override;
- void ListenForRouteMessages(
- const std::vector<MediaRoute::Id>& route_ids,
- const PresentationSessionMessageCallback& message_cb) override;
void ClearIssue(const Issue::Id& issue_id) override;
- void RegisterMediaSinksObserver(MediaSinksObserver* observer) override;
- void UnregisterMediaSinksObserver(MediaSinksObserver* observer) override;
- void RegisterMediaRoutesObserver(MediaRoutesObserver* observer) override;
- void UnregisterMediaRoutesObserver(MediaRoutesObserver* observer) override;
- void RegisterIssuesObserver(IssuesObserver* observer) override;
- void UnregisterIssuesObserver(IssuesObserver* observer) override;
const std::string& media_route_provider_extension_id() const {
return media_route_provider_extension_id_;
@@ -100,6 +92,11 @@ class MediaRouterMojoImpl : public MediaRouter,
friend class MediaRouterFactory;
friend class MediaRouterMojoTest;
+ FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest,
+ RegisterAndUnregisterMediaSinksObserver);
+ FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest,
+ RegisterAndUnregisterMediaRoutesObserver);
+ FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest, HandleIssue);
FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoExtensionTest,
DeferredBindingAndSuspension);
@@ -125,6 +122,18 @@ class MediaRouterMojoImpl : public MediaRouter,
// Dispatches the Mojo requests queued in |pending_requests_|.
void ExecutePendingRequests();
+ // MediaRouter implementation.
+ void RegisterMediaSinksObserver(MediaSinksObserver* observer) override;
+ void UnregisterMediaSinksObserver(MediaSinksObserver* observer) override;
+ void RegisterMediaRoutesObserver(MediaRoutesObserver* observer) override;
+ void UnregisterMediaRoutesObserver(MediaRoutesObserver* observer) override;
+ void RegisterIssuesObserver(IssuesObserver* observer) override;
+ void UnregisterIssuesObserver(IssuesObserver* observer) override;
+ void RegisterPresentationSessionMessagesObserver(
+ PresentationSessionMessagesObserver* observer) override;
+ void UnregisterPresentationSessionMessagesObserver(
+ PresentationSessionMessagesObserver* observer) override;
+
// These calls invoke methods in the component extension via Mojo.
void DoCreateRoute(const MediaSource::Id& source_id,
const MediaSink::Id& sink_id,
@@ -143,9 +152,7 @@ class MediaRouterMojoImpl : public MediaRouter,
void DoSendSessionBinaryMessage(const MediaRoute::Id& route_id,
scoped_ptr<std::vector<uint8>> data,
const SendRouteMessageCallback& callback);
- void DoListenForRouteMessages(
- const std::vector<MediaRoute::Id>& route_ids,
- const PresentationSessionMessageCallback& message_cb);
+ void DoListenForRouteMessages(const MediaRoute::Id& route_id);
void DoClearIssue(const Issue::Id& issue_id);
void DoStartObservingMediaSinks(const MediaSource::Id& source_id);
void DoStopObservingMediaSinks(const MediaSource::Id& source_id);
@@ -153,10 +160,10 @@ class MediaRouterMojoImpl : public MediaRouter,
void DoStopObservingMediaRoutes();
// Invoked when the next batch of messages arrives.
+ // |route_id|: ID of route of the messages.
// |messages|: A list of messages received.
- // |message_cb|: The callback to invoke to pass on the messages received.
- void OnRouteMessageReceived(
- const PresentationSessionMessageCallback& message_cb,
+ void OnRouteMessagesReceived(
+ const MediaRoute::Id& route_id,
mojo::Array<interfaces::RouteMessagePtr> messages);
// Error handler callback for |binding_| and |media_route_provider_|.
@@ -182,6 +189,17 @@ class MediaRouterMojoImpl : public MediaRouter,
base::ObserverList<MediaRoutesObserver> routes_observers_;
+ using PresentationSessionMessagesObserverList =
+ base::ObserverList<PresentationSessionMessagesObserver>;
+ base::ScopedPtrHashMap<MediaRoute::Id,
+ scoped_ptr<PresentationSessionMessagesObserverList>>
+ messages_observers_;
+ // IDs of MediaRoutes being listened for messages. Note that this is
+ // different from |message_observers_| because we might be waiting for
+ // |OnRouteMessagesReceived()| to be invoked after all observers for that
+ // route have been removed.
+ std::set<MediaRoute::Id> route_ids_listening_for_messages_;
+
IssueManager issue_manager_;
// Binds |this| to a Mojo connection stub for interfaces::MediaRouter.