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