Commit 0b7f3dfb authored by Asami Doi's avatar Asami Doi Committed by Commit Bot

Integrate offline capability check into installable manager with a flag.

This CL adds a feature flag for the offline capability check that
checks if a website is installable. Browser tests relating to the check
are updated to use parameterized tests depending on the feature flag.

Bug: 965802
Change-Id: I3678383d62c3fad084d7c7a804755bc97de9b40d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2203571
Auto-Submit: Asami Doi <asamidoi@chromium.org>
Reviewed-by: default avatarMakoto Shimazu <shimazu@chromium.org>
Reviewed-by: default avatarDaniel Murphy <dmurph@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Commit-Queue: Asami Doi <asamidoi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#772544}
parent e8509de5
......@@ -15,6 +15,7 @@
#include "build/build_config.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ssl/security_state_tab_helper.h"
#include "chrome/common/chrome_features.h"
#include "components/security_state/core/security_state.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
......@@ -684,7 +685,15 @@ void InstallableManager::OnDidCheckHasServiceWorker(
switch (capability) {
case content::ServiceWorkerCapability::SERVICE_WORKER_WITH_FETCH_HANDLER:
worker_->has_worker = true;
if (base::FeatureList::IsEnabled(features::kCheckOfflineCapability)) {
service_worker_context_->CheckOfflineCapability(
manifest().scope,
base::BindOnce(&InstallableManager::OnDidCheckOfflineCapability,
weak_factory_.GetWeakPtr()));
return;
} else {
worker_->has_worker = true;
}
break;
case content::ServiceWorkerCapability::SERVICE_WORKER_NO_FETCH_HANDLER:
worker_->has_worker = false;
......@@ -710,6 +719,22 @@ void InstallableManager::OnDidCheckHasServiceWorker(
WorkOnTask();
}
void InstallableManager::OnDidCheckOfflineCapability(
content::OfflineCapability capability) {
switch (capability) {
case content::OfflineCapability::kSupported:
worker_->has_worker = true;
break;
case content::OfflineCapability::kUnsupported:
worker_->has_worker = false;
worker_->error = NOT_OFFLINE_CAPABLE;
break;
}
worker_->fetched = true;
WorkOnTask();
}
void InstallableManager::CheckAndFetchBestIcon(int ideal_icon_size_in_px,
int minimum_icon_size_in_px,
const IconPurpose purpose,
......
......@@ -80,6 +80,7 @@ class InstallableManager
friend class content::WebContentsUserData<InstallableManager>;
friend class AddToHomescreenDataFetcherTest;
friend class InstallableManagerBrowserTest;
friend class InstallableManagerOfflineCapabilityBrowserTest;
friend class InstallableManagerUnitTest;
friend class TestInstallableManager;
FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest,
......@@ -92,6 +93,10 @@ class InstallableManager
CheckLazyServiceWorkerNoFetchHandlerFails);
FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest,
ManifestUrlChangeFlushesState);
FRIEND_TEST_ALL_PREFIXES(InstallableManagerOfflineCapabilityBrowserTest,
CheckLazyServiceWorkerPassesWhenWaiting);
FRIEND_TEST_ALL_PREFIXES(InstallableManagerOfflineCapabilityBrowserTest,
CheckWebapp);
using IconPurpose = blink::Manifest::ImageResource::Purpose;
......@@ -206,6 +211,7 @@ class InstallableManager
bool prefer_maskable_icon);
void CheckServiceWorker();
void OnDidCheckHasServiceWorker(content::ServiceWorkerCapability capability);
void OnDidCheckOfflineCapability(content::OfflineCapability capability);
void CheckAndFetchBestIcon(int ideal_icon_size_in_px,
int minimum_icon_size_in_px,
......
......@@ -60,11 +60,13 @@ class InstallableTaskQueue {
private:
friend class InstallableManagerBrowserTest;
friend class InstallableManagerOfflineCapabilityBrowserTest;
FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest,
CheckLazyServiceWorkerPassesWhenWaiting);
FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest,
CheckLazyServiceWorkerNoFetchHandlerFails);
FRIEND_TEST_ALL_PREFIXES(InstallableManagerOfflineCapabilityBrowserTest,
CheckLazyServiceWorkerPassesWhenWaiting);
// The list of <params, callback> pairs that have come from a call to
// InstallableManager::GetData.
......
......@@ -113,6 +113,12 @@ const base::Feature kCertDualVerificationTrialFeature{
const base::Feature kChangePictureVideoMode{"ChangePictureVideoMode",
base::FEATURE_ENABLED_BY_DEFAULT};
// Dispatches a dummy fetch event to a service worker to check the offline
// capability of the PWA site before promoting installation. See
// https://crbug.com/965802 for more details.
const base::Feature kCheckOfflineCapability {
"CheckOfflineCapability", base::FEATURE_DISABLED_BY_DEFAULT};
#if defined(OS_CHROMEOS)
// Enables passing additional user authentication in requests to DMServer
// (policy fetch, status report upload).
......
......@@ -74,6 +74,9 @@ extern const base::Feature kCertDualVerificationTrialFeature;
COMPONENT_EXPORT(CHROME_FEATURES)
extern const base::Feature kChangePictureVideoMode;
COMPONENT_EXPORT(CHROME_FEATURES)
extern const base::Feature kCheckOfflineCapability;
#if defined(OS_CHROMEOS)
COMPONENT_EXPORT(CHROME_FEATURES)
extern const base::Feature kDMServerOAuthForChildUser;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment