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