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