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..3714e646436bd35215fd6c22dae2b85efadf699c 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,7 +38,7 @@ 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, |
@@ -89,8 +90,127 @@ struct OriginNodeComparator { |
} |
}; |
+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 +245,7 @@ void CookieTreeCookieNode::DeleteStoredObjects() { |
} |
CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitCookie(&*cookie_); |
+ return DetailedInfo().InitCookie(&*cookie_); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -150,8 +270,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 +293,7 @@ void CookieTreeDatabaseNode::DeleteStoredObjects() { |
} |
CookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitDatabase( |
- &*database_info_); |
+ return DetailedInfo().InitDatabase(&*database_info_); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -198,7 +316,7 @@ void CookieTreeLocalStorageNode::DeleteStoredObjects() { |
CookieTreeNode::DetailedInfo |
CookieTreeLocalStorageNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitLocalStorage( |
+ return DetailedInfo().InitLocalStorage( |
&*local_storage_info_); |
} |
@@ -220,8 +338,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 +361,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 +384,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 +406,7 @@ void CookieTreeQuotaNode::DeleteStoredObjects() { |
} |
CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitQuota( |
- &*quota_info_); |
+ return DetailedInfo().InitQuota(&*quota_info_); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -314,8 +428,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 +440,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 +466,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), |
@@ -379,13 +493,13 @@ CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url) |
server_bound_certs_child_(NULL), |
url_(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 +507,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 +516,7 @@ CookieTreeDatabasesNode* CookieTreeOriginNode::GetOrCreateDatabasesNode() { |
} |
CookieTreeLocalStoragesNode* |
- CookieTreeOriginNode::GetOrCreateLocalStoragesNode() { |
+ CookieTreeHostNode::GetOrCreateLocalStoragesNode() { |
if (local_storages_child_) |
return local_storages_child_; |
local_storages_child_ = new CookieTreeLocalStoragesNode; |
@@ -411,7 +525,7 @@ CookieTreeLocalStoragesNode* |
} |
CookieTreeSessionStoragesNode* |
- CookieTreeOriginNode::GetOrCreateSessionStoragesNode() { |
+ CookieTreeHostNode::GetOrCreateSessionStoragesNode() { |
if (session_storages_child_) |
return session_storages_child_; |
session_storages_child_ = new CookieTreeSessionStoragesNode; |
@@ -419,7 +533,7 @@ CookieTreeSessionStoragesNode* |
return session_storages_child_; |
} |
-CookieTreeAppCachesNode* CookieTreeOriginNode::GetOrCreateAppCachesNode() { |
+CookieTreeAppCachesNode* CookieTreeHostNode::GetOrCreateAppCachesNode() { |
if (appcaches_child_) |
return appcaches_child_; |
appcaches_child_ = new CookieTreeAppCachesNode; |
@@ -427,7 +541,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 +549,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 +557,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 +567,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 +575,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,7 +590,7 @@ void CookieTreeOriginNode::CreateContentException( |
} |
} |
-bool CookieTreeOriginNode::CanCreateContentException() const { |
+bool CookieTreeHostNode::CanCreateContentException() const { |
return !url_.SchemeIsFile(); |
} |
@@ -491,7 +605,7 @@ CookieTreeCookiesNode::~CookieTreeCookiesNode() { |
} |
CookieTreeNode::DetailedInfo CookieTreeCookiesNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_COOKIES); |
+ return DetailedInfo().Init(DetailedInfo::TYPE_COOKIES); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -505,7 +619,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 +632,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 +646,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 +660,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 +674,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 +688,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 +703,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 +727,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 +740,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 +818,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 +865,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 +884,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 +929,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 +944,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 +968,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 +992,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 +1009,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 +1024,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 +1041,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 +1057,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 +1074,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 +1089,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 +1106,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 +1122,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 +1139,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 +1155,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 +1172,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 +1185,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 +1198,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 +1214,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)); |
} |