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

Side by Side Diff: chrome/browser/android/webapk/webapk_update_data_fetcher.cc

Issue 2921623004: Support badge icon in WebAPK update components (Closed)
Patch Set: rebase Created 3 years, 6 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/webapk/webapk_update_data_fetcher.h" 5 #include "chrome/browser/android/webapk/webapk_update_data_fetcher.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/android/jni_array.h" 10 #include "base/android/jni_array.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 if (!IsInScope(url, scope_)) { 107 if (!IsInScope(url, scope_)) {
108 OnWebManifestNotWebApkCompatible(); 108 OnWebManifestNotWebApkCompatible();
109 return; 109 return;
110 } 110 }
111 111
112 InstallableParams params; 112 InstallableParams params;
113 params.ideal_primary_icon_size_in_px = 113 params.ideal_primary_icon_size_in_px =
114 ShortcutHelper::GetIdealHomescreenIconSizeInPx(); 114 ShortcutHelper::GetIdealHomescreenIconSizeInPx();
115 params.minimum_primary_icon_size_in_px = 115 params.minimum_primary_icon_size_in_px =
116 ShortcutHelper::GetMinimumHomescreenIconSizeInPx(); 116 ShortcutHelper::GetMinimumHomescreenIconSizeInPx();
117 params.ideal_badge_icon_size_in_px =
118 ShortcutHelper::GetIdealBadgeIconSizeInPx();
119 params.minimum_badge_icon_size_in_px =
120 ShortcutHelper::GetIdealBadgeIconSizeInPx();
117 params.check_installable = true; 121 params.check_installable = true;
118 params.fetch_valid_primary_icon = true; 122 params.fetch_valid_primary_icon = true;
123 params.fetch_valid_badge_icon = true;
119 InstallableManager::CreateForWebContents(web_contents()); 124 InstallableManager::CreateForWebContents(web_contents());
120 InstallableManager* installable_manager = 125 InstallableManager* installable_manager =
121 InstallableManager::FromWebContents(web_contents()); 126 InstallableManager::FromWebContents(web_contents());
122 installable_manager->GetData( 127 installable_manager->GetData(
123 params, base::Bind(&WebApkUpdateDataFetcher::OnDidGetInstallableData, 128 params, base::Bind(&WebApkUpdateDataFetcher::OnDidGetInstallableData,
124 weak_ptr_factory_.GetWeakPtr())); 129 weak_ptr_factory_.GetWeakPtr()));
125 } 130 }
126 131
127 void WebApkUpdateDataFetcher::OnDidGetInstallableData( 132 void WebApkUpdateDataFetcher::OnDidGetInstallableData(
128 const InstallableData& data) { 133 const InstallableData& data) {
(...skipping 14 matching lines...) Expand all
143 if (data.error_code != NO_ERROR_DETECTED || data.manifest.IsEmpty() || 148 if (data.error_code != NO_ERROR_DETECTED || data.manifest.IsEmpty() ||
144 web_manifest_url_ != data.manifest_url || 149 web_manifest_url_ != data.manifest_url ||
145 !AreWebManifestUrlsWebApkCompatible(data.manifest)) { 150 !AreWebManifestUrlsWebApkCompatible(data.manifest)) {
146 OnWebManifestNotWebApkCompatible(); 151 OnWebManifestNotWebApkCompatible();
147 return; 152 return;
148 } 153 }
149 154
150 info_.UpdateFromManifest(data.manifest); 155 info_.UpdateFromManifest(data.manifest);
151 info_.manifest_url = data.manifest_url; 156 info_.manifest_url = data.manifest_url;
152 info_.best_primary_icon_url = data.primary_icon_url; 157 info_.best_primary_icon_url = data.primary_icon_url;
153 best_primary_icon_ = *data.primary_icon; 158 primary_icon_ = *data.primary_icon;
159
160 if (data.badge_icon && !data.badge_icon->drawsNothing()) {
161 info_.best_badge_icon_url = data.badge_icon_url;
162 badge_icon_ = *data.badge_icon;
163 }
154 164
155 Profile* profile = 165 Profile* profile =
156 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 166 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
157 167
158 WebApkIconHasher::DownloadAndComputeMurmur2Hash( 168 WebApkIconHasher::DownloadAndComputeMurmur2Hash(
159 profile->GetRequestContext(), data.primary_icon_url, 169 profile->GetRequestContext(), info_.best_primary_icon_url,
160 base::Bind(&WebApkUpdateDataFetcher::OnGotIconMurmur2Hash, 170 base::Bind(&WebApkUpdateDataFetcher::OnGotPrimaryIconMurmur2Hash,
161 weak_ptr_factory_.GetWeakPtr())); 171 weak_ptr_factory_.GetWeakPtr()));
162 } 172 }
163 173
164 void WebApkUpdateDataFetcher::OnGotIconMurmur2Hash( 174 void WebApkUpdateDataFetcher::OnGotPrimaryIconMurmur2Hash(
165 const std::string& best_primary_icon_murmur2_hash) { 175 const std::string& primary_icon_murmur2_hash) {
166 if (best_primary_icon_murmur2_hash.empty()) { 176 if (primary_icon_murmur2_hash.empty()) {
167 OnWebManifestNotWebApkCompatible(); 177 OnWebManifestNotWebApkCompatible();
168 return; 178 return;
169 } 179 }
170 180
171 OnDataAvailable(info_, best_primary_icon_murmur2_hash, best_primary_icon_); 181 if (!info_.best_badge_icon_url.is_empty() &&
182 info_.best_badge_icon_url != info_.best_primary_icon_url) {
183 Profile* profile =
184 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
185
186 WebApkIconHasher::DownloadAndComputeMurmur2Hash(
187 profile->GetRequestContext(), info_.best_badge_icon_url,
188 base::Bind(&WebApkUpdateDataFetcher::OnDataAvailable,
189 weak_ptr_factory_.GetWeakPtr(), primary_icon_murmur2_hash,
190 true));
191 } else {
192 OnDataAvailable(primary_icon_murmur2_hash, false, "");
193 }
172 } 194 }
173 195
174 void WebApkUpdateDataFetcher::OnDataAvailable( 196 void WebApkUpdateDataFetcher::OnDataAvailable(
175 const ShortcutInfo& info, 197 const std::string& primary_icon_murmur2_hash,
176 const std::string& best_primary_icon_murmur2_hash, 198 bool did_fetch_badge_icon,
177 const SkBitmap& best_primary_icon) { 199 const std::string& badge_icon_murmur2_hash) {
200 if (did_fetch_badge_icon && badge_icon_murmur2_hash.empty()) {
201 OnWebManifestNotWebApkCompatible();
202 return;
203 }
204
178 JNIEnv* env = base::android::AttachCurrentThread(); 205 JNIEnv* env = base::android::AttachCurrentThread();
179 206
180 ScopedJavaLocalRef<jstring> java_url = 207 ScopedJavaLocalRef<jstring> java_url =
181 base::android::ConvertUTF8ToJavaString(env, info.url.spec()); 208 base::android::ConvertUTF8ToJavaString(env, info_.url.spec());
182 ScopedJavaLocalRef<jstring> java_scope = 209 ScopedJavaLocalRef<jstring> java_scope =
183 base::android::ConvertUTF8ToJavaString(env, info.scope.spec()); 210 base::android::ConvertUTF8ToJavaString(env, info_.scope.spec());
184 ScopedJavaLocalRef<jstring> java_name = 211 ScopedJavaLocalRef<jstring> java_name =
185 base::android::ConvertUTF16ToJavaString(env, info.name); 212 base::android::ConvertUTF16ToJavaString(env, info_.name);
186 ScopedJavaLocalRef<jstring> java_short_name = 213 ScopedJavaLocalRef<jstring> java_short_name =
187 base::android::ConvertUTF16ToJavaString(env, info.short_name); 214 base::android::ConvertUTF16ToJavaString(env, info_.short_name);
188 ScopedJavaLocalRef<jstring> java_best_primary_icon_url = 215 ScopedJavaLocalRef<jstring> java_primary_icon_url =
216 base::android::ConvertUTF8ToJavaString(
217 env, info_.best_primary_icon_url.spec());
218 ScopedJavaLocalRef<jstring> java_primary_icon_murmur2_hash =
189 base::android::ConvertUTF8ToJavaString(env, 219 base::android::ConvertUTF8ToJavaString(env,
190 info.best_primary_icon_url.spec()); 220 primary_icon_murmur2_hash);
191 ScopedJavaLocalRef<jstring> java_best_primary_icon_murmur2_hash = 221 ScopedJavaLocalRef<jobject> java_primary_icon =
222 gfx::ConvertToJavaBitmap(&primary_icon_);
223 ScopedJavaLocalRef<jstring> java_badge_icon_url =
192 base::android::ConvertUTF8ToJavaString(env, 224 base::android::ConvertUTF8ToJavaString(env,
193 best_primary_icon_murmur2_hash); 225 info_.best_badge_icon_url.spec());
194 ScopedJavaLocalRef<jobject> java_best_primary_icon = 226 ScopedJavaLocalRef<jstring> java_badge_icon_murmur2_hash =
195 gfx::ConvertToJavaBitmap(&best_primary_icon); 227 base::android::ConvertUTF8ToJavaString(env,
196 228 badge_icon_murmur2_hash);
229 ScopedJavaLocalRef<jobject> java_badge_icon;
230 if (!badge_icon_.drawsNothing())
231 java_badge_icon = gfx::ConvertToJavaBitmap(&badge_icon_);
197 ScopedJavaLocalRef<jobjectArray> java_icon_urls = 232 ScopedJavaLocalRef<jobjectArray> java_icon_urls =
198 base::android::ToJavaArrayOfStrings(env, info.icon_urls); 233 base::android::ToJavaArrayOfStrings(env, info_.icon_urls);
199 234
200 Java_WebApkUpdateDataFetcher_onDataAvailable( 235 Java_WebApkUpdateDataFetcher_onDataAvailable(
201 env, java_ref_, java_url, java_scope, java_name, java_short_name, 236 env, java_ref_, java_url, java_scope, java_name, java_short_name,
202 java_best_primary_icon_url, java_best_primary_icon_murmur2_hash, 237 java_primary_icon_url, java_primary_icon_murmur2_hash,
203 java_best_primary_icon, java_icon_urls, info.display, info.orientation, 238 java_primary_icon, java_badge_icon_url, java_badge_icon_murmur2_hash,
204 info.theme_color, info.background_color); 239 java_badge_icon, java_icon_urls, info_.display, info_.orientation,
240 info_.theme_color, info_.background_color);
205 } 241 }
206 242
207 void WebApkUpdateDataFetcher::OnWebManifestNotWebApkCompatible() { 243 void WebApkUpdateDataFetcher::OnWebManifestNotWebApkCompatible() {
208 if (!is_initial_fetch_) 244 if (!is_initial_fetch_)
209 return; 245 return;
210 246
211 Java_WebApkUpdateDataFetcher_onWebManifestForInitialUrlNotWebApkCompatible( 247 Java_WebApkUpdateDataFetcher_onWebManifestForInitialUrlNotWebApkCompatible(
212 base::android::AttachCurrentThread(), java_ref_); 248 base::android::AttachCurrentThread(), java_ref_);
213 } 249 }
OLDNEW
« no previous file with comments | « chrome/browser/android/webapk/webapk_update_data_fetcher.h ('k') | chrome/browser/android/webapk/webapk_update_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698