123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- // Copyright (c) 2012 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 COMPONENTS_PAGE_INFO_PAGE_INFO_UI_H_
- #define COMPONENTS_PAGE_INFO_PAGE_INFO_UI_H_
- #include <memory>
- #include <string>
- #include <vector>
- #include "build/build_config.h"
- #include "components/content_settings/core/common/content_settings.h"
- #include "components/content_settings/core/common/content_settings_types.h"
- #include "components/page_info/page_info.h"
- #include "components/permissions/object_permission_context_base.h"
- #include "components/privacy_sandbox/canonical_topic.h"
- #include "components/safe_browsing/buildflags.h"
- #include "ui/base/models/image_model.h"
- #include "ui/gfx/native_widget_types.h"
- #if !BUILDFLAG(IS_ANDROID)
- #include "ui/gfx/image/image_skia.h"
- #endif
- class PageInfo;
- class PageInfoUiDelegate;
- namespace net {
- class X509Certificate;
- }
- // The class |PageInfoUI| specifies the platform independent
- // interface of the page info UI. The page info UI displays
- // information and controls for site specific data (local stored objects like
- // cookies), site specific permissions (location, popup, plugin, etc.
- // permissions) and site specific information (identity, connection status,
- // etc.).
- class PageInfoUI {
- public:
- enum class SecuritySummaryColor {
- RED,
- GREEN,
- };
- enum class SecurityDescriptionType {
- // The UI describes whether the connection is secure, e.g. secure
- // HTTPS, non-secure HTTP.
- CONNECTION,
- // The UI describes e.g. an internal (chrome://) page or extension page.
- INTERNAL,
- // The UI describes a Safe Browsing warning, e.g. site deceptive or contains
- // malware.
- SAFE_BROWSING,
- // The UI shows a Safety Tip.
- SAFETY_TIP,
- };
- struct SecurityDescription {
- // The text style for |summary| used to color it. This provides an
- // opinionated guide to the user on the overall security state of the site.
- SecuritySummaryColor summary_style;
- // A one-line summary of the security state.
- std::u16string summary;
- // A short paragraph with more details about the state, and how
- // the user should treat it.
- std::u16string details;
- // The category of the security description, used to determine which help
- // center article to link to.
- SecurityDescriptionType type;
- };
- // |CookieInfo| contains information about the cookies from a specific source.
- // A source can for example be a specific origin or an entire wildcard domain.
- // TODO(crbug.com/1346305): Remove after finishing cookies subpage
- // implementation.
- struct CookieInfo {
- CookieInfo();
- // The number of allowed cookies.
- int allowed;
- // The number of blocked cookies.
- int blocked;
- // Whether these cookies are from the current top-level origin as seen by
- // the user, or from third-party origins.
- bool is_first_party;
- };
- // |CookiesFPSInfo| contains information about a specific First-Party Set.
- struct CookiesFPSInfo {
- CookiesFPSInfo();
- ~CookiesFPSInfo();
- // The number of sites in the same FPS.
- int sites_accessing_data_count = -1;
- // The name of the owner of the FPS.
- std::u16string owner_name;
- };
- // |CookiesNewInfo| contains information about the sites that are allowed
- // to access cookies and fps cookies info for new UI.
- // TODO(crbug.com/1346305): Change the name to "CookieInfo" after finishing
- // cookies subpage implementation
- struct CookiesNewInfo {
- CookiesNewInfo();
- // The number of third-party sites blocked.
- int blocked_sites_count = -1;
- // The number of sites allowed to access cookies.
- int allowed_sites_count = -1;
- CookiesFPSInfo fps_info;
- };
- // |ChosenObjectInfo| contains information about a single |chooser_object| of
- // a chooser |type| that the current website has been granted access to.
- struct ChosenObjectInfo {
- ChosenObjectInfo(
- const PageInfo::ChooserUIInfo& ui_info,
- std::unique_ptr<permissions::ObjectPermissionContextBase::Object>
- chooser_object);
- ~ChosenObjectInfo();
- // |ui_info| for this chosen object type.
- const PageInfo::ChooserUIInfo& ui_info;
- // The opaque |chooser_object| representing the thing the user selected.
- std::unique_ptr<permissions::ObjectPermissionContextBase::Object>
- chooser_object;
- };
- // |IdentityInfo| contains information about the site's identity and
- // connection.
- struct IdentityInfo {
- IdentityInfo();
- ~IdentityInfo();
- // The site's identity: the certificate's Organization Name for sites with
- // Extended Validation certificates, or the URL's hostname for all other
- // sites.
- std::string site_identity;
- // Status of the site's identity.
- PageInfo::SiteIdentityStatus identity_status;
- // Site's Safe Browsing status.
- PageInfo::SafeBrowsingStatus safe_browsing_status;
- // Site's safety tip info. Only set if the feature is enabled to show the
- // Safety Tip UI.
- security_state::SafetyTipInfo safety_tip_info;
- // Textual description of the Safe Browsing status.
- std::u16string safe_browsing_details;
- #if BUILDFLAG(IS_ANDROID)
- // Textual description of the site's identity status that is displayed to
- // the user.
- std::string identity_status_description_android;
- #endif
- // The server certificate if a secure connection.
- scoped_refptr<net::X509Certificate> certificate;
- // Status of the site's connection.
- PageInfo::SiteConnectionStatus connection_status;
- // Textual description of the site's connection status that is displayed to
- // the user.
- std::string connection_status_description;
- // Set when the user has explicitly bypassed an SSL error for this host
- // and/or the user has explicitly bypassed an HTTP warning (from HTTPS-First
- // Mode) for this host. When `show_ssl_decision_revoke_button` is true, the
- // connection area of the page info UI will include an option for the user
- // to revoke their decision to bypass warnings for this host.
- bool show_ssl_decision_revoke_button;
- // Set when the user ignored the password reuse modal warning dialog. When
- // |show_change_password_buttons| is true, the page identity area of the
- // page info will include buttons to change corresponding password, and
- // to whitelist current site.
- bool show_change_password_buttons;
- };
- struct PageFeatureInfo {
- PageFeatureInfo();
- // True if VR content is being presented in a headset.
- bool is_vr_presentation_in_headset;
- };
- struct PermissionUIInfo {
- ContentSettingsType type;
- int string_id;
- int string_id_mid_sentence;
- };
- struct AdPersonalizationInfo {
- AdPersonalizationInfo();
- ~AdPersonalizationInfo();
- bool is_empty() const;
- bool has_joined_user_to_interest_group;
- std::vector<privacy_sandbox::CanonicalTopic> accessed_topics;
- };
- using CookieInfoList = std::vector<CookieInfo>;
- using PermissionInfoList = std::vector<PageInfo::PermissionInfo>;
- using ChosenObjectInfoList = std::vector<std::unique_ptr<ChosenObjectInfo>>;
- virtual ~PageInfoUI();
- // Returns the UI string for the given permission |type|.
- static std::u16string PermissionTypeToUIString(ContentSettingsType type);
- // Returns the UI string for the given permission |type| when used
- // mid-sentence.
- static std::u16string PermissionTypeToUIStringMidSentence(
- ContentSettingsType type);
- static base::span<const PermissionUIInfo>
- GetContentSettingsUIInfoForTesting();
- // Returns the UI string describing the action taken for a permission,
- // including why that action was taken. E.g. "Allowed by you",
- // "Blocked by default". If |setting| is default, specify the actual default
- // setting using |default_setting|.
- static std::u16string PermissionActionToUIString(
- PageInfoUiDelegate* delegate,
- ContentSettingsType type,
- ContentSetting setting,
- ContentSetting default_setting,
- content_settings::SettingSource source,
- bool is_one_time);
- static std::u16string PermissionStateToUIString(
- PageInfoUiDelegate* delegate,
- const PageInfo::PermissionInfo& permission);
- static std::u16string PermissionMainPageStateToUIString(
- PageInfoUiDelegate* delegate,
- const PageInfo::PermissionInfo& permission);
- static std::u16string PermissionManagedTooltipToUIString(
- PageInfoUiDelegate* delegate,
- const PageInfo::PermissionInfo& permission);
- static std::u16string PermissionAutoBlockedToUIString(
- PageInfoUiDelegate* delegate,
- const PageInfo::PermissionInfo& permission);
- static void ToggleBetweenAllowAndBlock(PageInfo::PermissionInfo& permission);
- static void ToggleBetweenRememberAndForget(
- PageInfo::PermissionInfo& permission);
- static bool IsToggleOn(const PageInfo::PermissionInfo& permission);
- // Returns the color to use for the permission decision reason strings.
- static SkColor GetSecondaryTextColor();
- #if BUILDFLAG(IS_ANDROID)
- // Returns the identity icon ID for the given identity |status|.
- static int GetIdentityIconID(PageInfo::SiteIdentityStatus status);
- // Returns the connection icon ID for the given connection |status|.
- static int GetConnectionIconID(PageInfo::SiteConnectionStatus status);
- // Returns the identity icon color ID for the given identity |status|.
- static int GetIdentityIconColorID(PageInfo::SiteIdentityStatus status);
- // Returns the connection icon color ID for the given connection |status|.
- static int GetConnectionIconColorID(PageInfo::SiteConnectionStatus status);
- #endif // BUILDFLAG(IS_ANDROID)
- // Return true if the given ContentSettingsType is in PageInfoUI.
- static bool ContentSettingsTypeInPageInfo(ContentSettingsType type);
- static std::unique_ptr<SecurityDescription>
- CreateSafetyTipSecurityDescription(const security_state::SafetyTipInfo& info);
- // Sets cookie information.
- // TODO(crbug.com/1346305) remove unused function overload after finished
- // project. Sets cookie information.
- virtual void SetCookieInfo(const CookieInfoList& cookie_info_list) {}
- virtual void SetCookieInfo(const CookiesNewInfo& cookie_info) {}
- // Sets permission information.
- virtual void SetPermissionInfo(const PermissionInfoList& permission_info_list,
- ChosenObjectInfoList chosen_object_info_list) {
- }
- // Sets site identity information.
- virtual void SetIdentityInfo(const IdentityInfo& identity_info) {}
- // Sets feature related information; for now only if VR content is being
- // presented in a headset.
- virtual void SetPageFeatureInfo(const PageFeatureInfo& page_feature_info) {}
- // Sets ad personalization information.
- virtual void SetAdPersonalizationInfo(
- const AdPersonalizationInfo& ad_personalization_info) {}
- // Helper to get security description info to display to the user.
- std::unique_ptr<SecurityDescription> GetSecurityDescription(
- const IdentityInfo& identity_info) const;
- };
- typedef PageInfoUI::CookieInfoList CookieInfoList;
- typedef PageInfoUI::PermissionInfoList PermissionInfoList;
- typedef PageInfoUI::ChosenObjectInfoList ChosenObjectInfoList;
- #endif // COMPONENTS_PAGE_INFO_PAGE_INFO_UI_H_
|