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
LocalDataContainer(BrowsingDataCookieHelper * cookie_helper,BrowsingDataDatabaseHelper * database_helper,BrowsingDataLocalStorageHelper * local_storage_helper,BrowsingDataLocalStorageHelper * session_storage_helper,BrowsingDataAppCacheHelper * appcache_helper,BrowsingDataIndexedDBHelper * indexed_db_helper,BrowsingDataFileSystemHelper * file_system_helper,BrowsingDataQuotaHelper * quota_helper,BrowsingDataServerBoundCertHelper * server_bound_cert_helper,BrowsingDataFlashLSOHelper * flash_lso_helper)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
~LocalDataContainer()42 LocalDataContainer::~LocalDataContainer() {}
43
Init(CookiesTreeModel * model)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
OnAppCacheModelInfoLoaded()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
OnCookiesModelInfoLoaded(const net::CookieList & cookie_list)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
OnDatabaseModelInfoLoaded(const DatabaseInfoList & database_info)141 void LocalDataContainer::OnDatabaseModelInfoLoaded(
142 const DatabaseInfoList& database_info) {
143 database_info_list_ = database_info;
144 DCHECK(model_);
145 model_->PopulateDatabaseInfo(this);
146 }
147
OnLocalStorageModelInfoLoaded(const LocalStorageInfoList & local_storage_info)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
OnSessionStorageModelInfoLoaded(const LocalStorageInfoList & session_storage_info)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
OnIndexedDBModelInfoLoaded(const IndexedDBInfoList & indexed_db_info)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
OnFileSystemModelInfoLoaded(const FileSystemInfoList & file_system_info)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
OnQuotaModelInfoLoaded(const QuotaInfoList & quota_info)176 void LocalDataContainer::OnQuotaModelInfoLoaded(
177 const QuotaInfoList& quota_info) {
178 quota_info_list_ = quota_info;
179 DCHECK(model_);
180 model_->PopulateQuotaInfo(this);
181 }
182
OnServerBoundCertModelInfoLoaded(const ServerBoundCertList & cert_list)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
OnFlashLSOInfoLoaded(const FlashLSODomainList & domains)190 void LocalDataContainer::OnFlashLSOInfoLoaded(
191 const FlashLSODomainList& domains) {
192 flash_lso_domain_list_ = domains;
193 DCHECK(model_);
194 model_->PopulateFlashLSOInfo(this);
195 }
196