Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5023)

Unified Diff: chrome/browser/cookies_tree_model.cc

Issue 10709006: Show apps protecting local data in chrome://settings/cookies. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: jochen Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/cookies_tree_model.cc
diff --git a/chrome/browser/cookies_tree_model.cc b/chrome/browser/cookies_tree_model.cc
index ab44437b6649632e4f576c7d27566e91cdfa02f8..745e2f6a77ff6de9fa7ea5beb0b78dcc009643a9 100644
--- a/chrome/browser/cookies_tree_model.cc
+++ b/chrome/browser/cookies_tree_model.cc
@@ -16,6 +16,7 @@
#include "chrome/browser/browsing_data_server_bound_cert_helper.h"
#include "chrome/browser/content_settings/cookie_settings.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_special_storage_policy.h"
#include "content/public/common/url_constants.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
@@ -37,60 +38,147 @@ struct NodeTitleComparator {
};
// Comparison functor, for use in CookieTreeRootNode.
-struct OriginNodeComparator {
+struct HostNodeComparator {
bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
// We want to order by registry controlled domain, so we would get
// google.com, ad.google.com, www.google.com,
// microsoft.com, ad.microsoft.com. CanonicalizeHost transforms the origins
// into a form like google.com.www so that string comparisons work.
- return (CanonicalizeHost(lhs->GetTitle()) <
- CanonicalizeHost(rhs->GetTitle()));
- }
- static std::string CanonicalizeHost(const string16& host16) {
- // The canonicalized representation makes the registry controlled domain
- // come first, and then adds subdomains in reverse order, e.g.
- // 1.mail.google.com would become google.com.mail.1, and then a standard
- // string comparison works to order hosts by registry controlled domain
- // first. Leading dots are ignored, ".google.com" is the same as
- // "google.com".
-
- std::string host = UTF16ToUTF8(host16);
- std::string retval = net::RegistryControlledDomainService::
- GetDomainAndRegistry(host);
- if (!retval.length()) // Is an IP address or other special origin.
- return host;
-
- std::string::size_type position = host.rfind(retval);
-
- // The host may be the registry controlled domain, in which case fail fast.
- if (position == 0 || position == std::string::npos)
- return host;
-
- // If host is www.google.com, retval will contain google.com at this point.
- // Start operating to the left of the registry controlled domain, e.g. in
- // the www.google.com example, start at index 3.
- --position;
-
- // If position == 0, that means it's a dot; this will be ignored to treat
- // ".google.com" the same as "google.com".
- while (position > 0) {
- retval += std::string(".");
- // Copy up to the next dot. host[position] is a dot so start after it.
- std::string::size_type next_dot = host.rfind(".", position - 1);
- if (next_dot == std::string::npos) {
- retval += host.substr(0, position);
- break;
- }
- retval += host.substr(next_dot + 1, position - (next_dot + 1));
- position = next_dot;
- }
- return retval;
+ CHECK_EQ(CookieTreeNode::DetailedInfo::TYPE_HOST,
+ lhs->GetDetailedInfo().node_type);
+ const CookieTreeHostNode* left_host =
+ static_cast<const CookieTreeHostNode*>(lhs);
+ CHECK_EQ(CookieTreeNode::DetailedInfo::TYPE_HOST,
+ rhs->GetDetailedInfo().node_type);
+ const CookieTreeHostNode* right_host =
+ static_cast<const CookieTreeHostNode*>(rhs);
+ return (left_host->canonicalized_host() <
+ right_host->canonicalized_host());
}
};
+bool TypeIsProtected(CookieTreeNode::DetailedInfo::NodeType type) {
+ switch (type) {
+ case CookieTreeNode::DetailedInfo::TYPE_COOKIE:
+ return false;
+ case CookieTreeNode::DetailedInfo::TYPE_DATABASE:
+ return true;
+ case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE:
+ return true;
+ case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE:
+ return true;
+ case CookieTreeNode::DetailedInfo::TYPE_APPCACHE:
+ return true;
+ case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB:
+ return true;
+ case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM:
+ return true;
+ case CookieTreeNode::DetailedInfo::TYPE_QUOTA:
+ return true;
+ case CookieTreeNode::DetailedInfo::TYPE_SERVER_BOUND_CERT:
+ return false;
+ default:
+ break;
+ }
+ return false;
+}
+
} // namespace
+CookieTreeNode::DetailedInfo::DetailedInfo()
+ : node_type(TYPE_NONE),
+ cookie(NULL),
+ database_info(NULL),
+ local_storage_info(NULL),
+ session_storage_info(NULL),
+ appcache_info(NULL),
+ indexed_db_info(NULL),
+ file_system_info(NULL),
+ quota_info(NULL),
+ server_bound_cert(NULL) {}
+
+CookieTreeNode::DetailedInfo::~DetailedInfo() {}
+
+CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::Init(
+ NodeType type) {
+ DCHECK_EQ(TYPE_NONE, node_type);
+ node_type = type;
+ return *this;
+}
+
+CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitCookie(
+ const net::CookieMonster::CanonicalCookie* cookie) {
+ Init(TYPE_COOKIE);
+ this->cookie = cookie;
+ return *this;
+}
+
+CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitDatabase(
+ const BrowsingDataDatabaseHelper::DatabaseInfo* database_info) {
+ Init(TYPE_DATABASE);
+ this->database_info = database_info;
+ origin = GURL(database_info->origin);
+ return *this;
+}
+
+CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitLocalStorage(
+ const BrowsingDataLocalStorageHelper::LocalStorageInfo*
+ local_storage_info) {
+ Init(TYPE_LOCAL_STORAGE);
+ this->local_storage_info = local_storage_info;
+ origin = local_storage_info->origin_url;
+ return *this;
+}
+
+CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitSessionStorage(
+ const BrowsingDataLocalStorageHelper::LocalStorageInfo*
+ session_storage_info) {
+ Init(TYPE_SESSION_STORAGE);
+ this->session_storage_info = session_storage_info;
+ origin = session_storage_info->origin_url;
+ return *this;
+}
+
+CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitAppCache(
+ const GURL& origin,
+ const appcache::AppCacheInfo* appcache_info) {
+ Init(TYPE_APPCACHE);
+ this->appcache_info = appcache_info;
+ this->origin = origin;
+ return *this;
+}
+
+CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitIndexedDB(
+ const BrowsingDataIndexedDBHelper::IndexedDBInfo* indexed_db_info) {
+ Init(TYPE_INDEXED_DB);
+ this->indexed_db_info = indexed_db_info;
+ this->origin = indexed_db_info->origin;
+ return *this;
+}
+
+CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitFileSystem(
+ const BrowsingDataFileSystemHelper::FileSystemInfo* file_system_info) {
+ Init(TYPE_FILE_SYSTEM);
+ this->file_system_info = file_system_info;
+ this->origin = file_system_info->origin;
+ return *this;
+}
+
+CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitQuota(
+ const BrowsingDataQuotaHelper::QuotaInfo* quota_info) {
+ Init(TYPE_QUOTA);
+ this->quota_info = quota_info;
+ return *this;
+}
+
+CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitServerBoundCert(
+ const net::ServerBoundCertStore::ServerBoundCert* server_bound_cert) {
+ Init(TYPE_SERVER_BOUND_CERT);
+ this->server_bound_cert = server_bound_cert;
+ return *this;
+}
+
///////////////////////////////////////////////////////////////////////////////
// CookieTreeNode, public:
@@ -125,7 +213,7 @@ void CookieTreeCookieNode::DeleteStoredObjects() {
}
CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->parent()->GetTitle()).InitCookie(&*cookie_);
+ return DetailedInfo().InitCookie(&*cookie_);
}
///////////////////////////////////////////////////////////////////////////////
@@ -150,8 +238,7 @@ void CookieTreeAppCacheNode::DeleteStoredObjects() {
}
CookieTreeNode::DetailedInfo CookieTreeAppCacheNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->parent()->GetTitle()).InitAppCache(
- &*appcache_info_);
+ return DetailedInfo().InitAppCache(origin_url_, &*appcache_info_);
}
///////////////////////////////////////////////////////////////////////////////
@@ -174,8 +261,7 @@ void CookieTreeDatabaseNode::DeleteStoredObjects() {
}
CookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->parent()->GetTitle()).InitDatabase(
- &*database_info_);
+ return DetailedInfo().InitDatabase(&*database_info_);
}
///////////////////////////////////////////////////////////////////////////////
@@ -198,7 +284,7 @@ void CookieTreeLocalStorageNode::DeleteStoredObjects() {
CookieTreeNode::DetailedInfo
CookieTreeLocalStorageNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->parent()->GetTitle()).InitLocalStorage(
+ return DetailedInfo().InitLocalStorage(
&*local_storage_info_);
}
@@ -220,8 +306,7 @@ void CookieTreeSessionStorageNode::DeleteStoredObjects() {
CookieTreeNode::DetailedInfo
CookieTreeSessionStorageNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->parent()->GetTitle()).InitSessionStorage(
- &*session_storage_info_);
+ return DetailedInfo().InitSessionStorage(&*session_storage_info_);
}
///////////////////////////////////////////////////////////////////////////////
@@ -244,8 +329,7 @@ void CookieTreeIndexedDBNode::DeleteStoredObjects() {
}
CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->parent()->GetTitle()).InitIndexedDB(
- &*indexed_db_info_);
+ return DetailedInfo().InitIndexedDB(&*indexed_db_info_);
}
///////////////////////////////////////////////////////////////////////////////
@@ -268,8 +352,7 @@ void CookieTreeFileSystemNode::DeleteStoredObjects() {
}
CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->parent()->GetTitle()).InitFileSystem(
- &*file_system_info_);
+ return DetailedInfo().InitFileSystem(&*file_system_info_);
}
///////////////////////////////////////////////////////////////////////////////
@@ -291,8 +374,7 @@ void CookieTreeQuotaNode::DeleteStoredObjects() {
}
CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->parent()->GetTitle()).InitQuota(
- &*quota_info_);
+ return DetailedInfo().InitQuota(&*quota_info_);
}
///////////////////////////////////////////////////////////////////////////////
@@ -314,8 +396,7 @@ void CookieTreeServerBoundCertNode::DeleteStoredObjects() {
CookieTreeNode::DetailedInfo
CookieTreeServerBoundCertNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->parent()->GetTitle()).InitServerBoundCert(
- &*server_bound_cert_);
+ return DetailedInfo().InitServerBoundCert(&*server_bound_cert_);
}
///////////////////////////////////////////////////////////////////////////////
@@ -327,25 +408,25 @@ CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model)
CookieTreeRootNode::~CookieTreeRootNode() {}
-CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode(
+CookieTreeHostNode* CookieTreeRootNode::GetOrCreateHostNode(
const GURL& url) {
- CookieTreeOriginNode origin_node(url);
+ scoped_ptr<CookieTreeHostNode> host_node(new CookieTreeHostNode(url));
// First see if there is an existing match.
- std::vector<CookieTreeNode*>::iterator origin_node_iterator =
- std::lower_bound(children().begin(), children().end(), &origin_node,
- OriginNodeComparator());
-
- if (origin_node_iterator != children().end() &&
- WideToUTF16Hack(CookieTreeOriginNode::TitleForUrl(url)) ==
- (*origin_node_iterator)->GetTitle())
- return static_cast<CookieTreeOriginNode*>(*origin_node_iterator);
+ std::vector<CookieTreeNode*>::iterator host_node_iterator =
+ std::lower_bound(children().begin(), children().end(), host_node.get(),
+ HostNodeComparator());
+
+ if (host_node_iterator != children().end() &&
+ host_node->GetTitle() == (*host_node_iterator)->GetTitle()) {
+ return static_cast<CookieTreeHostNode*>(*host_node_iterator);
+ }
// Node doesn't exist, create a new one and insert it into the (ordered)
// children.
- CookieTreeOriginNode* retval = new CookieTreeOriginNode(url);
DCHECK(model_);
- model_->Add(this, retval, (origin_node_iterator - children().begin()));
- return retval;
+ model_->Add(this, host_node.get(),
+ (host_node_iterator - children().begin()));
+ return host_node.release();
}
CookiesTreeModel* CookieTreeRootNode::GetModel() const {
@@ -353,21 +434,22 @@ CookiesTreeModel* CookieTreeRootNode::GetModel() const {
}
CookieTreeNode::DetailedInfo CookieTreeRootNode::GetDetailedInfo() const {
- return DetailedInfo(string16()).Init(DetailedInfo::TYPE_ROOT);
+ return DetailedInfo().Init(DetailedInfo::TYPE_ROOT);
}
///////////////////////////////////////////////////////////////////////////////
-// CookieTreeOriginNode, public:
+// CookieTreeHostNode, public:
// static
-std::wstring CookieTreeOriginNode::TitleForUrl(const GURL& url) {
+string16 CookieTreeHostNode::TitleForUrl(
+ const GURL& url) {
const std::string file_origin_node_name(
std::string(chrome::kFileScheme) + content::kStandardSchemeSeparator);
- return UTF8ToWide(url.SchemeIsFile() ? file_origin_node_name : url.host());
+ return UTF8ToUTF16(url.SchemeIsFile() ? file_origin_node_name : url.host());
}
-CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url)
- : CookieTreeNode(WideToUTF16Hack(TitleForUrl(url))),
+CookieTreeHostNode::CookieTreeHostNode(const GURL& url)
+ : CookieTreeNode(TitleForUrl(url)),
cookies_child_(NULL),
databases_child_(NULL),
local_storages_child_(NULL),
@@ -377,15 +459,16 @@ CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url)
file_systems_child_(NULL),
quota_child_(NULL),
server_bound_certs_child_(NULL),
- url_(url) {}
+ url_(url),
+ canonicalized_host_(CanonicalizeHost(url)) {}
-CookieTreeOriginNode::~CookieTreeOriginNode() {}
+CookieTreeHostNode::~CookieTreeHostNode() {}
-CookieTreeNode::DetailedInfo CookieTreeOriginNode::GetDetailedInfo() const {
- return DetailedInfo(GetTitle()).Init(DetailedInfo::TYPE_ORIGIN);
+CookieTreeNode::DetailedInfo CookieTreeHostNode::GetDetailedInfo() const {
+ return DetailedInfo().Init(DetailedInfo::TYPE_HOST);
}
-CookieTreeCookiesNode* CookieTreeOriginNode::GetOrCreateCookiesNode() {
+CookieTreeCookiesNode* CookieTreeHostNode::GetOrCreateCookiesNode() {
if (cookies_child_)
return cookies_child_;
cookies_child_ = new CookieTreeCookiesNode;
@@ -393,7 +476,7 @@ CookieTreeCookiesNode* CookieTreeOriginNode::GetOrCreateCookiesNode() {
return cookies_child_;
}
-CookieTreeDatabasesNode* CookieTreeOriginNode::GetOrCreateDatabasesNode() {
+CookieTreeDatabasesNode* CookieTreeHostNode::GetOrCreateDatabasesNode() {
if (databases_child_)
return databases_child_;
databases_child_ = new CookieTreeDatabasesNode;
@@ -402,7 +485,7 @@ CookieTreeDatabasesNode* CookieTreeOriginNode::GetOrCreateDatabasesNode() {
}
CookieTreeLocalStoragesNode*
- CookieTreeOriginNode::GetOrCreateLocalStoragesNode() {
+ CookieTreeHostNode::GetOrCreateLocalStoragesNode() {
if (local_storages_child_)
return local_storages_child_;
local_storages_child_ = new CookieTreeLocalStoragesNode;
@@ -411,7 +494,7 @@ CookieTreeLocalStoragesNode*
}
CookieTreeSessionStoragesNode*
- CookieTreeOriginNode::GetOrCreateSessionStoragesNode() {
+ CookieTreeHostNode::GetOrCreateSessionStoragesNode() {
if (session_storages_child_)
return session_storages_child_;
session_storages_child_ = new CookieTreeSessionStoragesNode;
@@ -419,7 +502,7 @@ CookieTreeSessionStoragesNode*
return session_storages_child_;
}
-CookieTreeAppCachesNode* CookieTreeOriginNode::GetOrCreateAppCachesNode() {
+CookieTreeAppCachesNode* CookieTreeHostNode::GetOrCreateAppCachesNode() {
if (appcaches_child_)
return appcaches_child_;
appcaches_child_ = new CookieTreeAppCachesNode;
@@ -427,7 +510,7 @@ CookieTreeAppCachesNode* CookieTreeOriginNode::GetOrCreateAppCachesNode() {
return appcaches_child_;
}
-CookieTreeIndexedDBsNode* CookieTreeOriginNode::GetOrCreateIndexedDBsNode() {
+CookieTreeIndexedDBsNode* CookieTreeHostNode::GetOrCreateIndexedDBsNode() {
if (indexed_dbs_child_)
return indexed_dbs_child_;
indexed_dbs_child_ = new CookieTreeIndexedDBsNode;
@@ -435,7 +518,7 @@ CookieTreeIndexedDBsNode* CookieTreeOriginNode::GetOrCreateIndexedDBsNode() {
return indexed_dbs_child_;
}
-CookieTreeFileSystemsNode* CookieTreeOriginNode::GetOrCreateFileSystemsNode() {
+CookieTreeFileSystemsNode* CookieTreeHostNode::GetOrCreateFileSystemsNode() {
if (file_systems_child_)
return file_systems_child_;
file_systems_child_ = new CookieTreeFileSystemsNode;
@@ -443,7 +526,7 @@ CookieTreeFileSystemsNode* CookieTreeOriginNode::GetOrCreateFileSystemsNode() {
return file_systems_child_;
}
-CookieTreeQuotaNode* CookieTreeOriginNode::UpdateOrCreateQuotaNode(
+CookieTreeQuotaNode* CookieTreeHostNode::UpdateOrCreateQuotaNode(
std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) {
if (quota_child_)
return quota_child_;
@@ -453,7 +536,7 @@ CookieTreeQuotaNode* CookieTreeOriginNode::UpdateOrCreateQuotaNode(
}
CookieTreeServerBoundCertsNode*
-CookieTreeOriginNode::GetOrCreateServerBoundCertsNode() {
+CookieTreeHostNode::GetOrCreateServerBoundCertsNode() {
if (server_bound_certs_child_)
return server_bound_certs_child_;
server_bound_certs_child_ = new CookieTreeServerBoundCertsNode;
@@ -461,7 +544,7 @@ CookieTreeOriginNode::GetOrCreateServerBoundCertsNode() {
return server_bound_certs_child_;
}
-void CookieTreeOriginNode::CreateContentException(
+void CookieTreeHostNode::CreateContentException(
CookieSettings* cookie_settings, ContentSetting setting) const {
DCHECK(setting == CONTENT_SETTING_ALLOW ||
setting == CONTENT_SETTING_BLOCK ||
@@ -476,10 +559,57 @@ void CookieTreeOriginNode::CreateContentException(
}
}
-bool CookieTreeOriginNode::CanCreateContentException() const {
+bool CookieTreeHostNode::CanCreateContentException() const {
return !url_.SchemeIsFile();
}
+// static
+std::string CookieTreeHostNode::CanonicalizeHost(const GURL& url) {
+ // The canonicalized representation makes the registry controlled domain
+ // come first, and then adds subdomains in reverse order, e.g.
+ // 1.mail.google.com would become google.com.mail.1, and then a standard
+ // string comparison works to order hosts by registry controlled domain
+ // first. Leading dots are ignored, ".google.com" is the same as
+ // "google.com".
+
+ if (url.SchemeIsFile()) {
+ return std::string(chrome::kFileScheme) +
+ content::kStandardSchemeSeparator;
+ }
+
+ std::string host = url.host();
+ std::string retval = net::RegistryControlledDomainService::
+ GetDomainAndRegistry(host);
+ if (!retval.length()) // Is an IP address or other special origin.
+ return host;
+
+ std::string::size_type position = host.rfind(retval);
+
+ // The host may be the registry controlled domain, in which case fail fast.
+ if (position == 0 || position == std::string::npos)
+ return host;
+
+ // If host is www.google.com, retval will contain google.com at this point.
+ // Start operating to the left of the registry controlled domain, e.g. in
+ // the www.google.com example, start at index 3.
+ --position;
+
+ // If position == 0, that means it's a dot; this will be ignored to treat
+ // ".google.com" the same as "google.com".
+ while (position > 0) {
+ retval += std::string(".");
+ // Copy up to the next dot. host[position] is a dot so start after it.
+ std::string::size_type next_dot = host.rfind(".", position - 1);
+ if (next_dot == std::string::npos) {
+ retval += host.substr(0, position);
+ break;
+ }
+ retval += host.substr(next_dot + 1, position - (next_dot + 1));
+ position = next_dot;
+ }
+ return retval;
+}
+
///////////////////////////////////////////////////////////////////////////////
// CookieTreeCookiesNode, public:
@@ -491,7 +621,7 @@ CookieTreeCookiesNode::~CookieTreeCookiesNode() {
}
CookieTreeNode::DetailedInfo CookieTreeCookiesNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_COOKIES);
+ return DetailedInfo().Init(DetailedInfo::TYPE_COOKIES);
}
///////////////////////////////////////////////////////////////////////////////
@@ -505,7 +635,7 @@ CookieTreeAppCachesNode::CookieTreeAppCachesNode()
CookieTreeAppCachesNode::~CookieTreeAppCachesNode() {}
CookieTreeNode::DetailedInfo CookieTreeAppCachesNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_APPCACHES);
+ return DetailedInfo().Init(DetailedInfo::TYPE_APPCACHES);
}
///////////////////////////////////////////////////////////////////////////////
@@ -518,7 +648,7 @@ CookieTreeDatabasesNode::CookieTreeDatabasesNode()
CookieTreeDatabasesNode::~CookieTreeDatabasesNode() {}
CookieTreeNode::DetailedInfo CookieTreeDatabasesNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_DATABASES);
+ return DetailedInfo().Init(DetailedInfo::TYPE_DATABASES);
}
///////////////////////////////////////////////////////////////////////////////
@@ -532,8 +662,7 @@ CookieTreeLocalStoragesNode::~CookieTreeLocalStoragesNode() {}
CookieTreeNode::DetailedInfo
CookieTreeLocalStoragesNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->GetTitle()).Init(
- DetailedInfo::TYPE_LOCAL_STORAGES);
+ return DetailedInfo().Init(DetailedInfo::TYPE_LOCAL_STORAGES);
}
///////////////////////////////////////////////////////////////////////////////
@@ -547,8 +676,7 @@ CookieTreeSessionStoragesNode::~CookieTreeSessionStoragesNode() {}
CookieTreeNode::DetailedInfo
CookieTreeSessionStoragesNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->GetTitle()).Init(
- DetailedInfo::TYPE_SESSION_STORAGES);
+ return DetailedInfo().Init(DetailedInfo::TYPE_SESSION_STORAGES);
}
///////////////////////////////////////////////////////////////////////////////
@@ -562,8 +690,7 @@ CookieTreeIndexedDBsNode::~CookieTreeIndexedDBsNode() {}
CookieTreeNode::DetailedInfo
CookieTreeIndexedDBsNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->GetTitle()).Init(
- DetailedInfo::TYPE_INDEXED_DBS);
+ return DetailedInfo().Init(DetailedInfo::TYPE_INDEXED_DBS);
}
///////////////////////////////////////////////////////////////////////////////
@@ -577,8 +704,7 @@ CookieTreeFileSystemsNode::~CookieTreeFileSystemsNode() {}
CookieTreeNode::DetailedInfo
CookieTreeFileSystemsNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->GetTitle()).Init(
- DetailedInfo::TYPE_FILE_SYSTEMS);
+ return DetailedInfo().Init(DetailedInfo::TYPE_FILE_SYSTEMS);
}
///////////////////////////////////////////////////////////////////////////////
@@ -593,8 +719,7 @@ CookieTreeServerBoundCertsNode::~CookieTreeServerBoundCertsNode() {}
CookieTreeNode::DetailedInfo
CookieTreeServerBoundCertsNode::GetDetailedInfo() const {
- return DetailedInfo(parent()->GetTitle()).Init(
- DetailedInfo::TYPE_SERVER_BOUND_CERTS);
+ return DetailedInfo().Init(DetailedInfo::TYPE_SERVER_BOUND_CERTS);
}
void CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) {
@@ -618,6 +743,7 @@ CookiesTreeModel::CookiesTreeModel(
BrowsingDataFileSystemHelper* file_system_helper,
BrowsingDataQuotaHelper* quota_helper,
BrowsingDataServerBoundCertHelper* server_bound_cert_helper,
+ ExtensionSpecialStoragePolicy* special_storage_policy,
bool use_cookie_source)
: ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>(
new CookieTreeRootNode(this))),
@@ -630,6 +756,7 @@ CookiesTreeModel::CookiesTreeModel(
file_system_helper_(file_system_helper),
quota_helper_(quota_helper),
server_bound_cert_helper_(server_bound_cert_helper),
+ special_storage_policy_(special_storage_policy),
batch_update_(0),
use_cookie_source_(use_cookie_source),
ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
@@ -707,7 +834,7 @@ void CookiesTreeModel::GetIcons(std::vector<gfx::ImageSkia>* icons) {
int CookiesTreeModel::GetIconIndex(ui::TreeModelNode* node) {
CookieTreeNode* ct_node = static_cast<CookieTreeNode*>(node);
switch (ct_node->GetDetailedInfo().node_type) {
- case CookieTreeNode::DetailedInfo::TYPE_ORIGIN:
+ case CookieTreeNode::DetailedInfo::TYPE_HOST:
return ORIGIN;
case CookieTreeNode::DetailedInfo::TYPE_COOKIE:
return COOKIE;
@@ -754,7 +881,7 @@ void CookiesTreeModel::DeleteCookieNode(CookieTreeNode* cookie_node) {
DeleteCookieNode(parent_node);
}
-void CookiesTreeModel::UpdateSearchResults(const std::wstring& filter) {
+void CookiesTreeModel::UpdateSearchResults(const string16& filter) {
CookieTreeNode* root = GetRoot();
int num_children = root->child_count();
NotifyObserverBeginBatch();
@@ -773,6 +900,20 @@ void CookiesTreeModel::UpdateSearchResults(const std::wstring& filter) {
NotifyObserverEndBatch();
}
+const ExtensionSet* CookiesTreeModel::ExtensionsProtectingNode(
+ const CookieTreeNode& cookie_node) {
+ if (!special_storage_policy_)
+ return NULL;
+
+ CookieTreeNode::DetailedInfo info = cookie_node.GetDetailedInfo();
+
+ if (!TypeIsProtected(info.node_type))
+ return NULL;
+
+ DCHECK(!info.origin.is_empty());
+ return special_storage_policy_->ExtensionsProtectingOrigin(info.origin);
+}
+
void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) {
cookies_observer_list_.AddObserver(observer);
// Call super so that TreeNodeModel can notify, too.
@@ -804,11 +945,11 @@ void CookiesTreeModel::OnAppCacheModelInfoLoaded() {
info_list.begin(), origin->second.begin(), origin->second.end());
}
- PopulateAppCacheInfoWithFilter(std::wstring());
+ PopulateAppCacheInfoWithFilter(string16());
}
void CookiesTreeModel::PopulateAppCacheInfoWithFilter(
- const std::wstring& filter) {
+ const string16& filter) {
using appcache::AppCacheInfo;
typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin;
@@ -819,13 +960,13 @@ void CookiesTreeModel::PopulateAppCacheInfoWithFilter(
NotifyObserverBeginBatch();
for (InfoByOrigin::iterator origin = appcache_info_.begin();
origin != appcache_info_.end(); ++origin) {
- std::wstring origin_node_name = UTF8ToWide(origin->first.host());
+ string16 host_node_name = UTF8ToUTF16(origin->first.host());
if (filter.empty() ||
- (origin_node_name.find(filter) != std::wstring::npos)) {
- CookieTreeOriginNode* origin_node =
- root->GetOrCreateOriginNode(origin->first);
+ (host_node_name.find(filter) != std::string::npos)) {
+ CookieTreeHostNode* host_node =
+ root->GetOrCreateHostNode(origin->first);
CookieTreeAppCachesNode* appcaches_node =
- origin_node->GetOrCreateAppCachesNode();
+ host_node->GetOrCreateAppCachesNode();
for (std::list<AppCacheInfo>::iterator info = origin->second.begin();
info != origin->second.end(); ++info) {
@@ -843,11 +984,11 @@ void CookiesTreeModel::OnCookiesModelInfoLoaded(
cookie_list_.insert(cookie_list_.begin(),
cookie_list.begin(),
cookie_list.end());
- PopulateCookieInfoWithFilter(std::wstring());
+ PopulateCookieInfoWithFilter(string16());
}
void CookiesTreeModel::PopulateCookieInfoWithFilter(
- const std::wstring& filter) {
+ const string16& filter) {
// mmargh mmargh mmargh! delicious!
CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
@@ -867,12 +1008,12 @@ void CookiesTreeModel::PopulateCookieInfoWithFilter(
GURL source(source_string);
if (!filter.size() ||
- (CookieTreeOriginNode::TitleForUrl(source).find(filter) !=
+ (CookieTreeHostNode::TitleForUrl(source).find(filter) !=
std::string::npos)) {
- CookieTreeOriginNode* origin_node =
- root->GetOrCreateOriginNode(source);
+ CookieTreeHostNode* host_node =
+ root->GetOrCreateHostNode(source);
CookieTreeCookiesNode* cookies_node =
- origin_node->GetOrCreateCookiesNode();
+ host_node->GetOrCreateCookiesNode();
CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(it);
cookies_node->AddCookieNode(new_cookie);
}
@@ -884,11 +1025,11 @@ void CookiesTreeModel::PopulateCookieInfoWithFilter(
void CookiesTreeModel::OnDatabaseModelInfoLoaded(
const DatabaseInfoList& database_info) {
database_info_list_ = database_info;
- PopulateDatabaseInfoWithFilter(std::wstring());
+ PopulateDatabaseInfoWithFilter(string16());
}
void CookiesTreeModel::PopulateDatabaseInfoWithFilter(
- const std::wstring& filter) {
+ const string16& filter) {
if (database_info_list_.empty())
return;
CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
@@ -899,12 +1040,12 @@ void CookiesTreeModel::PopulateDatabaseInfoWithFilter(
GURL origin(database_info->origin);
if (!filter.size() ||
- (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
- std::wstring::npos)) {
- CookieTreeOriginNode* origin_node =
- root->GetOrCreateOriginNode(origin);
+ (CookieTreeHostNode::TitleForUrl(origin).find(filter) !=
+ std::string::npos)) {
+ CookieTreeHostNode* host_node =
+ root->GetOrCreateHostNode(origin);
CookieTreeDatabasesNode* databases_node =
- origin_node->GetOrCreateDatabasesNode();
+ host_node->GetOrCreateDatabasesNode();
databases_node->AddDatabaseNode(
new CookieTreeDatabaseNode(database_info));
}
@@ -916,11 +1057,11 @@ void CookiesTreeModel::PopulateDatabaseInfoWithFilter(
void CookiesTreeModel::OnLocalStorageModelInfoLoaded(
const LocalStorageInfoList& local_storage_info) {
local_storage_info_list_ = local_storage_info;
- PopulateLocalStorageInfoWithFilter(std::wstring());
+ PopulateLocalStorageInfoWithFilter(string16());
}
void CookiesTreeModel::PopulateLocalStorageInfoWithFilter(
- const std::wstring& filter) {
+ const string16& filter) {
if (local_storage_info_list_.empty())
return;
CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
@@ -932,12 +1073,12 @@ void CookiesTreeModel::PopulateLocalStorageInfoWithFilter(
const GURL& origin(local_storage_info->origin_url);
if (!filter.size() ||
- (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
- std::wstring::npos)) {
- CookieTreeOriginNode* origin_node =
- root->GetOrCreateOriginNode(origin);
+ (CookieTreeHostNode::TitleForUrl(origin).find(filter) !=
+ std::string::npos)) {
+ CookieTreeHostNode* host_node =
+ root->GetOrCreateHostNode(origin);
CookieTreeLocalStoragesNode* local_storages_node =
- origin_node->GetOrCreateLocalStoragesNode();
+ host_node->GetOrCreateLocalStoragesNode();
local_storages_node->AddLocalStorageNode(
new CookieTreeLocalStorageNode(local_storage_info));
}
@@ -949,11 +1090,11 @@ void CookiesTreeModel::PopulateLocalStorageInfoWithFilter(
void CookiesTreeModel::OnSessionStorageModelInfoLoaded(
const LocalStorageInfoList& session_storage_info) {
session_storage_info_list_ = session_storage_info;
- PopulateSessionStorageInfoWithFilter(std::wstring());
+ PopulateSessionStorageInfoWithFilter(string16());
}
void CookiesTreeModel::PopulateSessionStorageInfoWithFilter(
- const std::wstring& filter) {
+ const string16& filter) {
if (session_storage_info_list_.empty())
return;
CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
@@ -964,12 +1105,12 @@ void CookiesTreeModel::PopulateSessionStorageInfoWithFilter(
++session_storage_info) {
const GURL& origin = session_storage_info->origin_url;
if (!filter.size() ||
- (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
- std::wstring::npos)) {
- CookieTreeOriginNode* origin_node =
- root->GetOrCreateOriginNode(origin);
+ (CookieTreeHostNode::TitleForUrl(origin).find(filter) !=
+ std::string::npos)) {
+ CookieTreeHostNode* host_node =
+ root->GetOrCreateHostNode(origin);
CookieTreeSessionStoragesNode* session_storages_node =
- origin_node->GetOrCreateSessionStoragesNode();
+ host_node->GetOrCreateSessionStoragesNode();
session_storages_node->AddSessionStorageNode(
new CookieTreeSessionStorageNode(session_storage_info));
}
@@ -981,11 +1122,11 @@ void CookiesTreeModel::PopulateSessionStorageInfoWithFilter(
void CookiesTreeModel::OnIndexedDBModelInfoLoaded(
const IndexedDBInfoList& indexed_db_info) {
indexed_db_info_list_ = indexed_db_info;
- PopulateIndexedDBInfoWithFilter(std::wstring());
+ PopulateIndexedDBInfoWithFilter(string16());
}
void CookiesTreeModel::PopulateIndexedDBInfoWithFilter(
- const std::wstring& filter) {
+ const string16& filter) {
if (indexed_db_info_list_.empty())
return;
CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
@@ -997,12 +1138,12 @@ void CookiesTreeModel::PopulateIndexedDBInfoWithFilter(
const GURL& origin = indexed_db_info->origin;
if (!filter.size() ||
- (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
- std::wstring::npos)) {
- CookieTreeOriginNode* origin_node =
- root->GetOrCreateOriginNode(origin);
+ (CookieTreeHostNode::TitleForUrl(origin).find(filter) !=
+ std::string::npos)) {
+ CookieTreeHostNode* host_node =
+ root->GetOrCreateHostNode(origin);
CookieTreeIndexedDBsNode* indexed_dbs_node =
- origin_node->GetOrCreateIndexedDBsNode();
+ host_node->GetOrCreateIndexedDBsNode();
indexed_dbs_node->AddIndexedDBNode(
new CookieTreeIndexedDBNode(indexed_db_info));
}
@@ -1014,11 +1155,11 @@ void CookiesTreeModel::PopulateIndexedDBInfoWithFilter(
void CookiesTreeModel::OnFileSystemModelInfoLoaded(
const FileSystemInfoList& file_system_info) {
file_system_info_list_ = file_system_info;
- PopulateFileSystemInfoWithFilter(std::wstring());
+ PopulateFileSystemInfoWithFilter(string16());
}
void CookiesTreeModel::PopulateFileSystemInfoWithFilter(
- const std::wstring& filter) {
+ const string16& filter) {
if (file_system_info_list_.empty())
return;
CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
@@ -1030,12 +1171,12 @@ void CookiesTreeModel::PopulateFileSystemInfoWithFilter(
GURL origin(file_system_info->origin);
if (!filter.size() ||
- (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
- std::wstring::npos)) {
- CookieTreeOriginNode* origin_node =
- root->GetOrCreateOriginNode(origin);
+ (CookieTreeHostNode::TitleForUrl(origin).find(filter) !=
+ std::string::npos)) {
+ CookieTreeHostNode* host_node =
+ root->GetOrCreateHostNode(origin);
CookieTreeFileSystemsNode* file_systems_node =
- origin_node->GetOrCreateFileSystemsNode();
+ host_node->GetOrCreateFileSystemsNode();
file_systems_node->AddFileSystemNode(
new CookieTreeFileSystemNode(file_system_info));
}
@@ -1047,11 +1188,11 @@ void CookiesTreeModel::PopulateFileSystemInfoWithFilter(
void CookiesTreeModel::OnQuotaModelInfoLoaded(
const QuotaInfoArray& quota_info) {
quota_info_list_ = quota_info;
- PopulateQuotaInfoWithFilter(std::wstring());
+ PopulateQuotaInfoWithFilter(string16());
}
void CookiesTreeModel::PopulateQuotaInfoWithFilter(
- const std::wstring& filter) {
+ const string16& filter) {
if (quota_info_list_.empty())
return;
CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
@@ -1060,10 +1201,10 @@ void CookiesTreeModel::PopulateQuotaInfoWithFilter(
quota_info != quota_info_list_.end();
++quota_info) {
if (!filter.size() ||
- (UTF8ToWide(quota_info->host).find(filter) != std::wstring::npos)) {
- CookieTreeOriginNode* origin_node =
- root->GetOrCreateOriginNode(GURL("http://" + quota_info->host));
- origin_node->UpdateOrCreateQuotaNode(quota_info);
+ (UTF8ToUTF16(quota_info->host).find(filter) != std::string::npos)) {
+ CookieTreeHostNode* host_node =
+ root->GetOrCreateHostNode(GURL("http://" + quota_info->host));
+ host_node->UpdateOrCreateQuotaNode(quota_info);
}
}
NotifyObserverTreeNodeChanged(root);
@@ -1073,11 +1214,11 @@ void CookiesTreeModel::PopulateQuotaInfoWithFilter(
void CookiesTreeModel::OnServerBoundCertModelInfoLoaded(
const ServerBoundCertList& cert_list) {
server_bound_cert_list_ = cert_list;
- PopulateServerBoundCertInfoWithFilter(std::wstring());
+ PopulateServerBoundCertInfoWithFilter(string16());
}
void CookiesTreeModel::PopulateServerBoundCertInfoWithFilter(
- const std::wstring& filter) {
+ const string16& filter) {
if (server_bound_cert_list_.empty())
return;
CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
@@ -1089,18 +1230,18 @@ void CookiesTreeModel::PopulateServerBoundCertInfoWithFilter(
GURL origin(cert_info->server_identifier());
if (!origin.is_valid()) {
// Domain Bound Cert. Make a valid URL to satisfy the
- // CookieTreeRootNode::GetOrCreateOriginNode interface.
+ // CookieTreeRootNode::GetOrCreateHostNode interface.
origin = GURL(std::string(chrome::kHttpsScheme) +
content::kStandardSchemeSeparator +
cert_info->server_identifier() + "/");
}
- std::wstring title = CookieTreeOriginNode::TitleForUrl(origin);
+ string16 title = CookieTreeHostNode::TitleForUrl(origin);
- if (!filter.size() || title.find(filter) != std::wstring::npos) {
- CookieTreeOriginNode* origin_node =
- root->GetOrCreateOriginNode(origin);
+ if (!filter.size() || title.find(filter) != std::string::npos) {
+ CookieTreeHostNode* host_node =
+ root->GetOrCreateHostNode(origin);
CookieTreeServerBoundCertsNode* server_bound_certs_node =
- origin_node->GetOrCreateServerBoundCertsNode();
+ host_node->GetOrCreateServerBoundCertsNode();
server_bound_certs_node->AddServerBoundCertNode(
new CookieTreeServerBoundCertNode(cert_info));
}

Powered by Google App Engine
This is Rietveld 408576698