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

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

Issue 1415103006: Non-Local Join for Media Router and Presentation API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing ChromeOS System Tray Test Created 4 years, 11 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 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 #ifndef CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MOJO_IMPL_H_ 5 #ifndef CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MOJO_IMPL_H_
6 #define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MOJO_IMPL_H_ 6 #define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MOJO_IMPL_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <deque> 10 #include <deque>
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 const MediaSink::Id& sink_id, 69 const MediaSink::Id& sink_id,
70 const GURL& origin, 70 const GURL& origin,
71 content::WebContents* web_contents, 71 content::WebContents* web_contents,
72 const std::vector<MediaRouteResponseCallback>& callbacks) override; 72 const std::vector<MediaRouteResponseCallback>& callbacks) override;
73 void JoinRoute( 73 void JoinRoute(
74 const MediaSource::Id& source_id, 74 const MediaSource::Id& source_id,
75 const std::string& presentation_id, 75 const std::string& presentation_id,
76 const GURL& origin, 76 const GURL& origin,
77 content::WebContents* web_contents, 77 content::WebContents* web_contents,
78 const std::vector<MediaRouteResponseCallback>& callbacks) override; 78 const std::vector<MediaRouteResponseCallback>& callbacks) override;
79 void ConnectRouteByRouteId(
80 const MediaSource::Id& source,
81 const MediaRoute::Id& route_id,
82 const GURL& origin,
83 content::WebContents* web_contents,
84 const std::vector<MediaRouteResponseCallback>& callbacks) override;
79 void TerminateRoute(const MediaRoute::Id& route_id) override; 85 void TerminateRoute(const MediaRoute::Id& route_id) override;
80 void DetachRoute(const MediaRoute::Id& route_id) override; 86 void DetachRoute(const MediaRoute::Id& route_id) override;
81 void SendRouteMessage(const MediaRoute::Id& route_id, 87 void SendRouteMessage(const MediaRoute::Id& route_id,
82 const std::string& message, 88 const std::string& message,
83 const SendRouteMessageCallback& callback) override; 89 const SendRouteMessageCallback& callback) override;
84 void SendRouteBinaryMessage( 90 void SendRouteBinaryMessage(
85 const MediaRoute::Id& route_id, 91 const MediaRoute::Id& route_id,
86 scoped_ptr<std::vector<uint8_t>> data, 92 scoped_ptr<std::vector<uint8_t>> data,
87 const SendRouteMessageCallback& callback) override; 93 const SendRouteMessageCallback& callback) override;
88 void AddIssue(const Issue& issue) override; 94 void AddIssue(const Issue& issue) override;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 // giving up and draining the pending request queue. 137 // giving up and draining the pending request queue.
132 static const int kMaxWakeupAttemptCount = 3; 138 static const int kMaxWakeupAttemptCount = 3;
133 139
134 class MediaRouterMediaRoutesObserver : 140 class MediaRouterMediaRoutesObserver :
135 public media_router::MediaRoutesObserver { 141 public media_router::MediaRoutesObserver {
136 public: 142 public:
137 explicit MediaRouterMediaRoutesObserver(MediaRouterMojoImpl* router); 143 explicit MediaRouterMediaRoutesObserver(MediaRouterMojoImpl* router);
138 ~MediaRouterMediaRoutesObserver() override; 144 ~MediaRouterMediaRoutesObserver() override;
139 145
140 // media_router::MediaRoutesObserver: 146 // media_router::MediaRoutesObserver:
141 void OnRoutesUpdated(const std::vector<media_router::MediaRoute>& routes) 147 void OnRoutesUpdated(
148 const std::vector<media_router::MediaRoute>& routes,
149 const std::vector<media_router::MediaRoute::Id>& joinable_route_ids)
142 override; 150 override;
143 151
144 private: 152 private:
145 MediaRouterMojoImpl* const router_; 153 MediaRouterMojoImpl* const router_;
146 154
147 DISALLOW_COPY_AND_ASSIGN(MediaRouterMediaRoutesObserver); 155 DISALLOW_COPY_AND_ASSIGN(MediaRouterMediaRoutesObserver);
148 }; 156 };
149 157
150 // Represents a query to the MRPM for media sinks and holds observers for the 158 // Represents a query to the MRPM for media sinks and holds observers for the
151 // query. 159 // query.
152 struct MediaSinksQuery { 160 struct MediaSinksQuery {
153 public: 161 public:
154 MediaSinksQuery(); 162 MediaSinksQuery();
155 ~MediaSinksQuery(); 163 ~MediaSinksQuery();
156 164
157 // True if the query has been sent to the MRPM. False otherwise. 165 // True if the query has been sent to the MRPM. False otherwise.
158 bool is_active = false; 166 bool is_active = false;
159 base::ObserverList<MediaSinksObserver> observers; 167 base::ObserverList<MediaSinksObserver> observers;
160 168
161 DISALLOW_COPY_AND_ASSIGN(MediaSinksQuery); 169 DISALLOW_COPY_AND_ASSIGN(MediaSinksQuery);
162 }; 170 };
163 171
172 struct MediaRoutesQuery {
173 public:
174 MediaRoutesQuery();
175 ~MediaRoutesQuery();
176
177 // True if the query has been sent to the MRPM. False otherwise.
178 bool is_active = false;
179 base::ObserverList<MediaRoutesObserver> observers;
180
181 DISALLOW_COPY_AND_ASSIGN(MediaRoutesQuery);
182 };
183
164 // Standard constructor, used by 184 // Standard constructor, used by
165 // MediaRouterMojoImplFactory::GetApiForBrowserContext. 185 // MediaRouterMojoImplFactory::GetApiForBrowserContext.
166 explicit MediaRouterMojoImpl( 186 explicit MediaRouterMojoImpl(
167 extensions::EventPageTracker* event_page_tracker); 187 extensions::EventPageTracker* event_page_tracker);
168 188
169 // Binds |this| to a Mojo interface request, so that clients can acquire a 189 // Binds |this| to a Mojo interface request, so that clients can acquire a
170 // handle to a MediaRouterMojoImpl instance via the Mojo service connector. 190 // handle to a MediaRouterMojoImpl instance via the Mojo service connector.
171 // Stores the |extension_id| of the component extension. 191 // Stores the |extension_id| of the component extension.
172 void BindToMojoRequest( 192 void BindToMojoRequest(
173 mojo::InterfaceRequest<interfaces::MediaRouter> request, 193 mojo::InterfaceRequest<interfaces::MediaRouter> request,
174 const std::string& extension_id); 194 const std::string& extension_id);
175 195
176 // Enqueues a closure for later execution by ExecutePendingRequests(). 196 // Enqueues a closure for later execution by ExecutePendingRequests().
177 void EnqueueTask(const base::Closure& closure); 197 void EnqueueTask(const base::Closure& closure);
178 198
179 // Runs a closure if the extension monitored by |extension_monitor_| is 199 // Runs a closure if the extension monitored by |extension_monitor_| is
180 // active, or defers it for later execution if the extension is suspended. 200 // active, or defers it for later execution if the extension is suspended.
181 void RunOrDefer(const base::Closure& request); 201 void RunOrDefer(const base::Closure& request);
182 202
183 // Dispatches the Mojo requests queued in |pending_requests_|. 203 // Dispatches the Mojo requests queued in |pending_requests_|.
184 void ExecutePendingRequests(); 204 void ExecutePendingRequests();
185 205
186 // Drops all pending requests. Called when we have a connection error to 206 // Drops all pending requests. Called when we have a connection error to
187 // component extension and further reattempts are unlikely to help. 207 // component extension and further reattempts are unlikely to help.
188 void DrainPendingRequests(); 208 void DrainPendingRequests();
189 209
210 bool HasRoutesObservers(const MediaSource::Id& source_id) const;
211 bool HasSinksObservers(const MediaSource::Id& source_id) const;
212
190 // MediaRouter implementation. 213 // MediaRouter implementation.
191 bool RegisterMediaSinksObserver(MediaSinksObserver* observer) override; 214 bool RegisterMediaSinksObserver(MediaSinksObserver* observer) override;
192 void UnregisterMediaSinksObserver(MediaSinksObserver* observer) override; 215 void UnregisterMediaSinksObserver(MediaSinksObserver* observer) override;
193 void RegisterMediaRoutesObserver(MediaRoutesObserver* observer) override; 216 void RegisterMediaRoutesObserver(MediaRoutesObserver* observer) override;
194 void UnregisterMediaRoutesObserver(MediaRoutesObserver* observer) override; 217 void UnregisterMediaRoutesObserver(MediaRoutesObserver* observer) override;
195 void RegisterIssuesObserver(IssuesObserver* observer) override; 218 void RegisterIssuesObserver(IssuesObserver* observer) override;
196 void UnregisterIssuesObserver(IssuesObserver* observer) override; 219 void UnregisterIssuesObserver(IssuesObserver* observer) override;
197 void RegisterPresentationSessionMessagesObserver( 220 void RegisterPresentationSessionMessagesObserver(
198 PresentationSessionMessagesObserver* observer) override; 221 PresentationSessionMessagesObserver* observer) override;
199 void UnregisterPresentationSessionMessagesObserver( 222 void UnregisterPresentationSessionMessagesObserver(
200 PresentationSessionMessagesObserver* observer) override; 223 PresentationSessionMessagesObserver* observer) override;
201 void RegisterLocalMediaRoutesObserver( 224 void RegisterLocalMediaRoutesObserver(
202 LocalMediaRoutesObserver* observer) override; 225 LocalMediaRoutesObserver* observer) override;
203 void UnregisterLocalMediaRoutesObserver( 226 void UnregisterLocalMediaRoutesObserver(
204 LocalMediaRoutesObserver* observer) override; 227 LocalMediaRoutesObserver* observer) override;
205 228
206 // These calls invoke methods in the component extension via Mojo. 229 // These calls invoke methods in the component extension via Mojo.
207 void DoCreateRoute(const MediaSource::Id& source_id, 230 void DoCreateRoute(const MediaSource::Id& source_id,
208 const MediaSink::Id& sink_id, 231 const MediaSink::Id& sink_id,
209 const std::string& origin, 232 const std::string& origin,
210 int tab_id, 233 int tab_id,
211 const std::vector<MediaRouteResponseCallback>& callbacks); 234 const std::vector<MediaRouteResponseCallback>& callbacks);
212 void DoJoinRoute(const MediaSource::Id& source_id, 235 void DoJoinRoute(const MediaSource::Id& source_id,
213 const std::string& presentation_id, 236 const std::string& presentation_id,
214 const std::string& origin, 237 const std::string& origin,
215 int tab_id, 238 int tab_id,
216 const std::vector<MediaRouteResponseCallback>& callbacks); 239 const std::vector<MediaRouteResponseCallback>& callbacks);
240 void DoConnectRouteByRouteId(const MediaSource::Id& source_id,
241 const MediaRoute::Id& route_id,
242 const std::string& origin,
243 int tab_id,
244 const std::vector<MediaRouteResponseCallback>& callbacks);
217 void DoTerminateRoute(const MediaRoute::Id& route_id); 245 void DoTerminateRoute(const MediaRoute::Id& route_id);
218 void DoDetachRoute(const MediaRoute::Id& route_id); 246 void DoDetachRoute(const MediaRoute::Id& route_id);
219 void DoSendSessionMessage(const MediaRoute::Id& route_id, 247 void DoSendSessionMessage(const MediaRoute::Id& route_id,
220 const std::string& message, 248 const std::string& message,
221 const SendRouteMessageCallback& callback); 249 const SendRouteMessageCallback& callback);
222 void DoSendSessionBinaryMessage(const MediaRoute::Id& route_id, 250 void DoSendSessionBinaryMessage(const MediaRoute::Id& route_id,
223 scoped_ptr<std::vector<uint8_t>> data, 251 scoped_ptr<std::vector<uint8_t>> data,
224 const SendRouteMessageCallback& callback); 252 const SendRouteMessageCallback& callback);
225 void DoListenForRouteMessages(const MediaRoute::Id& route_id); 253 void DoListenForRouteMessages(const MediaRoute::Id& route_id);
226 void DoStopListeningForRouteMessages(const MediaRoute::Id& route_id); 254 void DoStopListeningForRouteMessages(const MediaRoute::Id& route_id);
227 void DoStartObservingMediaSinks(const MediaSource::Id& source_id); 255 void DoStartObservingMediaSinks(const MediaSource::Id& source_id);
228 void DoStopObservingMediaSinks(const MediaSource::Id& source_id); 256 void DoStopObservingMediaSinks(const MediaSource::Id& source_id);
229 void DoStartObservingMediaRoutes(); 257 void DoStartObservingMediaRoutes(const MediaSource::Id& source_id);
230 void DoStopObservingMediaRoutes(); 258 void DoStopObservingMediaRoutes(const MediaSource::Id& source_id);
231 259
232 // Invoked when the next batch of messages arrives. 260 // Invoked when the next batch of messages arrives.
233 // |route_id|: ID of route of the messages. 261 // |route_id|: ID of route of the messages.
234 // |messages|: A list of messages received. 262 // |messages|: A list of messages received.
235 // |error|: true if an error occurred. 263 // |error|: true if an error occurred.
236 void OnRouteMessagesReceived( 264 void OnRouteMessagesReceived(
237 const MediaRoute::Id& route_id, 265 const MediaRoute::Id& route_id,
238 mojo::Array<interfaces::RouteMessagePtr> messages, 266 mojo::Array<interfaces::RouteMessagePtr> messages,
239 bool error); 267 bool error);
240 268
241 // Error handler callback for |binding_| and |media_route_provider_|. 269 // Error handler callback for |binding_| and |media_route_provider_|.
242 void OnConnectionError(); 270 void OnConnectionError();
243 271
244 // interfaces::MediaRouter implementation. 272 // interfaces::MediaRouter implementation.
245 void RegisterMediaRouteProvider( 273 void RegisterMediaRouteProvider(
246 interfaces::MediaRouteProviderPtr media_route_provider_ptr, 274 interfaces::MediaRouteProviderPtr media_route_provider_ptr,
247 const interfaces::MediaRouter::RegisterMediaRouteProviderCallback& 275 const interfaces::MediaRouter::RegisterMediaRouteProviderCallback&
248 callback) override; 276 callback) override;
249 void OnIssue(interfaces::IssuePtr issue) override; 277 void OnIssue(interfaces::IssuePtr issue) override;
250 void OnSinksReceived(const mojo::String& media_source, 278 void OnSinksReceived(const mojo::String& media_source,
251 mojo::Array<interfaces::MediaSinkPtr> sinks) override; 279 mojo::Array<interfaces::MediaSinkPtr> sinks) override;
252 void OnRoutesUpdated(mojo::Array<interfaces::MediaRoutePtr> routes) override; 280 void OnRoutesUpdated(mojo::Array<interfaces::MediaRoutePtr> routes,
281 const mojo::String& media_source,
282 mojo::Array<mojo::String> joinable_route_ids) override;
253 void OnSinkAvailabilityUpdated( 283 void OnSinkAvailabilityUpdated(
254 interfaces::MediaRouter::SinkAvailability availability) override; 284 interfaces::MediaRouter::SinkAvailability availability) override;
255 void OnPresentationConnectionStateChanged( 285 void OnPresentationConnectionStateChanged(
256 const mojo::String& route_id, 286 const mojo::String& route_id,
257 interfaces::MediaRouter::PresentationConnectionState state) override; 287 interfaces::MediaRouter::PresentationConnectionState state) override;
258 288
259 // Converts the callback result of calling Mojo CreateRoute()/JoinRoute() 289 // Converts the callback result of calling Mojo CreateRoute()/JoinRoute()
260 // into a local callback. 290 // into a local callback.
261 void RouteResponseReceived( 291 void RouteResponseReceived(
262 const std::string& presentation_id, 292 const std::string& presentation_id,
(...skipping 27 matching lines...) Expand all
290 // Clears the wake reason after the extension has been awoken. 320 // Clears the wake reason after the extension has been awoken.
291 void ClearWakeReason(); 321 void ClearWakeReason();
292 322
293 // Pending requests queued to be executed once component extension 323 // Pending requests queued to be executed once component extension
294 // becomes ready. 324 // becomes ready.
295 std::deque<base::Closure> pending_requests_; 325 std::deque<base::Closure> pending_requests_;
296 326
297 base::ScopedPtrHashMap<MediaSource::Id, scoped_ptr<MediaSinksQuery>> 327 base::ScopedPtrHashMap<MediaSource::Id, scoped_ptr<MediaSinksQuery>>
298 sinks_queries_; 328 sinks_queries_;
299 329
330 base::ScopedPtrHashMap<MediaSource::Id, scoped_ptr<MediaRoutesQuery>>
331 routes_queries_;
332
300 base::ObserverList<LocalMediaRoutesObserver> local_routes_observers_; 333 base::ObserverList<LocalMediaRoutesObserver> local_routes_observers_;
301 334
302 base::ObserverList<MediaRoutesObserver> routes_observers_;
303
304 using PresentationSessionMessagesObserverList = 335 using PresentationSessionMessagesObserverList =
305 base::ObserverList<PresentationSessionMessagesObserver>; 336 base::ObserverList<PresentationSessionMessagesObserver>;
306 base::ScopedPtrHashMap<MediaRoute::Id, 337 base::ScopedPtrHashMap<MediaRoute::Id,
307 scoped_ptr<PresentationSessionMessagesObserverList>> 338 scoped_ptr<PresentationSessionMessagesObserverList>>
308 messages_observers_; 339 messages_observers_;
309 340
310 // IDs of MediaRoutes being listened for messages. Note that this is 341 // IDs of MediaRoutes being listened for messages. Note that this is
311 // different from |message_observers_| because we might be waiting for 342 // different from |message_observers_| because we might be waiting for
312 // |OnRouteMessagesReceived()| to be invoked after all observers for that 343 // |OnRouteMessagesReceived()| to be invoked after all observers for that
313 // route have been removed. 344 // route have been removed.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 MediaRouteProviderWakeReason current_wake_reason_; 387 MediaRouteProviderWakeReason current_wake_reason_;
357 388
358 base::WeakPtrFactory<MediaRouterMojoImpl> weak_factory_; 389 base::WeakPtrFactory<MediaRouterMojoImpl> weak_factory_;
359 390
360 DISALLOW_COPY_AND_ASSIGN(MediaRouterMojoImpl); 391 DISALLOW_COPY_AND_ASSIGN(MediaRouterMojoImpl);
361 }; 392 };
362 393
363 } // namespace media_router 394 } // namespace media_router
364 395
365 #endif // CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MOJO_IMPL_H_ 396 #endif // CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MOJO_IMPL_H_
OLDNEW
« no previous file with comments | « chrome/browser/media/router/media_router_metrics.h ('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