• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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