OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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(); | |
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
| |
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 } |
OLD | NEW |