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

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

Issue 2788783002: [Cast,Android] Handle some PresentationAPI edge cases (Closed)
Patch Set: Fixed the unittests Created 3 years, 8 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
(Empty)
1 // Copyright 2017 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 #include "chrome/browser/media/android/router/media_router_android_bridge.h"
6
7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h"
9 #include "chrome/browser/media/android/router/media_router_android.h"
10 #include "jni/ChromeMediaRouter_jni.h"
11
12 using base::android::ConvertUTF8ToJavaString;
13 using base::android::ConvertJavaStringToUTF8;
14 using base::android::JavaRef;
15 using base::android::ScopedJavaLocalRef;
16 using base::android::AttachCurrentThread;
17
18 namespace media_router {
19
20 MediaRouterAndroidBridge::MediaRouterAndroidBridge(MediaRouterAndroid* router)
21 : native_media_router_(router) {
22 JNIEnv* env = base::android::AttachCurrentThread();
23 java_media_router_.Reset(
24 Java_ChromeMediaRouter_create(env, reinterpret_cast<jlong>(this)));
25 }
26
27 MediaRouterAndroidBridge::~MediaRouterAndroidBridge() = default;
28
29 // static
30 bool MediaRouterAndroidBridge::Register(JNIEnv* env) {
31 bool ret = RegisterNativesImpl(env);
32 DCHECK(g_ChromeMediaRouter_clazz);
33 return ret;
34 }
35
36 void MediaRouterAndroidBridge::CreateRoute(const MediaSource::Id& source_id,
37 const MediaSink::Id& sink_id,
38 const std::string& presentation_id,
39 const url::Origin& origin,
40 int tab_id,
41 bool is_incognito,
42 int route_request_id) {
43 JNIEnv* env = base::android::AttachCurrentThread();
44 ScopedJavaLocalRef<jstring> jsource_id =
45 base::android::ConvertUTF8ToJavaString(env, source_id);
46 ScopedJavaLocalRef<jstring> jsink_id =
47 base::android::ConvertUTF8ToJavaString(env, sink_id);
48 ScopedJavaLocalRef<jstring> jpresentation_id =
49 base::android::ConvertUTF8ToJavaString(env, presentation_id);
50 // TODO(crbug.com/685358): Unique origins should not be considered
51 // same-origin.
52 ScopedJavaLocalRef<jstring> jorigin =
53 base::android::ConvertUTF8ToJavaString(env, origin.GetURL().spec());
54
55 Java_ChromeMediaRouter_createRoute(env, java_media_router_, jsource_id,
56 jsink_id, jpresentation_id, jorigin,
57 tab_id, is_incognito, route_request_id);
58 }
59
60 void MediaRouterAndroidBridge::JoinRoute(const MediaSource::Id& source_id,
61 const std::string& presentation_id,
62 const url::Origin& origin,
63 int tab_id,
64 int route_request_id) {
65 JNIEnv* env = base::android::AttachCurrentThread();
66 ScopedJavaLocalRef<jstring> jsource_id =
67 base::android::ConvertUTF8ToJavaString(env, source_id);
68 ScopedJavaLocalRef<jstring> jpresentation_id =
69 base::android::ConvertUTF8ToJavaString(env, presentation_id);
70 ScopedJavaLocalRef<jstring> jorigin =
71 base::android::ConvertUTF8ToJavaString(env, origin.GetURL().spec());
72
73 Java_ChromeMediaRouter_joinRoute(env, java_media_router_, jsource_id,
74 jpresentation_id, jorigin, tab_id,
75 route_request_id);
76 }
77
78 void MediaRouterAndroidBridge::TerminateRoute(const MediaRoute::Id& route_id) {
79 JNIEnv* env = base::android::AttachCurrentThread();
80 ScopedJavaLocalRef<jstring> jroute_id =
81 base::android::ConvertUTF8ToJavaString(env, route_id);
82 Java_ChromeMediaRouter_closeRoute(env, java_media_router_, jroute_id);
83 }
84
85 void MediaRouterAndroidBridge::SendRouteMessage(const MediaRoute::Id& route_id,
86 const std::string& message,
87 int callback_id) {
88 JNIEnv* env = base::android::AttachCurrentThread();
89 ScopedJavaLocalRef<jstring> jroute_id =
90 base::android::ConvertUTF8ToJavaString(env, route_id);
91 ScopedJavaLocalRef<jstring> jmessage =
92 base::android::ConvertUTF8ToJavaString(env, message);
93 Java_ChromeMediaRouter_sendStringMessage(env, java_media_router_, jroute_id,
94 jmessage, callback_id);
95 }
96
97 void MediaRouterAndroidBridge::DetachRoute(const MediaRoute::Id& route_id) {
98 JNIEnv* env = base::android::AttachCurrentThread();
99 ScopedJavaLocalRef<jstring> jroute_id =
100 base::android::ConvertUTF8ToJavaString(env, route_id);
101 Java_ChromeMediaRouter_detachRoute(env, java_media_router_, jroute_id);
102 }
103
104 bool MediaRouterAndroidBridge::StartObservingMediaSinks(
105 const MediaSource::Id& source_id) {
106 JNIEnv* env = base::android::AttachCurrentThread();
107 ScopedJavaLocalRef<jstring> jsource_id =
108 base::android::ConvertUTF8ToJavaString(env, source_id);
109 return Java_ChromeMediaRouter_startObservingMediaSinks(
110 env, java_media_router_, jsource_id);
111 }
112
113 void MediaRouterAndroidBridge::StopObservingMediaSinks(
114 const MediaSource::Id& source_id) {
115 JNIEnv* env = base::android::AttachCurrentThread();
116 ScopedJavaLocalRef<jstring> jsource_id =
117 base::android::ConvertUTF8ToJavaString(env, source_id);
118 Java_ChromeMediaRouter_stopObservingMediaSinks(env, java_media_router_,
119 jsource_id);
120 }
121
122 void MediaRouterAndroidBridge::OnSinksReceived(
123 JNIEnv* env,
124 const JavaRef<jobject>& obj,
125 const JavaRef<jstring>& jsource_urn,
126 jint jcount) {
127 std::vector<MediaSink> sinks_converted;
128 sinks_converted.reserve(jcount);
129 for (int i = 0; i < jcount; ++i) {
130 ScopedJavaLocalRef<jstring> jsink_urn = Java_ChromeMediaRouter_getSinkUrn(
131 env, java_media_router_, jsource_urn, i);
132 ScopedJavaLocalRef<jstring> jsink_name = Java_ChromeMediaRouter_getSinkName(
133 env, java_media_router_, jsource_urn, i);
134 sinks_converted.push_back(MediaSink(
135 ConvertJavaStringToUTF8(env, jsink_urn.obj()),
136 ConvertJavaStringToUTF8(env, jsink_name.obj()), MediaSink::GENERIC));
137 }
138 native_media_router_->OnSinksReceived(
139 ConvertJavaStringToUTF8(env, jsource_urn), sinks_converted);
140 }
141
142 void MediaRouterAndroidBridge::OnRouteCreated(
143 JNIEnv* env,
144 const JavaRef<jobject>& obj,
145 const JavaRef<jstring>& jmedia_route_id,
146 const JavaRef<jstring>& jsink_id,
147 jint jroute_request_id,
148 jboolean jis_local) {
149 native_media_router_->OnRouteCreated(
150 ConvertJavaStringToUTF8(env, jmedia_route_id),
151 ConvertJavaStringToUTF8(env, jsink_id), jroute_request_id, jis_local);
152 }
153
154 void MediaRouterAndroidBridge::OnRouteRequestError(
155 JNIEnv* env,
156 const JavaRef<jobject>& obj,
157 const JavaRef<jstring>& jerror_text,
158 jint jroute_request_id) {
159 native_media_router_->OnRouteRequestError(
160 ConvertJavaStringToUTF8(jerror_text), jroute_request_id);
161 }
162
163 void MediaRouterAndroidBridge::OnRouteClosed(
164 JNIEnv* env,
165 const JavaRef<jobject>& obj,
166 const JavaRef<jstring>& jmedia_route_id) {
167 native_media_router_->OnRouteClosed(
168 ConvertJavaStringToUTF8(env, jmedia_route_id));
169 }
170
171 void MediaRouterAndroidBridge::OnRouteClosedWithError(
172 JNIEnv* env,
173 const JavaRef<jobject>& obj,
174 const JavaRef<jstring>& jmedia_route_id,
175 const JavaRef<jstring>& jmessage) {
176 native_media_router_->OnRouteClosedWithError(
177 ConvertJavaStringToUTF8(env, jmedia_route_id),
178 ConvertJavaStringToUTF8(env, jmessage));
179 }
180
181 void MediaRouterAndroidBridge::OnMessageSentResult(JNIEnv* env,
182 const JavaRef<jobject>& obj,
183 jboolean jsuccess,
184 jint jcallback_id) {
185 native_media_router_->OnMessageSentResult(jsuccess, jcallback_id);
186 }
187
188 void MediaRouterAndroidBridge::OnMessage(
189 JNIEnv* env,
190 const JavaRef<jobject>& obj,
191 const JavaRef<jstring>& jmedia_route_id,
192 const JavaRef<jstring>& jmessage) {
193 native_media_router_->OnMessage(ConvertJavaStringToUTF8(env, jmedia_route_id),
194 ConvertJavaStringToUTF8(env, jmessage));
195 }
196
197 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698