Index: chrome/browser/browsing_data_cookie_helper.cc |
=================================================================== |
--- chrome/browser/browsing_data_cookie_helper.cc (revision 0) |
+++ chrome/browser/browsing_data_cookie_helper.cc (revision 0) |
@@ -0,0 +1,204 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/browsing_data_cookie_helper.h" |
+ |
+#include "base/bind.h" |
+#include "base/logging.h" |
+#include "base/memory/scoped_ptr.h" |
erikwright (departed)
2011/07/19 14:40:33
Include either here or in the .h, not both.
ycxiao1
2011/07/19 22:12:48
Done.
|
+#include "base/time.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "content/browser/browser_thread.h" |
+#include "googleurl/src/gurl.h" |
+#include "net/url_request/url_request_context.h" |
+#include "net/url_request/url_request_context_getter.h" |
+ |
+using base::Time; |
+ |
+BrowsingDataCookieHelper::BrowsingDataCookieHelper(Profile* profile) |
+ : is_fetching_(false), |
+ profile_(profile), |
+ request_context_getter_(profile->GetRequestContext()) { |
+} |
+ |
+void BrowsingDataCookieHelper::StartFetching( |
+ const net::CookieMonster::GetCookieListCallback& callback) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ DCHECK(!is_fetching_); |
+ DCHECK(!callback.is_null()); |
+ DCHECK(completion_callback_.is_null()); |
+ is_fetching_ = true; |
+ // cookie_list_.clear(); |
erikwright (departed)
2011/07/19 14:40:33
Remove.
ycxiao1
2011/07/19 22:12:48
Done.
|
+ completion_callback_ = callback; |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(&BrowsingDataCookieHelper::FetchCookiesOnIOThread, this)); |
+ return; |
erikwright (departed)
2011/07/19 14:40:33
Remove the return.
ycxiao1
2011/07/19 22:12:48
Done.
|
+} |
+ |
+void BrowsingDataCookieHelper::CancelNotification() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ completion_callback_.Reset(); |
+} |
+ |
+void BrowsingDataCookieHelper::DeleteCookie( |
+ const net::CookieMonster::CanonicalCookie& cookie) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(&BrowsingDataCookieHelper::DeleteCookieOnIOThread, |
+ this, cookie)); |
+ return; |
erikwright (departed)
2011/07/19 14:40:33
Remove.
ycxiao1
2011/07/19 22:12:48
Done.
|
+} |
+ |
+BrowsingDataCookieHelper::~BrowsingDataCookieHelper() { |
erikwright (departed)
2011/07/19 14:40:33
Move next to constructor.
ycxiao1
2011/07/19 22:12:48
Done.
|
+} |
+ |
+void BrowsingDataCookieHelper::FetchCookiesOnIOThread() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ scoped_refptr<net::CookieMonster> cookie_monster = |
+ request_context_getter_->GetURLRequestContext()-> |
+ cookie_store()->GetCookieMonster(); |
+ if (cookie_monster) { |
+ cookie_monster->GetAllCookiesAsync( |
+ base::Bind(&BrowsingDataCookieHelper::OnFetchComplete, this)); |
+ } else { |
+ OnFetchComplete(net::CookieList()); |
+ } |
+} |
+ |
+void BrowsingDataCookieHelper::OnFetchComplete(const net::CookieList& cookies) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&BrowsingDataCookieHelper::NotifyInUIThread, this, cookies)); |
+ return; |
erikwright (departed)
2011/07/19 14:40:33
Remove.
ycxiao1
2011/07/19 22:12:48
Done.
|
+} |
+ |
+void BrowsingDataCookieHelper::NotifyInUIThread( |
+ const net::CookieList& cookies) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ DCHECK(is_fetching_); |
+ is_fetching_ = false; |
+ // cookie_list_ = cookies; |
+ if (!completion_callback_.is_null()) { |
+ completion_callback_.Run(cookies); |
+ completion_callback_.Reset(); |
+ } |
+} |
+ |
+void BrowsingDataCookieHelper::DeleteCookieOnIOThread( |
+ const net::CookieMonster::CanonicalCookie& cookie) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ scoped_refptr<net::CookieMonster> cookie_monster = |
+ request_context_getter_->GetURLRequestContext()-> |
+ cookie_store()->GetCookieMonster(); |
+ if (cookie_monster) |
erikwright (departed)
2011/07/19 14:40:33
Use braces whenever the conditional block is more
ycxiao1
2011/07/19 22:12:48
Done.
|
+ cookie_monster->DeleteCanonicalCookieAsync( |
+ cookie, |
erikwright (departed)
2011/07/19 14:40:33
If these two arguments fit on one line, you can pu
ycxiao1
2011/07/19 22:12:48
Done.
|
+ net::CookieMonster::DeleteCookieCallback()); |
+} |
+ |
+CannedBrowsingDataCookieHelper::CannedBrowsingDataCookieHelper( |
+ Profile* profile) |
+ : BrowsingDataCookieHelper(profile), |
+ profile_(profile) { |
+} |
+ |
+CannedBrowsingDataCookieHelper* CannedBrowsingDataCookieHelper::Clone() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ CannedBrowsingDataCookieHelper* clone = |
+ new CannedBrowsingDataCookieHelper(profile_); |
+ |
+ clone->cookie_list_ = cookie_list_; |
+ return clone; |
+} |
+ |
+void CannedBrowsingDataCookieHelper::AddReadCookie( |
+ const GURL& url, |
+ const net::CookieList& cookie_list) { |
+ typedef net::CookieList::const_iterator cookie_iterator; |
+ for (cookie_iterator add_cookie = cookie_list.begin(); |
+ add_cookie != cookie_list.end(); ++add_cookie) { |
+ // May have multiple set cookies that result in the same system time. |
+ Time creation_time = Time::Now(); |
+ std::string mac_key; |
+ std::string mac_algorithm; |
+ scoped_ptr<net::CookieMonster::CanonicalCookie> cc; |
+ cc.reset(net::CookieMonster::CanonicalCookie::Create( |
+ url, |
+ add_cookie->Name(), |
+ add_cookie->Value(), |
+ add_cookie->Domain(), |
+ add_cookie->Path(), |
+ mac_key, mac_algorithm, |
+ creation_time, |
+ add_cookie->ExpiryDate(), |
+ add_cookie->IsSecure(), |
+ add_cookie->IsHttpOnly())); |
+ |
+ if (cc.get() && !HasCookie(*cc)) { |
+ cookie_list_.push_back(*cc); |
+ } |
+ } |
+} |
+ |
+void CannedBrowsingDataCookieHelper::AddChangeCookie( |
+ const GURL& url, |
+ const std::string& cookie_line, |
+ const net::CookieOptions& options) { |
erikwright (departed)
2011/07/19 14:40:33
options is not used. Remove it from the signature
ycxiao1
2011/07/19 22:12:48
Options is actually needed here.
|
+ typedef net::CookieList::const_iterator cookie_iterator; |
+ net::CookieMonster::ParsedCookie pc(cookie_line); |
+ scoped_ptr<net::CookieMonster::CanonicalCookie> cc; |
+ cc.reset(new net::CookieMonster::CanonicalCookie(url, pc)); |
+ |
+ if (cc.get()) { |
+ for (cookie_iterator cookie = cookie_list_.begin(); |
+ cookie != cookie_list_.end(); ++cookie) { |
+ if (cookie->Name() == cc->Name() && |
+ cookie->Domain() == cc->Domain()&& |
+ cookie->Path() == cc->Path()) { |
+ return; |
+ } |
+ } |
+ cookie_list_.push_back(*cc); |
+ } |
+} |
+ |
+void CannedBrowsingDataCookieHelper::Reset() { |
+ cookie_list_.clear(); |
+} |
+ |
+bool CannedBrowsingDataCookieHelper::empty() const { |
+ return cookie_list_.empty(); |
+} |
+ |
+const net::CookieList& CannedBrowsingDataCookieHelper::cookie_list() { |
+ return cookie_list_; |
+} |
+ |
+void CannedBrowsingDataCookieHelper::StartFetching( |
+ const net::CookieMonster::GetCookieListCallback& callback) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ if (!callback.is_null()) |
+ callback.Run(cookie_list_); |
+} |
+ |
+void CannedBrowsingDataCookieHelper::CancelNotification() {} |
+ |
+bool CannedBrowsingDataCookieHelper::HasCookie( |
+ const net::CookieMonster::CanonicalCookie& add_cookie) { |
+ typedef net::CookieList::const_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()) { |
+ return true; |
+ } |
+ } |
+ return false; |
+} |
+ |
+CannedBrowsingDataCookieHelper::~CannedBrowsingDataCookieHelper() {} |
Property changes on: chrome/browser/browsing_data_cookie_helper.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |