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 #include "chrome/browser/browsing_data/local_data_container.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/memory/linked_ptr.h"
      9 #include "chrome/browser/browsing_data/browsing_data_flash_lso_helper.h"
     10 #include "chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.h"
     11 #include "chrome/browser/browsing_data/cookies_tree_model.h"
     12 #include "chrome/browser/content_settings/cookie_settings.h"
     13 #include "net/cookies/canonical_cookie.h"
     14 
     15 ///////////////////////////////////////////////////////////////////////////////
     16 // LocalDataContainer, public:
     17 
     18 LocalDataContainer::LocalDataContainer(
     19     BrowsingDataCookieHelper* cookie_helper,
     20     BrowsingDataDatabaseHelper* database_helper,
     21     BrowsingDataLocalStorageHelper* local_storage_helper,
     22     BrowsingDataLocalStorageHelper* session_storage_helper,
     23     BrowsingDataAppCacheHelper* appcache_helper,
     24     BrowsingDataIndexedDBHelper* indexed_db_helper,
     25     BrowsingDataFileSystemHelper* file_system_helper,
     26     BrowsingDataQuotaHelper* quota_helper,
     27     BrowsingDataServerBoundCertHelper* server_bound_cert_helper,
     28     BrowsingDataFlashLSOHelper* flash_lso_helper)
     29     : appcache_helper_(appcache_helper),
     30       cookie_helper_(cookie_helper),
     31       database_helper_(database_helper),
     32       local_storage_helper_(local_storage_helper),
     33       session_storage_helper_(session_storage_helper),
     34       indexed_db_helper_(indexed_db_helper),
     35       file_system_helper_(file_system_helper),
     36       quota_helper_(quota_helper),
     37       server_bound_cert_helper_(server_bound_cert_helper),
     38       flash_lso_helper_(flash_lso_helper),
     39       model_(NULL),
     40       weak_ptr_factory_(this) {}
     41 
     42 LocalDataContainer::~LocalDataContainer() {}
     43 
     44 void LocalDataContainer::Init(CookiesTreeModel* model) {
     45   DCHECK(!model_);
     46   model_ = model;
     47 
     48   DCHECK(cookie_helper_.get());
     49   cookie_helper_->StartFetching(
     50       base::Bind(&LocalDataContainer::OnCookiesModelInfoLoaded,
     51                  weak_ptr_factory_.GetWeakPtr()));
     52 
     53   if (database_helper_.get()) {
     54     database_helper_->StartFetching(
     55         base::Bind(&LocalDataContainer::OnDatabaseModelInfoLoaded,
     56                    weak_ptr_factory_.GetWeakPtr()));
     57   }
     58 
     59   if (local_storage_helper_.get()) {
     60     local_storage_helper_->StartFetching(
     61         base::Bind(&LocalDataContainer::OnLocalStorageModelInfoLoaded,
     62                    weak_ptr_factory_.GetWeakPtr()));
     63   }
     64 
     65   if (session_storage_helper_.get()) {
     66     session_storage_helper_->StartFetching(
     67         base::Bind(&LocalDataContainer::OnSessionStorageModelInfoLoaded,
     68                    weak_ptr_factory_.GetWeakPtr()));
     69   }
     70 
     71   // TODO(michaeln): When all of the UI implementations have been updated, make
     72   // this a required parameter.
     73   if (appcache_helper_.get()) {
     74     appcache_helper_->StartFetching(
     75         base::Bind(&LocalDataContainer::OnAppCacheModelInfoLoaded,
     76                    weak_ptr_factory_.GetWeakPtr()));
     77   }
     78 
     79   if (indexed_db_helper_.get()) {
     80     indexed_db_helper_->StartFetching(
     81         base::Bind(&LocalDataContainer::OnIndexedDBModelInfoLoaded,
     82                    weak_ptr_factory_.GetWeakPtr()));
     83   }
     84 
     85   if (file_system_helper_.get()) {
     86     file_system_helper_->StartFetching(
     87         base::Bind(&LocalDataContainer::OnFileSystemModelInfoLoaded,
     88                    weak_ptr_factory_.GetWeakPtr()));
     89   }
     90 
     91   if (quota_helper_.get()) {
     92     quota_helper_->StartFetching(
     93         base::Bind(&LocalDataContainer::OnQuotaModelInfoLoaded,
     94                    weak_ptr_factory_.GetWeakPtr()));
     95   }
     96 
     97   if (server_bound_cert_helper_.get()) {
     98     server_bound_cert_helper_->StartFetching(
     99         base::Bind(&LocalDataContainer::OnServerBoundCertModelInfoLoaded,
    100                    weak_ptr_factory_.GetWeakPtr()));
    101   }
    102 
    103   if (flash_lso_helper_.get()) {
    104     flash_lso_helper_->StartFetching(
    105         base::Bind(&LocalDataContainer::OnFlashLSOInfoLoaded,
    106                    weak_ptr_factory_.GetWeakPtr()));
    107   }
    108 }
    109 
    110 void LocalDataContainer::OnAppCacheModelInfoLoaded() {
    111   using appcache::AppCacheInfo;
    112   using appcache::AppCacheInfoCollection;
    113   using appcache::AppCacheInfoVector;
    114   typedef std::map<GURL, AppCacheInfoVector> InfoByOrigin;
    115 
    116   scoped_refptr<AppCacheInfoCollection> appcache_info =
    117       appcache_helper_->info_collection();
    118   if (!appcache_info.get() || appcache_info->infos_by_origin.empty())
    119     return;
    120 
    121   for (InfoByOrigin::const_iterator origin =
    122            appcache_info->infos_by_origin.begin();
    123        origin != appcache_info->infos_by_origin.end(); ++origin) {
    124     std::list<AppCacheInfo>& info_list = appcache_info_[origin->first];
    125     info_list.insert(
    126         info_list.begin(), origin->second.begin(), origin->second.end());
    127   }
    128 
    129   model_->PopulateAppCacheInfo(this);
    130 }
    131 
    132 void LocalDataContainer::OnCookiesModelInfoLoaded(
    133     const net::CookieList& cookie_list) {
    134   cookie_list_.insert(cookie_list_.begin(),
    135                       cookie_list.begin(),
    136                       cookie_list.end());
    137   DCHECK(model_);
    138   model_->PopulateCookieInfo(this);
    139 }
    140 
    141 void LocalDataContainer::OnDatabaseModelInfoLoaded(
    142     const DatabaseInfoList& database_info) {
    143   database_info_list_ = database_info;
    144   DCHECK(model_);
    145   model_->PopulateDatabaseInfo(this);
    146 }
    147 
    148 void LocalDataContainer::OnLocalStorageModelInfoLoaded(
    149     const LocalStorageInfoList& local_storage_info) {
    150   local_storage_info_list_ = local_storage_info;
    151   DCHECK(model_);
    152   model_->PopulateLocalStorageInfo(this);
    153 }
    154 
    155 void LocalDataContainer::OnSessionStorageModelInfoLoaded(
    156     const LocalStorageInfoList& session_storage_info) {
    157   session_storage_info_list_ = session_storage_info;
    158   DCHECK(model_);
    159   model_->PopulateSessionStorageInfo(this);
    160 }
    161 
    162 void LocalDataContainer::OnIndexedDBModelInfoLoaded(
    163     const IndexedDBInfoList& indexed_db_info) {
    164   indexed_db_info_list_ = indexed_db_info;
    165   DCHECK(model_);
    166   model_->PopulateIndexedDBInfo(this);
    167 }
    168 
    169 void LocalDataContainer::OnFileSystemModelInfoLoaded(
    170     const FileSystemInfoList& file_system_info) {
    171   file_system_info_list_ = file_system_info;
    172   DCHECK(model_);
    173   model_->PopulateFileSystemInfo(this);
    174 }
    175 
    176 void LocalDataContainer::OnQuotaModelInfoLoaded(
    177     const QuotaInfoList& quota_info) {
    178   quota_info_list_ = quota_info;
    179   DCHECK(model_);
    180   model_->PopulateQuotaInfo(this);
    181 }
    182 
    183 void LocalDataContainer::OnServerBoundCertModelInfoLoaded(
    184     const ServerBoundCertList& cert_list) {
    185   server_bound_cert_list_ = cert_list;
    186   DCHECK(model_);
    187   model_->PopulateServerBoundCertInfo(this);
    188 }
    189 
    190 void LocalDataContainer::OnFlashLSOInfoLoaded(
    191     const FlashLSODomainList& domains) {
    192   flash_lso_domain_list_ = domains;
    193   DCHECK(model_);
    194   model_->PopulateFlashLSOInfo(this);
    195 }
    196