Chromium Code Reviews| Index: chrome/browser/android/webapk/webapk_installer.cc |
| diff --git a/chrome/browser/android/webapk/webapk_installer.cc b/chrome/browser/android/webapk/webapk_installer.cc |
| index 348c336ccc867c6c2cc8f7b7523249ddcd72029f..75bd6b3ec192dae1259b8cba3121ea69f14702c2 100644 |
| --- a/chrome/browser/android/webapk/webapk_installer.cc |
| +++ b/chrome/browser/android/webapk/webapk_installer.cc |
| @@ -110,7 +110,9 @@ std::string getCurrentAbi() { |
| std::unique_ptr<webapk::WebApk> BuildWebApkProtoInBackground( |
| const ShortcutInfo& shortcut_info, |
| const SkBitmap& shortcut_icon, |
| - const std::string& shortcut_icon_murmur2_hash) { |
| + const std::string& shortcut_icon_murmur2_hash, |
| + bool stale_manifest, |
| + const std::vector<std::string>& icon_hashs) { |
| DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); |
| std::unique_ptr<webapk::WebApk> webapk(new webapk::WebApk); |
| @@ -119,11 +121,7 @@ std::unique_ptr<webapk::WebApk> BuildWebApkProtoInBackground( |
| base::android::BuildInfo::GetInstance()->package_name()); |
| webapk->set_requester_application_version(version_info::GetVersionNumber()); |
| webapk->set_android_abi(getCurrentAbi()); |
| - |
| - // TODO(hanxi): crbug.com/665078. Add a flag in WebAPK's proto to indicate |
| - // that the Web Manifest data in the proto might be stale. |
| - if (shortcut_icon_murmur2_hash.empty()) |
| - return webapk; |
| + webapk->set_stale_manifest(stale_manifest); |
| webapk::WebAppManifest* web_app_manifest = webapk->mutable_manifest(); |
| web_app_manifest->set_name(base::UTF16ToUTF8(shortcut_info.name)); |
| @@ -149,11 +147,19 @@ std::unique_ptr<webapk::WebApk> BuildWebApkProtoInBackground( |
| gfx::PNGCodec::EncodeBGRASkBitmap(shortcut_icon, false, &png_bytes); |
| best_image->set_image_data(&png_bytes.front(), png_bytes.size()); |
|
pkotwicz
2016/12/06 17:53:37
This function should fail (return NULL) if the ico
Xi Han
2016/12/07 19:42:51
Pass in a map instead of two arrays, and this func
|
| - for (const std::string& icon_url : shortcut_info.icon_urls) { |
| - if (icon_url == shortcut_info.best_icon_url.spec()) |
| + bool add_icon_hash = stale_manifest && !icon_hashs.empty(); |
| + for (size_t i = 0; i < shortcut_info.icon_urls.size(); ++i) { |
| + if (shortcut_info.icon_urls[i] == shortcut_info.best_icon_url.spec()) |
| continue; |
| webapk::Image* image = web_app_manifest->add_icons(); |
| - image->set_src(icon_url); |
| + image->set_src(shortcut_info.icon_urls[i]); |
| + // crbug.com/669060. Sends all the icon hashs when the Web Manifest has been |
| + // removed and can't be fetched by the WebAPK server. The WebAPK server will |
| + // be able to create the same AndroidManifest.xml as before, therefore |
| + // prevents unnecessary request for update if the Web Manifest becomes |
| + // available again. |
| + if (add_icon_hash) |
| + image->set_hash(icon_hashs[i]); |
| } |
| return webapk; |
| @@ -253,10 +259,13 @@ void WebApkInstaller::UpdateAsync(content::BrowserContext* browser_context, |
| const FinishCallback& finish_callback, |
| const std::string& icon_murmur2_hash, |
| const std::string& webapk_package, |
| - int webapk_version) { |
| + int webapk_version, |
| + bool stale_manifest, |
| + const std::vector<std::string>& icon_hashs) { |
|
pkotwicz
2016/12/06 17:53:37
Nit: icon_hashs -> icon_hashes
Xi Han
2016/12/07 19:42:51
Done.
|
| UpdateAsyncWithURLRequestContextGetter( |
| Profile::FromBrowserContext(browser_context)->GetRequestContext(), |
| - finish_callback, icon_murmur2_hash, webapk_package, webapk_version); |
| + finish_callback, icon_murmur2_hash, webapk_package, webapk_version, |
| + stale_manifest, icon_hashs); |
| } |
| void WebApkInstaller::UpdateAsyncWithURLRequestContextGetter( |
| @@ -264,7 +273,9 @@ void WebApkInstaller::UpdateAsyncWithURLRequestContextGetter( |
| const FinishCallback& finish_callback, |
| const std::string& icon_murmur2_hash, |
| const std::string& webapk_package, |
| - int webapk_version) { |
| + int webapk_version, |
| + bool stale_manifest, |
| + const std::vector<std::string>& icon_hashs) { |
| request_context_getter_ = request_context_getter; |
| finish_callback_ = finish_callback; |
| shortcut_icon_murmur2_hash_ = icon_murmur2_hash; |
| @@ -274,8 +285,8 @@ void WebApkInstaller::UpdateAsyncWithURLRequestContextGetter( |
| base::PostTaskAndReplyWithResult( |
| GetBackgroundTaskRunner().get(), FROM_HERE, |
| - base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, |
| - shortcut_icon_, shortcut_icon_murmur2_hash_), |
| + base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, shortcut_icon_, |
| + shortcut_icon_murmur2_hash_, stale_manifest, icon_hashs), |
| base::Bind(&WebApkInstaller::SendUpdateWebApkRequest, |
| weak_ptr_factory_.GetWeakPtr())); |
| } |
| @@ -375,8 +386,9 @@ void WebApkInstaller::OnGotIconMurmur2Hash( |
| base::PostTaskAndReplyWithResult( |
| GetBackgroundTaskRunner().get(), FROM_HERE, |
| - base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, |
| - shortcut_icon_, shortcut_icon_murmur2_hash_), |
| + base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, shortcut_icon_, |
| + shortcut_icon_murmur2_hash_, false, |
| + std::vector<std::string>()), |
| base::Bind(&WebApkInstaller::SendCreateWebApkRequest, |
| weak_ptr_factory_.GetWeakPtr())); |
| } |