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