- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / browsing_data / local_data_container.cc
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 }