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

Unified Diff: chrome/browser/media/router/media_router_mojo_impl.h

Issue 1259073004: [Presentation API] Change ListenForSessionMessages API to client-style. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update comments Created 5 years, 4 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media/router/media_router_mojo_impl.h
diff --git a/chrome/browser/media/router/media_router_mojo_impl.h b/chrome/browser/media/router/media_router_mojo_impl.h
index 723163ec4d159197a67664a3b28b7c95c26d0eb2..32a9821120106c6f2c6648ee619bb3b908e1beb7 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.
« no previous file with comments | « chrome/browser/media/router/media_router.mojom ('k') | chrome/browser/media/router/media_router_mojo_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698