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

Side by Side Diff: chrome/browser/media/android/router/media_router_android.cc

Issue 1291203003: [Presentation API, Android] Implement routes observers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@close-route
Patch Set: 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 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 #include "chrome/browser/media/android/router/media_router_android.h" 5 #include "chrome/browser/media/android/router/media_router_android.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/guid.h" 9 #include "base/guid.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "chrome/browser/media/router/media_routes_observer.h"
11 #include "chrome/browser/media/router/media_sinks_observer.h" 12 #include "chrome/browser/media/router/media_sinks_observer.h"
12 #include "jni/ChromeMediaRouter_jni.h" 13 #include "jni/ChromeMediaRouter_jni.h"
13 14
14 using base::android::ConvertUTF8ToJavaString; 15 using base::android::ConvertUTF8ToJavaString;
15 using base::android::ConvertJavaStringToUTF8; 16 using base::android::ConvertJavaStringToUTF8;
16 using base::android::ScopedJavaLocalRef; 17 using base::android::ScopedJavaLocalRef;
17 using base::android::AttachCurrentThread; 18 using base::android::AttachCurrentThread;
18 19
19 namespace media_router { 20 namespace media_router {
20 21
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 JNIEnv* env = base::android::AttachCurrentThread(); 161 JNIEnv* env = base::android::AttachCurrentThread();
161 ScopedJavaLocalRef<jstring> jsource_id = 162 ScopedJavaLocalRef<jstring> jsource_id =
162 base::android::ConvertUTF8ToJavaString(env, source_id); 163 base::android::ConvertUTF8ToJavaString(env, source_id);
163 Java_ChromeMediaRouter_stopObservingMediaSinks( 164 Java_ChromeMediaRouter_stopObservingMediaSinks(
164 env, java_media_router_.obj(), jsource_id.obj()); 165 env, java_media_router_.obj(), jsource_id.obj());
165 } 166 }
166 } 167 }
167 168
168 void MediaRouterAndroid::RegisterMediaRoutesObserver( 169 void MediaRouterAndroid::RegisterMediaRoutesObserver(
169 MediaRoutesObserver* observer) { 170 MediaRoutesObserver* observer) {
170 NOTIMPLEMENTED(); 171 DVLOG(2) << "Added MediaRoutesObserver: " << observer;
172 routes_observers_.AddObserver(observer);
171 } 173 }
172 174
173 void MediaRouterAndroid::UnregisterMediaRoutesObserver( 175 void MediaRouterAndroid::UnregisterMediaRoutesObserver(
174 MediaRoutesObserver* observer) { 176 MediaRoutesObserver* observer) {
175 NOTIMPLEMENTED(); 177 if (!routes_observers_.HasObserver(observer))
mlamouri (slow - plz ping) 2015/08/18 22:39:37 nit: I don't think this check is necessary.
whywhat 2015/08/19 00:26:43 I copied it from the desktop implementation :) Not
178 return;
179 routes_observers_.RemoveObserver(observer);
176 } 180 }
177 181
178 void MediaRouterAndroid::RegisterIssuesObserver(IssuesObserver* observer) { 182 void MediaRouterAndroid::RegisterIssuesObserver(IssuesObserver* observer) {
179 NOTIMPLEMENTED(); 183 NOTIMPLEMENTED();
180 } 184 }
181 185
182 void MediaRouterAndroid::UnregisterIssuesObserver(IssuesObserver* observer) { 186 void MediaRouterAndroid::UnregisterIssuesObserver(IssuesObserver* observer) {
183 NOTIMPLEMENTED(); 187 NOTIMPLEMENTED();
184 } 188 }
185 189
186 void MediaRouterAndroid::RegisterPresentationSessionMessagesObserver( 190 void MediaRouterAndroid::RegisterPresentationSessionMessagesObserver(
187 PresentationSessionMessagesObserver* observer) { 191 PresentationSessionMessagesObserver* observer) {
188 NOTIMPLEMENTED(); 192 NOTIMPLEMENTED();
189 } 193 }
190 194
191 void MediaRouterAndroid::UnregisterPresentationSessionMessagesObserver( 195 void MediaRouterAndroid::UnregisterPresentationSessionMessagesObserver(
192 PresentationSessionMessagesObserver* observer) { 196 PresentationSessionMessagesObserver* observer) {
193 NOTIMPLEMENTED(); 197 NOTIMPLEMENTED();
194 } 198 }
195 199
196 void MediaRouterAndroid::OnSinksReceived( 200 void MediaRouterAndroid::OnSinksReceived(
197 JNIEnv* env, 201 JNIEnv* env,
198 jobject obj, 202 jobject obj,
199 jstring jsource_urn, 203 jstring jsource_urn,
200 jint count) { 204 jint jcount) {
201 std::vector<MediaSink> sinks_converted; 205 std::vector<MediaSink> sinks_converted;
202 sinks_converted.reserve(count); 206 sinks_converted.reserve(jcount);
203 for (int i = 0; i < count; ++i) { 207 for (int i = 0; i < jcount; ++i) {
204 ScopedJavaLocalRef<jstring> jsink_urn = 208 ScopedJavaLocalRef<jstring> jsink_urn =
205 Java_ChromeMediaRouter_getSinkUrn( 209 Java_ChromeMediaRouter_getSinkUrn(
206 env, java_media_router_.obj(), jsource_urn, i); 210 env, java_media_router_.obj(), jsource_urn, i);
207 ScopedJavaLocalRef<jstring> jsink_name = 211 ScopedJavaLocalRef<jstring> jsink_name =
208 Java_ChromeMediaRouter_getSinkName( 212 Java_ChromeMediaRouter_getSinkName(
209 env, java_media_router_.obj(), jsource_urn, i); 213 env, java_media_router_.obj(), jsource_urn, i);
210 sinks_converted.push_back( 214 sinks_converted.push_back(
211 MediaSink(ConvertJavaStringToUTF8(env, jsink_urn.obj()), 215 MediaSink(ConvertJavaStringToUTF8(env, jsink_urn.obj()),
212 ConvertJavaStringToUTF8(env, jsink_name.obj()))); 216 ConvertJavaStringToUTF8(env, jsink_name.obj())));
213 } 217 }
(...skipping 22 matching lines...) Expand all
236 request->media_source, 240 request->media_source,
237 request->media_sink, 241 request->media_sink,
238 std::string(), 242 std::string(),
239 jis_local, 243 jis_local,
240 std::string())); 244 std::string()));
241 245
242 for (const MediaRouteResponseCallback& callback : request->callbacks) 246 for (const MediaRouteResponseCallback& callback : request->callbacks)
243 callback.Run(route.get(), request->presentation_id, std::string()); 247 callback.Run(route.get(), request->presentation_id, std::string());
244 248
245 create_route_requests_.Remove(jcreate_route_request_id); 249 create_route_requests_.Remove(jcreate_route_request_id);
250 active_routes_.add(route->media_route_id(), route.Pass());
251 UpdateRoutesObservers();
246 } 252 }
247 253
248 void MediaRouterAndroid::OnRouteCreationError( 254 void MediaRouterAndroid::OnRouteCreationError(
249 JNIEnv* env, 255 JNIEnv* env,
250 jobject obj, 256 jobject obj,
251 jstring jerror_text, 257 jstring jerror_text,
252 jint jcreate_route_request_id) { 258 jint jcreate_route_request_id) {
253 CreateMediaRouteRequest* request = 259 CreateMediaRouteRequest* request =
254 create_route_requests_.Lookup(jcreate_route_request_id); 260 create_route_requests_.Lookup(jcreate_route_request_id);
255 if (!request) 261 if (!request)
256 return; 262 return;
257 263
258 std::string error_text = ConvertJavaStringToUTF8(env, jerror_text); 264 std::string error_text = ConvertJavaStringToUTF8(env, jerror_text);
259 265
260 for (const MediaRouteResponseCallback& callback : request->callbacks) 266 for (const MediaRouteResponseCallback& callback : request->callbacks)
261 callback.Run(nullptr, std::string(), error_text); 267 callback.Run(nullptr, std::string(), error_text);
262 268
263 create_route_requests_.Remove(jcreate_route_request_id); 269 create_route_requests_.Remove(jcreate_route_request_id);
264 } 270 }
265 271
272 void MediaRouterAndroid::OnRouteClosed(JNIEnv* env,
273 jobject obj,
274 jstring jmedia_route_id) {
275 MediaRoute::Id route_id = ConvertJavaStringToUTF8(env, jmedia_route_id);
276 active_routes_.erase(route_id);
277
278 UpdateRoutesObservers();
279 }
280
281 void MediaRouterAndroid::UpdateRoutesObservers() {
282 std::vector<MediaRoute> routes;
283 routes.reserve(active_routes_.size());
284 for (auto it = active_routes_.begin(); it != active_routes_.end(); ++it)
mlamouri (slow - plz ping) 2015/08/18 22:39:37 nit: const auto& it also, can you do: for (const
whywhat 2015/08/19 00:26:43 A const reference to iterator can't be ++'ed
285 routes.push_back(*it->second);
mlamouri (slow - plz ping) 2015/08/18 22:39:37 nit: routes.push_back(*(it->second));
286
287 FOR_EACH_OBSERVER(MediaRoutesObserver, routes_observers_,
288 OnRoutesUpdated(routes));
289 }
290
266 } // namespace media_router 291 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698