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