summaryrefslogtreecommitdiff
path: root/chromium/net/cookies
diff options
context:
space:
mode:
authorAndras Becsi <andras.becsi@digia.com>2014-03-18 13:16:26 +0100
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2014-03-20 15:55:39 +0100
commit3f0f86b0caed75241fa71c95a5d73bc0164348c5 (patch)
tree92b9fb00f2e9e90b0be2262093876d4f43b6cd13 /chromium/net/cookies
parente90d7c4b152c56919d963987e2503f9909a666d2 (diff)
downloadqtwebengine-chromium-3f0f86b0caed75241fa71c95a5d73bc0164348c5.tar.gz
Update to new stable branch 1750
This also includes an updated ninja and chromium dependencies needed on Windows. Change-Id: Icd597d80ed3fa4425933c9f1334c3c2e31291c42 Reviewed-by: Zoltan Arvai <zarvai@inf.u-szeged.hu> Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Diffstat (limited to 'chromium/net/cookies')
-rw-r--r--chromium/net/cookies/cookie_monster.cc359
-rw-r--r--chromium/net/cookies/cookie_monster.h7
-rw-r--r--chromium/net/cookies/cookie_monster_unittest.cc17
3 files changed, 186 insertions, 197 deletions
diff --git a/chromium/net/cookies/cookie_monster.cc b/chromium/net/cookies/cookie_monster.cc
index 65723ff20a6..15c7143a608 100644
--- a/chromium/net/cookies/cookie_monster.cc
+++ b/chromium/net/cookies/cookie_monster.cc
@@ -104,9 +104,8 @@ const size_t CookieMonster::kPurgeCookies = 300;
const size_t CookieMonster::kDomainCookiesQuotaLow = 30;
const size_t CookieMonster::kDomainCookiesQuotaMedium = 50;
const size_t CookieMonster::kDomainCookiesQuotaHigh =
- CookieMonster::kDomainMaxCookies - CookieMonster::kDomainPurgeCookies
- - CookieMonster::kDomainCookiesQuotaLow
- - CookieMonster::kDomainCookiesQuotaMedium;
+ kDomainMaxCookies - kDomainPurgeCookies
+ - kDomainCookiesQuotaLow - kDomainCookiesQuotaMedium;
const int CookieMonster::kSafeFromGlobalPurgeDays = 30;
@@ -202,16 +201,6 @@ struct CookieSignature {
std::string path;
};
-// Determine the cookie domain to use for setting the specified cookie.
-bool GetCookieDomain(const GURL& url,
- const ParsedCookie& pc,
- std::string* result) {
- std::string domain_string;
- if (pc.HasDomain())
- domain_string = pc.Domain();
- return cookie_util::GetCookieDomainWithString(url, domain_string, result);
-}
-
// For a CookieItVector iterator range [|it_begin|, |it_end|),
// sorts the first |num_sort| + 1 elements by LastAccessDate().
// The + 1 element exists so for any interval of length <= |num_sort| starting
@@ -331,8 +320,7 @@ CookieMonster::CookieMonster(PersistentCookieStore* store, Delegate* delegate)
delegate_(delegate),
last_statistic_record_time_(Time::Now()),
keep_expired_cookies_(false),
- persist_session_cookies_(false),
- priority_aware_garbage_collection_(false) {
+ persist_session_cookies_(false) {
InitializeHistograms();
SetDefaultCookieableSchemes();
}
@@ -348,8 +336,7 @@ CookieMonster::CookieMonster(PersistentCookieStore* store,
delegate_(delegate),
last_statistic_record_time_(base::Time::Now()),
keep_expired_cookies_(false),
- persist_session_cookies_(false),
- priority_aware_garbage_collection_(false) {
+ persist_session_cookies_(false) {
InitializeHistograms();
SetDefaultCookieableSchemes();
}
@@ -410,13 +397,12 @@ void CookieMonster::CookieMonsterTask::InvokeCallback(base::Closure callback) {
callback.Run();
} else {
thread_->PostTask(FROM_HERE, base::Bind(
- &CookieMonster::CookieMonsterTask::InvokeCallback, this, callback));
+ &CookieMonsterTask::InvokeCallback, this, callback));
}
}
// Task class for SetCookieWithDetails call.
-class CookieMonster::SetCookieWithDetailsTask
- : public CookieMonster::CookieMonsterTask {
+class CookieMonster::SetCookieWithDetailsTask : public CookieMonsterTask {
public:
SetCookieWithDetailsTask(CookieMonster* cookie_monster,
const GURL& url,
@@ -428,7 +414,7 @@ class CookieMonster::SetCookieWithDetailsTask
bool secure,
bool http_only,
CookiePriority priority,
- const CookieMonster::SetCookiesCallback& callback)
+ const SetCookiesCallback& callback)
: CookieMonsterTask(cookie_monster),
url_(url),
name_(name),
@@ -442,7 +428,7 @@ class CookieMonster::SetCookieWithDetailsTask
callback_(callback) {
}
- // CookieMonster::CookieMonsterTask:
+ // CookieMonsterTask:
virtual void Run() OVERRIDE;
protected:
@@ -458,7 +444,7 @@ class CookieMonster::SetCookieWithDetailsTask
bool secure_;
bool http_only_;
CookiePriority priority_;
- CookieMonster::SetCookiesCallback callback_;
+ SetCookiesCallback callback_;
DISALLOW_COPY_AND_ASSIGN(SetCookieWithDetailsTask);
};
@@ -468,29 +454,28 @@ void CookieMonster::SetCookieWithDetailsTask::Run() {
SetCookieWithDetails(url_, name_, value_, domain_, path_,
expiration_time_, secure_, http_only_, priority_);
if (!callback_.is_null()) {
- this->InvokeCallback(base::Bind(&CookieMonster::SetCookiesCallback::Run,
+ this->InvokeCallback(base::Bind(&SetCookiesCallback::Run,
base::Unretained(&callback_), success));
}
}
// Task class for GetAllCookies call.
-class CookieMonster::GetAllCookiesTask
- : public CookieMonster::CookieMonsterTask {
+class CookieMonster::GetAllCookiesTask : public CookieMonsterTask {
public:
GetAllCookiesTask(CookieMonster* cookie_monster,
- const CookieMonster::GetCookieListCallback& callback)
+ const GetCookieListCallback& callback)
: CookieMonsterTask(cookie_monster),
callback_(callback) {
}
- // CookieMonster::CookieMonsterTask
+ // CookieMonsterTask
virtual void Run() OVERRIDE;
protected:
virtual ~GetAllCookiesTask() {}
private:
- CookieMonster::GetCookieListCallback callback_;
+ GetCookieListCallback callback_;
DISALLOW_COPY_AND_ASSIGN(GetAllCookiesTask);
};
@@ -498,27 +483,27 @@ class CookieMonster::GetAllCookiesTask
void CookieMonster::GetAllCookiesTask::Run() {
if (!callback_.is_null()) {
CookieList cookies = this->cookie_monster()->GetAllCookies();
- this->InvokeCallback(base::Bind(&CookieMonster::GetCookieListCallback::Run,
+ this->InvokeCallback(base::Bind(&GetCookieListCallback::Run,
base::Unretained(&callback_), cookies));
}
}
// Task class for GetAllCookiesForURLWithOptions call.
class CookieMonster::GetAllCookiesForURLWithOptionsTask
- : public CookieMonster::CookieMonsterTask {
+ : public CookieMonsterTask {
public:
GetAllCookiesForURLWithOptionsTask(
CookieMonster* cookie_monster,
const GURL& url,
const CookieOptions& options,
- const CookieMonster::GetCookieListCallback& callback)
+ const GetCookieListCallback& callback)
: CookieMonsterTask(cookie_monster),
url_(url),
options_(options),
callback_(callback) {
}
- // CookieMonster::CookieMonsterTask:
+ // CookieMonsterTask:
virtual void Run() OVERRIDE;
protected:
@@ -527,7 +512,7 @@ class CookieMonster::GetAllCookiesForURLWithOptionsTask
private:
GURL url_;
CookieOptions options_;
- CookieMonster::GetCookieListCallback callback_;
+ GetCookieListCallback callback_;
DISALLOW_COPY_AND_ASSIGN(GetAllCookiesForURLWithOptionsTask);
};
@@ -536,56 +521,109 @@ void CookieMonster::GetAllCookiesForURLWithOptionsTask::Run() {
if (!callback_.is_null()) {
CookieList cookies = this->cookie_monster()->
GetAllCookiesForURLWithOptions(url_, options_);
- this->InvokeCallback(base::Bind(&CookieMonster::GetCookieListCallback::Run,
+ this->InvokeCallback(base::Bind(&GetCookieListCallback::Run,
base::Unretained(&callback_), cookies));
}
}
-// Task class for DeleteAll call.
-class CookieMonster::DeleteAllTask : public CookieMonster::CookieMonsterTask {
+template <typename Result> struct CallbackType {
+ typedef base::Callback<void(Result)> Type;
+};
+
+template <> struct CallbackType<void> {
+ typedef base::Closure Type;
+};
+
+// Base task class for Delete*Task.
+template <typename Result>
+class CookieMonster::DeleteTask : public CookieMonsterTask {
public:
- DeleteAllTask(CookieMonster* cookie_monster,
- const CookieMonster::DeleteCallback& callback)
+ DeleteTask(CookieMonster* cookie_monster,
+ const typename CallbackType<Result>::Type& callback)
: CookieMonsterTask(cookie_monster),
callback_(callback) {
}
- // CookieMonster::CookieMonsterTask:
+ // CookieMonsterTask:
virtual void Run() OVERRIDE;
+ private:
+ // Runs the delete task and returns a result.
+ virtual Result RunDeleteTask() = 0;
+ base::Closure RunDeleteTaskAndBindCallback();
+ void FlushDone(const base::Closure& callback);
+
+ typename CallbackType<Result>::Type callback_;
+
+ DISALLOW_COPY_AND_ASSIGN(DeleteTask);
+};
+
+template <typename Result>
+base::Closure CookieMonster::DeleteTask<Result>::
+RunDeleteTaskAndBindCallback() {
+ Result result = RunDeleteTask();
+ if (callback_.is_null())
+ return base::Closure();
+ return base::Bind(callback_, result);
+}
+
+template <>
+base::Closure CookieMonster::DeleteTask<void>::RunDeleteTaskAndBindCallback() {
+ RunDeleteTask();
+ return callback_;
+}
+
+template <typename Result>
+void CookieMonster::DeleteTask<Result>::Run() {
+ this->cookie_monster()->FlushStore(
+ base::Bind(&DeleteTask<Result>::FlushDone, this,
+ RunDeleteTaskAndBindCallback()));
+}
+
+template <typename Result>
+void CookieMonster::DeleteTask<Result>::FlushDone(
+ const base::Closure& callback) {
+ if (!callback.is_null()) {
+ this->InvokeCallback(callback);
+ }
+}
+
+// Task class for DeleteAll call.
+class CookieMonster::DeleteAllTask : public DeleteTask<int> {
+ public:
+ DeleteAllTask(CookieMonster* cookie_monster,
+ const DeleteCallback& callback)
+ : DeleteTask<int>(cookie_monster, callback) {
+ }
+
+ // DeleteTask:
+ virtual int RunDeleteTask() OVERRIDE;
+
protected:
virtual ~DeleteAllTask() {}
private:
- CookieMonster::DeleteCallback callback_;
-
DISALLOW_COPY_AND_ASSIGN(DeleteAllTask);
};
-void CookieMonster::DeleteAllTask::Run() {
- int num_deleted = this->cookie_monster()->DeleteAll(true);
- if (!callback_.is_null()) {
- this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run,
- base::Unretained(&callback_), num_deleted));
- }
+int CookieMonster::DeleteAllTask::RunDeleteTask() {
+ return this->cookie_monster()->DeleteAll(true);
}
// Task class for DeleteAllCreatedBetween call.
-class CookieMonster::DeleteAllCreatedBetweenTask
- : public CookieMonster::CookieMonsterTask {
+class CookieMonster::DeleteAllCreatedBetweenTask : public DeleteTask<int> {
public:
DeleteAllCreatedBetweenTask(CookieMonster* cookie_monster,
const Time& delete_begin,
const Time& delete_end,
- const CookieMonster::DeleteCallback& callback)
- : CookieMonsterTask(cookie_monster),
+ const DeleteCallback& callback)
+ : DeleteTask<int>(cookie_monster, callback),
delete_begin_(delete_begin),
- delete_end_(delete_end),
- callback_(callback) {
+ delete_end_(delete_end) {
}
- // CookieMonster::CookieMonsterTask:
- virtual void Run() OVERRIDE;
+ // DeleteTask:
+ virtual int RunDeleteTask() OVERRIDE;
protected:
virtual ~DeleteAllCreatedBetweenTask() {}
@@ -593,72 +631,59 @@ class CookieMonster::DeleteAllCreatedBetweenTask
private:
Time delete_begin_;
Time delete_end_;
- CookieMonster::DeleteCallback callback_;
DISALLOW_COPY_AND_ASSIGN(DeleteAllCreatedBetweenTask);
};
-void CookieMonster::DeleteAllCreatedBetweenTask::Run() {
- int num_deleted = this->cookie_monster()->
+int CookieMonster::DeleteAllCreatedBetweenTask::RunDeleteTask() {
+ return this->cookie_monster()->
DeleteAllCreatedBetween(delete_begin_, delete_end_);
- if (!callback_.is_null()) {
- this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run,
- base::Unretained(&callback_), num_deleted));
- }
}
// Task class for DeleteAllForHost call.
-class CookieMonster::DeleteAllForHostTask
- : public CookieMonster::CookieMonsterTask {
+class CookieMonster::DeleteAllForHostTask : public DeleteTask<int> {
public:
DeleteAllForHostTask(CookieMonster* cookie_monster,
const GURL& url,
- const CookieMonster::DeleteCallback& callback)
- : CookieMonsterTask(cookie_monster),
- url_(url),
- callback_(callback) {
+ const DeleteCallback& callback)
+ : DeleteTask<int>(cookie_monster, callback),
+ url_(url) {
}
- // CookieMonster::CookieMonsterTask:
- virtual void Run() OVERRIDE;
+ // DeleteTask:
+ virtual int RunDeleteTask() OVERRIDE;
protected:
virtual ~DeleteAllForHostTask() {}
private:
GURL url_;
- CookieMonster::DeleteCallback callback_;
DISALLOW_COPY_AND_ASSIGN(DeleteAllForHostTask);
};
-void CookieMonster::DeleteAllForHostTask::Run() {
- int num_deleted = this->cookie_monster()->DeleteAllForHost(url_);
- if (!callback_.is_null()) {
- this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run,
- base::Unretained(&callback_), num_deleted));
- }
+int CookieMonster::DeleteAllForHostTask::RunDeleteTask() {
+ return this->cookie_monster()->DeleteAllForHost(url_);
}
// Task class for DeleteAllCreatedBetweenForHost call.
class CookieMonster::DeleteAllCreatedBetweenForHostTask
- : public CookieMonster::CookieMonsterTask {
+ : public DeleteTask<int> {
public:
DeleteAllCreatedBetweenForHostTask(
CookieMonster* cookie_monster,
Time delete_begin,
Time delete_end,
const GURL& url,
- const CookieMonster::DeleteCallback& callback)
- : CookieMonsterTask(cookie_monster),
+ const DeleteCallback& callback)
+ : DeleteTask<int>(cookie_monster, callback),
delete_begin_(delete_begin),
delete_end_(delete_end),
- url_(url),
- callback_(callback) {
+ url_(url) {
}
- // CookieMonster::CookieMonsterTask:
- virtual void Run() OVERRIDE;
+ // DeleteTask:
+ virtual int RunDeleteTask() OVERRIDE;
protected:
virtual ~DeleteAllCreatedBetweenForHostTask() {}
@@ -667,62 +692,49 @@ class CookieMonster::DeleteAllCreatedBetweenForHostTask
Time delete_begin_;
Time delete_end_;
GURL url_;
- CookieMonster::DeleteCallback callback_;
DISALLOW_COPY_AND_ASSIGN(DeleteAllCreatedBetweenForHostTask);
};
-void CookieMonster::DeleteAllCreatedBetweenForHostTask::Run() {
- int num_deleted = this->cookie_monster()->DeleteAllCreatedBetweenForHost(
+int CookieMonster::DeleteAllCreatedBetweenForHostTask::RunDeleteTask() {
+ return this->cookie_monster()->DeleteAllCreatedBetweenForHost(
delete_begin_, delete_end_, url_);
- if (!callback_.is_null()) {
- this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run,
- base::Unretained(&callback_), num_deleted));
- }
}
// Task class for DeleteCanonicalCookie call.
-class CookieMonster::DeleteCanonicalCookieTask
- : public CookieMonster::CookieMonsterTask {
+class CookieMonster::DeleteCanonicalCookieTask : public DeleteTask<bool> {
public:
DeleteCanonicalCookieTask(CookieMonster* cookie_monster,
const CanonicalCookie& cookie,
- const CookieMonster::DeleteCookieCallback& callback)
- : CookieMonsterTask(cookie_monster),
- cookie_(cookie),
- callback_(callback) {
+ const DeleteCookieCallback& callback)
+ : DeleteTask<bool>(cookie_monster, callback),
+ cookie_(cookie) {
}
- // CookieMonster::CookieMonsterTask:
- virtual void Run() OVERRIDE;
+ // DeleteTask:
+ virtual bool RunDeleteTask() OVERRIDE;
protected:
virtual ~DeleteCanonicalCookieTask() {}
private:
CanonicalCookie cookie_;
- CookieMonster::DeleteCookieCallback callback_;
DISALLOW_COPY_AND_ASSIGN(DeleteCanonicalCookieTask);
};
-void CookieMonster::DeleteCanonicalCookieTask::Run() {
- bool result = this->cookie_monster()->DeleteCanonicalCookie(cookie_);
- if (!callback_.is_null()) {
- this->InvokeCallback(base::Bind(&CookieMonster::DeleteCookieCallback::Run,
- base::Unretained(&callback_), result));
- }
+bool CookieMonster::DeleteCanonicalCookieTask::RunDeleteTask() {
+ return this->cookie_monster()->DeleteCanonicalCookie(cookie_);
}
// Task class for SetCookieWithOptions call.
-class CookieMonster::SetCookieWithOptionsTask
- : public CookieMonster::CookieMonsterTask {
+class CookieMonster::SetCookieWithOptionsTask : public CookieMonsterTask {
public:
SetCookieWithOptionsTask(CookieMonster* cookie_monster,
const GURL& url,
const std::string& cookie_line,
const CookieOptions& options,
- const CookieMonster::SetCookiesCallback& callback)
+ const SetCookiesCallback& callback)
: CookieMonsterTask(cookie_monster),
url_(url),
cookie_line_(cookie_line),
@@ -730,7 +742,7 @@ class CookieMonster::SetCookieWithOptionsTask
callback_(callback) {
}
- // CookieMonster::CookieMonsterTask:
+ // CookieMonsterTask:
virtual void Run() OVERRIDE;
protected:
@@ -740,7 +752,7 @@ class CookieMonster::SetCookieWithOptionsTask
GURL url_;
std::string cookie_line_;
CookieOptions options_;
- CookieMonster::SetCookiesCallback callback_;
+ SetCookiesCallback callback_;
DISALLOW_COPY_AND_ASSIGN(SetCookieWithOptionsTask);
};
@@ -749,26 +761,25 @@ void CookieMonster::SetCookieWithOptionsTask::Run() {
bool result = this->cookie_monster()->
SetCookieWithOptions(url_, cookie_line_, options_);
if (!callback_.is_null()) {
- this->InvokeCallback(base::Bind(&CookieMonster::SetCookiesCallback::Run,
+ this->InvokeCallback(base::Bind(&SetCookiesCallback::Run,
base::Unretained(&callback_), result));
}
}
// Task class for GetCookiesWithOptions call.
-class CookieMonster::GetCookiesWithOptionsTask
- : public CookieMonster::CookieMonsterTask {
+class CookieMonster::GetCookiesWithOptionsTask : public CookieMonsterTask {
public:
GetCookiesWithOptionsTask(CookieMonster* cookie_monster,
const GURL& url,
const CookieOptions& options,
- const CookieMonster::GetCookiesCallback& callback)
+ const GetCookiesCallback& callback)
: CookieMonsterTask(cookie_monster),
url_(url),
options_(options),
callback_(callback) {
}
- // CookieMonster::CookieMonsterTask:
+ // CookieMonsterTask:
virtual void Run() OVERRIDE;
protected:
@@ -777,7 +788,7 @@ class CookieMonster::GetCookiesWithOptionsTask
private:
GURL url_;
CookieOptions options_;
- CookieMonster::GetCookiesCallback callback_;
+ GetCookiesCallback callback_;
DISALLOW_COPY_AND_ASSIGN(GetCookiesWithOptionsTask);
};
@@ -786,26 +797,25 @@ void CookieMonster::GetCookiesWithOptionsTask::Run() {
std::string cookie = this->cookie_monster()->
GetCookiesWithOptions(url_, options_);
if (!callback_.is_null()) {
- this->InvokeCallback(base::Bind(&CookieMonster::GetCookiesCallback::Run,
+ this->InvokeCallback(base::Bind(&GetCookiesCallback::Run,
base::Unretained(&callback_), cookie));
}
}
// Task class for DeleteCookie call.
-class CookieMonster::DeleteCookieTask
- : public CookieMonster::CookieMonsterTask {
+class CookieMonster::DeleteCookieTask : public DeleteTask<void> {
public:
DeleteCookieTask(CookieMonster* cookie_monster,
const GURL& url,
const std::string& cookie_name,
const base::Closure& callback)
- : CookieMonsterTask(cookie_monster),
+ : DeleteTask<void>(cookie_monster, callback),
url_(url),
- cookie_name_(cookie_name),
- callback_(callback) { }
+ cookie_name_(cookie_name) {
+ }
- // CookieMonster::CookieMonsterTask:
- virtual void Run() OVERRIDE;
+ // DeleteTask:
+ virtual void RunDeleteTask() OVERRIDE;
protected:
virtual ~DeleteCookieTask() {}
@@ -813,61 +823,50 @@ class CookieMonster::DeleteCookieTask
private:
GURL url_;
std::string cookie_name_;
- base::Closure callback_;
DISALLOW_COPY_AND_ASSIGN(DeleteCookieTask);
};
-void CookieMonster::DeleteCookieTask::Run() {
+void CookieMonster::DeleteCookieTask::RunDeleteTask() {
this->cookie_monster()->DeleteCookie(url_, cookie_name_);
- if (!callback_.is_null()) {
- this->InvokeCallback(callback_);
- }
}
// Task class for DeleteSessionCookies call.
-class CookieMonster::DeleteSessionCookiesTask
- : public CookieMonster::CookieMonsterTask {
+class CookieMonster::DeleteSessionCookiesTask : public DeleteTask<int> {
public:
DeleteSessionCookiesTask(CookieMonster* cookie_monster,
- const CookieMonster::DeleteCallback& callback)
- : CookieMonsterTask(cookie_monster), callback_(callback) {
+ const DeleteCallback& callback)
+ : DeleteTask<int>(cookie_monster, callback) {
}
- // CookieMonster::CookieMonsterTask:
- virtual void Run() OVERRIDE;
+ // DeleteTask:
+ virtual int RunDeleteTask() OVERRIDE;
protected:
virtual ~DeleteSessionCookiesTask() {}
private:
- CookieMonster::DeleteCallback callback_;
DISALLOW_COPY_AND_ASSIGN(DeleteSessionCookiesTask);
};
-void CookieMonster::DeleteSessionCookiesTask::Run() {
- int num_deleted = this->cookie_monster()->DeleteSessionCookies();
- if (!callback_.is_null()) {
- this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run,
- base::Unretained(&callback_), num_deleted));
- }
+int CookieMonster::DeleteSessionCookiesTask::RunDeleteTask() {
+ return this->cookie_monster()->DeleteSessionCookies();
}
// Task class for HasCookiesForETLDP1Task call.
-class CookieMonster::HasCookiesForETLDP1Task
- : public CookieMonster::CookieMonsterTask {
+class CookieMonster::HasCookiesForETLDP1Task : public CookieMonsterTask {
public:
HasCookiesForETLDP1Task(
CookieMonster* cookie_monster,
const std::string& etldp1,
- const CookieMonster::HasCookiesForETLDP1Callback& callback)
+ const HasCookiesForETLDP1Callback& callback)
: CookieMonsterTask(cookie_monster),
etldp1_(etldp1),
callback_(callback) {
}
- // CookieMonster::CookieMonsterTask:
+ // CookieMonsterTask:
virtual void Run() OVERRIDE;
protected:
@@ -875,7 +874,7 @@ class CookieMonster::HasCookiesForETLDP1Task
private:
std::string etldp1_;
- CookieMonster::HasCookiesForETLDP1Callback callback_;
+ HasCookiesForETLDP1Callback callback_;
DISALLOW_COPY_AND_ASSIGN(HasCookiesForETLDP1Task);
};
@@ -884,7 +883,7 @@ void CookieMonster::HasCookiesForETLDP1Task::Run() {
bool result = this->cookie_monster()->HasCookiesForETLDP1(etldp1_);
if (!callback_.is_null()) {
this->InvokeCallback(
- base::Bind(&CookieMonster::HasCookiesForETLDP1Callback::Run,
+ base::Bind(&HasCookiesForETLDP1Callback::Run,
base::Unretained(&callback_), result));
}
}
@@ -1408,13 +1407,6 @@ void CookieMonster::SetPersistSessionCookies(bool persist_session_cookies) {
persist_session_cookies_ = persist_session_cookies;
}
-// This function must be called before the CookieMonster is used.
-void CookieMonster::SetPriorityAwareGarbageCollection(
- bool priority_aware_garbage_collection) {
- DCHECK(!initialized_);
- priority_aware_garbage_collection_ = priority_aware_garbage_collection;
-}
-
void CookieMonster::SetForceKeepSessionState() {
if (store_.get()) {
store_->SetForceKeepSessionState();
@@ -1463,21 +1455,31 @@ void CookieMonster::OnKeyLoaded(const std::string& key,
StoreLoadedCookies(cookies);
std::deque<scoped_refptr<CookieMonsterTask> > tasks_pending_for_key;
- {
- base::AutoLock autolock(lock_);
- keys_loaded_.insert(key);
- std::map<std::string, std::deque<scoped_refptr<CookieMonsterTask> > >
- ::iterator it = tasks_pending_for_key_.find(key);
- if (it == tasks_pending_for_key_.end())
- return;
- it->second.swap(tasks_pending_for_key);
- tasks_pending_for_key_.erase(it);
- }
- while (!tasks_pending_for_key.empty()) {
- scoped_refptr<CookieMonsterTask> task = tasks_pending_for_key.front();
- task->Run();
- tasks_pending_for_key.pop_front();
+ // We need to do this repeatedly until no more tasks were added to the queue
+ // during the period where we release the lock.
+ while (true) {
+ {
+ base::AutoLock autolock(lock_);
+ std::map<std::string, std::deque<scoped_refptr<CookieMonsterTask> > >
+ ::iterator it = tasks_pending_for_key_.find(key);
+ if (it == tasks_pending_for_key_.end()) {
+ keys_loaded_.insert(key);
+ return;
+ }
+ if (it->second.empty()) {
+ keys_loaded_.insert(key);
+ tasks_pending_for_key_.erase(it);
+ return;
+ }
+ it->second.swap(tasks_pending_for_key);
+ }
+
+ while (!tasks_pending_for_key.empty()) {
+ scoped_refptr<CookieMonsterTask> task = tasks_pending_for_key.front();
+ task->Run();
+ tasks_pending_for_key.pop_front();
+ }
}
}
@@ -1666,9 +1668,9 @@ int CookieMonster::TrimDuplicateCookiesForKey(
// Note: file must be the last scheme.
const char* CookieMonster::kDefaultCookieableSchemes[] =
- { "http", "https", "file" };
+ { "http", "https", "ws", "wss", "file" };
const int CookieMonster::kDefaultCookieableSchemesCount =
- arraysize(CookieMonster::kDefaultCookieableSchemes);
+ arraysize(kDefaultCookieableSchemes);
void CookieMonster::SetDefaultCookieableSchemes() {
int num_schemes = default_enable_file_scheme_ ?
@@ -1775,7 +1777,7 @@ CookieMonster::CookieMap::iterator CookieMonster::InternalInsertCookie(
cookies_.insert(CookieMap::value_type(key, cc));
if (delegate_.get()) {
delegate_->OnCookieChanged(
- *cc, false, CookieMonster::Delegate::CHANGE_COOKIE_EXPLICIT);
+ *cc, false, Delegate::CHANGE_COOKIE_EXPLICIT);
}
return inserted;
@@ -1947,11 +1949,6 @@ int CookieMonster::GarbageCollect(const Time& current,
for (int i = 0; i < 3 && purge_goal > 0; ++i) {
accumulated_quota += quota[i];
- // If we are not using priority, only do Round 3. This reproduces the
- // old way of indiscriminately purging least-recently accessed cookies.
- if (!priority_aware_garbage_collection_ && i < 2)
- continue;
-
size_t num_considered = it_bdd[i + 1] - it_purge_begin;
if (num_considered <= accumulated_quota)
continue;
@@ -2050,8 +2047,8 @@ int CookieMonster::GarbageCollectExpired(
int CookieMonster::GarbageCollectDeleteRange(
const Time& current,
DeletionCause cause,
- CookieMonster::CookieItVector::iterator it_begin,
- CookieMonster::CookieItVector::iterator it_end) {
+ CookieItVector::iterator it_begin,
+ CookieItVector::iterator it_end) {
for (CookieItVector::iterator it = it_begin; it != it_end; it++) {
histogram_evicted_last_access_minutes_->Add(
(current - (*it)->second->LastAccessDate()).InMinutes());
diff --git a/chromium/net/cookies/cookie_monster.h b/chromium/net/cookies/cookie_monster.h
index 1df616cd6d9..de00319fb4b 100644
--- a/chromium/net/cookies/cookie_monster.h
+++ b/chromium/net/cookies/cookie_monster.h
@@ -288,11 +288,6 @@ class NET_EXPORT CookieMonster : public CookieStore {
// (i.e. as part of the instance initialization process).
void SetPersistSessionCookies(bool persist_session_cookies);
- // Enables the new garbage collection algorithm where domain cookie eviction
- // uses cookie priorities to decide which cookies to purge and which to keep.
- void SetPriorityAwareGarbageCollection(
- bool priority_aware_garbage_collection);
-
// Debugging method to perform various validation checks on the map.
// Currently just checking that there are no null CanonicalCookie pointers
// in the map.
@@ -311,6 +306,7 @@ class NET_EXPORT CookieMonster : public CookieStore {
private:
// For queueing the cookie monster calls.
class CookieMonsterTask;
+ template <typename Result> class DeleteTask;
class DeleteAllCreatedBetweenTask;
class DeleteAllCreatedBetweenForHostTask;
class DeleteAllForHostTask;
@@ -679,7 +675,6 @@ class NET_EXPORT CookieMonster : public CookieStore {
bool keep_expired_cookies_;
bool persist_session_cookies_;
- bool priority_aware_garbage_collection_;
// Static setting for whether or not file scheme cookies are allows when
// a new CookieMonster is created, or the accepted schemes on a CookieMonster
diff --git a/chromium/net/cookies/cookie_monster_unittest.cc b/chromium/net/cookies/cookie_monster_unittest.cc
index 2bfe9ee9978..69d98a1862a 100644
--- a/chromium/net/cookies/cookie_monster_unittest.cc
+++ b/chromium/net/cookies/cookie_monster_unittest.cc
@@ -50,7 +50,10 @@ class NewMockPersistentCookieStore
MOCK_METHOD1(AddCookie, void(const CanonicalCookie& cc));
MOCK_METHOD1(UpdateCookieAccessTime, void(const CanonicalCookie& cc));
MOCK_METHOD1(DeleteCookie, void(const CanonicalCookie& cc));
- MOCK_METHOD1(Flush, void(const base::Closure& callback));
+ virtual void Flush(const base::Closure& callback) {
+ if (!callback.is_null())
+ base::MessageLoop::current()->PostTask(FROM_HERE, callback);
+ }
MOCK_METHOD0(SetForceKeepSessionState, void());
private:
@@ -89,7 +92,6 @@ struct CookieMonsterTestTraits {
static const bool is_cookie_monster = true;
static const bool supports_http_only = true;
- static const bool supports_cookies_with_info = true;
static const bool supports_non_dotted_domains = true;
static const bool supports_trailing_dots = true;
static const bool filters_schemes = true;
@@ -570,7 +572,6 @@ class CookieMonsterTest : public CookieStoreTest<CookieMonsterTestTraits> {
DCHECK_EQ(70U, CookieMonster::kDomainCookiesQuotaHigh);
scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL));
- cm->SetPriorityAwareGarbageCollection(true);
// Each test case adds 181 cookies, so 31 cookies are evicted.
// Cookie same priority, repeated for each priority.
@@ -1097,16 +1098,13 @@ TEST_F(DeferredCookieTaskTest, DeferredTaskOrder) {
MockGetCookiesCallback get_cookies_callback;
MockSetCookiesCallback set_cookies_callback;
- MockClosure delete_cookie_callback;
MockGetCookiesCallback get_cookies_callback_deferred;
EXPECT_CALL(*this, Begin()).WillOnce(testing::DoAll(
GetCookiesAction(
&cookie_monster(), url_google_, &get_cookies_callback),
SetCookieAction(
- &cookie_monster(), url_google_, "A=B", &set_cookies_callback),
- DeleteCookieAction(
- &cookie_monster(), url_google_, "A", &delete_cookie_callback)));
+ &cookie_monster(), url_google_, "A=B", &set_cookies_callback)));
ExpectLoadCall();
ExpectLoadForKeyCall("google.izzle", false);
Begin();
@@ -1115,10 +1113,9 @@ TEST_F(DeferredCookieTaskTest, DeferredTaskOrder) {
EXPECT_CALL(get_cookies_callback, Invoke("X=1")).WillOnce(
GetCookiesAction(
&cookie_monster(), url_google_, &get_cookies_callback_deferred));
- EXPECT_CALL(get_cookies_callback_deferred, Invoke("X=1")).WillOnce(
- QuitCurrentMessageLoop());
EXPECT_CALL(set_cookies_callback, Invoke(true));
- EXPECT_CALL(delete_cookie_callback, Invoke());
+ EXPECT_CALL(get_cookies_callback_deferred, Invoke("A=B; X=1")).WillOnce(
+ QuitCurrentMessageLoop());
CompleteLoadingAndWait();
}