Chromium Code Reviews| 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)); |
| } |