blob: aa65fbc46cde4794e7ee76d9e7e9e9763769c605 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_WEBAPPS_WEBAPPS_CLIENT_DESKTOP_H_
#define CHROME_BROWSER_WEBAPPS_WEBAPPS_CLIENT_DESKTOP_H_
#include "base/no_destructor.h"
#include "build/build_config.h"
#include "chrome/browser/webapps/chrome_webapps_client.h"
#if BUILDFLAG(IS_ANDROID)
#error "Desktop implementation should not be included in Android builds."
#endif
namespace webapps {
class WebappsClientDesktop : public ChromeWebappsClient {
public:
WebappsClientDesktop(const WebappsClientDesktop&) = delete;
WebappsClientDesktop& operator=(const WebappsClientDesktop&) = delete;
// Creates the singleton instance accessible from WebappsClient::Get().
static void CreateSingleton();
// WebappsClient:
WebappInstallSource GetInstallSource(content::WebContents* web_contents,
InstallTrigger trigger) override;
AppBannerManager* GetAppBannerManager(
content::WebContents* web_contents) override;
// Allows installation if there is no app controlling the start_url. If there
// is, will still allow installation if:
// - The manifest_id matches the existing installation, and the existing
// installation has the user display mode as kBrowser. (this allows us to
// upgrade to a standalone experience through a reinstall).
// - The controlling app is a DIY app.
void DoesNewWebAppConflictWithExistingInstallation(
content::BrowserContext* browser_context,
const GURL& start_url,
const ManifestId& manifest_id,
WebAppInstallationConflictCallback callback) const override;
bool IsInAppBrowsingContext(
content::WebContents* web_contents) const override;
bool IsAppPartiallyInstalledForSiteUrl(
content::BrowserContext* browsing_context,
const GURL& site_url) const override;
bool IsAppFullyInstalledForSiteUrl(content::BrowserContext* browsing_context,
const GURL& site_url) const override;
bool IsUrlControlledBySeenManifest(content::BrowserContext* browsing_context,
const GURL& site_url) const override;
void OnManifestSeen(content::BrowserContext* browsing_context,
const blink::mojom::Manifest& manifest) const override;
void SaveInstallationIgnoredForMl(content::BrowserContext* browsing_context,
const GURL& manifest_id) const override;
void SaveInstallationDismissedForMl(content::BrowserContext* browsing_context,
const GURL& manifest_id) const override;
void SaveInstallationAcceptedForMl(content::BrowserContext* browsing_context,
const GURL& manifest_id) const override;
bool IsMlPromotionBlockedByHistoryGuardrail(
content::BrowserContext* browsing_context,
const GURL& manifest_id) const override;
segmentation_platform::SegmentationPlatformService*
GetSegmentationPlatformService(
content::BrowserContext* browsing_context) const override;
std::optional<webapps::AppId> GetAppIdForWebContents(
content::WebContents* web_contents) override;
private:
friend base::NoDestructor<WebappsClientDesktop>;
WebappsClientDesktop() = default;
raw_ptr<segmentation_platform::SegmentationPlatformService>
segmentation_platform_service_for_testing_;
};
} // namespace webapps
#endif // CHROME_BROWSER_WEBAPPS_WEBAPPS_CLIENT_DESKTOP_H_