Index: chrome/browser/android/webapk/webapk_update_data_fetcher.cc |
diff --git a/chrome/browser/android/webapk/webapk_update_data_fetcher.cc b/chrome/browser/android/webapk/webapk_update_data_fetcher.cc |
index 69f626329dbb8f4210c7c302615a1a4b29af0491..1846a4afd13e7d6a20fc30c569fc740818867883 100644 |
--- a/chrome/browser/android/webapk/webapk_update_data_fetcher.cc |
+++ b/chrome/browser/android/webapk/webapk_update_data_fetcher.cc |
@@ -114,8 +114,13 @@ void WebApkUpdateDataFetcher::FetchInstallableData() { |
ShortcutHelper::GetIdealHomescreenIconSizeInPx(); |
params.minimum_primary_icon_size_in_px = |
ShortcutHelper::GetMinimumHomescreenIconSizeInPx(); |
+ params.ideal_badge_icon_size_in_px = |
+ ShortcutHelper::GetIdealBadgeIconSizeInPx(); |
+ params.minimum_badge_icon_size_in_px = |
+ ShortcutHelper::GetIdealBadgeIconSizeInPx(); |
params.check_installable = true; |
params.fetch_valid_primary_icon = true; |
+ params.fetch_valid_badge_icon = true; |
InstallableManager::CreateForWebContents(web_contents()); |
InstallableManager* installable_manager = |
InstallableManager::FromWebContents(web_contents()); |
@@ -150,58 +155,89 @@ void WebApkUpdateDataFetcher::OnDidGetInstallableData( |
info_.UpdateFromManifest(data.manifest); |
info_.manifest_url = data.manifest_url; |
info_.best_primary_icon_url = data.primary_icon_url; |
- best_primary_icon_ = *data.primary_icon; |
+ primary_icon_ = *data.primary_icon; |
+ |
+ if (data.badge_icon && !data.badge_icon->drawsNothing()) { |
+ info_.best_badge_icon_url = data.badge_icon_url; |
+ badge_icon_ = *data.badge_icon; |
+ } |
Profile* profile = |
Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
WebApkIconHasher::DownloadAndComputeMurmur2Hash( |
- profile->GetRequestContext(), data.primary_icon_url, |
- base::Bind(&WebApkUpdateDataFetcher::OnGotIconMurmur2Hash, |
+ profile->GetRequestContext(), info_.best_primary_icon_url, |
+ base::Bind(&WebApkUpdateDataFetcher::OnGotPrimaryIconMurmur2Hash, |
weak_ptr_factory_.GetWeakPtr())); |
} |
-void WebApkUpdateDataFetcher::OnGotIconMurmur2Hash( |
- const std::string& best_primary_icon_murmur2_hash) { |
- if (best_primary_icon_murmur2_hash.empty()) { |
+void WebApkUpdateDataFetcher::OnGotPrimaryIconMurmur2Hash( |
+ const std::string& primary_icon_murmur2_hash) { |
+ if (primary_icon_murmur2_hash.empty()) { |
OnWebManifestNotWebApkCompatible(); |
return; |
} |
- OnDataAvailable(info_, best_primary_icon_murmur2_hash, best_primary_icon_); |
+ if (!info_.best_badge_icon_url.is_empty() && |
+ info_.best_badge_icon_url != info_.best_primary_icon_url) { |
+ Profile* profile = |
+ Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
+ |
+ WebApkIconHasher::DownloadAndComputeMurmur2Hash( |
+ profile->GetRequestContext(), info_.best_badge_icon_url, |
+ base::Bind(&WebApkUpdateDataFetcher::OnDataAvailable, |
+ weak_ptr_factory_.GetWeakPtr(), primary_icon_murmur2_hash, |
+ true)); |
+ } else { |
+ OnDataAvailable(primary_icon_murmur2_hash, false, ""); |
+ } |
} |
void WebApkUpdateDataFetcher::OnDataAvailable( |
- const ShortcutInfo& info, |
- const std::string& best_primary_icon_murmur2_hash, |
- const SkBitmap& best_primary_icon) { |
+ const std::string& primary_icon_murmur2_hash, |
+ bool did_fetch_badge_icon, |
+ const std::string& badge_icon_murmur2_hash) { |
+ if (did_fetch_badge_icon && badge_icon_murmur2_hash.empty()) { |
+ OnWebManifestNotWebApkCompatible(); |
Yaron
2017/06/12 18:49:02
not sure we should really abort everything if just
F
2017/06/13 14:51:14
For clarification, we do not abort if the badge ic
|
+ return; |
+ } |
+ |
JNIEnv* env = base::android::AttachCurrentThread(); |
ScopedJavaLocalRef<jstring> java_url = |
- base::android::ConvertUTF8ToJavaString(env, info.url.spec()); |
+ base::android::ConvertUTF8ToJavaString(env, info_.url.spec()); |
ScopedJavaLocalRef<jstring> java_scope = |
- base::android::ConvertUTF8ToJavaString(env, info.scope.spec()); |
+ base::android::ConvertUTF8ToJavaString(env, info_.scope.spec()); |
ScopedJavaLocalRef<jstring> java_name = |
- base::android::ConvertUTF16ToJavaString(env, info.name); |
+ base::android::ConvertUTF16ToJavaString(env, info_.name); |
ScopedJavaLocalRef<jstring> java_short_name = |
- base::android::ConvertUTF16ToJavaString(env, info.short_name); |
- ScopedJavaLocalRef<jstring> java_best_primary_icon_url = |
+ base::android::ConvertUTF16ToJavaString(env, info_.short_name); |
+ ScopedJavaLocalRef<jstring> java_primary_icon_url = |
+ base::android::ConvertUTF8ToJavaString( |
+ env, info_.best_primary_icon_url.spec()); |
+ ScopedJavaLocalRef<jstring> java_primary_icon_murmur2_hash = |
base::android::ConvertUTF8ToJavaString(env, |
- info.best_primary_icon_url.spec()); |
- ScopedJavaLocalRef<jstring> java_best_primary_icon_murmur2_hash = |
+ primary_icon_murmur2_hash); |
+ ScopedJavaLocalRef<jobject> java_primary_icon = |
+ gfx::ConvertToJavaBitmap(&primary_icon_); |
+ ScopedJavaLocalRef<jstring> java_badge_icon_url = |
base::android::ConvertUTF8ToJavaString(env, |
- best_primary_icon_murmur2_hash); |
- ScopedJavaLocalRef<jobject> java_best_primary_icon = |
- gfx::ConvertToJavaBitmap(&best_primary_icon); |
- |
+ info_.best_badge_icon_url.spec()); |
+ ScopedJavaLocalRef<jstring> java_badge_icon_murmur2_hash = |
+ base::android::ConvertUTF8ToJavaString(env, |
+ badge_icon_murmur2_hash); |
+ ScopedJavaLocalRef<jobject> java_badge_icon; |
+ if (!badge_icon_.drawsNothing()) |
+ java_badge_icon = gfx::ConvertToJavaBitmap(&badge_icon_); |
ScopedJavaLocalRef<jobjectArray> java_icon_urls = |
- base::android::ToJavaArrayOfStrings(env, info.icon_urls); |
+ base::android::ToJavaArrayOfStrings(env, info_.icon_urls); |
Java_WebApkUpdateDataFetcher_onDataAvailable( |
env, java_ref_, java_url, java_scope, java_name, java_short_name, |
- java_best_primary_icon_url, java_best_primary_icon_murmur2_hash, |
- java_best_primary_icon, java_icon_urls, info.display, info.orientation, |
- info.theme_color, info.background_color); |
+ java_primary_icon_url, java_primary_icon_murmur2_hash, |
+ java_primary_icon, java_badge_icon_url, java_badge_icon_murmur2_hash, |
+ java_badge_icon, java_icon_urls, info_.display, info_.orientation, |
+ info_.theme_color, info_.background_color); |
} |
void WebApkUpdateDataFetcher::OnWebManifestNotWebApkCompatible() { |