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 "chrome/browser/browsing_data/browsing_data_service_worker_helper.h"
12 #include "content/public/browser/appcache_service.h"
17 class CanonicalCookie
;
20 // This enum specifies the type of information contained in the
22 enum CocoaCookieDetailsType
{
23 // Represents grouping of cookie data, used in the cookie tree.
24 kCocoaCookieDetailsTypeFolder
= 0,
26 // Detailed information about a cookie, used both in the cookie
27 // tree and the cookie prompt.
28 kCocoaCookieDetailsTypeCookie
,
30 // Detailed information about a web database used for
31 // display in the cookie tree.
32 kCocoaCookieDetailsTypeTreeDatabase
,
34 // Detailed information about local storage used for
35 // display in the cookie tree.
36 kCocoaCookieDetailsTypeTreeLocalStorage
,
38 // Detailed information about an appcache used for display in the
40 kCocoaCookieDetailsTypeTreeAppCache
,
42 // Detailed information about an IndexedDB used for display in the
44 kCocoaCookieDetailsTypeTreeIndexedDB
,
46 // Detailed information about a Service Worker used for display in the
48 kCocoaCookieDetailsTypeTreeServiceWorker
,
50 // Detailed information about a web database used for display
51 // in the cookie prompt dialog.
52 kCocoaCookieDetailsTypePromptDatabase
,
54 // Detailed information about local storage used for display
55 // in the cookie prompt dialog.
56 kCocoaCookieDetailsTypePromptLocalStorage
,
58 // Detailed information about app caches used for display
59 // in the cookie prompt dialog.
60 kCocoaCookieDetailsTypePromptAppCache
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
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
{
72 CocoaCookieDetailsType type_
;
74 // Used for type kCocoaCookieDetailsTypeCookie to indicate whether
75 // it should be possible to edit the expiration.
76 BOOL canEditExpiration_
;
78 // Indicates whether a cookie has an explcit expiration. If not
79 // it will expire with the session.
82 // Only set for type kCocoaCookieDetailsTypeCookie.
83 base::scoped_nsobject
<NSString
> content_
;
84 base::scoped_nsobject
<NSString
> path_
;
85 base::scoped_nsobject
<NSString
> sendFor_
;
87 base::scoped_nsobject
<NSString
> expires_
;
89 // Only set for type kCocoaCookieDetailsTypeCookie and
90 // kCocoaCookieDetailsTypeTreeAppCache nodes.
91 base::scoped_nsobject
<NSString
> created_
;
93 // Only set for types kCocoaCookieDetailsTypeCookie, and
94 // kCocoaCookieDetailsTypePromptDatabase nodes.
95 base::scoped_nsobject
<NSString
> name_
;
97 // Only set for type kCocoaCookieDetailsTypeTreeLocalStorage,
98 // kCocoaCookieDetailsTypeTreeDatabase,
99 // kCocoaCookieDetailsTypePromptDatabase,
100 // kCocoaCookieDetailsTypeTreeIndexedDB,
101 // kCocoaCookieDetailsTypeTreeServiceWorker, and
102 // kCocoaCookieDetailsTypeTreeAppCache nodes.
103 base::scoped_nsobject
<NSString
> fileSize_
;
105 // Only set for types kCocoaCookieDetailsTypeTreeLocalStorage,
106 // kCocoaCookieDetailsTypeTreeDatabase,
107 // kCocoaCookieDetailsTypeTreeServiceWorker, and
108 // kCocoaCookieDetailsTypeTreeIndexedDB nodes.
109 base::scoped_nsobject
<NSString
> lastModified_
;
111 // Only set for type kCocoaCookieDetailsTypeTreeAppCache nodes.
112 base::scoped_nsobject
<NSString
> lastAccessed_
;
114 // Only set for type kCocoaCookieDetailsTypeCookie,
115 // kCocoaCookieDetailsTypePromptDatabase,
116 // kCocoaCookieDetailsTypePromptLocalStorage,
117 // kCocoaCookieDetailsTypePromptServiceWorker, and
118 // kCocoaCookieDetailsTypeTreeIndexedDB nodes.
119 base::scoped_nsobject
<NSString
> domain_
;
121 // Only set for type kCocoaCookieTreeNodeTypeDatabaseStorage and
122 // kCocoaCookieDetailsTypePromptDatabase nodes.
123 base::scoped_nsobject
<NSString
> databaseDescription_
;
125 // Only set for type kCocoaCookieDetailsTypePromptLocalStorage.
126 base::scoped_nsobject
<NSString
> localStorageKey_
;
127 base::scoped_nsobject
<NSString
> localStorageValue_
;
129 // Only set for type kCocoaCookieDetailsTypeTreeAppCache and
130 // kCocoaCookieDetailsTypePromptAppCache.
131 base::scoped_nsobject
<NSString
> manifestURL_
;
133 // Only set for type kCocoaCookieDetailsTypeTreeServiceWorker nodes.
134 base::scoped_nsobject
<NSString
> scopes_
;
137 @
property(nonatomic
, readonly
) BOOL canEditExpiration
;
138 @
property(nonatomic
) BOOL hasExpiration
;
139 @
property(nonatomic
, readonly
) CocoaCookieDetailsType type
;
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
;
161 - (NSString
*)content
;
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
;
176 // Used for folders in the cookie tree.
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
;
183 // Used for database details in the cookie tree.
184 - (id
)initWithDatabase
:
185 (const BrowsingDataDatabaseHelper::DatabaseInfo
*)databaseInfo
;
187 // Used for local storage details in the cookie tree.
188 - (id
)initWithLocalStorage
:
189 (const BrowsingDataLocalStorageHelper::LocalStorageInfo
*)localStorageInfo
;
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
;
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
;
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
;
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
;
211 // Used for IndexedDB details in the cookie tree.
212 - (id
)initWithIndexedDBInfo
:
213 (const content::IndexedDBInfo
*)indexedDB
;
215 // Used for ServiceWorker details in the cookie tree.
216 - (id
)initWithServiceWorkerUsageInfo
:
217 (const content::ServiceWorkerUsageInfo
*)serviceWorker
;
219 // A factory method to create a configured instance given a node from
220 // the cookie tree in |treeNode|.
221 + (CocoaCookieDetails
*)createFromCookieTreeNode
:(CookieTreeNode
*)treeNode
;
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
{
233 base::scoped_nsobject
<CocoaCookieDetails
> details_
;
236 - (CocoaCookieDetails
*)details
;
238 // The adapter assumes ownership of the details object
239 // in its initializer.
240 - (id
)initWithDetails
:(CocoaCookieDetails
*)details
;