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