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_installer.h" | 5 #include "chrome/browser/android/webapk/webapk_installer.h" |
6 | 6 |
7 #include "base/android/build_info.h" | 7 #include "base/android/build_info.h" |
8 #include "base/android/jni_android.h" | 8 #include "base/android/jni_android.h" |
9 #include "base/android/jni_string.h" | 9 #include "base/android/jni_string.h" |
10 #include "base/android/path_utils.h" | 10 #include "base/android/path_utils.h" |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 task_type_ = INSTALL; | 373 task_type_ = INSTALL; |
374 | 374 |
375 // We need to take the hash of the bitmap at the icon URL prior to any | 375 // We need to take the hash of the bitmap at the icon URL prior to any |
376 // transformations being applied to the bitmap (such as encoding/decoding | 376 // transformations being applied to the bitmap (such as encoding/decoding |
377 // the bitmap). The icon hash is used to determine whether the icon that | 377 // the bitmap). The icon hash is used to determine whether the icon that |
378 // the user sees matches the icon of a WebAPK that the WebAPK server | 378 // the user sees matches the icon of a WebAPK that the WebAPK server |
379 // generated for another user. (The icon can be dynamically generated.) | 379 // generated for another user. (The icon can be dynamically generated.) |
380 // | 380 // |
381 // We redownload the icon in order to take the Murmur2 hash. The redownload | 381 // We redownload the icon in order to take the Murmur2 hash. The redownload |
382 // should be fast because the icon should be in the HTTP cache. | 382 // should be fast because the icon should be in the HTTP cache. |
383 DownloadAppIconAndComputeMurmur2Hash(); | 383 WebApkIconHasher::DownloadAndComputeMurmur2Hash( |
| 384 request_context_getter_, shortcut_info_.best_primary_icon_url, |
| 385 base::Bind(&WebApkInstaller::OnGotIconMurmur2Hash, |
| 386 weak_ptr_factory_.GetWeakPtr())); |
384 } | 387 } |
385 | 388 |
386 void WebApkInstaller::UpdateAsync( | 389 void WebApkInstaller::UpdateAsync( |
387 const std::string& webapk_package, | 390 const std::string& webapk_package, |
388 int webapk_version, | 391 int webapk_version, |
389 const std::map<std::string, std::string>& icon_url_to_murmur2_hash, | 392 const std::map<std::string, std::string>& icon_url_to_murmur2_hash, |
390 bool is_manifest_stale, | 393 bool is_manifest_stale, |
391 const FinishCallback& finish_callback) { | 394 const FinishCallback& finish_callback) { |
392 webapk_package_ = webapk_package; | 395 webapk_package_ = webapk_package; |
393 webapk_version_ = webapk_version; | 396 webapk_version_ = webapk_version; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 int version = 1; | 445 int version = 1; |
443 base::StringToInt(response->version(), &version); | 446 base::StringToInt(response->version(), &version); |
444 InstallOrUpdateWebApkFromGooglePlay(response->package_name(), version, | 447 InstallOrUpdateWebApkFromGooglePlay(response->package_name(), version, |
445 response->token()); | 448 response->token()); |
446 return; | 449 return; |
447 } | 450 } |
448 | 451 |
449 OnGotWebApkDownloadUrl(signed_download_url, response->package_name()); | 452 OnGotWebApkDownloadUrl(signed_download_url, response->package_name()); |
450 } | 453 } |
451 | 454 |
452 void WebApkInstaller::DownloadAppIconAndComputeMurmur2Hash() { | |
453 icon_hasher_.reset(new WebApkIconHasher( | |
454 request_context_getter_, shortcut_info_.best_primary_icon_url, | |
455 base::Bind(&WebApkInstaller::OnGotIconMurmur2Hash, | |
456 weak_ptr_factory_.GetWeakPtr()))); | |
457 icon_hasher_->DownloadAndComputeMurmur2Hash(); | |
458 } | |
459 | |
460 void WebApkInstaller::OnGotIconMurmur2Hash( | 455 void WebApkInstaller::OnGotIconMurmur2Hash( |
461 const std::string& icon_murmur2_hash) { | 456 const std::string& icon_murmur2_hash) { |
462 icon_hasher_.reset(); | |
463 | |
464 // An empty hash indicates that |icon_hasher_| encountered an error. | 457 // An empty hash indicates that |icon_hasher_| encountered an error. |
465 if (icon_murmur2_hash.empty()) { | 458 if (icon_murmur2_hash.empty()) { |
466 OnResult(WebApkInstallResult::FAILURE); | 459 OnResult(WebApkInstallResult::FAILURE); |
467 return; | 460 return; |
468 } | 461 } |
469 | 462 |
470 std::map<std::string, std::string> icon_url_to_murmur2_hash; | 463 std::map<std::string, std::string> icon_url_to_murmur2_hash; |
471 for (const std::string& icon_url : shortcut_info_.icon_urls) { | 464 for (const std::string& icon_url : shortcut_info_.icon_urls) { |
472 if (icon_url != shortcut_info_.best_primary_icon_url.spec()) | 465 if (icon_url != shortcut_info_.best_primary_icon_url.spec()) |
473 icon_url_to_murmur2_hash[icon_url] = ""; | 466 icon_url_to_murmur2_hash[icon_url] = ""; |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
600 base::android::ScopedJavaLocalRef<jstring> java_file_path = | 593 base::android::ScopedJavaLocalRef<jstring> java_file_path = |
601 base::android::ConvertUTF8ToJavaString(env, file_path.value()); | 594 base::android::ConvertUTF8ToJavaString(env, file_path.value()); |
602 if (task_type_ == INSTALL) { | 595 if (task_type_ == INSTALL) { |
603 base::android::ScopedJavaLocalRef<jstring> java_package_name = | 596 base::android::ScopedJavaLocalRef<jstring> java_package_name = |
604 base::android::ConvertUTF8ToJavaString(env, webapk_package_); | 597 base::android::ConvertUTF8ToJavaString(env, webapk_package_); |
605 InstallDownloadedWebApk(env, java_file_path, java_package_name); | 598 InstallDownloadedWebApk(env, java_file_path, java_package_name); |
606 } else if (task_type_ == UPDATE) { | 599 } else if (task_type_ == UPDATE) { |
607 UpdateUsingDownloadedWebApk(env, java_file_path); | 600 UpdateUsingDownloadedWebApk(env, java_file_path); |
608 } | 601 } |
609 } | 602 } |
OLD | NEW |