| Index: chrome/browser/cookies_tree_model.cc
|
| diff --git a/chrome/browser/cookies_tree_model.cc b/chrome/browser/cookies_tree_model.cc
|
| index fad1e472a84ed66d7b14878018d7d686d2b458cf..4f24adf4b0dfe7ef590a19e493cc1d02c801417b 100644
|
| --- a/chrome/browser/cookies_tree_model.cc
|
| +++ b/chrome/browser/cookies_tree_model.cc
|
| @@ -174,28 +174,25 @@ void CookieTreeLocalStorageNode::DeleteStoredObjects() {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // CookieTreeRootNode, public:
|
| -CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode(
|
| - const std::wstring& origin) {
|
| - // Strip the leading dot if it exists.
|
| - std::wstring rewritten_origin = origin;
|
| - if (origin.length() >= 1 && origin[0] == '.')
|
| - rewritten_origin = origin.substr(1);
|
|
|
| - CookieTreeOriginNode rewritten_origin_node(rewritten_origin);
|
| +CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode(
|
| + const GURL& url) {
|
| + CookieTreeOriginNode origin_node(url);
|
|
|
| // First see if there is an existing match.
|
| std::vector<CookieTreeNode*>::iterator origin_node_iterator =
|
| lower_bound(children().begin(),
|
| children().end(),
|
| - &rewritten_origin_node,
|
| + &origin_node,
|
| OriginNodeComparator());
|
|
|
| - if (origin_node_iterator != children().end() && rewritten_origin ==
|
| + if (origin_node_iterator != children().end() &&
|
| + CookieTreeOriginNode::TitleForUrl(url) ==
|
| (*origin_node_iterator)->GetTitle())
|
| return static_cast<CookieTreeOriginNode*>(*origin_node_iterator);
|
| // Node doesn't exist, create a new one and insert it into the (ordered)
|
| // children.
|
| - CookieTreeOriginNode* retval = new CookieTreeOriginNode(rewritten_origin);
|
| + CookieTreeOriginNode* retval = new CookieTreeOriginNode(url);
|
| DCHECK(model_);
|
| model_->Add(this, (origin_node_iterator - children().begin()), retval);
|
| return retval;
|
| @@ -204,6 +201,21 @@ CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode(
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // CookieTreeOriginNode, public:
|
|
|
| +// static
|
| +std::wstring CookieTreeOriginNode::TitleForUrl(
|
| + const GURL& url) {
|
| + return UTF8ToWide(url.SchemeIsFile() ? kFileOriginNodeName : url.host());
|
| +}
|
| +
|
| +CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url)
|
| + : CookieTreeNode(TitleForUrl(url)),
|
| + cookies_child_(NULL),
|
| + databases_child_(NULL),
|
| + local_storages_child_(NULL),
|
| + appcaches_child_(NULL),
|
| + url_(url) {}
|
| +
|
| +
|
| CookieTreeCookiesNode* CookieTreeOriginNode::GetOrCreateCookiesNode() {
|
| if (cookies_child_)
|
| return cookies_child_;
|
| @@ -238,11 +250,16 @@ CookieTreeAppCachesNode* CookieTreeOriginNode::GetOrCreateAppCachesNode() {
|
| }
|
|
|
| void CookieTreeOriginNode::CreateContentException(
|
| - HostContentSettingsMap* content_settings, ContentSetting setting) {
|
| - std::wstring title(GetTitle());
|
| - content_settings->AddExceptionForURL(GURL(WideToUTF16(title)),
|
| + HostContentSettingsMap* content_settings, ContentSetting setting) const {
|
| + if (CanCreateContentException()) {
|
| + content_settings->AddExceptionForURL(url_,
|
| CONTENT_SETTINGS_TYPE_COOKIES,
|
| setting);
|
| + }
|
| +}
|
| +
|
| +bool CookieTreeOriginNode::CanCreateContentException() const {
|
| + return !url_.SchemeIsFile();
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -384,11 +401,17 @@ void CookiesTreeModel::LoadCookiesWithFilter(const std::wstring& filter) {
|
| CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
|
| for (CookieList::iterator it = all_cookies_.begin();
|
| it != all_cookies_.end(); ++it) {
|
| - std::wstring origin_node_name = UTF8ToWide(it->first);
|
| + std::string origin_host = it->first;
|
| + if (origin_host.length() > 1 && origin_host[0] == '.')
|
| + origin_host = it->first.substr(1);
|
| + // We treat secure cookies just the same as normal ones.
|
| + GURL origin(std::string(chrome::kHttpScheme) +
|
| + chrome::kStandardSchemeSeparator + origin_host + "/");
|
| if (!filter.size() ||
|
| - (origin_node_name.find(filter) != std::wstring::npos)) {
|
| + (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
|
| + std::string::npos)) {
|
| CookieTreeOriginNode* origin_node =
|
| - root->GetOrCreateOriginNode(origin_node_name);
|
| + root->GetOrCreateOriginNode(origin);
|
| CookieTreeCookiesNode* cookies_node =
|
| origin_node->GetOrCreateCookiesNode();
|
| CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(&*it);
|
| @@ -469,7 +492,7 @@ void CookiesTreeModel::PopulateAppCacheInfoWithFilter(
|
| if (filter.empty() ||
|
| (origin_node_name.find(filter) != std::wstring::npos)) {
|
| CookieTreeOriginNode* origin_node =
|
| - root->GetOrCreateOriginNode(origin_node_name);
|
| + root->GetOrCreateOriginNode(origin->first);
|
| CookieTreeAppCachesNode* appcaches_node =
|
| origin_node->GetOrCreateAppCachesNode();
|
|
|
| @@ -499,17 +522,13 @@ void CookiesTreeModel::PopulateDatabaseInfoWithFilter(
|
| for (DatabaseInfoList::iterator database_info = database_info_list_.begin();
|
| database_info != database_info_list_.end();
|
| ++database_info) {
|
| - // Determine which 'origin' node to place each 'info' in.
|
| - std::wstring origin_node_name;
|
| - if (database_info->IsFileSchemeData())
|
| - origin_node_name = UTF8ToWide(kFileOriginNodeName);
|
| - else
|
| - origin_node_name = UTF8ToWide(database_info->host);
|
| + GURL origin(database_info->origin);
|
|
|
| if (!filter.size() ||
|
| - (origin_node_name.find(filter) != std::wstring::npos)) {
|
| + (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
|
| + std::wstring::npos)) {
|
| CookieTreeOriginNode* origin_node =
|
| - root->GetOrCreateOriginNode(origin_node_name);
|
| + root->GetOrCreateOriginNode(origin);
|
| CookieTreeDatabasesNode* databases_node =
|
| origin_node->GetOrCreateDatabasesNode();
|
| databases_node->AddDatabaseNode(
|
| @@ -536,17 +555,13 @@ void CookiesTreeModel::PopulateLocalStorageInfoWithFilter(
|
| local_storage_info_list_.begin();
|
| local_storage_info != local_storage_info_list_.end();
|
| ++local_storage_info) {
|
| - // Determine which 'origin' node to place each 'info' in.
|
| - std::wstring origin_node_name;
|
| - if (local_storage_info->IsFileSchemeData())
|
| - origin_node_name = UTF8ToWide(kFileOriginNodeName);
|
| - else
|
| - origin_node_name = UTF8ToWide(local_storage_info->host);
|
| + GURL origin(local_storage_info->origin);
|
|
|
| if (!filter.size() ||
|
| - (origin_node_name.find(filter) != std::wstring::npos)) {
|
| + (CookieTreeOriginNode::TitleForUrl(origin).find(filter) !=
|
| + std::wstring::npos)) {
|
| CookieTreeOriginNode* origin_node =
|
| - root->GetOrCreateOriginNode(origin_node_name);
|
| + root->GetOrCreateOriginNode(origin);
|
| CookieTreeLocalStoragesNode* local_storages_node =
|
| origin_node->GetOrCreateLocalStoragesNode();
|
| local_storages_node->AddLocalStorageNode(
|
|
|