Index: chrome/browser/cookies_tree_model.cc |
diff --git a/chrome/browser/cookies_tree_model.cc b/chrome/browser/cookies_tree_model.cc |
index b9be8a5463f2f8c6cc97cb864e1d7adec5a01236..b45992f75a5e328d7e2ab5502111428a7cd4065c 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 "grit/generated_resources.h" |
#include "grit/theme_resources.h" |
#include "grit/theme_resources_standard.h" |
@@ -27,7 +28,130 @@ |
#include "ui/base/resource/resource_bundle.h" |
#include "ui/gfx/image/image_skia.h" |
-static const char kFileOriginNodeName[] = "file://"; |
+static const char kFileHostNodeName[] = "file://"; |
+ |
+namespace { |
+ |
+bool TypeIsProtected(CookieTreeNode::DetailedInfo::NodeType type) { |
+ switch (type) { |
+ case CookieTreeNode::DetailedInfo::TYPE_COOKIE: |
+ return false; |
marja
2012/07/09 08:11:43
Hmm, didn't jochen@ just make it so that cookies a
Bernhard Bauer
2012/07/09 09:50:48
Yeah, Clear On Exit does something different from
|
+ 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: |
@@ -63,12 +187,12 @@ void CookieTreeCookieNode::DeleteStoredObjects() { |
} |
CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitCookie(&*cookie_); |
+ return DetailedInfo().InitCookie(&*cookie_); |
} |
namespace { |
// comparison functor, for use in CookieTreeRootNode |
-class OriginNodeComparator { |
+class HostNodeComparator { |
public: |
bool operator() (const CookieTreeNode* lhs, |
const CookieTreeNode* rhs) { |
@@ -147,8 +271,7 @@ void CookieTreeAppCacheNode::DeleteStoredObjects() { |
} |
CookieTreeNode::DetailedInfo CookieTreeAppCacheNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitAppCache( |
- &*appcache_info_); |
+ return DetailedInfo().InitAppCache(origin_url_, &*appcache_info_); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -171,8 +294,7 @@ void CookieTreeDatabaseNode::DeleteStoredObjects() { |
} |
CookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitDatabase( |
- &*database_info_); |
+ return DetailedInfo().InitDatabase(&*database_info_); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -195,7 +317,7 @@ void CookieTreeLocalStorageNode::DeleteStoredObjects() { |
CookieTreeNode::DetailedInfo |
CookieTreeLocalStorageNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitLocalStorage( |
+ return DetailedInfo().InitLocalStorage( |
&*local_storage_info_); |
} |
@@ -217,8 +339,7 @@ void CookieTreeSessionStorageNode::DeleteStoredObjects() { |
CookieTreeNode::DetailedInfo |
CookieTreeSessionStorageNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitSessionStorage( |
- &*session_storage_info_); |
+ return DetailedInfo().InitSessionStorage(&*session_storage_info_); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -241,8 +362,7 @@ void CookieTreeIndexedDBNode::DeleteStoredObjects() { |
} |
CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitIndexedDB( |
- &*indexed_db_info_); |
+ return DetailedInfo().InitIndexedDB(&*indexed_db_info_); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -265,8 +385,7 @@ void CookieTreeFileSystemNode::DeleteStoredObjects() { |
} |
CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitFileSystem( |
- &*file_system_info_); |
+ return DetailedInfo().InitFileSystem(&*file_system_info_); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -288,8 +407,7 @@ void CookieTreeQuotaNode::DeleteStoredObjects() { |
} |
CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitQuota( |
- &*quota_info_); |
+ return DetailedInfo().InitQuota(&*quota_info_); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -311,8 +429,7 @@ void CookieTreeServerBoundCertNode::DeleteStoredObjects() { |
CookieTreeNode::DetailedInfo |
CookieTreeServerBoundCertNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->parent()->GetTitle()).InitServerBoundCert( |
- &*server_bound_cert_); |
+ return DetailedInfo().InitServerBoundCert(&*server_bound_cert_); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -324,27 +441,27 @@ 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::vector<CookieTreeNode*>::iterator host_node_iterator = |
std::lower_bound(children().begin(), |
children().end(), |
- &origin_node, |
- OriginNodeComparator()); |
+ host_node.get(), |
+ HostNodeComparator()); |
- if (origin_node_iterator != children().end() && |
- WideToUTF16Hack(CookieTreeOriginNode::TitleForUrl(url)) == |
- (*origin_node_iterator)->GetTitle()) |
- return static_cast<CookieTreeOriginNode*>(*origin_node_iterator); |
+ 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 { |
@@ -352,20 +469,20 @@ 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( |
+string16 CookieTreeHostNode::TitleForUrl( |
const GURL& url) { |
- return UTF8ToWide(url.SchemeIsFile() ? kFileOriginNodeName : url.host()); |
+ return UTF8ToUTF16(url.SchemeIsFile() ? kFileHostNodeName : 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,13 +494,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; |
@@ -391,7 +508,7 @@ CookieTreeCookiesNode* CookieTreeOriginNode::GetOrCreateCookiesNode() { |
return cookies_child_; |
} |
-CookieTreeDatabasesNode* CookieTreeOriginNode::GetOrCreateDatabasesNode() { |
+CookieTreeDatabasesNode* CookieTreeHostNode::GetOrCreateDatabasesNode() { |
if (databases_child_) |
return databases_child_; |
databases_child_ = new CookieTreeDatabasesNode; |
@@ -400,7 +517,7 @@ CookieTreeDatabasesNode* CookieTreeOriginNode::GetOrCreateDatabasesNode() { |
} |
CookieTreeLocalStoragesNode* |
- CookieTreeOriginNode::GetOrCreateLocalStoragesNode() { |
+ CookieTreeHostNode::GetOrCreateLocalStoragesNode() { |
if (local_storages_child_) |
return local_storages_child_; |
local_storages_child_ = new CookieTreeLocalStoragesNode; |
@@ -409,7 +526,7 @@ CookieTreeLocalStoragesNode* |
} |
CookieTreeSessionStoragesNode* |
- CookieTreeOriginNode::GetOrCreateSessionStoragesNode() { |
+ CookieTreeHostNode::GetOrCreateSessionStoragesNode() { |
if (session_storages_child_) |
return session_storages_child_; |
session_storages_child_ = new CookieTreeSessionStoragesNode; |
@@ -417,7 +534,7 @@ CookieTreeSessionStoragesNode* |
return session_storages_child_; |
} |
-CookieTreeAppCachesNode* CookieTreeOriginNode::GetOrCreateAppCachesNode() { |
+CookieTreeAppCachesNode* CookieTreeHostNode::GetOrCreateAppCachesNode() { |
if (appcaches_child_) |
return appcaches_child_; |
appcaches_child_ = new CookieTreeAppCachesNode; |
@@ -425,7 +542,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; |
@@ -433,7 +550,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; |
@@ -441,7 +558,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_; |
@@ -451,7 +568,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; |
@@ -459,7 +576,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 || |
@@ -474,7 +591,7 @@ void CookieTreeOriginNode::CreateContentException( |
} |
} |
-bool CookieTreeOriginNode::CanCreateContentException() const { |
+bool CookieTreeHostNode::CanCreateContentException() const { |
return !url_.SchemeIsFile(); |
} |
@@ -489,7 +606,7 @@ CookieTreeCookiesNode::~CookieTreeCookiesNode() { |
} |
CookieTreeNode::DetailedInfo CookieTreeCookiesNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_COOKIES); |
+ return DetailedInfo().Init(DetailedInfo::TYPE_COOKIES); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -503,7 +620,7 @@ CookieTreeAppCachesNode::CookieTreeAppCachesNode() |
CookieTreeAppCachesNode::~CookieTreeAppCachesNode() {} |
CookieTreeNode::DetailedInfo CookieTreeAppCachesNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_APPCACHES); |
+ return DetailedInfo().Init(DetailedInfo::TYPE_APPCACHES); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -516,7 +633,7 @@ CookieTreeDatabasesNode::CookieTreeDatabasesNode() |
CookieTreeDatabasesNode::~CookieTreeDatabasesNode() {} |
CookieTreeNode::DetailedInfo CookieTreeDatabasesNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_DATABASES); |
+ return DetailedInfo().Init(DetailedInfo::TYPE_DATABASES); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -530,8 +647,7 @@ CookieTreeLocalStoragesNode::~CookieTreeLocalStoragesNode() {} |
CookieTreeNode::DetailedInfo |
CookieTreeLocalStoragesNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->GetTitle()).Init( |
- DetailedInfo::TYPE_LOCAL_STORAGES); |
+ return DetailedInfo().Init(DetailedInfo::TYPE_LOCAL_STORAGES); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -545,8 +661,7 @@ CookieTreeSessionStoragesNode::~CookieTreeSessionStoragesNode() {} |
CookieTreeNode::DetailedInfo |
CookieTreeSessionStoragesNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->GetTitle()).Init( |
- DetailedInfo::TYPE_SESSION_STORAGES); |
+ return DetailedInfo().Init(DetailedInfo::TYPE_SESSION_STORAGES); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -560,8 +675,7 @@ CookieTreeIndexedDBsNode::~CookieTreeIndexedDBsNode() {} |
CookieTreeNode::DetailedInfo |
CookieTreeIndexedDBsNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->GetTitle()).Init( |
- DetailedInfo::TYPE_INDEXED_DBS); |
+ return DetailedInfo().Init(DetailedInfo::TYPE_INDEXED_DBS); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -575,8 +689,7 @@ CookieTreeFileSystemsNode::~CookieTreeFileSystemsNode() {} |
CookieTreeNode::DetailedInfo |
CookieTreeFileSystemsNode::GetDetailedInfo() const { |
- return DetailedInfo(parent()->GetTitle()).Init( |
- DetailedInfo::TYPE_FILE_SYSTEMS); |
+ return DetailedInfo().Init(DetailedInfo::TYPE_FILE_SYSTEMS); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -591,8 +704,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); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -630,6 +742,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))), |
@@ -642,6 +755,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)) { |
@@ -719,7 +833,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; |
@@ -766,7 +880,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(); |
@@ -785,6 +899,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. |
@@ -816,11 +944,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; |
@@ -831,13 +959,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) { |
@@ -855,11 +983,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()); |
@@ -879,12 +1007,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); |
} |
@@ -896,11 +1024,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()); |
@@ -911,12 +1039,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)); |
} |
@@ -928,11 +1056,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()); |
@@ -944,12 +1072,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)); |
} |
@@ -961,11 +1089,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()); |
@@ -976,12 +1104,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)); |
} |
@@ -993,11 +1121,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()); |
@@ -1009,12 +1137,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)); |
} |
@@ -1026,11 +1154,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()); |
@@ -1042,12 +1170,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)); |
} |
@@ -1059,11 +1187,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()); |
@@ -1072,10 +1200,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); |
@@ -1085,11 +1213,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()); |
@@ -1101,18 +1229,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)); |
} |