OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 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 #include "chrome/browser/ui/cocoa/cookie_details.h" | |
6 | |
7 #include "app/l10n_util_mac.h" | |
8 #import "base/i18n/time_formatting.h" | |
9 #include "base/sys_string_conversions.h" | |
10 #include "grit/generated_resources.h" | |
11 #include "chrome/browser/cookies_tree_model.h" | |
12 #include "webkit/appcache/appcache_service.h" | |
13 | |
14 #pragma mark Cocoa Cookie Details | |
15 | |
16 @implementation CocoaCookieDetails | |
17 | |
18 @synthesize canEditExpiration = canEditExpiration_; | |
19 @synthesize hasExpiration = hasExpiration_; | |
20 @synthesize type = type_; | |
21 | |
22 - (BOOL)shouldHideCookieDetailsView { | |
23 return type_ != kCocoaCookieDetailsTypeFolder && | |
24 type_ != kCocoaCookieDetailsTypeCookie; | |
25 } | |
26 | |
27 - (BOOL)shouldShowLocalStorageTreeDetailsView { | |
28 return type_ == kCocoaCookieDetailsTypeTreeLocalStorage; | |
29 } | |
30 | |
31 - (BOOL)shouldShowLocalStoragePromptDetailsView { | |
32 return type_ == kCocoaCookieDetailsTypePromptLocalStorage; | |
33 } | |
34 | |
35 - (BOOL)shouldShowDatabaseTreeDetailsView { | |
36 return type_ == kCocoaCookieDetailsTypeTreeDatabase; | |
37 } | |
38 | |
39 - (BOOL)shouldShowAppCacheTreeDetailsView { | |
40 return type_ == kCocoaCookieDetailsTypeTreeAppCache; | |
41 } | |
42 | |
43 - (BOOL)shouldShowDatabasePromptDetailsView { | |
44 return type_ == kCocoaCookieDetailsTypePromptDatabase; | |
45 } | |
46 | |
47 - (BOOL)shouldShowAppCachePromptDetailsView { | |
48 return type_ == kCocoaCookieDetailsTypePromptAppCache; | |
49 } | |
50 | |
51 - (BOOL)shouldShowIndexedDBTreeDetailsView { | |
52 return type_ == kCocoaCookieDetailsTypeTreeIndexedDB; | |
53 } | |
54 | |
55 - (NSString*)name { | |
56 return name_.get(); | |
57 } | |
58 | |
59 - (NSString*)content { | |
60 return content_.get(); | |
61 } | |
62 | |
63 - (NSString*)domain { | |
64 return domain_.get(); | |
65 } | |
66 | |
67 - (NSString*)path { | |
68 return path_.get(); | |
69 } | |
70 | |
71 - (NSString*)sendFor { | |
72 return sendFor_.get(); | |
73 } | |
74 | |
75 - (NSString*)created { | |
76 return created_.get(); | |
77 } | |
78 | |
79 - (NSString*)expires { | |
80 return expires_.get(); | |
81 } | |
82 | |
83 - (NSString*)fileSize { | |
84 return fileSize_.get(); | |
85 } | |
86 | |
87 - (NSString*)lastModified { | |
88 return lastModified_.get(); | |
89 } | |
90 | |
91 - (NSString*)lastAccessed { | |
92 return lastAccessed_.get(); | |
93 } | |
94 | |
95 - (NSString*)databaseDescription { | |
96 return databaseDescription_.get(); | |
97 } | |
98 | |
99 - (NSString*)localStorageKey { | |
100 return localStorageKey_.get(); | |
101 } | |
102 | |
103 - (NSString*)localStorageValue { | |
104 return localStorageValue_.get(); | |
105 } | |
106 | |
107 - (NSString*)manifestURL { | |
108 return manifestURL_.get(); | |
109 } | |
110 | |
111 - (id)initAsFolder { | |
112 if ((self = [super init])) { | |
113 type_ = kCocoaCookieDetailsTypeFolder; | |
114 } | |
115 return self; | |
116 } | |
117 | |
118 - (id)initWithCookie:(const net::CookieMonster::CanonicalCookie*)cookie | |
119 origin:(NSString*)origin | |
120 canEditExpiration:(BOOL)canEditExpiration { | |
121 if ((self = [super init])) { | |
122 type_ = kCocoaCookieDetailsTypeCookie; | |
123 hasExpiration_ = cookie->DoesExpire(); | |
124 canEditExpiration_ = canEditExpiration && hasExpiration_; | |
125 name_.reset([base::SysUTF8ToNSString(cookie->Name()) retain]); | |
126 content_.reset([base::SysUTF8ToNSString(cookie->Value()) retain]); | |
127 path_.reset([base::SysUTF8ToNSString(cookie->Path()) retain]); | |
128 domain_.reset([origin retain]); | |
129 | |
130 if (cookie->DoesExpire()) { | |
131 expires_.reset([base::SysUTF16ToNSString( | |
132 base::TimeFormatFriendlyDateAndTime(cookie->ExpiryDate())) retain]); | |
133 } else { | |
134 expires_.reset([l10n_util::GetNSStringWithFixup( | |
135 IDS_COOKIES_COOKIE_EXPIRES_SESSION) retain]); | |
136 } | |
137 | |
138 created_.reset([base::SysUTF16ToNSString( | |
139 base::TimeFormatFriendlyDateAndTime(cookie->CreationDate())) retain]); | |
140 | |
141 if (cookie->IsSecure()) { | |
142 sendFor_.reset([l10n_util::GetNSStringWithFixup( | |
143 IDS_COOKIES_COOKIE_SENDFOR_SECURE) retain]); | |
144 } else { | |
145 sendFor_.reset([l10n_util::GetNSStringWithFixup( | |
146 IDS_COOKIES_COOKIE_SENDFOR_ANY) retain]); | |
147 } | |
148 } | |
149 return self; | |
150 } | |
151 | |
152 - (id)initWithDatabase:(const BrowsingDataDatabaseHelper::DatabaseInfo*) | |
153 databaseInfo { | |
154 if ((self = [super init])) { | |
155 type_ = kCocoaCookieDetailsTypeTreeDatabase; | |
156 canEditExpiration_ = NO; | |
157 databaseDescription_.reset([base::SysUTF8ToNSString( | |
158 databaseInfo->description) retain]); | |
159 fileSize_.reset([base::SysUTF16ToNSString(FormatBytes(databaseInfo->size, | |
160 GetByteDisplayUnits(databaseInfo->size), true)) retain]); | |
161 lastModified_.reset([base::SysUTF16ToNSString( | |
162 base::TimeFormatFriendlyDateAndTime( | |
163 databaseInfo->last_modified)) retain]); | |
164 } | |
165 return self; | |
166 } | |
167 | |
168 - (id)initWithLocalStorage:( | |
169 const BrowsingDataLocalStorageHelper::LocalStorageInfo*)storageInfo { | |
170 if ((self = [super init])) { | |
171 type_ = kCocoaCookieDetailsTypeTreeLocalStorage; | |
172 canEditExpiration_ = NO; | |
173 domain_.reset([base::SysUTF8ToNSString(storageInfo->origin) retain]); | |
174 fileSize_.reset([base::SysUTF16ToNSString(FormatBytes(storageInfo->size, | |
175 GetByteDisplayUnits(storageInfo->size), true)) retain]); | |
176 lastModified_.reset([base::SysUTF16ToNSString( | |
177 base::TimeFormatFriendlyDateAndTime( | |
178 storageInfo->last_modified)) retain]); | |
179 } | |
180 return self; | |
181 } | |
182 | |
183 - (id)initWithAppCacheInfo:(const appcache::AppCacheInfo*)appcacheInfo { | |
184 if ((self = [super init])) { | |
185 type_ = kCocoaCookieDetailsTypeTreeAppCache; | |
186 canEditExpiration_ = NO; | |
187 manifestURL_.reset([base::SysUTF8ToNSString( | |
188 appcacheInfo->manifest_url.spec()) retain]); | |
189 fileSize_.reset([base::SysUTF16ToNSString(FormatBytes(appcacheInfo->size, | |
190 GetByteDisplayUnits(appcacheInfo->size), true)) retain]); | |
191 created_.reset([base::SysUTF16ToNSString( | |
192 base::TimeFormatFriendlyDateAndTime( | |
193 appcacheInfo->creation_time)) retain]); | |
194 lastAccessed_.reset([base::SysUTF16ToNSString( | |
195 base::TimeFormatFriendlyDateAndTime( | |
196 appcacheInfo->last_access_time)) retain]); | |
197 } | |
198 return self; | |
199 } | |
200 | |
201 - (id)initWithDatabase:(const std::string&)domain | |
202 databaseName:(const string16&)databaseName | |
203 databaseDescription:(const string16&)databaseDescription | |
204 fileSize:(unsigned long)fileSize { | |
205 if ((self = [super init])) { | |
206 type_ = kCocoaCookieDetailsTypePromptDatabase; | |
207 canEditExpiration_ = NO; | |
208 name_.reset([base::SysUTF16ToNSString(databaseName) retain]); | |
209 domain_.reset([base::SysUTF8ToNSString(domain) retain]); | |
210 databaseDescription_.reset( | |
211 [base::SysUTF16ToNSString(databaseDescription) retain]); | |
212 fileSize_.reset([base::SysUTF16ToNSString(FormatBytes(fileSize, | |
213 GetByteDisplayUnits(fileSize), true)) retain]); | |
214 } | |
215 return self; | |
216 } | |
217 | |
218 - (id)initWithLocalStorage:(const std::string&)domain | |
219 key:(const string16&)key | |
220 value:(const string16&)value { | |
221 if ((self = [super init])) { | |
222 type_ = kCocoaCookieDetailsTypePromptLocalStorage; | |
223 canEditExpiration_ = NO; | |
224 domain_.reset([base::SysUTF8ToNSString(domain) retain]); | |
225 localStorageKey_.reset([base::SysUTF16ToNSString(key) retain]); | |
226 localStorageValue_.reset([base::SysUTF16ToNSString(value) retain]); | |
227 } | |
228 return self; | |
229 } | |
230 | |
231 - (id)initWithAppCacheManifestURL:(const std::string&)manifestURL { | |
232 if ((self = [super init])) { | |
233 type_ = kCocoaCookieDetailsTypePromptAppCache; | |
234 canEditExpiration_ = NO; | |
235 manifestURL_.reset([base::SysUTF8ToNSString(manifestURL) retain]); | |
236 } | |
237 return self; | |
238 } | |
239 | |
240 - (id)initWithIndexedDBInfo: | |
241 (const BrowsingDataIndexedDBHelper::IndexedDBInfo*)indexedDBInfo { | |
242 if ((self = [super init])) { | |
243 type_ = kCocoaCookieDetailsTypeTreeIndexedDB; | |
244 canEditExpiration_ = NO; | |
245 domain_.reset([base::SysUTF8ToNSString(indexedDBInfo->origin) retain]); | |
246 fileSize_.reset([base::SysUTF16ToNSString(FormatBytes(indexedDBInfo->size, | |
247 GetByteDisplayUnits(indexedDBInfo->size), true)) retain]); | |
248 lastModified_.reset([base::SysUTF16ToNSString( | |
249 base::TimeFormatFriendlyDateAndTime( | |
250 indexedDBInfo->last_modified)) retain]); | |
251 } | |
252 return self; | |
253 } | |
254 | |
255 + (CocoaCookieDetails*)createFromCookieTreeNode:(CookieTreeNode*)treeNode { | |
256 CookieTreeNode::DetailedInfo info = treeNode->GetDetailedInfo(); | |
257 CookieTreeNode::DetailedInfo::NodeType nodeType = info.node_type; | |
258 NSString* origin; | |
259 switch (nodeType) { | |
260 case CookieTreeNode::DetailedInfo::TYPE_COOKIE: | |
261 origin = base::SysWideToNSString(info.origin.c_str()); | |
262 return [[[CocoaCookieDetails alloc] initWithCookie:info.cookie | |
263 origin:origin | |
264 canEditExpiration:NO] autorelease]; | |
265 case CookieTreeNode::DetailedInfo::TYPE_DATABASE: | |
266 return [[[CocoaCookieDetails alloc] | |
267 initWithDatabase:info.database_info] autorelease]; | |
268 case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE: | |
269 return [[[CocoaCookieDetails alloc] | |
270 initWithLocalStorage:info.local_storage_info] autorelease]; | |
271 case CookieTreeNode::DetailedInfo::TYPE_APPCACHE: | |
272 return [[[CocoaCookieDetails alloc] | |
273 initWithAppCacheInfo:info.appcache_info] autorelease]; | |
274 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB: | |
275 return [[[CocoaCookieDetails alloc] | |
276 initWithIndexedDBInfo:info.indexed_db_info] autorelease]; | |
277 default: | |
278 return [[[CocoaCookieDetails alloc] initAsFolder] autorelease]; | |
279 } | |
280 } | |
281 | |
282 @end | |
283 | |
284 #pragma mark Content Object Adapter | |
285 | |
286 @implementation CookiePromptContentDetailsAdapter | |
287 | |
288 - (id)initWithDetails:(CocoaCookieDetails*)details { | |
289 if ((self = [super init])) { | |
290 details_.reset([details retain]); | |
291 } | |
292 return self; | |
293 } | |
294 | |
295 - (CocoaCookieDetails*)details { | |
296 return details_.get(); | |
297 } | |
298 | |
299 @end | |
OLD | NEW |