| Index: chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc
|
| diff --git a/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc b/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc
|
| index 41f846b3dd459183c4c582764fe1ee6fedb68d9a..e0bad9cbe464d582cd0454a272c7a7c18ef70983 100644
|
| --- a/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc
|
| +++ b/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc
|
| @@ -48,17 +48,25 @@ GURL GetShortcutUrl(content::BrowserContext* browser_context,
|
| return dom_distiller::url_utils::GetOriginalUrlFromDistillerUrl(actual_url);
|
| }
|
|
|
| -InstallableParams ParamsToPerformInstallableCheck(
|
| +InstallableParams ParamsToPerformManifestAndIconFetch(
|
| int ideal_icon_size_in_px,
|
| - int minimum_icon_size_in_px,
|
| - int badge_size_in_px,
|
| - bool check_webapk_compatibility) {
|
| + int minimum_icon_size_in_px) {
|
| InstallableParams params;
|
| params.ideal_primary_icon_size_in_px = ideal_icon_size_in_px;
|
| params.minimum_primary_icon_size_in_px = minimum_icon_size_in_px;
|
| - params.check_installable = check_webapk_compatibility;
|
| params.fetch_valid_primary_icon = true;
|
| + return params;
|
| +}
|
| +
|
| +InstallableParams ParamsToPerformInstallableCheck(
|
| + int ideal_icon_size_in_px,
|
| + int minimum_icon_size_in_px,
|
| + int badge_size_in_px,
|
| + bool check_webapk_compatibility) {
|
| + InstallableParams params = ParamsToPerformManifestAndIconFetch(
|
| + ideal_icon_size_in_px, minimum_icon_size_in_px);
|
| if (check_webapk_compatibility) {
|
| + params.check_installable = check_webapk_compatibility;
|
| params.ideal_badge_icon_size_in_px = badge_size_in_px;
|
| params.minimum_badge_icon_size_in_px = badge_size_in_px;
|
| params.fetch_valid_badge_icon = true;
|
| @@ -82,6 +90,7 @@ AddToHomescreenDataFetcher::AddToHomescreenDataFetcher(
|
| content::BrowserThread::GetBlockingPool()
|
| ->GetTaskRunnerWithShutdownBehavior(
|
| base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)),
|
| + installable_manager_(InstallableManager::FromWebContents(web_contents)),
|
| weak_observer_(observer),
|
| shortcut_info_(GetShortcutUrl(web_contents->GetBrowserContext(),
|
| web_contents->GetLastCommittedURL())),
|
| @@ -144,24 +153,16 @@ void AddToHomescreenDataFetcher::OnDidGetWebApplicationInfo(
|
| break;
|
| }
|
|
|
| - InstallableManager::CreateForWebContents(web_contents());
|
| - InstallableManager* manager =
|
| - InstallableManager::FromWebContents(web_contents());
|
| - DCHECK(manager);
|
| -
|
| // Kick off a timeout for downloading data. If we haven't finished within the
|
| // timeout, fall back to using a dynamically-generated launcher icon.
|
| data_timeout_timer_.Start(
|
| FROM_HERE, base::TimeDelta::FromMilliseconds(kDataTimeoutInMilliseconds),
|
| base::Bind(&AddToHomescreenDataFetcher::OnDataTimedout, this));
|
|
|
| - manager->GetData(
|
| - ParamsToPerformInstallableCheck(ideal_icon_size_in_px_,
|
| - minimum_icon_size_in_px_,
|
| - badge_size_in_px_,
|
| - check_webapk_compatibility_),
|
| - base::Bind(&AddToHomescreenDataFetcher::OnDidPerformInstallableCheck,
|
| - this));
|
| + installable_manager_->GetData(
|
| + ParamsToPerformManifestAndIconFetch(ideal_icon_size_in_px_,
|
| + minimum_icon_size_in_px_),
|
| + base::Bind(&AddToHomescreenDataFetcher::OnDidGetManifestAndIcon, this));
|
| }
|
|
|
| AddToHomescreenDataFetcher::~AddToHomescreenDataFetcher() {
|
| @@ -200,6 +201,25 @@ void AddToHomescreenDataFetcher::OnDataTimedout() {
|
| CreateLauncherIcon(SkBitmap());
|
| }
|
|
|
| +void AddToHomescreenDataFetcher::OnDidGetManifestAndIcon(
|
| + const InstallableData& data) {
|
| + if (!web_contents() || !weak_observer_ || is_installable_check_complete_)
|
| + return;
|
| +
|
| + if (!data.manifest.IsEmpty()) {
|
| + base::RecordAction(base::UserMetricsAction("webapps.AddShortcut.Manifest"));
|
| + shortcut_info_.UpdateFromManifest(data.manifest);
|
| + shortcut_info_.manifest_url = data.manifest_url;
|
| + }
|
| +
|
| + installable_manager_->GetData(
|
| + ParamsToPerformInstallableCheck(
|
| + ideal_icon_size_in_px_, minimum_icon_size_in_px_, badge_size_in_px_,
|
| + check_webapk_compatibility_),
|
| + base::Bind(&AddToHomescreenDataFetcher::OnDidPerformInstallableCheck,
|
| + this));
|
| +}
|
| +
|
| void AddToHomescreenDataFetcher::OnDidPerformInstallableCheck(
|
| const InstallableData& data) {
|
| data_timeout_timer_.Stop();
|
| @@ -215,26 +235,14 @@ void AddToHomescreenDataFetcher::OnDidPerformInstallableCheck(
|
| webapk_compatible = (data.error_code == NO_ERROR_DETECTED &&
|
| AreWebManifestUrlsWebApkCompatible(data.manifest));
|
| weak_observer_->OnDidDetermineWebApkCompatibility(webapk_compatible);
|
| -
|
| - if (webapk_compatible) {
|
| - // WebAPKs are wholly defined by the Web Manifest. Ignore the <meta> tag
|
| - // data received in OnDidGetWebApplicationInfo().
|
| - shortcut_info_ = ShortcutInfo(GURL());
|
| - }
|
| }
|
|
|
| - if (!data.manifest.IsEmpty()) {
|
| - base::RecordAction(base::UserMetricsAction("webapps.AddShortcut.Manifest"));
|
| - shortcut_info_.UpdateFromManifest(data.manifest);
|
| - shortcut_info_.manifest_url = data.manifest_url;
|
| -
|
| - if (webapk_compatible) {
|
| - shortcut_info_.UpdateSource(ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA);
|
| + if (webapk_compatible) {
|
| + shortcut_info_.UpdateSource(ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN_PWA);
|
|
|
| - if (data.badge_icon && !data.badge_icon->drawsNothing()) {
|
| - shortcut_info_.best_badge_icon_url = data.badge_icon_url;
|
| - badge_icon_ = *data.badge_icon;
|
| - }
|
| + if (data.badge_icon && !data.badge_icon->drawsNothing()) {
|
| + shortcut_info_.best_badge_icon_url = data.badge_icon_url;
|
| + badge_icon_ = *data.badge_icon;
|
| }
|
| }
|
|
|
|
|