blob: 6f35100f10d3dc4dab08f46ff6e432bdfd03fa7a [file] [log] [blame]
// Copyright 2020 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_PERMISSIONS_CHROME_PERMISSIONS_CLIENT_H_
#define CHROME_BROWSER_PERMISSIONS_CHROME_PERMISSIONS_CLIENT_H_
#include "base/no_destructor.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/ui/browser_navigator_params.h"
#include "components/permissions/features.h"
#include "components/permissions/permission_hats_trigger_helper.h"
#include "components/permissions/permission_request_enums.h"
#include "components/permissions/permission_uma_util.h"
#include "components/permissions/permissions_client.h"
class ChromePermissionsClient : public permissions::PermissionsClient {
public:
ChromePermissionsClient(const ChromePermissionsClient&) = delete;
ChromePermissionsClient& operator=(const ChromePermissionsClient&) = delete;
static ChromePermissionsClient* GetInstance();
// PermissionsClient:
HostContentSettingsMap* GetSettingsMap(
content::BrowserContext* browser_context) override;
scoped_refptr<content_settings::CookieSettings> GetCookieSettings(
content::BrowserContext* browser_context) override;
privacy_sandbox::TrackingProtectionSettings* GetTrackingProtectionSettings(
content::BrowserContext* browser_context) override;
bool IsSubresourceFilterActivated(content::BrowserContext* browser_context,
const GURL& url) override;
permissions::OriginKeyedPermissionActionService*
GetOriginKeyedPermissionActionService(
content::BrowserContext* browser_context) override;
permissions::PermissionActionsHistory* GetPermissionActionsHistory(
content::BrowserContext* browser_context) override;
permissions::PermissionDecisionAutoBlocker* GetPermissionDecisionAutoBlocker(
content::BrowserContext* browser_context) override;
permissions::ObjectPermissionContextBase* GetChooserContext(
content::BrowserContext* browser_context,
ContentSettingsType type) override;
double GetSiteEngagementScore(content::BrowserContext* browser_context,
const GURL& origin) override;
void AreSitesImportant(
content::BrowserContext* browser_context,
std::vector<std::pair<url::Origin, bool>>* urls) override;
bool IsCookieDeletionDisabled(content::BrowserContext* browser_context,
const GURL& origin) override;
void GetUkmSourceId(ContentSettingsType permission_type,
content::BrowserContext* browser_context,
content::WebContents* web_contents,
const GURL& requesting_origin,
GetUkmSourceIdCallback callback) override;
permissions::IconId GetOverrideIconId(
permissions::RequestType request_type) override;
std::vector<std::unique_ptr<permissions::PermissionUiSelector>>
CreatePermissionUiSelectors(
content::BrowserContext* browser_context) override;
void TriggerPromptHatsSurveyIfEnabled(
content::WebContents* web_contents,
permissions::RequestType request_type,
std::optional<permissions::PermissionAction> action,
permissions::PermissionPromptDisposition prompt_disposition,
permissions::PermissionPromptDispositionReason prompt_disposition_reason,
permissions::PermissionRequestGestureType gesture_type,
std::optional<base::TimeDelta> prompt_display_duration,
bool is_post_prompt,
const GURL& gurl,
std::optional<
permissions::feature_params::PermissionElementPromptPosition>
pepc_prompt_position,
ContentSetting initial_permission_status,
base::OnceCallback<void()> hats_shown_callback,
std::optional<
permissions::PermissionHatsTriggerHelper::PreviewParametersForHats>
preview_parameters) override;
#if !BUILDFLAG(IS_ANDROID)
permissions::PermissionIgnoredReason DetermineIgnoreReason(
content::WebContents* web_contents) override;
#endif
void OnPromptResolved(
const permissions::PermissionRequest* request,
permissions::PermissionAction action,
permissions::PermissionPromptDisposition prompt_disposition,
permissions::PermissionPromptDispositionReason prompt_disposition_reason,
std::optional<QuietUiReason> quiet_ui_reason,
base::TimeDelta prompt_display_duration,
std::optional<
permissions::feature_params::PermissionElementPromptPosition>
pepc_prompt_position,
ContentSetting initial_permission_status,
content::WebContents* web_contents) override;
std::optional<bool> HadThreeConsecutiveNotificationPermissionDenies(
content::BrowserContext* browser_context) override;
std::optional<bool> HasPreviouslyAutoRevokedPermission(
content::BrowserContext* browser_context,
const GURL& origin,
ContentSettingsType permission) override;
std::optional<url::Origin> GetAutoApprovalOrigin(
content::BrowserContext* browser_context) override;
std::optional<permissions::PermissionAction> GetAutoApprovalStatus(
content::BrowserContext* browser_context,
const GURL& origin) override;
bool CanBypassEmbeddingOriginCheck(const GURL& requesting_origin,
const GURL& embedding_origin) override;
std::optional<GURL> OverrideCanonicalOrigin(
const GURL& requesting_origin,
const GURL& embedding_origin) override;
// Checks if `requesting_origin` and `embedding_origin` are the new tab page
// origins.
bool DoURLsMatchNewTabPage(const GURL& requesting_origin,
const GURL& embedding_origin) override;
#if BUILDFLAG(IS_ANDROID)
bool IsDseOrigin(content::BrowserContext* browser_context,
const url::Origin& origin) override;
std::unique_ptr<PermissionMessageDelegate> MaybeCreateMessageUI(
content::WebContents* web_contents,
ContentSettingsType type,
base::WeakPtr<permissions::PermissionPromptAndroid> prompt) override;
void RepromptForAndroidPermissions(
content::WebContents* web_contents,
const std::vector<ContentSettingsType>& content_settings_types,
const std::vector<ContentSettingsType>& filtered_content_settings_types,
const std::vector<std::string>& required_permissions,
const std::vector<std::string>& optional_permissions,
PermissionsUpdatedCallback callback) override;
int MapToJavaDrawableId(int resource_id) override;
favicon::FaviconService* GetFaviconService(
content::BrowserContext* browser_context) override;
const std::u16string GetClientApplicationName() const override;
#else
std::unique_ptr<permissions::PermissionPrompt> CreatePrompt(
content::WebContents* web_contents,
permissions::PermissionPrompt::Delegate* delegate) override;
#endif
bool HasDevicePermission(ContentSettingsType type) const override;
bool CanRequestDevicePermission(ContentSettingsType type) const override;
bool IsPermissionBlockedByDevicePolicy(
content::WebContents* web_contents,
ContentSetting setting,
const content_settings::SettingInfo& info,
ContentSettingsType type) const override;
bool IsPermissionAllowedByDevicePolicy(
content::WebContents* web_contents,
ContentSetting setting,
const content_settings::SettingInfo& info,
ContentSettingsType type) const override;
bool IsSystemDenied(ContentSettingsType type) const override;
bool CanPromptSystemPermission(ContentSettingsType type) const override;
private:
friend base::NoDestructor<ChromePermissionsClient>;
ChromePermissionsClient() = default;
};
#endif // CHROME_BROWSER_PERMISSIONS_CHROME_PERMISSIONS_CLIENT_H_