summaryrefslogtreecommitdiffstats
path: root/net/cookies/cookie_monster.cc
diff options
context:
space:
mode:
authorhusky@chromium.org <husky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-25 14:49:37 +0000
committerhusky@chromium.org <husky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-25 14:49:37 +0000
commit264807b5a239e97b6a7651c34f6c0a04e4bc05bb (patch)
tree23e9f7557d145e32e2c21cbf0f6d273b8ea3311d /net/cookies/cookie_monster.cc
parent056093a4101489cae15838954b8fae8244c498a6 (diff)
downloadchromium_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.cc54
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;
}