 Chromium Code Reviews
 Chromium Code Reviews Issue 1845233002:
  Store standalone web app data in WebappDataStorage as well as the homescreen intent.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@notification-deep-linking
    
  
    Issue 1845233002:
  Store standalone web app data in WebappDataStorage as well as the homescreen intent.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@notification-deep-linking| Index: chrome/browser/android/shortcut_helper.cc | 
| diff --git a/chrome/browser/android/shortcut_helper.cc b/chrome/browser/android/shortcut_helper.cc | 
| index e52f96ec34b5178272419523e5df9895b9093365..1f1849b3c50b8fa9debad4ad9714adcb83349ef2 100644 | 
| --- a/chrome/browser/android/shortcut_helper.cc | 
| +++ b/chrome/browser/android/shortcut_helper.cc | 
| @@ -10,6 +10,8 @@ | 
| #include "base/android/jni_android.h" | 
| #include "base/android/jni_array.h" | 
| #include "base/android/jni_string.h" | 
| +#include "base/bind.h" | 
| +#include "base/callback.h" | 
| #include "base/strings/string16.h" | 
| #include "base/strings/utf_string_conversions.h" | 
| #include "chrome/browser/manifest/manifest_icon_downloader.h" | 
| @@ -62,7 +64,8 @@ void GetHomescreenIconAndSplashImageSizes() { | 
| void ShortcutHelper::AddShortcutInBackgroundWithSkBitmap( | 
| const ShortcutInfo& info, | 
| const std::string& webapp_id, | 
| - const SkBitmap& icon_bitmap) { | 
| + const SkBitmap& icon_bitmap, | 
| + const base::Closure& splash_image_callback) { | 
| DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 
| // Send the data to the Java side to create the shortcut. | 
| @@ -81,6 +84,9 @@ void ShortcutHelper::AddShortcutInBackgroundWithSkBitmap( | 
| if (icon_bitmap.getSize()) | 
| java_bitmap = gfx::ConvertToJavaBitmap(&icon_bitmap); | 
| + uintptr_t callback_pointer = reinterpret_cast<uintptr_t>( | 
| 
gone
2016/04/01 23:44:48
Don't we know whether the callback will be used at
 
dominickn
2016/04/04 07:26:24
That's a good point. This cleans up the mess here
 | 
| + new base::Closure(splash_image_callback)); | 
| + | 
| Java_ShortcutHelper_addShortcut( | 
| env, | 
| base::android::GetApplicationContext(), | 
| @@ -95,7 +101,8 @@ void ShortcutHelper::AddShortcutInBackgroundWithSkBitmap( | 
| info.source, | 
| info.theme_color, | 
| info.background_color, | 
| - info.is_icon_generated); | 
| + info.is_icon_generated, | 
| + callback_pointer); | 
| } | 
| int ShortcutHelper::GetIdealHomescreenIconSizeInDp() { | 
| @@ -128,20 +135,18 @@ void ShortcutHelper::FetchSplashScreenImage( | 
| const GURL& image_url, | 
| const int ideal_splash_image_size_in_dp, | 
| const int minimum_splash_image_size_in_dp, | 
| - const std::string& webapp_id, | 
| - const std::string& webapp_scope) { | 
| + const std::string& webapp_id) { | 
| // This is a fire and forget task. It is not vital for the splash screen image | 
| // to be downloaded so if the downloader returns false there is no fallback. | 
| ManifestIconDownloader::Download( | 
| web_contents, image_url, ideal_splash_image_size_in_dp, | 
| minimum_splash_image_size_in_dp, | 
| - base::Bind(&ShortcutHelper::StoreWebappData, webapp_id, webapp_scope)); | 
| + base::Bind(&ShortcutHelper::StoreWebappSplashImage, webapp_id)); | 
| } | 
| // static | 
| -void ShortcutHelper::StoreWebappData( | 
| +void ShortcutHelper::StoreWebappSplashImage( | 
| const std::string& webapp_id, | 
| - const std::string& webapp_url, | 
| const SkBitmap& splash_image) { | 
| if (splash_image.drawsNothing()) | 
| return; | 
| @@ -149,16 +154,13 @@ void ShortcutHelper::StoreWebappData( | 
| JNIEnv* env = base::android::AttachCurrentThread(); | 
| ScopedJavaLocalRef<jstring> java_webapp_id = | 
| base::android::ConvertUTF8ToJavaString(env, webapp_id); | 
| - ScopedJavaLocalRef<jstring> java_webapp_url = | 
| - base::android::ConvertUTF8ToJavaString(env, webapp_url); | 
| ScopedJavaLocalRef<jobject> java_splash_image = | 
| gfx::ConvertToJavaBitmap(&splash_image); | 
| - Java_ShortcutHelper_storeWebappData( | 
| + Java_ShortcutHelper_storeWebappSplashImage( | 
| env, | 
| base::android::GetApplicationContext(), | 
| java_webapp_id.obj(), | 
| - java_webapp_url.obj(), | 
| java_splash_image.obj()); | 
| } | 
| @@ -202,6 +204,20 @@ SkBitmap ShortcutHelper::FinalizeLauncherIcon(const SkBitmap& bitmap, | 
| return gfx::CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(result.obj())); | 
| } | 
| +// Callback used by Java when the shortcut has been created. If the shortcut | 
| +// was for a webapp capable site, run the splashscreen_callback. | 
| +void OnWebappDataStored(JNIEnv* env, | 
| + const JavaParamRef<jclass>& clazz, | 
| + jlong jsplash_image_callback, | 
| + jboolean jwebapp_capable) { | 
| + base::Closure* splash_image_callback = | 
| + reinterpret_cast<base::Closure*>(jsplash_image_callback); | 
| + if (jwebapp_capable) | 
| + splash_image_callback->Run(); | 
| + | 
| + delete splash_image_callback; | 
| +} | 
| + | 
| bool ShortcutHelper::RegisterShortcutHelper(JNIEnv* env) { | 
| return RegisterNativesImpl(env); | 
| } |