OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/android/shortcut_helper.h" | 5 #include "chrome/browser/android/shortcut_helper.h" |
6 | 6 |
7 #include <jni.h> | 7 #include <jni.h> |
8 | 8 |
9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
10 #include "base/android/jni_array.h" | 10 #include "base/android/jni_array.h" |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
275 | 275 |
276 GURL ShortcutHelper::GetScopeFromURL(const GURL& url) { | 276 GURL ShortcutHelper::GetScopeFromURL(const GURL& url) { |
277 JNIEnv* env = base::android::AttachCurrentThread(); | 277 JNIEnv* env = base::android::AttachCurrentThread(); |
278 ScopedJavaLocalRef<jstring> java_url = | 278 ScopedJavaLocalRef<jstring> java_url = |
279 base::android::ConvertUTF8ToJavaString(env, url.spec()); | 279 base::android::ConvertUTF8ToJavaString(env, url.spec()); |
280 ScopedJavaLocalRef<jstring> java_scope_url = | 280 ScopedJavaLocalRef<jstring> java_scope_url = |
281 Java_ShortcutHelper_getScopeFromUrl(env, java_url); | 281 Java_ShortcutHelper_getScopeFromUrl(env, java_url); |
282 return GURL(base::android::ConvertJavaStringToUTF16(env, java_scope_url)); | 282 return GURL(base::android::ConvertJavaStringToUTF16(env, java_scope_url)); |
283 } | 283 } |
284 | 284 |
285 void ShortcutHelper::RetrieveWebApks(const WebApkInfoCallback& callback) { | |
286 uintptr_t callback_pointer = | |
287 reinterpret_cast<uintptr_t>(new WebApkInfoCallback(callback)); | |
288 Java_ShortcutHelper_retrieveWebApks(base::android::AttachCurrentThread(), | |
289 callback_pointer); | |
290 } | |
291 | |
285 // Callback used by Java when the shortcut has been created. | 292 // Callback used by Java when the shortcut has been created. |
286 // |splash_image_callback| is a pointer to a base::Closure allocated in | 293 // |splash_image_callback| is a pointer to a base::Closure allocated in |
287 // AddShortcutWithSkBitmap, so reinterpret_cast it back and run it. | 294 // AddShortcutWithSkBitmap, so reinterpret_cast it back and run it. |
288 // | 295 // |
289 // This callback should only ever be called when the shortcut was for a | 296 // This callback should only ever be called when the shortcut was for a |
290 // webapp-capable site; otherwise, |splash_image_callback| will have never been | 297 // webapp-capable site; otherwise, |splash_image_callback| will have never been |
291 // allocated and doesn't need to be run or deleted. | 298 // allocated and doesn't need to be run or deleted. |
292 void OnWebappDataStored(JNIEnv* env, | 299 void OnWebappDataStored(JNIEnv* env, |
293 const JavaParamRef<jclass>& clazz, | 300 const JavaParamRef<jclass>& clazz, |
294 jlong jsplash_image_callback) { | 301 jlong jsplash_image_callback) { |
295 DCHECK(jsplash_image_callback); | 302 DCHECK(jsplash_image_callback); |
296 base::Closure* splash_image_callback = | 303 base::Closure* splash_image_callback = |
297 reinterpret_cast<base::Closure*>(jsplash_image_callback); | 304 reinterpret_cast<base::Closure*>(jsplash_image_callback); |
298 splash_image_callback->Run(); | 305 splash_image_callback->Run(); |
299 delete splash_image_callback; | 306 delete splash_image_callback; |
300 } | 307 } |
301 | 308 |
309 void OnWebApksRetrieved(JNIEnv* env, | |
310 const JavaParamRef<jclass>& clazz, | |
311 const jlong jcallback_pointer, | |
312 const JavaParamRef<jobjectArray>& jshort_names, | |
313 const JavaParamRef<jobjectArray>& jpackage_names, | |
314 const JavaParamRef<jintArray>& jshell_apk_versions, | |
315 const JavaParamRef<jintArray>& jversion_codes) { | |
316 DCHECK(jcallback_pointer); | |
317 std::vector<std::string> short_names; | |
318 base::android::AppendJavaStringArrayToStringVector(env, jshort_names, | |
319 &short_names); | |
320 std::vector<std::string> package_names; | |
321 base::android::AppendJavaStringArrayToStringVector(env, jpackage_names, | |
322 &package_names); | |
323 std::vector<int> shell_apk_versions; | |
324 base::android::JavaIntArrayToIntVector(env, jshell_apk_versions, | |
325 &shell_apk_versions); | |
326 std::vector<int> version_codes; | |
327 base::android::JavaIntArrayToIntVector(env, jversion_codes, &version_codes); | |
328 | |
329 DCHECK(short_names.size() == package_names.size()); | |
330 DCHECK(short_names.size() == shell_apk_versions.size()); | |
331 DCHECK(short_names.size() == version_codes.size()); | |
332 | |
333 std::vector<const WebApkInfo> webapk_list; | |
334 webapk_list.reserve(short_names.size()); | |
335 for (size_t i = 0; i < short_names.size(); ++i) { | |
336 const WebApkInfo webapk_info(short_names[i], package_names[i], | |
337 shell_apk_versions[i], version_codes[i]); | |
338 webapk_list.push_back(webapk_info); | |
dominickn
2017/01/24 02:55:22
Inline the construction of WebApkInfo inside push_
| |
339 } | |
340 | |
341 ShortcutHelper::WebApkInfoCallback* webapk_list_callback = | |
342 reinterpret_cast<ShortcutHelper::WebApkInfoCallback*>(jcallback_pointer); | |
343 webapk_list_callback->Run(webapk_list); | |
344 delete webapk_list_callback; | |
345 } | |
346 | |
302 bool ShortcutHelper::RegisterShortcutHelper(JNIEnv* env) { | 347 bool ShortcutHelper::RegisterShortcutHelper(JNIEnv* env) { |
303 return RegisterNativesImpl(env); | 348 return RegisterNativesImpl(env); |
304 } | 349 } |
OLD | NEW |