Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(685)

Unified Diff: chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc

Issue 2050933002: Upstream: Add additional checks before creating a WebAPK after clicking "Add to Homescreen" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge branch 'create_webapk_requirements_enum_class' into create_webapk_requirements2 Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 0ffe0adf17e0b10b6f999a73923cb72753a5f130..fac3877a5f27f562d52451c4c4c24de4cec1f19f 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc
+++ b/chrome/browser/android/webapps/add_to_homescreen_data_fetcher.cc
@@ -6,21 +6,27 @@
#include "base/bind.h"
#include "base/callback.h"
+#include "base/command_line.h"
#include "base/location.h"
#include "base/strings/string16.h"
#include "base/task/cancelable_task_tracker.h"
#include "chrome/browser/android/offline_pages/offline_page_utils.h"
#include "chrome/browser/android/shortcut_helper.h"
+#include "chrome/browser/banners/app_banner_debug_log.h"
+#include "chrome/browser/banners/webapp_manifest_validator.h"
#include "chrome/browser/favicon/favicon_service_factory.h"
#include "chrome/browser/manifest/manifest_icon_downloader.h"
#include "chrome/browser/manifest/manifest_icon_selector.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/chrome_constants.h"
+#include "chrome/common/chrome_switches.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/web_application_info.h"
#include "components/dom_distiller/core/url_utils.h"
#include "components/favicon/core/favicon_service.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/service_worker_context.h"
+#include "content/public/browser/storage_partition.h"
#include "content/public/browser/user_metrics.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_observer.h"
@@ -55,6 +61,7 @@ AddToHomescreenDataFetcher::AddToHomescreenDataFetcher(
minimum_splash_image_size_in_dp_(minimum_splash_image_size_in_dp) {
DCHECK(minimum_icon_size_in_dp <= ideal_icon_size_in_dp);
DCHECK(minimum_splash_image_size_in_dp <= ideal_splash_image_size_in_dp);
+ shortcut_url_ = shortcut_info_.url;
// Send a message to the renderer to retrieve information about the page.
is_waiting_for_web_application_info_ = true;
@@ -117,6 +124,43 @@ void AddToHomescreenDataFetcher::OnDidGetManifest(
shortcut_info_.manifest_url = manifest_url;
}
+ if (!IsManifestWebApkCapable(manifest)) {
+ banners::OutputDeveloperMessageCode code =
+ banners::OutputDeveloperMessageCode::kNone;
+ if (banners::webapp_manifest_validator::IsWebappCapable(manifest, &code)) {
+ shortcut_info_.type = ShortcutInfo::Type::WEBAPP;
+ }
+ OnCheckIsWebApk(manifest, false);
+ return;
+ }
+
+ // Check to see if there is a single service worker controlling this page
+ // and the manifest's start url.
+ Profile* profile =
+ Profile::FromBrowserContext(web_contents()->GetBrowserContext());
+ content::StoragePartition* storage_partition =
+ content::BrowserContext::GetStoragePartition(
+ profile, web_contents()->GetSiteInstance());
+ DCHECK(storage_partition);
+ storage_partition->GetServiceWorkerContext()->CheckHasServiceWorker(
+ shortcut_url_, manifest.start_url,
+ base::Bind(&AddToHomescreenDataFetcher::OnDidCheckServiceWorkerForWebApk,
+ this, manifest));
+}
+
+void AddToHomescreenDataFetcher::OnDidCheckServiceWorkerForWebApk(
+ const content::Manifest& manifest,
+ bool has_service_worker) {
+ if (!web_contents() || !weak_observer_) return;
+ OnCheckIsWebApk(manifest, has_service_worker);
+}
+
+void AddToHomescreenDataFetcher::OnCheckIsWebApk(
+ const content::Manifest& manifest,
+ bool is_webapk) {
+ if (is_webapk)
+ shortcut_info_.type = ShortcutInfo::Type::WEBAPK;
+
GURL icon_src = ManifestIconSelector::FindBestMatchingIcon(
manifest.icons, ideal_icon_size_in_dp_, minimum_icon_size_in_dp_);
@@ -279,3 +323,13 @@ GURL AddToHomescreenDataFetcher::GetShortcutUrl(const GURL& actual_url) {
return original_url;
}
+
+bool AddToHomescreenDataFetcher::IsManifestWebApkCapable(
+ const content::Manifest& manifest) const {
+ banners::OutputDeveloperMessageCode code =
+ banners::OutputDeveloperMessageCode::kNone;
+ return banners::webapp_manifest_validator::IsManifestGoodForWebapp(manifest,
+ &code) &&
+ base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableWebApk);
+}
« no previous file with comments | « chrome/browser/android/webapps/add_to_homescreen_data_fetcher.h ('k') | chrome/browser/banners/app_banner_data_fetcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698