Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / content_settings / cookie_details.h
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