15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBSITE_SETTINGS_WEBSITE_SETTINGS_UI_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBSITE_SETTINGS_WEBSITE_SETTINGS_UI_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/website_settings/website_settings.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/content_settings/core/common/content_settings_types.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/common/signed_certificate_timestamp_id_and_status.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebsiteSettings; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SSLStatus; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Image; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The class |WebsiteSettingsUI| specifies the platform independent 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interface of the website settings UI. The website settings UI displays 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// information and controls for site specific data (local stored objects like 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cookies), site specific permissions (location, popup, plugin, etc. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// permissions) and site specific information (identity, connection status, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// etc.). 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebsiteSettingsUI { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The Website Settings UI contains several tabs. Each tab is assiciated with 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a unique tab id. The enum |TabId| contains all the ids for the tabs. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum TabId { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TAB_ID_PERMISSIONS = 0, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TAB_ID_CONNECTION, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NUM_TAB_IDS, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |CookieInfo| contains information about the cookies from a specific source. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A source can for example be a specific origin or an entire domain. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct CookieInfo { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieInfo(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // String describing the cookie source. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookie_source; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The number of allowed cookies. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int allowed; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The number of blocked cookies. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int blocked; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |PermissionInfo| contains information about a single permission |type| for 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the current website. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct PermissionInfo { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PermissionInfo(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Site permission |type|. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType type; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The current value for the permission |type| (e.g. ALLOW or BLOCK). 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The global default settings for this permission |type|. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting default_setting; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The settings source e.g. user, extensions, policy, ... . 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings::SettingSource source; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |IdentityInfo| contains information about the site's identity and 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // connection. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct IdentityInfo { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IdentityInfo(); 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ~IdentityInfo(); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The site's identity. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string site_identity; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Status of the site's identity. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebsiteSettings::SiteIdentityStatus identity_status; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper to get the status text to display to the user. 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 GetIdentityStatusText() const; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Textual description of the site's identity status that is displayed to 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the user. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string identity_status_description; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ID is the server certificate of a secure connection or 0. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int cert_id; 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Signed Certificate Timestamp ids and status 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::SignedCertificateTimestampIDStatusList 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) signed_certificate_timestamp_ids; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Status of the site's connection. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebsiteSettings::SiteConnectionStatus connection_status; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Textual description of the site's connection status that is displayed to 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the user. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string connection_status_description; 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set when the user has explicitly bypassed an SSL error for this host and 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // has a flag set to remember ssl decisions (explicit flag or in the 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // experimental group). When |show_ssl_decision_revoke_button| is true, the 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // connection area of the page info will include an option for the user to 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // revoke their decision to bypass the SSL error for this host. 1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool show_ssl_decision_revoke_button; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<CookieInfo> CookieInfoList; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<PermissionInfo> PermissionInfoList; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebsiteSettingsUI(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the UI string for the given permission |type|. 112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static base::string16 PermissionTypeToUIString(ContentSettingsType type); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the UI string for the given permission |value|, used in the 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permission-changing menu. Generally this will be a verb in the imperative 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // form, e.g. "ask", "allow", "block". 117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static base::string16 PermissionValueToUIString(ContentSetting value); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the UI string describing the action taken for a permission, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // including why that action was taken. E.g. "Allowed by you", 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "Blocked by default". 122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static base::string16 PermissionActionToUIString( 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting default_setting, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings::SettingSource source); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns the icon resource ID for the given permission |type| and |setting|. 12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static int GetPermissionIconID(ContentSettingsType type, 12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ContentSetting setting); 13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Returns the icon for the given permissionInfo |info|. If |info|'s current 1320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // setting is CONTENT_SETTING_DEFAULT, it will return the icon for |info|'s 1330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // default setting. 1340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch static const gfx::Image& GetPermissionIcon(const PermissionInfo& info); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns the identity icon ID for the given identity |status|. 13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static int GetIdentityIconID(WebsiteSettings::SiteIdentityStatus status); 13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the identity icon for the given identity |status|. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const gfx::Image& GetIdentityIcon( 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebsiteSettings::SiteIdentityStatus status); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns the connection icon ID for the given connection |status|. 14490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static int GetConnectionIconID( 14590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) WebsiteSettings::SiteConnectionStatus status); 14690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the connection icon for the given connection |status|. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const gfx::Image& GetConnectionIcon( 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebsiteSettings::SiteConnectionStatus status); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns the icon ID to show along with the first visit information. 152a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static int GetFirstVisitIconID(const base::string16& first_visit); 15390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the icon to show along with the first visit information. 155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static const gfx::Image& GetFirstVisitIcon(const base::string16& first_visit); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets cookie information. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetCookieInfo(const CookieInfoList& cookie_info_list) = 0; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets permision information. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetPermissionInfo( 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionInfoList& permission_info_list) = 0; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets site identity information. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetIdentityInfo(const IdentityInfo& identity_info) = 0; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the first visited data. |first_visit| can be an empty string. 168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void SetFirstVisit(const base::string16& first_visit) = 0; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Selects the tab with the given |tab_id|. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetSelectedTab(TabId tab_id) = 0; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef WebsiteSettingsUI::CookieInfoList CookieInfoList; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef WebsiteSettingsUI::PermissionInfoList PermissionInfoList; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_WEBSITE_SETTINGS_WEBSITE_SETTINGS_UI_H_ 178