| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_PERMISSIONS_PERMISSION_UTIL_H_ |
| #define CHROME_BROWSER_PERMISSIONS_PERMISSION_UTIL_H_ |
| |
| #include <string> |
| |
| #include "base/macros.h" |
| #include "chrome/browser/permissions/permission_request.h" |
| #include "components/content_settings/core/common/content_settings.h" |
| #include "components/content_settings/core/common/content_settings_types.h" |
| #include "url/gurl.h" |
| |
| class Profile; |
| |
| namespace content { |
| enum class PermissionType; |
| } // namespace content |
| |
| enum class PermissionSourceUI; |
| |
| // This enum backs a UMA histogram, so it must be treated as append-only. |
| enum class PermissionAction { |
| GRANTED = 0, |
| DENIED = 1, |
| DISMISSED = 2, |
| IGNORED = 3, |
| REVOKED = 4, |
| |
| // Always keep this at the end. |
| NUM, |
| }; |
| |
| // A utility class for permissions. |
| class PermissionUtil { |
| public: |
| // Returns the permission string for the given permission. |
| static std::string GetPermissionString(ContentSettingsType); |
| |
| // Returns the request type corresponding to a permission type. |
| static PermissionRequestType GetRequestType(ContentSettingsType permission); |
| |
| // Returns the gesture type corresponding to whether a permission request is |
| // made with or without a user gesture. |
| static PermissionRequestGestureType GetGestureType(bool user_gesture); |
| |
| // Limited conversion of ContentSettingsType to PermissionType. Returns true |
| // if the conversion was performed. |
| // TODO(timloh): Try to remove this function. Mainly we need to work out how |
| // to remove the usage in PermissionUmaUtil, which uses PermissionType as a |
| // histogram value to count permission request metrics. |
| static bool GetPermissionType(ContentSettingsType type, |
| content::PermissionType* out); |
| |
| // Checks whether the given ContentSettingsType is a permission. Use this |
| // to determine whether a specific ContentSettingsType is supported by the |
| // PermissionManager. |
| static bool IsPermission(ContentSettingsType type); |
| |
| // A scoped class that will check the current resolved content setting on |
| // construction and report a revocation metric accordingly if the revocation |
| // condition is met (from ALLOW to something else). |
| class ScopedRevocationReporter { |
| public: |
| ScopedRevocationReporter(Profile* profile, |
| const GURL& primary_url, |
| const GURL& secondary_url, |
| ContentSettingsType content_type, |
| PermissionSourceUI source_ui); |
| |
| ScopedRevocationReporter(Profile* profile, |
| const ContentSettingsPattern& primary_pattern, |
| const ContentSettingsPattern& secondary_pattern, |
| ContentSettingsType content_type, |
| PermissionSourceUI source_ui); |
| |
| ~ScopedRevocationReporter(); |
| |
| private: |
| Profile* profile_; |
| const GURL primary_url_; |
| const GURL secondary_url_; |
| ContentSettingsType content_type_; |
| PermissionSourceUI source_ui_; |
| bool is_initially_allowed_; |
| }; |
| |
| private: |
| DISALLOW_IMPLICIT_CONSTRUCTORS(PermissionUtil); |
| }; |
| |
| #endif // CHROME_BROWSER_PERMISSIONS_PERMISSION_UTIL_H_ |