Home | History | Annotate | Download | only in content_settings
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #import <Cocoa/Cocoa.h>
      6 
      7 #include "base/mac/scoped_nsobject.h"
      8 #include "chrome/browser/browsing_data/browsing_data_database_helper.h"
      9 #include "chrome/browser/browsing_data/browsing_data_indexed_db_helper.h"
     10 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h"
     11 #include "webkit/browser/appcache/appcache_service.h"
     12 
     13 class CookieTreeNode;
     14 
     15 namespace net {
     16 class CanonicalCookie;
     17 }
     18 
     19 // This enum specifies the type of information contained in the
     20 // cookie details.
     21 enum CocoaCookieDetailsType {
     22   // Represents grouping of cookie data, used in the cookie tree.
     23   kCocoaCookieDetailsTypeFolder = 0,
     24 
     25   // Detailed information about a cookie, used both in the cookie
     26   // tree and the cookie prompt.
     27   kCocoaCookieDetailsTypeCookie,
     28 
     29   // Detailed information about a web database used for
     30   // display in the cookie tree.
     31   kCocoaCookieDetailsTypeTreeDatabase,
     32 
     33   // Detailed information about local storage used for
     34   // display in the cookie tree.
     35   kCocoaCookieDetailsTypeTreeLocalStorage,
     36 
     37   // Detailed information about an appcache used for display in the
     38   // cookie tree.
     39   kCocoaCookieDetailsTypeTreeAppCache,
     40 
     41   // Detailed information about an IndexedDB used for display in the
     42   // cookie tree.
     43   kCocoaCookieDetailsTypeTreeIndexedDB,
     44 
     45   // Detailed information about a web database used for display
     46   // in the cookie prompt dialog.
     47   kCocoaCookieDetailsTypePromptDatabase,
     48 
     49   // Detailed information about local storage used for display
     50   // in the cookie prompt dialog.
     51   kCocoaCookieDetailsTypePromptLocalStorage,
     52 
     53   // Detailed information about app caches used for display
     54   // in the cookie prompt dialog.
     55   kCocoaCookieDetailsTypePromptAppCache
     56 };
     57 
     58 // This class contains all of the information that can be displayed in
     59 // a cookie details view. Because the view uses bindings to display
     60 // the cookie information, the methods that provide that information
     61 // for display must be implemented directly on this class and not on any
     62 // of its subclasses.
     63 // If this system is rewritten to not use bindings, this class should be
     64 // subclassed and specialized, rather than using an enum to determine type.
     65 @interface CocoaCookieDetails : NSObject {
     66  @private
     67   CocoaCookieDetailsType type_;
     68 
     69   // Used for type kCocoaCookieDetailsTypeCookie to indicate whether
     70   // it should be possible to edit the expiration.
     71   BOOL canEditExpiration_;
     72 
     73   // Indicates whether a cookie has an explcit expiration. If not
     74   // it will expire with the session.
     75   BOOL hasExpiration_;
     76 
     77   // Only set for type kCocoaCookieDetailsTypeCookie.
     78   base::scoped_nsobject<NSString> content_;
     79   base::scoped_nsobject<NSString> path_;
     80   base::scoped_nsobject<NSString> sendFor_;
     81   // Stringifed dates.
     82   base::scoped_nsobject<NSString> expires_;
     83 
     84   // Only set for type kCocoaCookieDetailsTypeCookie and
     85   // kCocoaCookieDetailsTypeTreeAppCache nodes.
     86   base::scoped_nsobject<NSString> created_;
     87 
     88   // Only set for types kCocoaCookieDetailsTypeCookie, and
     89   // kCocoaCookieDetailsTypePromptDatabase nodes.
     90   base::scoped_nsobject<NSString> name_;
     91 
     92   // Only set for type kCocoaCookieDetailsTypeTreeLocalStorage,
     93   // kCocoaCookieDetailsTypeTreeDatabase,
     94   // kCocoaCookieDetailsTypePromptDatabase,
     95   // kCocoaCookieDetailsTypeTreeIndexedDB, and
     96   // kCocoaCookieDetailsTypeTreeAppCache nodes.
     97   base::scoped_nsobject<NSString> fileSize_;
     98 
     99   // Only set for types kCocoaCookieDetailsTypeTreeLocalStorage,
    100   // kCocoaCookieDetailsTypeTreeDatabase, and
    101   // kCocoaCookieDetailsTypeTreeIndexedDB nodes.
    102   base::scoped_nsobject<NSString> lastModified_;
    103 
    104   // Only set for type kCocoaCookieDetailsTypeTreeAppCache nodes.
    105   base::scoped_nsobject<NSString> lastAccessed_;
    106 
    107   // Only set for type kCocoaCookieDetailsTypeCookie,
    108   // kCocoaCookieDetailsTypePromptDatabase,
    109   // kCocoaCookieDetailsTypePromptLocalStorage, and
    110   // kCocoaCookieDetailsTypeTreeIndexedDB nodes.
    111   base::scoped_nsobject<NSString> domain_;
    112 
    113   // Only set for type kCocoaCookieTreeNodeTypeDatabaseStorage and
    114   // kCocoaCookieDetailsTypePromptDatabase nodes.
    115   base::scoped_nsobject<NSString> databaseDescription_;
    116 
    117   // Only set for type kCocoaCookieDetailsTypePromptLocalStorage.
    118   base::scoped_nsobject<NSString> localStorageKey_;
    119   base::scoped_nsobject<NSString> localStorageValue_;
    120 
    121   // Only set for type kCocoaCookieDetailsTypeTreeAppCache and
    122   // kCocoaCookieDetailsTypePromptAppCache.
    123   base::scoped_nsobject<NSString> manifestURL_;
    124 }
    125 
    126 @property(nonatomic, readonly) BOOL canEditExpiration;
    127 @property(nonatomic) BOOL hasExpiration;
    128 @property(nonatomic, readonly) CocoaCookieDetailsType type;
    129 
    130 // The following methods are used in the bindings of subviews inside
    131 // the cookie detail view. Note that the method that tests the
    132 // visibility of the subview for cookie-specific information has a different
    133 // polarity than the other visibility testing methods. This ensures that
    134 // this subview is shown when there is no selection in the cookie tree,
    135 // because a hidden value of |false| is generated when the key value binding
    136 // is evaluated through a nil object. The other methods are bound using a
    137 // |NSNegateBoolean| transformer, so that when there is a empty selection the
    138 // hidden value is |true|.
    139 - (BOOL)shouldHideCookieDetailsView;
    140 - (BOOL)shouldShowLocalStorageTreeDetailsView;
    141 - (BOOL)shouldShowLocalStoragePromptDetailsView;
    142 - (BOOL)shouldShowDatabaseTreeDetailsView;
    143 - (BOOL)shouldShowDatabasePromptDetailsView;
    144 - (BOOL)shouldShowAppCachePromptDetailsView;
    145 - (BOOL)shouldShowAppCacheTreeDetailsView;
    146 - (BOOL)shouldShowIndexedDBTreeDetailsView;
    147 
    148 - (NSString*)name;
    149 - (NSString*)content;
    150 - (NSString*)domain;
    151 - (NSString*)path;
    152 - (NSString*)sendFor;
    153 - (NSString*)created;
    154 - (NSString*)expires;
    155 - (NSString*)fileSize;
    156 - (NSString*)lastModified;
    157 - (NSString*)lastAccessed;
    158 - (NSString*)databaseDescription;
    159 - (NSString*)localStorageKey;
    160 - (NSString*)localStorageValue;
    161 - (NSString*)manifestURL;
    162 
    163 // Used for folders in the cookie tree.
    164 - (id)initAsFolder;
    165 
    166 // Used for cookie details in both the cookie tree and the cookie prompt dialog.
    167 - (id)initWithCookie:(const net::CanonicalCookie*)treeNode
    168    canEditExpiration:(BOOL)canEditExpiration;
    169 
    170 // Used for database details in the cookie tree.
    171 - (id)initWithDatabase:
    172     (const BrowsingDataDatabaseHelper::DatabaseInfo*)databaseInfo;
    173 
    174 // Used for local storage details in the cookie tree.
    175 - (id)initWithLocalStorage:
    176     (const BrowsingDataLocalStorageHelper::LocalStorageInfo*)localStorageInfo;
    177 
    178 // Used for database details in the cookie prompt dialog.
    179 - (id)initWithDatabase:(const std::string&)domain
    180           databaseName:(const base::string16&)databaseName
    181    databaseDescription:(const base::string16&)databaseDescription
    182               fileSize:(unsigned long)fileSize;
    183 
    184 // -initWithAppCacheInfo: creates a cookie details with the manifest URL plus
    185 // all of this additional information that is available after an appcache is
    186 // actually created, including its creation date, size and last accessed time.
    187 - (id)initWithAppCacheInfo:(const appcache::AppCacheInfo*)appcacheInfo;
    188 
    189 // Used for local storage details in the cookie prompt dialog.
    190 - (id)initWithLocalStorage:(const std::string&)domain
    191                        key:(const base::string16&)key
    192                      value:(const base::string16&)value;
    193 
    194 // -initWithAppCacheManifestURL: is called when the cookie prompt is displayed
    195 // for an appcache, at that time only the manifest URL of the appcache is known.
    196 - (id)initWithAppCacheManifestURL:(const std::string&)manifestURL;
    197 
    198 // Used for IndexedDB details in the cookie tree.
    199 - (id)initWithIndexedDBInfo:
    200     (const content::IndexedDBInfo*)indexedDB;
    201 
    202 // A factory method to create a configured instance given a node from
    203 // the cookie tree in |treeNode|.
    204 + (CocoaCookieDetails*)createFromCookieTreeNode:(CookieTreeNode*)treeNode;
    205 
    206 @end
    207 
    208 // The subpanes of the cookie details view expect to be able to bind to methods
    209 // through a key path in the form |content.details.xxxx|. This class serves as
    210 // an adapter that simply wraps a |CocoaCookieDetails| object. An instance of
    211 // this class is set as the content object for cookie details view's object
    212 // controller so that key paths are properly resolved through to the
    213 // |CocoaCookieDetails| object for the cookie prompt.
    214 @interface CookiePromptContentDetailsAdapter : NSObject {
    215  @private
    216   base::scoped_nsobject<CocoaCookieDetails> details_;
    217 }
    218 
    219 - (CocoaCookieDetails*)details;
    220 
    221 // The adapter assumes ownership of the details object
    222 // in its initializer.
    223 - (id)initWithDetails:(CocoaCookieDetails*)details;
    224 @end
    225