| Index: chrome/browser/content_settings/local_shared_objects_container.cc
|
| diff --git a/chrome/browser/content_settings/local_shared_objects_container.cc b/chrome/browser/content_settings/local_shared_objects_container.cc
|
| index e5e59e6f9ec599750d871efb267334d27d7b1470..8d8dd2804b482f40a9ee6ae84805405ac696d86e 100644
|
| --- a/chrome/browser/content_settings/local_shared_objects_container.cc
|
| +++ b/chrome/browser/content_settings/local_shared_objects_container.cc
|
| @@ -12,6 +12,9 @@
|
| #include "chrome/browser/browsing_data_local_storage_helper.h"
|
| #include "chrome/browser/browsing_data_server_bound_cert_helper.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "content/public/common/url_constants.h"
|
| +#include "googleurl/src/gurl.h"
|
| +#include "net/base/registry_controlled_domain.h"
|
|
|
| LocalSharedObjectsContainer::LocalSharedObjectsContainer(Profile* profile)
|
| : appcaches_(new CannedBrowsingDataAppCacheHelper(profile)),
|
| @@ -38,13 +41,139 @@ void LocalSharedObjectsContainer::Reset() {
|
| session_storages_->Reset();
|
| }
|
|
|
| -bool LocalSharedObjectsContainer::IsEmpty() const {
|
| - return appcaches_->empty() &&
|
| - cookies_->empty() &&
|
| - databases_->empty() &&
|
| - file_systems_->empty() &&
|
| - indexed_dbs_->empty() &&
|
| - local_storages_->empty() &&
|
| - server_bound_certs_->empty() &&
|
| - session_storages_->empty();
|
| +size_t LocalSharedObjectsContainer::GetObjectCount() const {
|
| + size_t count = 0;
|
| + count += appcaches()->GetAppCacheCount();
|
| + count += cookies()->GetCookieCount();
|
| + count += databases()->GetDatabaseCount();
|
| + count += file_systems()->GetFileSystemCount();
|
| + count += indexed_dbs()->GetIndexedDBCount();
|
| + count += local_storages()->GetLocalStorageCount();
|
| + count += server_bound_certs()->GetCertCount();
|
| + count += session_storages()->GetLocalStorageCount();
|
| + return count;
|
| +}
|
| +
|
| +size_t LocalSharedObjectsContainer::GetObjectCountForDomain(
|
| + const GURL& origin) const {
|
| + size_t count = 0;
|
| +
|
| + // Count all cookies that have the same domain as the provided |origin|. This
|
| + // means count all cookies that has been set by a host that is not considered
|
| + // to be a third party regarding the domain of the provided |origin|.
|
| + // E.g. if the origin is "http://foo.com" then all cookies with domain foo.com,
|
| + // a.foo.com, b.a.foo.com or *.foo.com will be counted.
|
| + typedef CannedBrowsingDataCookieHelper::OriginCookieListMap
|
| + OriginCookieListMap;
|
| + const OriginCookieListMap& origin_cookies_list_map =
|
| + cookies()->origin_cookie_list_map();
|
| + for (OriginCookieListMap::const_iterator it =
|
| + origin_cookies_list_map.begin();
|
| + it != origin_cookies_list_map.end();
|
| + ++it) {
|
| + const net::CookieList* cookie_list = it->second;
|
| + for (net::CookieList::const_iterator cookie = cookie_list->begin();
|
| + cookie != cookie_list->end();
|
| + ++cookie) {
|
| + // Strip leading '.'s.
|
| + std::string cookie_domain = cookie->Domain();
|
| + if (cookie_domain[0] == '.')
|
| + cookie_domain = cookie_domain.substr(1);
|
| + // The |domain_url| is only created in order to use the SameDomainOrHost
|
| + // method below. It does not matter which scheme is used as the scheme is
|
| + // ignored by the SameDomainOrHost method.
|
| + GURL domain_url(std::string(chrome::kHttpScheme) +
|
| + content::kStandardSchemeSeparator + cookie_domain);
|
| + if (net::RegistryControlledDomainService::SameDomainOrHost(
|
| + origin, domain_url)) {
|
| + ++count;
|
| + }
|
| + }
|
| + }
|
| +
|
| + // Count local storages for the domain of the given |origin|.
|
| + const std::set<GURL> local_storage_info =
|
| + local_storages()->GetLocalStorageInfo();
|
| + for (std::set<GURL>::const_iterator it = local_storage_info.begin();
|
| + it != local_storage_info.end();
|
| + ++it) {
|
| + if (net::RegistryControlledDomainService::SameDomainOrHost(
|
| + origin, *it)) {
|
| + ++count;
|
| + }
|
| + }
|
| +
|
| + // Count session storages for the domain of the given |origin|.
|
| + const std::set<GURL> urls = session_storages()->GetLocalStorageInfo();
|
| + for (std::set<GURL>::const_iterator it = urls.begin();
|
| + it != urls.end();
|
| + ++it) {
|
| + if (net::RegistryControlledDomainService::SameDomainOrHost(
|
| + origin, *it)) {
|
| + ++count;
|
| + }
|
| + }
|
| +
|
| + // Count indexed dbs for the domain of the given |origin|.
|
| + typedef CannedBrowsingDataIndexedDBHelper::PendingIndexedDBInfo IndexedDBInfo;
|
| + const std::set<IndexedDBInfo>& indexed_db_info =
|
| + indexed_dbs()->GetIndexedDBInfo();
|
| + for (std::set<IndexedDBInfo>::const_iterator it =
|
| + indexed_db_info.begin();
|
| + it != indexed_db_info.end();
|
| + ++it) {
|
| + if (net::RegistryControlledDomainService::SameDomainOrHost(
|
| + origin, it->origin)) {
|
| + ++count;
|
| + }
|
| + }
|
| +
|
| + // Count filesystems for the domain of the given |origin|.
|
| + typedef BrowsingDataFileSystemHelper::FileSystemInfo FileSystemInfo;
|
| + typedef std::list<FileSystemInfo> FileSystemInfoList;
|
| + const FileSystemInfoList& file_system_info =
|
| + file_systems()->GetFileSystemInfo();
|
| + for (FileSystemInfoList::const_iterator it = file_system_info.begin();
|
| + it != file_system_info.end();
|
| + ++it) {
|
| + if (net::RegistryControlledDomainService::SameDomainOrHost(
|
| + origin, it->origin)) {
|
| + ++count;
|
| + }
|
| + }
|
| +
|
| + // Count databases for the domain of the given |origin|.
|
| + typedef CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo DatabaseInfo;
|
| + const std::set<DatabaseInfo>& database_list =
|
| + databases()->GetPendingDatabaseInfo();
|
| + for (std::set<DatabaseInfo>::const_iterator it =
|
| + database_list.begin();
|
| + it != database_list.end();
|
| + ++it) {
|
| + if (net::RegistryControlledDomainService::SameDomainOrHost(
|
| + origin, it->origin)) {
|
| + ++count;
|
| + }
|
| + }
|
| +
|
| + // Count the AppCache manifest files for the domain of the given |origin|.
|
| + typedef BrowsingDataAppCacheHelper::OriginAppCacheInfoMap
|
| + OriginAppCacheInfoMap;
|
| + const OriginAppCacheInfoMap& map = appcaches()->GetOriginAppCacheInfoMap();
|
| + for (OriginAppCacheInfoMap::const_iterator it = map.begin();
|
| + it != map.end();
|
| + ++it) {
|
| + const appcache::AppCacheInfoVector& info_vector = it->second;
|
| + for (appcache::AppCacheInfoVector::const_iterator info =
|
| + info_vector.begin();
|
| + info != info_vector.end();
|
| + ++info) {
|
| + if (net::RegistryControlledDomainService::SameDomainOrHost(
|
| + origin, info->manifest_url)) {
|
| + ++count;
|
| + }
|
| + }
|
| + }
|
| +
|
| + return count;
|
| }
|
|
|