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