1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_BROWSING_DATA_LOCAL_DATA_CONTAINER_H_ 6 #define CHROME_BROWSER_BROWSING_DATA_LOCAL_DATA_CONTAINER_H_ 7 8 #include <list> 9 #include <map> 10 #include <string> 11 #include <vector> 12 13 #include "base/memory/ref_counted.h" 14 #include "base/memory/weak_ptr.h" 15 #include "base/strings/string16.h" 16 #include "chrome/browser/browsing_data/browsing_data_appcache_helper.h" 17 #include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" 18 #include "chrome/browser/browsing_data/browsing_data_database_helper.h" 19 #include "chrome/browser/browsing_data/browsing_data_file_system_helper.h" 20 #include "chrome/browser/browsing_data/browsing_data_indexed_db_helper.h" 21 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" 22 #include "chrome/browser/browsing_data/browsing_data_quota_helper.h" 23 #include "chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.h" 24 #include "net/ssl/server_bound_cert_store.h" 25 26 class BrowsingDataFlashLSOHelper; 27 class CookiesTreeModel; 28 class LocalDataContainer; 29 30 namespace net { 31 class CanonicalCookie; 32 } 33 34 // Friendly typedefs for the multiple types of lists used in the model. 35 namespace { 36 37 typedef std::list<net::CanonicalCookie> CookieList; 38 typedef std::list<BrowsingDataDatabaseHelper::DatabaseInfo> DatabaseInfoList; 39 typedef std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo> 40 LocalStorageInfoList; 41 typedef std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo> 42 SessionStorageInfoList; 43 typedef std::list<content::IndexedDBInfo> 44 IndexedDBInfoList; 45 typedef std::list<BrowsingDataFileSystemHelper::FileSystemInfo> 46 FileSystemInfoList; 47 typedef std::list<BrowsingDataQuotaHelper::QuotaInfo> QuotaInfoList; 48 typedef net::ServerBoundCertStore::ServerBoundCertList ServerBoundCertList; 49 typedef std::map<GURL, std::list<appcache::AppCacheInfo> > AppCacheInfoMap; 50 typedef std::vector<std::string> FlashLSODomainList; 51 52 } // namespace 53 54 // LocalDataContainer --------------------------------------------------------- 55 // This class is a wrapper around all the BrowsingData*Helper classes. Because 56 // isolated applications have separate storage, we need different helper 57 // instances. As such, this class contains the app name and id, along with the 58 // helpers for all of the data types we need. The browser-wide "app id" will be 59 // the empty string, as no app can have an empty id. 60 class LocalDataContainer { 61 public: 62 LocalDataContainer( 63 BrowsingDataCookieHelper* cookie_helper, 64 BrowsingDataDatabaseHelper* database_helper, 65 BrowsingDataLocalStorageHelper* local_storage_helper, 66 BrowsingDataLocalStorageHelper* session_storage_helper, 67 BrowsingDataAppCacheHelper* appcache_helper, 68 BrowsingDataIndexedDBHelper* indexed_db_helper, 69 BrowsingDataFileSystemHelper* file_system_helper, 70 BrowsingDataQuotaHelper* quota_helper, 71 BrowsingDataServerBoundCertHelper* server_bound_cert_helper, 72 BrowsingDataFlashLSOHelper* flash_data_helper); 73 virtual ~LocalDataContainer(); 74 75 // This method must be called to start the process of fetching the resources. 76 // The delegate passed in is called back to deliver the updates. 77 void Init(CookiesTreeModel* delegate); 78 79 private: 80 friend class CookiesTreeModel; 81 friend class CookieTreeAppCacheNode; 82 friend class CookieTreeCookieNode; 83 friend class CookieTreeDatabaseNode; 84 friend class CookieTreeLocalStorageNode; 85 friend class CookieTreeSessionStorageNode; 86 friend class CookieTreeIndexedDBNode; 87 friend class CookieTreeFileSystemNode; 88 friend class CookieTreeQuotaNode; 89 friend class CookieTreeServerBoundCertNode; 90 friend class CookieTreeFlashLSONode; 91 92 // Callback methods to be invoked when fetching the data is complete. 93 void OnAppCacheModelInfoLoaded(); 94 void OnCookiesModelInfoLoaded(const net::CookieList& cookie_list); 95 void OnDatabaseModelInfoLoaded(const DatabaseInfoList& database_info); 96 void OnLocalStorageModelInfoLoaded( 97 const LocalStorageInfoList& local_storage_info); 98 void OnSessionStorageModelInfoLoaded( 99 const LocalStorageInfoList& local_storage_info); 100 void OnIndexedDBModelInfoLoaded( 101 const IndexedDBInfoList& indexed_db_info); 102 void OnFileSystemModelInfoLoaded( 103 const FileSystemInfoList& file_system_info); 104 void OnQuotaModelInfoLoaded(const QuotaInfoList& quota_info); 105 void OnServerBoundCertModelInfoLoaded(const ServerBoundCertList& cert_list); 106 void OnFlashLSOInfoLoaded(const FlashLSODomainList& domains); 107 108 // Pointers to the helper objects, needed to retreive all the types of locally 109 // stored data. 110 scoped_refptr<BrowsingDataAppCacheHelper> appcache_helper_; 111 scoped_refptr<BrowsingDataCookieHelper> cookie_helper_; 112 scoped_refptr<BrowsingDataDatabaseHelper> database_helper_; 113 scoped_refptr<BrowsingDataLocalStorageHelper> local_storage_helper_; 114 scoped_refptr<BrowsingDataLocalStorageHelper> session_storage_helper_; 115 scoped_refptr<BrowsingDataIndexedDBHelper> indexed_db_helper_; 116 scoped_refptr<BrowsingDataFileSystemHelper> file_system_helper_; 117 scoped_refptr<BrowsingDataQuotaHelper> quota_helper_; 118 scoped_refptr<BrowsingDataServerBoundCertHelper> server_bound_cert_helper_; 119 scoped_refptr<BrowsingDataFlashLSOHelper> flash_lso_helper_; 120 121 // Storage for all the data that was retrieved through the helper objects. 122 // The collected data is used for (re)creating the CookiesTreeModel. 123 AppCacheInfoMap appcache_info_; 124 CookieList cookie_list_; 125 DatabaseInfoList database_info_list_; 126 LocalStorageInfoList local_storage_info_list_; 127 LocalStorageInfoList session_storage_info_list_; 128 IndexedDBInfoList indexed_db_info_list_; 129 FileSystemInfoList file_system_info_list_; 130 QuotaInfoList quota_info_list_; 131 ServerBoundCertList server_bound_cert_list_; 132 FlashLSODomainList flash_lso_domain_list_; 133 134 // A delegate, which must outlive this object. The update callbacks use the 135 // delegate to deliver the updated data to the CookieTreeModel. 136 CookiesTreeModel* model_; 137 138 base::WeakPtrFactory<LocalDataContainer> weak_ptr_factory_; 139 140 DISALLOW_COPY_AND_ASSIGN(LocalDataContainer); 141 }; 142 143 #endif // CHROME_BROWSER_BROWSING_DATA_LOCAL_DATA_CONTAINER_H_ 144