[Metrics] Make MetricsStateManager take a callback param to check if UMA is enabled.
[chromium-blink-merge.git] / chrome / browser / ui / cocoa / content_settings / cookie_details.h
blobe76d0d1dc236ccb0377b3b3b9ec72b4c2d1007e0
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.
5 #import <Cocoa/Cocoa.h>
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"
13 class CookieTreeNode;
15 namespace net {
16 class CanonicalCookie;
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,
25 // Detailed information about a cookie, used both in the cookie
26 // tree and the cookie prompt.
27 kCocoaCookieDetailsTypeCookie,
29 // Detailed information about a web database used for
30 // display in the cookie tree.
31 kCocoaCookieDetailsTypeTreeDatabase,
33 // Detailed information about local storage used for
34 // display in the cookie tree.
35 kCocoaCookieDetailsTypeTreeLocalStorage,
37 // Detailed information about an appcache used for display in the
38 // cookie tree.
39 kCocoaCookieDetailsTypeTreeAppCache,
41 // Detailed information about an IndexedDB used for display in the
42 // cookie tree.
43 kCocoaCookieDetailsTypeTreeIndexedDB,
45 // Detailed information about a web database used for display
46 // in the cookie prompt dialog.
47 kCocoaCookieDetailsTypePromptDatabase,
49 // Detailed information about local storage used for display
50 // in the cookie prompt dialog.
51 kCocoaCookieDetailsTypePromptLocalStorage,
53 // Detailed information about app caches used for display
54 // in the cookie prompt dialog.
55 kCocoaCookieDetailsTypePromptAppCache
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_;
69 // Used for type kCocoaCookieDetailsTypeCookie to indicate whether
70 // it should be possible to edit the expiration.
71 BOOL canEditExpiration_;
73 // Indicates whether a cookie has an explcit expiration. If not
74 // it will expire with the session.
75 BOOL hasExpiration_;
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_;
84 // Only set for type kCocoaCookieDetailsTypeCookie and
85 // kCocoaCookieDetailsTypeTreeAppCache nodes.
86 base::scoped_nsobject<NSString> created_;
88 // Only set for types kCocoaCookieDetailsTypeCookie, and
89 // kCocoaCookieDetailsTypePromptDatabase nodes.
90 base::scoped_nsobject<NSString> name_;
92 // Only set for type kCocoaCookieDetailsTypeTreeLocalStorage,
93 // kCocoaCookieDetailsTypeTreeDatabase,
94 // kCocoaCookieDetailsTypePromptDatabase,
95 // kCocoaCookieDetailsTypeTreeIndexedDB, and
96 // kCocoaCookieDetailsTypeTreeAppCache nodes.
97 base::scoped_nsobject<NSString> fileSize_;
99 // Only set for types kCocoaCookieDetailsTypeTreeLocalStorage,
100 // kCocoaCookieDetailsTypeTreeDatabase, and
101 // kCocoaCookieDetailsTypeTreeIndexedDB nodes.
102 base::scoped_nsobject<NSString> lastModified_;
104 // Only set for type kCocoaCookieDetailsTypeTreeAppCache nodes.
105 base::scoped_nsobject<NSString> lastAccessed_;
107 // Only set for type kCocoaCookieDetailsTypeCookie,
108 // kCocoaCookieDetailsTypePromptDatabase,
109 // kCocoaCookieDetailsTypePromptLocalStorage, and
110 // kCocoaCookieDetailsTypeTreeIndexedDB nodes.
111 base::scoped_nsobject<NSString> domain_;
113 // Only set for type kCocoaCookieTreeNodeTypeDatabaseStorage and
114 // kCocoaCookieDetailsTypePromptDatabase nodes.
115 base::scoped_nsobject<NSString> databaseDescription_;
117 // Only set for type kCocoaCookieDetailsTypePromptLocalStorage.
118 base::scoped_nsobject<NSString> localStorageKey_;
119 base::scoped_nsobject<NSString> localStorageValue_;
121 // Only set for type kCocoaCookieDetailsTypeTreeAppCache and
122 // kCocoaCookieDetailsTypePromptAppCache.
123 base::scoped_nsobject<NSString> manifestURL_;
126 @property(nonatomic, readonly) BOOL canEditExpiration;
127 @property(nonatomic) BOOL hasExpiration;
128 @property(nonatomic, readonly) CocoaCookieDetailsType type;
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;
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;
163 // Used for folders in the cookie tree.
164 - (id)initAsFolder;
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;
170 // Used for database details in the cookie tree.
171 - (id)initWithDatabase:
172 (const BrowsingDataDatabaseHelper::DatabaseInfo*)databaseInfo;
174 // Used for local storage details in the cookie tree.
175 - (id)initWithLocalStorage:
176 (const BrowsingDataLocalStorageHelper::LocalStorageInfo*)localStorageInfo;
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;
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;
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;
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;
198 // Used for IndexedDB details in the cookie tree.
199 - (id)initWithIndexedDBInfo:
200 (const content::IndexedDBInfo*)indexedDB;
202 // A factory method to create a configured instance given a node from
203 // the cookie tree in |treeNode|.
204 + (CocoaCookieDetails*)createFromCookieTreeNode:(CookieTreeNode*)treeNode;
206 @end
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_;
219 - (CocoaCookieDetails*)details;
221 // The adapter assumes ownership of the details object
222 // in its initializer.
223 - (id)initWithDetails:(CocoaCookieDetails*)details;
224 @end