1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_COOKIES_TREE_MODEL_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_COOKIES_TREE_MODEL_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// TODO(viettrungluu): This header file #includes far too much and has too much 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// inline code (which shouldn't be inline). 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/observer_list.h" 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string16.h" 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browsing_data_appcache_helper.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browsing_data_database_helper.h" 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/browsing_data_indexed_db_helper.h" 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browsing_data_local_storage_helper.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/cookie_monster.h" 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/models/tree_node_model.h" 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookiesTreeModel; 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeAppCacheNode; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeAppCachesNode; 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeCookieNode; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeCookiesNode; 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeDatabaseNode; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeDatabasesNode; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeLocalStorageNode; 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeLocalStoragesNode; 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass CookieTreeSessionStorageNode; 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass CookieTreeSessionStoragesNode; 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass CookieTreeIndexedDBNode; 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass CookieTreeIndexedDBsNode; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeOriginNode; 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CookieTreeNode ------------------------------------------------------------- 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The base node type in the Cookies, Databases, and Local Storage options 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// view, from which all other types are derived. Specialized from TreeNode in 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// that it has a notion of deleting objects stored in the profile, and being 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// able to have its children do the same. 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass CookieTreeNode : public ui::TreeNode<CookieTreeNode> { 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Used to pull out information for the InfoView (the details display below 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the tree control.) 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch struct DetailedInfo { 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NodeType corresponds to the various CookieTreeNode types. 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch enum NodeType { 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TYPE_ROOT, // This is used for CookieTreeRootNode nodes. 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TYPE_ORIGIN, // This is used for CookieTreeOriginNode nodes. 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TYPE_COOKIES, // This is used for CookieTreeCookiesNode nodes. 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TYPE_COOKIE, // This is used for CookieTreeCookieNode nodes. 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TYPE_DATABASES, // This is used for CookieTreeDatabasesNode. 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TYPE_DATABASE, // This is used for CookieTreeDatabaseNode. 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TYPE_LOCAL_STORAGES, // This is used for CookieTreeLocalStoragesNode. 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TYPE_LOCAL_STORAGE, // This is used for CookieTreeLocalStorageNode. 613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TYPE_SESSION_STORAGES, // This is used for CookieTreeSessionStoragesNode. 623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TYPE_SESSION_STORAGE, // This is used for CookieTreeSessionStorageNode. 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TYPE_APPCACHES, // This is used for CookieTreeAppCachesNode. 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TYPE_APPCACHE, // This is used for CookieTreeAppCacheNode. 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TYPE_INDEXED_DBS, // This is used for CookieTreeIndexedDBsNode. 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TYPE_INDEXED_DB, // This is used for CookieTreeIndexedDBNode. 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TODO(viettrungluu): Figure out whether we want to store |origin| as a 703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // |string16| or a (UTF-8) |std::string|, and convert. Remove constructor 713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // taking an |std::wstring|. 723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DetailedInfo(const string16& origin, NodeType node_type, 733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const net::CookieMonster::CanonicalCookie* cookie, 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const BrowsingDataDatabaseHelper::DatabaseInfo* database_info, 753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const BrowsingDataLocalStorageHelper::LocalStorageInfo* 763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick local_storage_info, 773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const BrowsingDataLocalStorageHelper::LocalStorageInfo* 783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick session_storage_info, 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const appcache::AppCacheInfo* appcache_info, 803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const BrowsingDataIndexedDBHelper::IndexedDBInfo* indexed_db_info) 813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : origin(UTF16ToWideHack(origin)), 823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick node_type(node_type), 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick cookie(cookie), 843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick database_info(database_info), 853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick local_storage_info(local_storage_info), 863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick session_storage_info(session_storage_info), 873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick appcache_info(appcache_info), 883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick indexed_db_info(indexed_db_info) { 893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK((node_type != TYPE_DATABASE) || database_info); 903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK((node_type != TYPE_LOCAL_STORAGE) || local_storage_info); 913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK((node_type != TYPE_SESSION_STORAGE) || session_storage_info); 923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK((node_type != TYPE_APPCACHE) || appcache_info); 933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK((node_type != TYPE_INDEXED_DB) || indexed_db_info); 943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if !defined(WCHAR_T_IS_UTF16) 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DetailedInfo(const std::wstring& origin, NodeType node_type, 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const net::CookieMonster::CanonicalCookie* cookie, 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BrowsingDataDatabaseHelper::DatabaseInfo* database_info, 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BrowsingDataLocalStorageHelper::LocalStorageInfo* 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch local_storage_info, 1013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const BrowsingDataLocalStorageHelper::LocalStorageInfo* 1023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick session_storage_info, 1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const appcache::AppCacheInfo* appcache_info, 1043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const BrowsingDataIndexedDBHelper::IndexedDBInfo* indexed_db_info) 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : origin(origin), 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch node_type(node_type), 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch cookie(cookie), 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch database_info(database_info), 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch local_storage_info(local_storage_info), 1103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick session_storage_info(session_storage_info), 1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick appcache_info(appcache_info), 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick indexed_db_info(indexed_db_info) { 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK((node_type != TYPE_DATABASE) || database_info); 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK((node_type != TYPE_LOCAL_STORAGE) || local_storage_info); 1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK((node_type != TYPE_SESSION_STORAGE) || session_storage_info); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK((node_type != TYPE_APPCACHE) || appcache_info); 1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK((node_type != TYPE_INDEXED_DB) || indexed_db_info); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 1193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring origin; 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NodeType node_type; 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const net::CookieMonster::CanonicalCookie* cookie; 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BrowsingDataDatabaseHelper::DatabaseInfo* database_info; 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BrowsingDataLocalStorageHelper::LocalStorageInfo* local_storage_info; 1263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const BrowsingDataLocalStorageHelper::LocalStorageInfo* 1273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick session_storage_info; 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const appcache::AppCacheInfo* appcache_info; 1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const BrowsingDataIndexedDBHelper::IndexedDBInfo* indexed_db_info; 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeNode() {} 1333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick explicit CookieTreeNode(const string16& title) 13472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : ui::TreeNode<CookieTreeNode>(title) {} 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~CookieTreeNode() {} 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete backend storage for this node, and any children nodes. (E.g. delete 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the cookie from CookieMonster, clear the database, and so forth.) 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DeleteStoredObjects(); 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Gets a pointer back to the associated model for the tree we are in. 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual CookiesTreeModel* GetModel() const; 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns a struct with detailed information used to populate the details 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // part of the view. 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual DetailedInfo GetDetailedInfo() const = 0; 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class NodeTitleComparator { 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool operator() (const CookieTreeNode* lhs, const CookieTreeNode* rhs); 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AddChildSortedByTitle(CookieTreeNode* new_child); 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookieTreeNode); 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CookieTreeRootNode --------------------------------------------------------- 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The node at the root of the CookieTree that gets inserted into the view. 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeRootNode : public CookieTreeNode { 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 16521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen explicit CookieTreeRootNode(CookiesTreeModel* model); 16621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeRootNode(); 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeOriginNode* GetOrCreateOriginNode(const GURL& url); 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // CookieTreeNode methods: 17121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual CookiesTreeModel* GetModel() const; 17221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen private: 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookiesTreeModel* model_; 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookieTreeRootNode); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CookieTreeOriginNode ------------------------------------------------------- 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeOriginNode : public CookieTreeNode { 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the origin node's title to use for a given URL. 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static std::wstring TitleForUrl(const GURL& url); 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit CookieTreeOriginNode(const GURL& url); 187731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual ~CookieTreeOriginNode(); 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // CookieTreeNode methods: 190731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual DetailedInfo GetDetailedInfo() const; 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // CookieTreeOriginNode methods: 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeCookiesNode* GetOrCreateCookiesNode(); 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeDatabasesNode* GetOrCreateDatabasesNode(); 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeLocalStoragesNode* GetOrCreateLocalStoragesNode(); 1963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CookieTreeSessionStoragesNode* GetOrCreateSessionStoragesNode(); 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeAppCachesNode* GetOrCreateAppCachesNode(); 1983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CookieTreeIndexedDBsNode* GetOrCreateIndexedDBsNode(); 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates an content exception for this origin of type 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // CONTENT_SETTINGS_TYPE_COOKIES. 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void CreateContentException(HostContentSettingsMap* content_settings, 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ContentSetting setting) const; 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // True if a content exception can be created for this origin. 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool CanCreateContentException() const; 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 2093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Pointers to the cookies, databases, local and session storage and appcache 2103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // nodes. When we build up the tree we need to quickly get a reference to 2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // the COOKIES node to add children. Checking each child and interrogating 2123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // them to see if they are a COOKIES, APPCACHES, DATABASES etc node seems 2133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // less preferable than storing an extra pointer per origin. 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeCookiesNode* cookies_child_; 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeDatabasesNode* databases_child_; 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeLocalStoragesNode* local_storages_child_; 2173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CookieTreeSessionStoragesNode* session_storages_child_; 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeAppCachesNode* appcaches_child_; 2193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CookieTreeIndexedDBsNode* indexed_dbs_child_; 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The URL for which this node was initially created. 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url_; 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookieTreeOriginNode); 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CookieTreeCookieNode ------------------------------------------------------ 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeCookieNode : public CookieTreeNode { 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class CookieTreeCookiesNode; 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Does not take ownership of cookie, and cookie should remain valid at least 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // as long as the CookieTreeCookieNode is valid. 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit CookieTreeCookieNode(net::CookieMonster::CanonicalCookie* cookie); 23521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeCookieNode(); 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // CookieTreeNode methods: 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DeleteStoredObjects(); 23921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Cookie_ is not owned by the node, and is expected to remain valid as long 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // as the CookieTreeCookieNode is valid. 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::CookieMonster::CanonicalCookie* cookie_; 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookieTreeCookieNode); 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeCookiesNode : public CookieTreeNode { 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeCookiesNode(); 25221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeCookiesNode(); 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AddCookieNode(CookieTreeCookieNode* child) { 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddChildSortedByTitle(child); 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookieTreeCookiesNode); 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CookieTreeAppCacheNode ----------------------------------------------------- 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeAppCacheNode : public CookieTreeNode { 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class CookieTreeAppCachesNode; 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Does not take ownership of appcache_info, and appcache_info should remain 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // valid at least as long as the CookieTreeAppCacheNode is valid. 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit CookieTreeAppCacheNode( 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const appcache::AppCacheInfo* appcache_info); 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~CookieTreeAppCacheNode() {} 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DeleteStoredObjects(); 27621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const appcache::AppCacheInfo* appcache_info_; 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookieTreeAppCacheNode); 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeAppCachesNode : public CookieTreeNode { 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeAppCachesNode(); 28621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeAppCachesNode(); 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AddAppCacheNode(CookieTreeAppCacheNode* child) { 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddChildSortedByTitle(child); 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookieTreeAppCachesNode); 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CookieTreeDatabaseNode ----------------------------------------------------- 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeDatabaseNode : public CookieTreeNode { 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class CookieTreeDatabasesNode; 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Does not take ownership of database_info, and database_info should remain 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // valid at least as long as the CookieTreeDatabaseNode is valid. 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit CookieTreeDatabaseNode( 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowsingDataDatabaseHelper::DatabaseInfo* database_info); 30721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeDatabaseNode(); 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DeleteStoredObjects(); 31021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // database_info_ is not owned by the node, and is expected to remain 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // valid as long as the CookieTreeDatabaseNode is valid. 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowsingDataDatabaseHelper::DatabaseInfo* database_info_; 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookieTreeDatabaseNode); 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeDatabasesNode : public CookieTreeNode { 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeDatabasesNode(); 32321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeDatabasesNode(); 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AddDatabaseNode(CookieTreeDatabaseNode* child) { 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddChildSortedByTitle(child); 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookieTreeDatabasesNode); 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CookieTreeLocalStorageNode ------------------------------------------------- 337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeLocalStorageNode : public CookieTreeNode { 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Does not take ownership of local_storage_info, and local_storage_info 3403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // should remain valid at least as long as the CookieTreeLocalStorageNode is 3413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // valid. 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit CookieTreeLocalStorageNode( 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowsingDataLocalStorageHelper::LocalStorageInfo* local_storage_info); 34421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeLocalStorageNode(); 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // CookieTreeNode methods: 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DeleteStoredObjects(); 34821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // local_storage_info_ is not owned by the node, and is expected to remain 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // valid as long as the CookieTreeLocalStorageNode is valid. 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowsingDataLocalStorageHelper::LocalStorageInfo* local_storage_info_; 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookieTreeLocalStorageNode); 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookieTreeLocalStoragesNode : public CookieTreeNode { 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieTreeLocalStoragesNode(); 36121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeLocalStoragesNode(); 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AddLocalStorageNode(CookieTreeLocalStorageNode* child) { 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddChildSortedByTitle(child); 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 3703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookieTreeLocalStoragesNode); 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// CookieTreeSessionStorageNode ----------------------------------------------- 3763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass CookieTreeSessionStorageNode : public CookieTreeNode { 3773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 3783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Does not take ownership of session_storage_info, and session_storage_info 3793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // should remain valid at least as long as the CookieTreeSessionStorageNode 3803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // is valid. 3813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick explicit CookieTreeSessionStorageNode( 3823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick BrowsingDataLocalStorageHelper::LocalStorageInfo* session_storage_info); 38321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeSessionStorageNode(); 3843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // CookieTreeNode methods: 38621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 3873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 3893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // session_storage_info_ is not owned by the node, and is expected to remain 3903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // valid as long as the CookieTreeSessionStorageNode is valid. 3913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick BrowsingDataLocalStorageHelper::LocalStorageInfo* session_storage_info_; 3923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(CookieTreeSessionStorageNode); 3943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 3953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass CookieTreeSessionStoragesNode : public CookieTreeNode { 3973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 3983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CookieTreeSessionStoragesNode(); 39921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeSessionStoragesNode(); 4003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 40121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 4023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void AddSessionStorageNode(CookieTreeSessionStorageNode* child) { 4043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddChildSortedByTitle(child); 4053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 4063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 4083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(CookieTreeSessionStoragesNode); 4103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 4113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// CookieTreeIndexedDBNode ----------------------------------------------- 4133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass CookieTreeIndexedDBNode : public CookieTreeNode { 4143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 4153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Does not take ownership of session_storage_info, and session_storage_info 4163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // should remain valid at least as long as the CookieTreeSessionStorageNode 4173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // is valid. 4183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick explicit CookieTreeIndexedDBNode( 4193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick BrowsingDataIndexedDBHelper::IndexedDBInfo* indexed_db_info); 42021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeIndexedDBNode(); 4213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // CookieTreeNode methods: 4233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void DeleteStoredObjects(); 42421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 4253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 4273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // indexed_db_info_ is not owned by the node, and is expected to remain 4283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // valid as long as the CookieTreeIndexedDBNode is valid. 4293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick BrowsingDataIndexedDBHelper::IndexedDBInfo* indexed_db_info_; 4303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(CookieTreeIndexedDBNode); 4323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 4333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass CookieTreeIndexedDBsNode : public CookieTreeNode { 4353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 4363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CookieTreeIndexedDBsNode(); 43721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~CookieTreeIndexedDBsNode(); 4383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 43921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual DetailedInfo GetDetailedInfo() const; 4403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void AddIndexedDBNode(CookieTreeIndexedDBNode* child) { 4423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddChildSortedByTitle(child); 4433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 4443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 4463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(CookieTreeIndexedDBsNode); 4473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 4483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 4503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// CookiesTreeModel ----------------------------------------------------------- 45172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass CookiesTreeModel : public ui::TreeNodeModel<CookieTreeNode> { 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Because non-cookie nodes are fetched in a background thread, they are not 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // present at the time the Model is created. The Model then notifies its 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // observers for every item added from databases, local storage, and 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // appcache. We extend the Observer interface to add notifications before and 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // after these batch inserts. 45872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen class Observer : public ui::TreeModelObserver { 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TreeModelBeginBatch(CookiesTreeModel* model) {} 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TreeModelEndBatch(CookiesTreeModel* model) {} 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookiesTreeModel( 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::CookieMonster* cookie_monster_, 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowsingDataDatabaseHelper* database_helper, 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowsingDataLocalStorageHelper* local_storage_helper, 4683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick BrowsingDataLocalStorageHelper* session_storage_helper, 4693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick BrowsingDataAppCacheHelper* appcache_helper, 470ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BrowsingDataIndexedDBHelper* indexed_db_helper, 471ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool use_cookie_source); 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~CookiesTreeModel(); 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 47472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // ui::TreeModel methods: 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the set of icons for the nodes in the tree. You only need override 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // this if you don't want to use the default folder icons. 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void GetIcons(std::vector<SkBitmap>* icons); 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the index of the icon to use for |node|. Return -1 to use the 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // default icon. The index is relative to the list of icons returned from 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // GetIcons. 48272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual int GetIconIndex(ui::TreeModelNode* node); 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // CookiesTreeModel methods: 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void DeleteAllStoredObjects(); 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void DeleteCookieNode(CookieTreeNode* cookie_node); 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Filter the origins to only display matched results. 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UpdateSearchResults(const std::wstring& filter); 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Manages CookiesTreeModel::Observers. This will also call 49272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // TreeNodeModel::AddObserver so that it gets all the proper notifications. 49372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Note that the converse is not true: simply adding a TreeModelObserver will 49472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // not get CookiesTreeModel::Observer notifications. 49572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void AddCookiesTreeObserver(Observer* observer); 49672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void RemoveCookiesTreeObserver(Observer* observer); 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch enum CookieIconIndex { 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ORIGIN = 0, 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch COOKIE = 1, 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DATABASE = 2 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 50421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen typedef net::CookieList CookieList; 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::vector<BrowsingDataDatabaseHelper::DatabaseInfo> 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DatabaseInfoList; 507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::vector<BrowsingDataLocalStorageHelper::LocalStorageInfo> 508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LocalStorageInfoList; 5093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick typedef std::vector<BrowsingDataLocalStorageHelper::LocalStorageInfo> 5103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SessionStorageInfoList; 5113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick typedef std::vector<BrowsingDataIndexedDBHelper::IndexedDBInfo> 5123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IndexedDBInfoList; 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void LoadCookies(); 515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void LoadCookiesWithFilter(const std::wstring& filter); 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnAppCacheModelInfoLoaded(); 518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnDatabaseModelInfoLoaded(const DatabaseInfoList& database_info); 5193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void OnLocalStorageModelInfoLoaded( 5203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const LocalStorageInfoList& local_storage_info); 5213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void OnSessionStorageModelInfoLoaded( 5223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const LocalStorageInfoList& local_storage_info); 5233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void OnIndexedDBModelInfoLoaded( 5243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const IndexedDBInfoList& indexed_db_info); 525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void PopulateAppCacheInfoWithFilter(const std::wstring& filter); 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void PopulateDatabaseInfoWithFilter(const std::wstring& filter); 528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void PopulateLocalStorageInfoWithFilter(const std::wstring& filter); 5293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void PopulateSessionStorageInfoWithFilter(const std::wstring& filter); 5303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void PopulateIndexedDBInfoWithFilter(const std::wstring& filter); 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void NotifyObserverBeginBatch(); 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void NotifyObserverEndBatch(); 534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<net::CookieMonster> cookie_monster_; 536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CookieList all_cookies_; 537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowsingDataAppCacheHelper> appcache_helper_; 539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowsingDataDatabaseHelper> database_helper_; 540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<appcache::AppCacheInfoCollection> appcache_info_; 541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DatabaseInfoList database_info_list_; 542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowsingDataLocalStorageHelper> local_storage_helper_; 5443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<BrowsingDataLocalStorageHelper> session_storage_helper_; 5453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<BrowsingDataIndexedDBHelper> indexed_db_helper_; 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LocalStorageInfoList local_storage_info_list_; 5473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick LocalStorageInfoList session_storage_info_list_; 5483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IndexedDBInfoList indexed_db_info_list_; 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The CookiesTreeModel maintains a separate list of observers that are 551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // specifically of the type CookiesTreeModel::Observer. 552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ObserverList<Observer> cookies_observer_list_; 553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If this is non-zero, then this model is batching updates (there's a lot of 555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // notifications coming down the pipe). This is an integer is used to balance 556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // calls to Begin/EndBatch() if they're called in a nested manner. 557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int batch_update_; 558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 559ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If true, use the CanonicalCookie::Source attribute to group cookies. 560ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Otherwise, use the CanonicalCookie::Domain attribute. 561ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool use_cookie_source_; 562ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class CookieTreeAppCacheNode; 564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class CookieTreeCookieNode; 565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class CookieTreeDatabaseNode; 566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class CookieTreeLocalStorageNode; 5673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick friend class CookieTreeIndexedDBNode; 568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CookiesTreeModel); 570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_COOKIES_TREE_MODEL_H_ 573