| 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 28 matching lines...) Expand all Loading... |
| 39 | 39 |
| 40 int g_default_rgb_icon_value = 145; | 40 int g_default_rgb_icon_value = 145; |
| 41 | 41 |
| 42 // Retrieves and caches the ideal and minimum sizes of the Home screen icon | 42 // Retrieves and caches the ideal and minimum sizes of the Home screen icon |
| 43 // and the splash screen image. | 43 // and the splash screen image. |
| 44 void GetHomescreenIconAndSplashImageSizes() { | 44 void GetHomescreenIconAndSplashImageSizes() { |
| 45 JNIEnv* env = base::android::AttachCurrentThread(); | 45 JNIEnv* env = base::android::AttachCurrentThread(); |
| 46 ScopedJavaLocalRef<jintArray> java_size_array = | 46 ScopedJavaLocalRef<jintArray> java_size_array = |
| 47 Java_ShortcutHelper_getHomeScreenIconAndSplashImageSizes(env); | 47 Java_ShortcutHelper_getHomeScreenIconAndSplashImageSizes(env); |
| 48 std::vector<int> sizes; | 48 std::vector<int> sizes; |
| 49 base::android::JavaIntArrayToIntVector( | 49 base::android::JavaIntArrayToIntVector(env, java_size_array.obj(), &sizes); |
| 50 env, java_size_array.obj(), &sizes); | |
| 51 | 50 |
| 52 // Check that the size returned is what is expected. | 51 // Check that the size returned is what is expected. |
| 53 DCHECK(sizes.size() == 5); | 52 DCHECK(sizes.size() == 5); |
| 54 | 53 |
| 55 // This ordering must be kept up to date with the Java ShortcutHelper. | 54 // This ordering must be kept up to date with the Java ShortcutHelper. |
| 56 g_ideal_homescreen_icon_size = sizes[0]; | 55 g_ideal_homescreen_icon_size = sizes[0]; |
| 57 g_minimum_homescreen_icon_size = sizes[1]; | 56 g_minimum_homescreen_icon_size = sizes[1]; |
| 58 g_ideal_splash_image_size = sizes[2]; | 57 g_ideal_splash_image_size = sizes[2]; |
| 59 g_minimum_splash_image_size = sizes[3]; | 58 g_minimum_splash_image_size = sizes[3]; |
| 60 g_ideal_badge_icon_size = sizes[4]; | 59 g_ideal_badge_icon_size = sizes[4]; |
| 61 | 60 |
| 62 // Try to ensure that the data returned is sane. | 61 // Try to ensure that the data returned is sane. |
| 63 DCHECK(g_minimum_homescreen_icon_size <= g_ideal_homescreen_icon_size); | 62 DCHECK(g_minimum_homescreen_icon_size <= g_ideal_homescreen_icon_size); |
| 64 DCHECK(g_minimum_splash_image_size <= g_ideal_splash_image_size); | 63 DCHECK(g_minimum_splash_image_size <= g_ideal_splash_image_size); |
| 65 } | 64 } |
| 66 | 65 |
| 67 } // anonymous namespace | 66 } // anonymous namespace |
| 68 | 67 |
| 69 // static | 68 // static |
| 70 void ShortcutHelper::AddToLauncherWithSkBitmap( | 69 void ShortcutHelper::AddToLauncherWithSkBitmap( |
| 71 content::BrowserContext* browser_context, | 70 content::BrowserContext* browser_context, |
| 72 const ShortcutInfo& info, | 71 const ShortcutInfo& info, |
| 73 const std::string& webapp_id, | 72 const std::string& webapp_id, |
| 74 const SkBitmap& icon_bitmap, | 73 const SkBitmap& icon_bitmap, |
| 75 const base::Closure& splash_image_callback) { | 74 const base::Closure& splash_image_callback) { |
| 76 if (info.display == blink::WebDisplayModeStandalone || | 75 if (info.display == blink::WebDisplayModeStandalone || |
| 77 info.display == blink::WebDisplayModeFullscreen) { | 76 info.display == blink::WebDisplayModeFullscreen) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 104 ScopedJavaLocalRef<jstring> java_url = | 103 ScopedJavaLocalRef<jstring> java_url = |
| 105 base::android::ConvertUTF8ToJavaString(env, info.url.spec()); | 104 base::android::ConvertUTF8ToJavaString(env, info.url.spec()); |
| 106 ScopedJavaLocalRef<jstring> java_scope_url = | 105 ScopedJavaLocalRef<jstring> java_scope_url = |
| 107 base::android::ConvertUTF8ToJavaString(env, info.scope.spec()); | 106 base::android::ConvertUTF8ToJavaString(env, info.scope.spec()); |
| 108 ScopedJavaLocalRef<jstring> java_user_title = | 107 ScopedJavaLocalRef<jstring> java_user_title = |
| 109 base::android::ConvertUTF16ToJavaString(env, info.user_title); | 108 base::android::ConvertUTF16ToJavaString(env, info.user_title); |
| 110 ScopedJavaLocalRef<jstring> java_name = | 109 ScopedJavaLocalRef<jstring> java_name = |
| 111 base::android::ConvertUTF16ToJavaString(env, info.name); | 110 base::android::ConvertUTF16ToJavaString(env, info.name); |
| 112 ScopedJavaLocalRef<jstring> java_short_name = | 111 ScopedJavaLocalRef<jstring> java_short_name = |
| 113 base::android::ConvertUTF16ToJavaString(env, info.short_name); | 112 base::android::ConvertUTF16ToJavaString(env, info.short_name); |
| 114 ScopedJavaLocalRef<jstring> java_best_icon_url = | 113 ScopedJavaLocalRef<jstring> java_best_primary_icon_url = |
| 115 base::android::ConvertUTF8ToJavaString(env, info.best_icon_url.spec()); | 114 base::android::ConvertUTF8ToJavaString(env, |
| 115 info.best_primary_icon_url.spec()); |
| 116 ScopedJavaLocalRef<jobject> java_bitmap; | 116 ScopedJavaLocalRef<jobject> java_bitmap; |
| 117 if (icon_bitmap.getSize()) | 117 if (icon_bitmap.getSize()) |
| 118 java_bitmap = gfx::ConvertToJavaBitmap(&icon_bitmap); | 118 java_bitmap = gfx::ConvertToJavaBitmap(&icon_bitmap); |
| 119 | 119 |
| 120 // The callback will need to be run after shortcut creation completes in order | 120 // The callback will need to be run after shortcut creation completes in order |
| 121 // to download the splash image and save it to the WebappDataStorage. Create a | 121 // to download the splash image and save it to the WebappDataStorage. Create a |
| 122 // copy of the callback here and send the pointer to Java, which will send it | 122 // copy of the callback here and send the pointer to Java, which will send it |
| 123 // back once the asynchronous shortcut creation process finishes. | 123 // back once the asynchronous shortcut creation process finishes. |
| 124 uintptr_t callback_pointer = | 124 uintptr_t callback_pointer = |
| 125 reinterpret_cast<uintptr_t>(new base::Closure(splash_image_callback)); | 125 reinterpret_cast<uintptr_t>(new base::Closure(splash_image_callback)); |
| 126 | 126 |
| 127 Java_ShortcutHelper_addWebapp(env, java_webapp_id, java_url, java_scope_url, | 127 Java_ShortcutHelper_addWebapp( |
| 128 java_user_title, java_name, java_short_name, | 128 env, java_webapp_id, java_url, java_scope_url, java_user_title, java_name, |
| 129 java_best_icon_url, java_bitmap, info.display, | 129 java_short_name, java_best_primary_icon_url, java_bitmap, info.display, |
| 130 info.orientation, info.source, info.theme_color, | 130 info.orientation, info.source, info.theme_color, info.background_color, |
| 131 info.background_color, callback_pointer); | 131 callback_pointer); |
| 132 } | 132 } |
| 133 | 133 |
| 134 void ShortcutHelper::AddShortcutWithSkBitmap( | 134 void ShortcutHelper::AddShortcutWithSkBitmap(const ShortcutInfo& info, |
| 135 const ShortcutInfo& info, | 135 const SkBitmap& icon_bitmap) { |
| 136 const SkBitmap& icon_bitmap) { | |
| 137 JNIEnv* env = base::android::AttachCurrentThread(); | 136 JNIEnv* env = base::android::AttachCurrentThread(); |
| 138 ScopedJavaLocalRef<jstring> java_url = | 137 ScopedJavaLocalRef<jstring> java_url = |
| 139 base::android::ConvertUTF8ToJavaString(env, info.url.spec()); | 138 base::android::ConvertUTF8ToJavaString(env, info.url.spec()); |
| 140 ScopedJavaLocalRef<jstring> java_user_title = | 139 ScopedJavaLocalRef<jstring> java_user_title = |
| 141 base::android::ConvertUTF16ToJavaString(env, info.user_title); | 140 base::android::ConvertUTF16ToJavaString(env, info.user_title); |
| 142 ScopedJavaLocalRef<jobject> java_bitmap; | 141 ScopedJavaLocalRef<jobject> java_bitmap; |
| 143 if (icon_bitmap.getSize()) | 142 if (icon_bitmap.getSize()) |
| 144 java_bitmap = gfx::ConvertToJavaBitmap(&icon_bitmap); | 143 java_bitmap = gfx::ConvertToJavaBitmap(&icon_bitmap); |
| 145 | 144 |
| 146 Java_ShortcutHelper_addShortcut(env, java_url, java_user_title, java_bitmap, | 145 Java_ShortcutHelper_addShortcut(env, java_url, java_user_title, java_bitmap, |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 const std::string& webapp_id) { | 190 const std::string& webapp_id) { |
| 192 // This is a fire and forget task. It is not vital for the splash screen image | 191 // This is a fire and forget task. It is not vital for the splash screen image |
| 193 // to be downloaded so if the downloader returns false there is no fallback. | 192 // to be downloaded so if the downloader returns false there is no fallback. |
| 194 ManifestIconDownloader::Download( | 193 ManifestIconDownloader::Download( |
| 195 web_contents, image_url, ideal_splash_image_size_in_px, | 194 web_contents, image_url, ideal_splash_image_size_in_px, |
| 196 minimum_splash_image_size_in_px, | 195 minimum_splash_image_size_in_px, |
| 197 base::Bind(&ShortcutHelper::StoreWebappSplashImage, webapp_id)); | 196 base::Bind(&ShortcutHelper::StoreWebappSplashImage, webapp_id)); |
| 198 } | 197 } |
| 199 | 198 |
| 200 // static | 199 // static |
| 201 void ShortcutHelper::StoreWebappSplashImage( | 200 void ShortcutHelper::StoreWebappSplashImage(const std::string& webapp_id, |
| 202 const std::string& webapp_id, | 201 const SkBitmap& splash_image) { |
| 203 const SkBitmap& splash_image) { | |
| 204 if (splash_image.drawsNothing()) | 202 if (splash_image.drawsNothing()) |
| 205 return; | 203 return; |
| 206 | 204 |
| 207 JNIEnv* env = base::android::AttachCurrentThread(); | 205 JNIEnv* env = base::android::AttachCurrentThread(); |
| 208 ScopedJavaLocalRef<jstring> java_webapp_id = | 206 ScopedJavaLocalRef<jstring> java_webapp_id = |
| 209 base::android::ConvertUTF8ToJavaString(env, webapp_id); | 207 base::android::ConvertUTF8ToJavaString(env, webapp_id); |
| 210 ScopedJavaLocalRef<jobject> java_splash_image = | 208 ScopedJavaLocalRef<jobject> java_splash_image = |
| 211 gfx::ConvertToJavaBitmap(&splash_image); | 209 gfx::ConvertToJavaBitmap(&splash_image); |
| 212 | 210 |
| 213 Java_ShortcutHelper_storeWebappSplashImage(env, java_webapp_id, | 211 Java_ShortcutHelper_storeWebappSplashImage(env, java_webapp_id, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 // static | 257 // static |
| 260 std::string ShortcutHelper::QueryWebApkPackage(const GURL& url) { | 258 std::string ShortcutHelper::QueryWebApkPackage(const GURL& url) { |
| 261 JNIEnv* env = base::android::AttachCurrentThread(); | 259 JNIEnv* env = base::android::AttachCurrentThread(); |
| 262 ScopedJavaLocalRef<jstring> java_url = | 260 ScopedJavaLocalRef<jstring> java_url = |
| 263 base::android::ConvertUTF8ToJavaString(env, url.spec()); | 261 base::android::ConvertUTF8ToJavaString(env, url.spec()); |
| 264 ScopedJavaLocalRef<jstring> java_webapk_package_name = | 262 ScopedJavaLocalRef<jstring> java_webapk_package_name = |
| 265 Java_ShortcutHelper_queryWebApkPackage(env, java_url); | 263 Java_ShortcutHelper_queryWebApkPackage(env, java_url); |
| 266 | 264 |
| 267 std::string webapk_package_name = ""; | 265 std::string webapk_package_name = ""; |
| 268 if (java_webapk_package_name.obj()) { | 266 if (java_webapk_package_name.obj()) { |
| 269 webapk_package_name = base::android::ConvertJavaStringToUTF8( | 267 webapk_package_name = |
| 270 env, java_webapk_package_name); | 268 base::android::ConvertJavaStringToUTF8(env, java_webapk_package_name); |
| 271 } | 269 } |
| 272 return webapk_package_name; | 270 return webapk_package_name; |
| 273 } | 271 } |
| 274 | 272 |
| 275 // static | 273 // static |
| 276 bool ShortcutHelper::IsWebApkInstalled( | 274 bool ShortcutHelper::IsWebApkInstalled(content::BrowserContext* browser_context, |
| 277 content::BrowserContext* browser_context, | 275 const GURL& start_url, |
| 278 const GURL& start_url, | 276 const GURL& manifest_url) { |
| 279 const GURL& manifest_url) { | |
| 280 return !QueryWebApkPackage(start_url).empty() || | 277 return !QueryWebApkPackage(start_url).empty() || |
| 281 WebApkInstallService::Get(browser_context) | 278 WebApkInstallService::Get(browser_context) |
| 282 ->IsInstallInProgress(manifest_url); | 279 ->IsInstallInProgress(manifest_url); |
| 283 } | 280 } |
| 284 | 281 |
| 285 GURL ShortcutHelper::GetScopeFromURL(const GURL& url) { | 282 GURL ShortcutHelper::GetScopeFromURL(const GURL& url) { |
| 286 JNIEnv* env = base::android::AttachCurrentThread(); | 283 JNIEnv* env = base::android::AttachCurrentThread(); |
| 287 ScopedJavaLocalRef<jstring> java_url = | 284 ScopedJavaLocalRef<jstring> java_url = |
| 288 base::android::ConvertUTF8ToJavaString(env, url.spec()); | 285 base::android::ConvertUTF8ToJavaString(env, url.spec()); |
| 289 ScopedJavaLocalRef<jstring> java_scope_url = | 286 ScopedJavaLocalRef<jstring> java_scope_url = |
| 290 Java_ShortcutHelper_getScopeFromUrl(env, java_url); | 287 Java_ShortcutHelper_getScopeFromUrl(env, java_url); |
| 291 return GURL(base::android::ConvertJavaStringToUTF16(env, java_scope_url)); | 288 return GURL(base::android::ConvertJavaStringToUTF16(env, java_scope_url)); |
| 292 } | 289 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 304 DCHECK(jsplash_image_callback); | 301 DCHECK(jsplash_image_callback); |
| 305 base::Closure* splash_image_callback = | 302 base::Closure* splash_image_callback = |
| 306 reinterpret_cast<base::Closure*>(jsplash_image_callback); | 303 reinterpret_cast<base::Closure*>(jsplash_image_callback); |
| 307 splash_image_callback->Run(); | 304 splash_image_callback->Run(); |
| 308 delete splash_image_callback; | 305 delete splash_image_callback; |
| 309 } | 306 } |
| 310 | 307 |
| 311 bool ShortcutHelper::RegisterShortcutHelper(JNIEnv* env) { | 308 bool ShortcutHelper::RegisterShortcutHelper(JNIEnv* env) { |
| 312 return RegisterNativesImpl(env); | 309 return RegisterNativesImpl(env); |
| 313 } | 310 } |
| OLD | NEW |