blob: e76d0d1dc236ccb0377b3b3b9ec72b4c2d1007e0 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Cocoa/Cocoa.h>
#include "base/mac/scoped_nsobject.h"
#include "chrome/browser/browsing_data/browsing_data_database_helper.h"
#include "chrome/browser/browsing_data/browsing_data_indexed_db_helper.h"
#include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h"
#include "webkit/browser/appcache/appcache_service.h"
class CookieTreeNode;
namespace net {
class CanonicalCookie;
}
// This enum specifies the type of information contained in the
// cookie details.
enum CocoaCookieDetailsType {
// Represents grouping of cookie data, used in the cookie tree.
kCocoaCookieDetailsTypeFolder = 0,
// Detailed information about a cookie, used both in the cookie
// tree and the cookie prompt.
kCocoaCookieDetailsTypeCookie,
// Detailed information about a web database used for
// display in the cookie tree.
kCocoaCookieDetailsTypeTreeDatabase,
// Detailed information about local storage used for
// display in the cookie tree.
kCocoaCookieDetailsTypeTreeLocalStorage,
// Detailed information about an appcache used for display in the
// cookie tree.
kCocoaCookieDetailsTypeTreeAppCache,
// Detailed information about an IndexedDB used for display in the
// cookie tree.
kCocoaCookieDetailsTypeTreeIndexedDB,
// Detailed information about a web database used for display
// in the cookie prompt dialog.
kCocoaCookieDetailsTypePromptDatabase,
// Detailed information about local storage used for display
// in the cookie prompt dialog.
kCocoaCookieDetailsTypePromptLocalStorage,
// Detailed information about app caches used for display
// in the cookie prompt dialog.
kCocoaCookieDetailsTypePromptAppCache
};
// This class contains all of the information that can be displayed in
// a cookie details view. Because the view uses bindings to display
// the cookie information, the methods that provide that information
// for display must be implemented directly on this class and not on any
// of its subclasses.
// If this system is rewritten to not use bindings, this class should be
// subclassed and specialized, rather than using an enum to determine type.
@interface CocoaCookieDetails : NSObject {
@private
CocoaCookieDetailsType type_;
// Used for type kCocoaCookieDetailsTypeCookie to indicate whether
// it should be possible to edit the expiration.
BOOL canEditExpiration_;
// Indicates whether a cookie has an explcit expiration. If not
// it will expire with the session.
BOOL hasExpiration_;
// Only set for type kCocoaCookieDetailsTypeCookie.
base::scoped_nsobject<NSString> content_;
base::scoped_nsobject<NSString> path_;
base::scoped_nsobject<NSString> sendFor_;
// Stringifed dates.
base::scoped_nsobject<NSString> expires_;
// Only set for type kCocoaCookieDetailsTypeCookie and
// kCocoaCookieDetailsTypeTreeAppCache nodes.
base::scoped_nsobject<NSString> created_;
// Only set for types kCocoaCookieDetailsTypeCookie, and
// kCocoaCookieDetailsTypePromptDatabase nodes.
base::scoped_nsobject<NSString> name_;
// Only set for type kCocoaCookieDetailsTypeTreeLocalStorage,
// kCocoaCookieDetailsTypeTreeDatabase,
// kCocoaCookieDetailsTypePromptDatabase,
// kCocoaCookieDetailsTypeTreeIndexedDB, and
// kCocoaCookieDetailsTypeTreeAppCache nodes.
base::scoped_nsobject<NSString> fileSize_;
// Only set for types kCocoaCookieDetailsTypeTreeLocalStorage,
// kCocoaCookieDetailsTypeTreeDatabase, and
// kCocoaCookieDetailsTypeTreeIndexedDB nodes.
base::scoped_nsobject<NSString> lastModified_;
// Only set for type kCocoaCookieDetailsTypeTreeAppCache nodes.
base::scoped_nsobject<NSString> lastAccessed_;
// Only set for type kCocoaCookieDetailsTypeCookie,
// kCocoaCookieDetailsTypePromptDatabase,
// kCocoaCookieDetailsTypePromptLocalStorage, and
// kCocoaCookieDetailsTypeTreeIndexedDB nodes.
base::scoped_nsobject<NSString> domain_;
// Only set for type kCocoaCookieTreeNodeTypeDatabaseStorage and
// kCocoaCookieDetailsTypePromptDatabase nodes.
base::scoped_nsobject<NSString> databaseDescription_;
// Only set for type kCocoaCookieDetailsTypePromptLocalStorage.
base::scoped_nsobject<NSString> localStorageKey_;
base::scoped_nsobject<NSString> localStorageValue_;
// Only set for type kCocoaCookieDetailsTypeTreeAppCache and
// kCocoaCookieDetailsTypePromptAppCache.
base::scoped_nsobject<NSString> manifestURL_;
}
@property(nonatomic, readonly) BOOL canEditExpiration;
@property(nonatomic) BOOL hasExpiration;
@property(nonatomic, readonly) CocoaCookieDetailsType type;
// The following methods are used in the bindings of subviews inside
// the cookie detail view. Note that the method that tests the
// visibility of the subview for cookie-specific information has a different
// polarity than the other visibility testing methods. This ensures that
// this subview is shown when there is no selection in the cookie tree,
// because a hidden value of |false| is generated when the key value binding
// is evaluated through a nil object. The other methods are bound using a
// |NSNegateBoolean| transformer, so that when there is a empty selection the
// hidden value is |true|.
- (BOOL)shouldHideCookieDetailsView;
- (BOOL)shouldShowLocalStorageTreeDetailsView;
- (BOOL)shouldShowLocalStoragePromptDetailsView;
- (BOOL)shouldShowDatabaseTreeDetailsView;
- (BOOL)shouldShowDatabasePromptDetailsView;
- (BOOL)shouldShowAppCachePromptDetailsView;
- (BOOL)shouldShowAppCacheTreeDetailsView;
- (BOOL)shouldShowIndexedDBTreeDetailsView;
- (NSString*)name;
- (NSString*)content;
- (NSString*)domain;
- (NSString*)path;
- (NSString*)sendFor;
- (NSString*)created;
- (NSString*)expires;
- (NSString*)fileSize;
- (NSString*)lastModified;
- (NSString*)lastAccessed;
- (NSString*)databaseDescription;
- (NSString*)localStorageKey;
- (NSString*)localStorageValue;
- (NSString*)manifestURL;
// Used for folders in the cookie tree.
- (id)initAsFolder;
// Used for cookie details in both the cookie tree and the cookie prompt dialog.
- (id)initWithCookie:(const net::CanonicalCookie*)treeNode
canEditExpiration:(BOOL)canEditExpiration;
// Used for database details in the cookie tree.
- (id)initWithDatabase:
(const BrowsingDataDatabaseHelper::DatabaseInfo*)databaseInfo;
// Used for local storage details in the cookie tree.
- (id)initWithLocalStorage:
(const BrowsingDataLocalStorageHelper::LocalStorageInfo*)localStorageInfo;
// Used for database details in the cookie prompt dialog.
- (id)initWithDatabase:(const std::string&)domain
databaseName:(const base::string16&)databaseName
databaseDescription:(const base::string16&)databaseDescription
fileSize:(unsigned long)fileSize;
// -initWithAppCacheInfo: creates a cookie details with the manifest URL plus
// all of this additional information that is available after an appcache is
// actually created, including its creation date, size and last accessed time.
- (id)initWithAppCacheInfo:(const appcache::AppCacheInfo*)appcacheInfo;
// Used for local storage details in the cookie prompt dialog.
- (id)initWithLocalStorage:(const std::string&)domain
key:(const base::string16&)key
value:(const base::string16&)value;
// -initWithAppCacheManifestURL: is called when the cookie prompt is displayed
// for an appcache, at that time only the manifest URL of the appcache is known.
- (id)initWithAppCacheManifestURL:(const std::string&)manifestURL;
// Used for IndexedDB details in the cookie tree.
- (id)initWithIndexedDBInfo:
(const content::IndexedDBInfo*)indexedDB;
// A factory method to create a configured instance given a node from
// the cookie tree in |treeNode|.
+ (CocoaCookieDetails*)createFromCookieTreeNode:(CookieTreeNode*)treeNode;
@end
// The subpanes of the cookie details view expect to be able to bind to methods
// through a key path in the form |content.details.xxxx|. This class serves as
// an adapter that simply wraps a |CocoaCookieDetails| object. An instance of
// this class is set as the content object for cookie details view's object
// controller so that key paths are properly resolved through to the
// |CocoaCookieDetails| object for the cookie prompt.
@interface CookiePromptContentDetailsAdapter : NSObject {
@private
base::scoped_nsobject<CocoaCookieDetails> details_;
}
- (CocoaCookieDetails*)details;
// The adapter assumes ownership of the details object
// in its initializer.
- (id)initWithDetails:(CocoaCookieDetails*)details;
@end