• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/content_settings/cookie_details.h"
6
7#import "base/i18n/time_formatting.h"
8#include "base/sys_string_conversions.h"
9#include "grit/generated_resources.h"
10#include "chrome/browser/cookies_tree_model.h"
11#include "ui/base/l10n/l10n_util_mac.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
300