Home | History | Annotate | Download | only in browsing_data
      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