Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / content_settings / local_shared_objects_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/content_settings/local_shared_objects_container.h"
6
7 #include "chrome/browser/browsing_data/browsing_data_appcache_helper.h"
8 #include "chrome/browser/browsing_data/browsing_data_channel_id_helper.h"
9 #include "chrome/browser/browsing_data/browsing_data_cookie_helper.h"
10 #include "chrome/browser/browsing_data/browsing_data_database_helper.h"
11 #include "chrome/browser/browsing_data/browsing_data_file_system_helper.h"
12 #include "chrome/browser/browsing_data/browsing_data_indexed_db_helper.h"
13 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h"
14 #include "chrome/browser/browsing_data/browsing_data_service_worker_helper.h"
15 #include "chrome/browser/browsing_data/canonical_cookie_hash.h"
16 #include "chrome/browser/browsing_data/cookies_tree_model.h"
17 #include "chrome/browser/profiles/profile.h"
18 #include "content/public/browser/storage_partition.h"
19 #include "content/public/common/url_constants.h"
20 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
21 #include "net/cookies/canonical_cookie.h"
22 #include "url/gurl.h"
23
24 namespace {
25
26 bool SameDomainOrHost(const GURL& gurl1, const GURL& gurl2) {
27   return net::registry_controlled_domains::SameDomainOrHost(
28       gurl1,
29       gurl2,
30       net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
31 }
32
33 }  // namespace
34
35 LocalSharedObjectsContainer::LocalSharedObjectsContainer(Profile* profile)
36     : appcaches_(new CannedBrowsingDataAppCacheHelper(profile)),
37       channel_ids_(new CannedBrowsingDataChannelIDHelper()),
38       cookies_(new CannedBrowsingDataCookieHelper(
39           profile->GetRequestContext())),
40       databases_(new CannedBrowsingDataDatabaseHelper(profile)),
41       file_systems_(new CannedBrowsingDataFileSystemHelper(profile)),
42       indexed_dbs_(new CannedBrowsingDataIndexedDBHelper(
43           content::BrowserContext::GetDefaultStoragePartition(profile)->
44               GetIndexedDBContext())),
45       local_storages_(new CannedBrowsingDataLocalStorageHelper(profile)),
46       service_workers_(new CannedBrowsingDataServiceWorkerHelper(
47           content::BrowserContext::GetDefaultStoragePartition(profile)->
48               GetServiceWorkerContext())),
49       session_storages_(new CannedBrowsingDataLocalStorageHelper(profile)) {
50 }
51
52 LocalSharedObjectsContainer::~LocalSharedObjectsContainer() {
53 }
54
55 void LocalSharedObjectsContainer::Reset() {
56   appcaches_->Reset();
57   channel_ids_->Reset();
58   cookies_->Reset();
59   databases_->Reset();
60   file_systems_->Reset();
61   indexed_dbs_->Reset();
62   local_storages_->Reset();
63   service_workers_->Reset();
64   session_storages_->Reset();
65 }
66
67 size_t LocalSharedObjectsContainer::GetObjectCount() const {
68   size_t count = 0;
69   count += appcaches()->GetAppCacheCount();
70   count += channel_ids()->GetChannelIDCount();
71   count += cookies()->GetCookieCount();
72   count += databases()->GetDatabaseCount();
73   count += file_systems()->GetFileSystemCount();
74   count += indexed_dbs()->GetIndexedDBCount();
75   count += local_storages()->GetLocalStorageCount();
76   count += service_workers()->GetServiceWorkerCount();
77   count += session_storages()->GetLocalStorageCount();
78   return count;
79 }
80
81 size_t LocalSharedObjectsContainer::GetObjectCountForDomain(
82     const GURL& origin) const {
83   size_t count = 0;
84
85   // Count all cookies that have the same domain as the provided |origin|. This
86   // means count all cookies that has been set by a host that is not considered
87   // to be a third party regarding the domain of the provided |origin|.
88   // E.g. if the origin is "http://foo.com" then all cookies with domain foo.com,
89   // a.foo.com, b.a.foo.com or *.foo.com will be counted.
90   typedef CannedBrowsingDataCookieHelper::OriginCookieSetMap OriginCookieSetMap;
91   const OriginCookieSetMap& origin_cookies_set_map =
92       cookies()->origin_cookie_set_map();
93   for (OriginCookieSetMap::const_iterator it = origin_cookies_set_map.begin();
94        it != origin_cookies_set_map.end();
95        ++it) {
96     const canonical_cookie::CookieHashSet* cookie_list = it->second;
97     for (canonical_cookie::CookieHashSet::const_iterator cookie =
98              cookie_list->begin();
99          cookie != cookie_list->end();
100          ++cookie) {
101       // Strip leading '.'s.
102       std::string cookie_domain = cookie->Domain();
103       if (cookie_domain[0] == '.')
104         cookie_domain = cookie_domain.substr(1);
105       // The |domain_url| is only created in order to use the
106       // SameDomainOrHost method below. It does not matter which scheme is
107       // used as the scheme is ignored by the SameDomainOrHost method.
108       GURL domain_url(std::string(url::kHttpScheme) +
109                       url::kStandardSchemeSeparator + cookie_domain);
110       if (SameDomainOrHost(origin, domain_url))
111         ++count;
112     }
113   }
114
115   // Count local storages for the domain of the given |origin|.
116   const std::set<GURL> local_storage_info =
117       local_storages()->GetLocalStorageInfo();
118   for (std::set<GURL>::const_iterator it = local_storage_info.begin();
119        it != local_storage_info.end();
120        ++it) {
121     if (SameDomainOrHost(origin, *it))
122       ++count;
123   }
124
125   // Count session storages for the domain of the given |origin|.
126   const std::set<GURL> urls = session_storages()->GetLocalStorageInfo();
127   for (std::set<GURL>::const_iterator it = urls.begin();
128        it != urls.end();
129        ++it) {
130     if (SameDomainOrHost(origin, *it))
131       ++count;
132   }
133
134   // Count indexed dbs for the domain of the given |origin|.
135   typedef CannedBrowsingDataIndexedDBHelper::PendingIndexedDBInfo IndexedDBInfo;
136   const std::set<IndexedDBInfo>& indexed_db_info =
137       indexed_dbs()->GetIndexedDBInfo();
138   for (std::set<IndexedDBInfo>::const_iterator it =
139           indexed_db_info.begin();
140       it != indexed_db_info.end();
141       ++it) {
142     if (SameDomainOrHost(origin, it->origin))
143       ++count;
144   }
145
146   // Count service workers for the domain of the given |origin|.
147   typedef CannedBrowsingDataServiceWorkerHelper::PendingServiceWorkerUsageInfo
148       ServiceWorkerInfo;
149   const std::set<ServiceWorkerInfo>& service_worker_info =
150       service_workers()->GetServiceWorkerUsageInfo();
151   for (std::set<ServiceWorkerInfo>::const_iterator it =
152           service_worker_info.begin();
153       it != service_worker_info.end();
154       ++it) {
155     if (SameDomainOrHost(origin, it->origin))
156       ++count;
157   }
158
159   // Count filesystems for the domain of the given |origin|.
160   typedef BrowsingDataFileSystemHelper::FileSystemInfo FileSystemInfo;
161   typedef std::list<FileSystemInfo> FileSystemInfoList;
162   const FileSystemInfoList& file_system_info =
163       file_systems()->GetFileSystemInfo();
164   for (FileSystemInfoList::const_iterator it = file_system_info.begin();
165        it != file_system_info.end();
166        ++it) {
167     if (SameDomainOrHost(origin, it->origin))
168       ++count;
169   }
170
171   // Count databases for the domain of the given |origin|.
172   typedef CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo DatabaseInfo;
173   const std::set<DatabaseInfo>& database_list =
174       databases()->GetPendingDatabaseInfo();
175   for (std::set<DatabaseInfo>::const_iterator it =
176           database_list.begin();
177       it != database_list.end();
178       ++it) {
179     if (SameDomainOrHost(origin, it->origin))
180       ++count;
181   }
182
183   // Count the AppCache manifest files for the domain of the given |origin|.
184   typedef BrowsingDataAppCacheHelper::OriginAppCacheInfoMap
185       OriginAppCacheInfoMap;
186   const OriginAppCacheInfoMap& map = appcaches()->GetOriginAppCacheInfoMap();
187   for (OriginAppCacheInfoMap::const_iterator it = map.begin();
188        it != map.end();
189        ++it) {
190     const content::AppCacheInfoVector& info_vector = it->second;
191     for (content::AppCacheInfoVector::const_iterator info =
192              info_vector.begin();
193          info != info_vector.end();
194          ++info) {
195        if (SameDomainOrHost(origin, info->manifest_url))
196          ++count;
197     }
198   }
199
200   return count;
201 }
202
203 scoped_ptr<CookiesTreeModel>
204 LocalSharedObjectsContainer::CreateCookiesTreeModel() const {
205   LocalDataContainer* container = new LocalDataContainer(
206       cookies(),
207       databases(),
208       local_storages(),
209       session_storages(),
210       appcaches(),
211       indexed_dbs(),
212       file_systems(),
213       NULL,
214       channel_ids(),
215       service_workers(),
216       NULL);
217
218   return make_scoped_ptr(new CookiesTreeModel(container, NULL, true));
219 }