Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5392)

Unified Diff: chrome/browser/browsing_data/browsing_data_cookie_helper.cc

Issue 454623003: Store in memory cookies in a hash set instead of a list. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix total ordering. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/browsing_data/browsing_data_cookie_helper.cc
diff --git a/chrome/browser/browsing_data/browsing_data_cookie_helper.cc b/chrome/browser/browsing_data/browsing_data_cookie_helper.cc
index 605c85ceb6ad28319a12e1d207972a6ba8458952..acef30b2132a2caf03ef1fcda0de66f0ea9e2639 100644
--- a/chrome/browser/browsing_data/browsing_data_cookie_helper.cc
+++ b/chrome/browser/browsing_data/browsing_data_cookie_helper.cc
@@ -23,7 +23,7 @@
using content::BrowserThread;
namespace {
-const char kGlobalCookieListURL[] = "chrome://cookielist";
+const char kGlobalCookieSetURL[] = "chrome://cookieset";
}
BrowsingDataCookieHelper::BrowsingDataCookieHelper(
@@ -113,11 +113,11 @@ CannedBrowsingDataCookieHelper* CannedBrowsingDataCookieHelper::Clone() {
CannedBrowsingDataCookieHelper* clone =
new CannedBrowsingDataCookieHelper(request_context_getter());
- for (OriginCookieListMap::iterator it = origin_cookie_list_map_.begin();
- it != origin_cookie_list_map_.end();
+ for (OriginCookieSetMap::iterator it = origin_cookie_set_map_.begin();
+ it != origin_cookie_set_map_.end();
++it) {
- net::CookieList* cookies = clone->GetCookiesFor(it->first);
- cookies->insert(cookies->begin(), it->second->begin(), it->second->end());
+ canonical_cookie::CookieHashSet* cookies = clone->GetCookiesFor(it->first);
+ cookies->insert(it->second->begin(), it->second->end());
}
return clone;
}
@@ -145,15 +145,14 @@ void CannedBrowsingDataCookieHelper::AddChangedCookie(
}
void CannedBrowsingDataCookieHelper::Reset() {
- STLDeleteContainerPairSecondPointers(origin_cookie_list_map_.begin(),
- origin_cookie_list_map_.end());
- origin_cookie_list_map_.clear();
+ STLDeleteContainerPairSecondPointers(origin_cookie_set_map_.begin(),
+ origin_cookie_set_map_.end());
+ origin_cookie_set_map_.clear();
}
bool CannedBrowsingDataCookieHelper::empty() const {
- for (OriginCookieListMap::const_iterator it =
- origin_cookie_list_map_.begin();
- it != origin_cookie_list_map_.end();
+ for (OriginCookieSetMap::const_iterator it = origin_cookie_set_map_.begin();
+ it != origin_cookie_set_map_.end();
++it) {
if (!it->second->empty())
return false;
@@ -164,8 +163,8 @@ bool CannedBrowsingDataCookieHelper::empty() const {
size_t CannedBrowsingDataCookieHelper::GetCookieCount() const {
size_t count = 0;
- for (OriginCookieListMap::const_iterator it = origin_cookie_list_map_.begin();
- it != origin_cookie_list_map_.end();
+ for (OriginCookieSetMap::const_iterator it = origin_cookie_set_map_.begin();
+ it != origin_cookie_set_map_.end();
++it) {
count += it->second->size();
}
@@ -177,8 +176,8 @@ void CannedBrowsingDataCookieHelper::StartFetching(
const net::CookieMonster::GetCookieListCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
net::CookieList cookie_list;
- for (OriginCookieListMap::iterator it = origin_cookie_list_map_.begin();
- it != origin_cookie_list_map_.end();
+ for (OriginCookieSetMap::iterator it = origin_cookie_set_map_.begin();
+ it != origin_cookie_set_map_.end();
++it) {
cookie_list.insert(cookie_list.begin(),
it->second->begin(),
@@ -189,8 +188,8 @@ void CannedBrowsingDataCookieHelper::StartFetching(
void CannedBrowsingDataCookieHelper::DeleteCookie(
const net::CanonicalCookie& cookie) {
- for (OriginCookieListMap::iterator it = origin_cookie_list_map_.begin();
- it != origin_cookie_list_map_.end();
+ for (OriginCookieSetMap::iterator it = origin_cookie_set_map_.begin();
+ it != origin_cookie_set_map_.end();
++it) {
DeleteMatchingCookie(cookie, it->second);
}
@@ -199,28 +198,20 @@ void CannedBrowsingDataCookieHelper::DeleteCookie(
bool CannedBrowsingDataCookieHelper::DeleteMatchingCookie(
const net::CanonicalCookie& add_cookie,
- net::CookieList* cookie_list) {
- typedef net::CookieList::iterator cookie_iterator;
- for (cookie_iterator cookie = cookie_list->begin();
- cookie != cookie_list->end(); ++cookie) {
- if (cookie->Name() == add_cookie.Name() &&
- cookie->Domain() == add_cookie.Domain() &&
- cookie->Path() == add_cookie.Path()) {
- cookie_list->erase(cookie);
- return true;
- }
- }
- return false;
+ canonical_cookie::CookieHashSet* cookie_set) {
+ return cookie_set->erase(add_cookie) > 0;
}
-net::CookieList* CannedBrowsingDataCookieHelper::GetCookiesFor(
+canonical_cookie::CookieHashSet* CannedBrowsingDataCookieHelper::GetCookiesFor(
const GURL& first_party_origin) {
- OriginCookieListMap::iterator it =
- origin_cookie_list_map_.find(first_party_origin);
- if (it == origin_cookie_list_map_.end()) {
- net::CookieList* cookies = new net::CookieList();
- origin_cookie_list_map_.insert(
- std::pair<GURL, net::CookieList*>(first_party_origin, cookies));
+ OriginCookieSetMap::iterator it =
+ origin_cookie_set_map_.find(first_party_origin);
+ if (it == origin_cookie_set_map_.end()) {
+ canonical_cookie::CookieHashSet* cookies =
+ new canonical_cookie::CookieHashSet;
+ origin_cookie_set_map_.insert(
+ std::pair<GURL, canonical_cookie::CookieHashSet*>(first_party_origin,
+ cookies));
return cookies;
}
return it->second;
@@ -229,23 +220,24 @@ net::CookieList* CannedBrowsingDataCookieHelper::GetCookiesFor(
void CannedBrowsingDataCookieHelper::AddCookie(
const GURL& frame_url,
const net::CanonicalCookie& cookie) {
- // Storing cookies in separate cookie lists per frame origin makes the
+ // Storing cookies in separate cookie sets per frame origin makes the
// GetCookieCount method count a cookie multiple times if it is stored in
- // multiple lists.
+ // multiple sets.
// E.g. let "example.com" be redirected to "www.example.com". A cookie set
// with the cookie string "A=B; Domain=.example.com" would be sent to both
- // hosts. This means it would be stored in the separate cookie lists for both
+ // hosts. This means it would be stored in the separate cookie sets for both
// hosts ("example.com", "www.example.com"). The method GetCookieCount would
// count this cookie twice. To prevent this, we us a single global cookie
- // list as a work-around to store all added cookies. Per frame URL cookie
- // lists are currently not used. In the future they will be used for
+ // set as a work-around to store all added cookies. Per frame URL cookie
+ // sets are currently not used. In the future they will be used for
// collecting cookies per origin in redirect chains.
// TODO(markusheintz): A) Change the GetCookiesCount method to prevent
// counting cookies multiple times if they are stored in multiple cookie
- // lists. B) Replace the GetCookieFor method call below with:
+ // sets. B) Replace the GetCookieFor method call below with:
// "GetCookiesFor(frame_url.GetOrigin());"
- net::CookieList* cookie_list =
- GetCookiesFor(GURL(kGlobalCookieListURL));
- DeleteMatchingCookie(cookie, cookie_list);
- cookie_list->push_back(cookie);
+ CR_DEFINE_STATIC_LOCAL(const GURL, origin_cookie_url, (kGlobalCookieSetURL));
+ canonical_cookie::CookieHashSet* cookie_set =
+ GetCookiesFor(origin_cookie_url);
+ DeleteMatchingCookie(cookie, cookie_set);
+ cookie_set->insert(cookie);
}

Powered by Google App Engine
This is Rietveld 408576698