Commit ee209480 authored by tburkard@chromium.org's avatar tburkard@chromium.org

Add a way to query a cookie store whether any cookies exist for a given

ETLD+1.

Review URL: https://codereview.chromium.org/14365006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195258 0039d316-1c4b-4281-b951-d872f2087c98
parent 5eafd676
......@@ -768,6 +768,41 @@ void CookieMonster::DeleteSessionCookiesTask::Run() {
}
}
// Task class for HasCookiesForETLDP1Task call.
class CookieMonster::HasCookiesForETLDP1Task
: public CookieMonster::CookieMonsterTask {
public:
HasCookiesForETLDP1Task(
CookieMonster* cookie_monster,
const std::string& etldp1,
const CookieMonster::HasCookiesForETLDP1Callback& callback)
: CookieMonsterTask(cookie_monster),
etldp1_(etldp1),
callback_(callback) {
}
// CookieMonster::CookieMonsterTask:
virtual void Run() OVERRIDE;
protected:
virtual ~HasCookiesForETLDP1Task() {}
private:
std::string etldp1_;
CookieMonster::HasCookiesForETLDP1Callback callback_;
DISALLOW_COPY_AND_ASSIGN(HasCookiesForETLDP1Task);
};
void CookieMonster::HasCookiesForETLDP1Task::Run() {
bool result = this->cookie_monster()->HasCookiesForETLDP1(etldp1_);
if (!callback_.is_null()) {
this->InvokeCallback(
base::Bind(&CookieMonster::HasCookiesForETLDP1Callback::Run,
base::Unretained(&callback_), result));
}
}
// Asynchronous CookieMonster API
void CookieMonster::SetCookieWithDetailsAsync(
......@@ -817,6 +852,15 @@ void CookieMonster::GetAllCookiesForURLAsync(
DoCookieTaskForURL(task, url);
}
void CookieMonster::HasCookiesForETLDP1Async(
const std::string& etldp1,
const HasCookiesForETLDP1Callback& callback) {
scoped_refptr<HasCookiesForETLDP1Task> task =
new HasCookiesForETLDP1Task(this, etldp1, callback);
DoCookieTaskForURL(task, GURL("http://" + etldp1));
}
void CookieMonster::DeleteAllAsync(const DeleteCallback& callback) {
scoped_refptr<DeleteAllTask> task =
new DeleteAllTask(this, callback);
......@@ -1236,6 +1280,15 @@ int CookieMonster::DeleteSessionCookies() {
return num_deleted;
}
bool CookieMonster::HasCookiesForETLDP1(const std::string& etldp1) {
base::AutoLock autolock(lock_);
const std::string key(GetKey(etldp1));
CookieMapItPair its = cookies_.equal_range(key);
return its.first != its.second;
}
CookieMonster* CookieMonster::GetCookieMonster() {
return this;
}
......
......@@ -125,6 +125,7 @@ class NET_EXPORT CookieMonster : public CookieStore {
typedef base::Callback<void(const CookieList& cookies)> GetCookieListCallback;
typedef base::Callback<void(bool success)> DeleteCookieCallback;
typedef base::Callback<void(bool cookies_exist)> HasCookiesForETLDP1Callback;
// Sets a cookie given explicit user-provided cookie attributes. The cookie
// name, value, domain, etc. are each provided as separate strings. This
......@@ -179,6 +180,10 @@ class NET_EXPORT CookieMonster : public CookieStore {
void DeleteCanonicalCookieAsync(const CanonicalCookie& cookie,
const DeleteCookieCallback& callback);
// Checks whether for a given ETLD+1, there currently exist any cookies.
void HasCookiesForETLDP1Async(const std::string& etldp1,
const HasCookiesForETLDP1Callback& callback);
// Resets the list of cookieable schemes to the supplied schemes.
// If this this method is called, it must be called before first use of
// the instance (i.e. as part of the instance initialization process).
......@@ -279,6 +284,7 @@ class NET_EXPORT CookieMonster : public CookieStore {
class SetCookieWithDetailsTask;
class SetCookieWithOptionsTask;
class DeleteSessionCookiesTask;
class HasCookiesForETLDP1Task;
// Testing support.
// For SetCookieWithCreationTime.
......@@ -409,6 +415,8 @@ class NET_EXPORT CookieMonster : public CookieStore {
int DeleteSessionCookies();
bool HasCookiesForETLDP1(const std::string& etldp1);
// Called by all non-static functions to ensure that the cookies store has
// been initialized. This is not done during creating so it doesn't block
// the window showing.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment