diff options
author | husky@chromium.org <husky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-25 14:49:37 +0000 |
---|---|---|
committer | husky@chromium.org <husky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-25 14:49:37 +0000 |
commit | 264807b5a239e97b6a7651c34f6c0a04e4bc05bb (patch) | |
tree | 23e9f7557d145e32e2c21cbf0f6d273b8ea3311d /net/cookies/cookie_monster.cc | |
parent | 056093a4101489cae15838954b8fae8244c498a6 (diff) | |
download | chromium_src-264807b5a239e97b6a7651c34f6c0a04e4bc05bb.zip chromium_src-264807b5a239e97b6a7651c34f6c0a04e4bc05bb.tar.gz chromium_src-264807b5a239e97b6a7651c34f6c0a04e4bc05bb.tar.bz2 |
Add CookieStore::DeleteSessionCookiesAsync method.
This is needed by the Android port of Chromium, which has a different
startup and shutdown control flow from other platforms. We also need
to support the Android framework's android.webkit package, which has
a public CookieManager.removeSessionCookie() API.
BUG=None
TEST=CookieMonsterTest
Review URL: http://codereview.chromium.org/9959011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133912 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/cookies/cookie_monster.cc')
-rw-r--r-- | net/cookies/cookie_monster.cc | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc index 63eff03..84fc30d 100644 --- a/net/cookies/cookie_monster.cc +++ b/net/cookies/cookie_monster.cc @@ -918,6 +918,32 @@ void CookieMonster::DeleteCookieTask::Run() { } } +// Task class for DeleteSessionCookies call. +class CookieMonster::DeleteSessionCookiesTask + : public CookieMonster::CookieMonsterTask { + public: + DeleteSessionCookiesTask( + CookieMonster* cookie_monster, + const CookieMonster::DeleteCallback& callback) + : CookieMonsterTask(cookie_monster), + callback_(callback) { } + + virtual void Run() OVERRIDE; + + 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)); + } +} + // Asynchronous CookieMonster API void CookieMonster::SetCookieWithDetailsAsync( @@ -1035,6 +1061,14 @@ void CookieMonster::DeleteCookieAsync(const GURL& url, DoCookieTaskForURL(task, url); } +void CookieMonster::DeleteSessionCookiesAsync( + const CookieStore::DeleteCallback& callback) { + scoped_refptr<DeleteSessionCookiesTask> task = + new DeleteSessionCookiesTask(this, callback); + + DoCookieTask(task); +} + void CookieMonster::DoCookieTask( const scoped_refptr<CookieMonsterTask>& task_item) { { @@ -1390,6 +1424,26 @@ void CookieMonster::DeleteCookie(const GURL& url, } } +int CookieMonster::DeleteSessionCookies() { + base::AutoLock autolock(lock_); + + int num_deleted = 0; + for (CookieMap::iterator it = cookies_.begin(); it != cookies_.end();) { + CookieMap::iterator curit = it; + CanonicalCookie* cc = curit->second; + ++it; + + if (!cc->IsPersistent()) { + InternalDeleteCookie(curit, + true, /*sync_to_store*/ + DELETE_COOKIE_EXPIRED); + ++num_deleted; + } + } + + return num_deleted; +} + CookieMonster* CookieMonster::GetCookieMonster() { return this; } |