Chromium Code Reviews| 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_primary_icon_url, | |
|
pkotwicz
2017/06/07 21:22:23
Shouldn't this be |best_badge_icon_url|?
F
2017/06/08 20:01:13
Done.
| |
| 188 base::Bind(&WebApkUpdateDataFetcher::OnDataAvailable, | |
| 189 weak_ptr_factory_.GetWeakPtr(), info_, primary_icon_, | |
| 190 primary_icon_murmur2_hash, true, badge_icon_)); | |
| 191 } else { | |
| 192 OnDataAvailable(info_, primary_icon_, primary_icon_murmur2_hash, false, | |
| 193 badge_icon_, ""); | |
| 194 } | |
| 172 } | 195 } |
| 173 | 196 |
| 174 void WebApkUpdateDataFetcher::OnDataAvailable( | 197 void WebApkUpdateDataFetcher::OnDataAvailable( |
| 175 const ShortcutInfo& info, | 198 const ShortcutInfo& info, |
| 176 const std::string& best_primary_icon_murmur2_hash, | 199 const SkBitmap& primary_icon, |
| 177 const SkBitmap& best_primary_icon) { | 200 const std::string& primary_icon_murmur2_hash, |
| 201 bool did_fetch_badge_icon, | |
| 202 const SkBitmap& badge_icon, | |
| 203 const std::string& badge_icon_murmur2_hash) { | |
|
pkotwicz
2017/06/07 21:22:23
Can we use |info_|, |primary_icon_| and |badge_ico
F
2017/06/08 20:01:13
Done.
| |
| 204 if (did_fetch_badge_icon && badge_icon_murmur2_hash.empty()) { | |
| 205 OnWebManifestNotWebApkCompatible(); | |
| 206 return; | |
| 207 } | |
| 208 | |
| 178 JNIEnv* env = base::android::AttachCurrentThread(); | 209 JNIEnv* env = base::android::AttachCurrentThread(); |
| 179 | 210 |
| 180 ScopedJavaLocalRef<jstring> java_url = | 211 ScopedJavaLocalRef<jstring> java_url = |
| 181 base::android::ConvertUTF8ToJavaString(env, info.url.spec()); | 212 base::android::ConvertUTF8ToJavaString(env, info.url.spec()); |
| 182 ScopedJavaLocalRef<jstring> java_scope = | 213 ScopedJavaLocalRef<jstring> java_scope = |
| 183 base::android::ConvertUTF8ToJavaString(env, info.scope.spec()); | 214 base::android::ConvertUTF8ToJavaString(env, info.scope.spec()); |
| 184 ScopedJavaLocalRef<jstring> java_name = | 215 ScopedJavaLocalRef<jstring> java_name = |
| 185 base::android::ConvertUTF16ToJavaString(env, info.name); | 216 base::android::ConvertUTF16ToJavaString(env, info.name); |
| 186 ScopedJavaLocalRef<jstring> java_short_name = | 217 ScopedJavaLocalRef<jstring> java_short_name = |
| 187 base::android::ConvertUTF16ToJavaString(env, info.short_name); | 218 base::android::ConvertUTF16ToJavaString(env, info.short_name); |
| 188 ScopedJavaLocalRef<jstring> java_best_primary_icon_url = | 219 ScopedJavaLocalRef<jstring> java_primary_icon_url = |
| 189 base::android::ConvertUTF8ToJavaString(env, | 220 base::android::ConvertUTF8ToJavaString(env, |
| 190 info.best_primary_icon_url.spec()); | 221 info.best_primary_icon_url.spec()); |
| 191 ScopedJavaLocalRef<jstring> java_best_primary_icon_murmur2_hash = | 222 ScopedJavaLocalRef<jstring> java_primary_icon_murmur2_hash = |
| 192 base::android::ConvertUTF8ToJavaString(env, | 223 base::android::ConvertUTF8ToJavaString(env, |
| 193 best_primary_icon_murmur2_hash); | 224 primary_icon_murmur2_hash); |
| 194 ScopedJavaLocalRef<jobject> java_best_primary_icon = | 225 ScopedJavaLocalRef<jobject> java_primary_icon = |
| 195 gfx::ConvertToJavaBitmap(&best_primary_icon); | 226 gfx::ConvertToJavaBitmap(&primary_icon); |
| 196 | 227 ScopedJavaLocalRef<jstring> java_badge_icon_url = |
| 228 base::android::ConvertUTF8ToJavaString(env, | |
| 229 info.best_badge_icon_url.spec()); | |
| 230 ScopedJavaLocalRef<jstring> java_badge_icon_murmur2_hash = | |
| 231 base::android::ConvertUTF8ToJavaString(env, | |
| 232 badge_icon_murmur2_hash); | |
| 233 ScopedJavaLocalRef<jobject> java_badge_icon; | |
| 234 if (!badge_icon.drawsNothing()) | |
| 235 java_badge_icon = gfx::ConvertToJavaBitmap(&badge_icon); | |
| 197 ScopedJavaLocalRef<jobjectArray> java_icon_urls = | 236 ScopedJavaLocalRef<jobjectArray> java_icon_urls = |
| 198 base::android::ToJavaArrayOfStrings(env, info.icon_urls); | 237 base::android::ToJavaArrayOfStrings(env, info.icon_urls); |
| 199 | 238 |
| 200 Java_WebApkUpdateDataFetcher_onDataAvailable( | 239 Java_WebApkUpdateDataFetcher_onDataAvailable( |
| 201 env, java_ref_, java_url, java_scope, java_name, java_short_name, | 240 env, java_ref_, java_url, java_scope, java_name, java_short_name, |
| 202 java_best_primary_icon_url, java_best_primary_icon_murmur2_hash, | 241 java_primary_icon_url, java_primary_icon_murmur2_hash, |
| 203 java_best_primary_icon, java_icon_urls, info.display, info.orientation, | 242 java_primary_icon, java_badge_icon_url, java_badge_icon_murmur2_hash, |
| 243 java_badge_icon, java_icon_urls, info.display, info.orientation, | |
| 204 info.theme_color, info.background_color); | 244 info.theme_color, info.background_color); |
| 205 } | 245 } |
| 206 | 246 |
| 207 void WebApkUpdateDataFetcher::OnWebManifestNotWebApkCompatible() { | 247 void WebApkUpdateDataFetcher::OnWebManifestNotWebApkCompatible() { |
| 208 if (!is_initial_fetch_) | 248 if (!is_initial_fetch_) |
| 209 return; | 249 return; |
| 210 | 250 |
| 211 Java_WebApkUpdateDataFetcher_onWebManifestForInitialUrlNotWebApkCompatible( | 251 Java_WebApkUpdateDataFetcher_onWebManifestForInitialUrlNotWebApkCompatible( |
| 212 base::android::AttachCurrentThread(), java_ref_); | 252 base::android::AttachCurrentThread(), java_ref_); |
| 213 } | 253 } |
| OLD | NEW |