| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" | 5 #include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" |
| 6 | 6 |
| 7 #include "utility" | 7 #include "utility" |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 using content::BrowserThread; | 23 using content::BrowserThread; |
| 24 | 24 |
| 25 namespace { | 25 namespace { |
| 26 const char kGlobalCookieListURL[] = "chrome://cookielist"; | 26 const char kGlobalCookieListURL[] = "chrome://cookielist"; |
| 27 } | 27 } |
| 28 | 28 |
| 29 BrowsingDataCookieHelper::BrowsingDataCookieHelper( | 29 BrowsingDataCookieHelper::BrowsingDataCookieHelper( |
| 30 net::URLRequestContextGetter* request_context_getter) | 30 net::URLRequestContextGetter* request_context_getter) |
| 31 : is_fetching_(false), | 31 : is_fetching_(false), |
| 32 request_context_getter_(request_context_getter) { | 32 request_context_getter_(request_context_getter) { |
| 33 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 33 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 34 } | 34 } |
| 35 | 35 |
| 36 BrowsingDataCookieHelper::~BrowsingDataCookieHelper() { | 36 BrowsingDataCookieHelper::~BrowsingDataCookieHelper() { |
| 37 } | 37 } |
| 38 | 38 |
| 39 void BrowsingDataCookieHelper::StartFetching( | 39 void BrowsingDataCookieHelper::StartFetching( |
| 40 const base::Callback<void(const net::CookieList& cookies)>& callback) { | 40 const base::Callback<void(const net::CookieList& cookies)>& callback) { |
| 41 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 41 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 42 DCHECK(!is_fetching_); | 42 DCHECK(!is_fetching_); |
| 43 DCHECK(!callback.is_null()); | 43 DCHECK(!callback.is_null()); |
| 44 DCHECK(completion_callback_.is_null()); | 44 DCHECK(completion_callback_.is_null()); |
| 45 is_fetching_ = true; | 45 is_fetching_ = true; |
| 46 completion_callback_ = callback; | 46 completion_callback_ = callback; |
| 47 BrowserThread::PostTask( | 47 BrowserThread::PostTask( |
| 48 BrowserThread::IO, FROM_HERE, | 48 BrowserThread::IO, FROM_HERE, |
| 49 base::Bind(&BrowsingDataCookieHelper::FetchCookiesOnIOThread, this)); | 49 base::Bind(&BrowsingDataCookieHelper::FetchCookiesOnIOThread, this)); |
| 50 } | 50 } |
| 51 | 51 |
| 52 void BrowsingDataCookieHelper::DeleteCookie( | 52 void BrowsingDataCookieHelper::DeleteCookie( |
| 53 const net::CanonicalCookie& cookie) { | 53 const net::CanonicalCookie& cookie) { |
| 54 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 54 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 55 BrowserThread::PostTask( | 55 BrowserThread::PostTask( |
| 56 BrowserThread::IO, FROM_HERE, | 56 BrowserThread::IO, FROM_HERE, |
| 57 base::Bind(&BrowsingDataCookieHelper::DeleteCookieOnIOThread, | 57 base::Bind(&BrowsingDataCookieHelper::DeleteCookieOnIOThread, |
| 58 this, cookie)); | 58 this, cookie)); |
| 59 } | 59 } |
| 60 | 60 |
| 61 void BrowsingDataCookieHelper::FetchCookiesOnIOThread() { | 61 void BrowsingDataCookieHelper::FetchCookiesOnIOThread() { |
| 62 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 62 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 63 scoped_refptr<net::CookieMonster> cookie_monster = | 63 scoped_refptr<net::CookieMonster> cookie_monster = |
| 64 request_context_getter_->GetURLRequestContext()-> | 64 request_context_getter_->GetURLRequestContext()-> |
| 65 cookie_store()->GetCookieMonster(); | 65 cookie_store()->GetCookieMonster(); |
| 66 if (cookie_monster.get()) { | 66 if (cookie_monster.get()) { |
| 67 cookie_monster->GetAllCookiesAsync( | 67 cookie_monster->GetAllCookiesAsync( |
| 68 base::Bind(&BrowsingDataCookieHelper::OnFetchComplete, this)); | 68 base::Bind(&BrowsingDataCookieHelper::OnFetchComplete, this)); |
| 69 } else { | 69 } else { |
| 70 OnFetchComplete(net::CookieList()); | 70 OnFetchComplete(net::CookieList()); |
| 71 } | 71 } |
| 72 } | 72 } |
| 73 | 73 |
| 74 void BrowsingDataCookieHelper::OnFetchComplete(const net::CookieList& cookies) { | 74 void BrowsingDataCookieHelper::OnFetchComplete(const net::CookieList& cookies) { |
| 75 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 75 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 76 BrowserThread::PostTask( | 76 BrowserThread::PostTask( |
| 77 BrowserThread::UI, FROM_HERE, | 77 BrowserThread::UI, FROM_HERE, |
| 78 base::Bind(&BrowsingDataCookieHelper::NotifyInUIThread, this, cookies)); | 78 base::Bind(&BrowsingDataCookieHelper::NotifyInUIThread, this, cookies)); |
| 79 } | 79 } |
| 80 | 80 |
| 81 void BrowsingDataCookieHelper::NotifyInUIThread( | 81 void BrowsingDataCookieHelper::NotifyInUIThread( |
| 82 const net::CookieList& cookies) { | 82 const net::CookieList& cookies) { |
| 83 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 83 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 84 DCHECK(is_fetching_); | 84 DCHECK(is_fetching_); |
| 85 is_fetching_ = false; | 85 is_fetching_ = false; |
| 86 completion_callback_.Run(cookies); | 86 completion_callback_.Run(cookies); |
| 87 completion_callback_.Reset(); | 87 completion_callback_.Reset(); |
| 88 } | 88 } |
| 89 | 89 |
| 90 void BrowsingDataCookieHelper::DeleteCookieOnIOThread( | 90 void BrowsingDataCookieHelper::DeleteCookieOnIOThread( |
| 91 const net::CanonicalCookie& cookie) { | 91 const net::CanonicalCookie& cookie) { |
| 92 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 92 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 93 scoped_refptr<net::CookieMonster> cookie_monster = | 93 scoped_refptr<net::CookieMonster> cookie_monster = |
| 94 request_context_getter_->GetURLRequestContext()-> | 94 request_context_getter_->GetURLRequestContext()-> |
| 95 cookie_store()->GetCookieMonster(); | 95 cookie_store()->GetCookieMonster(); |
| 96 if (cookie_monster.get()) { | 96 if (cookie_monster.get()) { |
| 97 cookie_monster->DeleteCanonicalCookieAsync( | 97 cookie_monster->DeleteCanonicalCookieAsync( |
| 98 cookie, net::CookieMonster::DeleteCookieCallback()); | 98 cookie, net::CookieMonster::DeleteCookieCallback()); |
| 99 } | 99 } |
| 100 } | 100 } |
| 101 | 101 |
| 102 CannedBrowsingDataCookieHelper::CannedBrowsingDataCookieHelper( | 102 CannedBrowsingDataCookieHelper::CannedBrowsingDataCookieHelper( |
| 103 net::URLRequestContextGetter* request_context_getter) | 103 net::URLRequestContextGetter* request_context_getter) |
| 104 : BrowsingDataCookieHelper(request_context_getter) { | 104 : BrowsingDataCookieHelper(request_context_getter) { |
| 105 } | 105 } |
| 106 | 106 |
| 107 CannedBrowsingDataCookieHelper::~CannedBrowsingDataCookieHelper() { | 107 CannedBrowsingDataCookieHelper::~CannedBrowsingDataCookieHelper() { |
| 108 Reset(); | 108 Reset(); |
| 109 } | 109 } |
| 110 | 110 |
| 111 CannedBrowsingDataCookieHelper* CannedBrowsingDataCookieHelper::Clone() { | 111 CannedBrowsingDataCookieHelper* CannedBrowsingDataCookieHelper::Clone() { |
| 112 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 112 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 113 CannedBrowsingDataCookieHelper* clone = | 113 CannedBrowsingDataCookieHelper* clone = |
| 114 new CannedBrowsingDataCookieHelper(request_context_getter()); | 114 new CannedBrowsingDataCookieHelper(request_context_getter()); |
| 115 | 115 |
| 116 for (OriginCookieListMap::iterator it = origin_cookie_list_map_.begin(); | 116 for (OriginCookieListMap::iterator it = origin_cookie_list_map_.begin(); |
| 117 it != origin_cookie_list_map_.end(); | 117 it != origin_cookie_list_map_.end(); |
| 118 ++it) { | 118 ++it) { |
| 119 net::CookieList* cookies = clone->GetCookiesFor(it->first); | 119 net::CookieList* cookies = clone->GetCookiesFor(it->first); |
| 120 cookies->insert(cookies->begin(), it->second->begin(), it->second->end()); | 120 cookies->insert(cookies->begin(), it->second->begin(), it->second->end()); |
| 121 } | 121 } |
| 122 return clone; | 122 return clone; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 it != origin_cookie_list_map_.end(); | 168 it != origin_cookie_list_map_.end(); |
| 169 ++it) { | 169 ++it) { |
| 170 count += it->second->size(); | 170 count += it->second->size(); |
| 171 } | 171 } |
| 172 return count; | 172 return count; |
| 173 } | 173 } |
| 174 | 174 |
| 175 | 175 |
| 176 void CannedBrowsingDataCookieHelper::StartFetching( | 176 void CannedBrowsingDataCookieHelper::StartFetching( |
| 177 const net::CookieMonster::GetCookieListCallback& callback) { | 177 const net::CookieMonster::GetCookieListCallback& callback) { |
| 178 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 178 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 179 net::CookieList cookie_list; | 179 net::CookieList cookie_list; |
| 180 for (OriginCookieListMap::iterator it = origin_cookie_list_map_.begin(); | 180 for (OriginCookieListMap::iterator it = origin_cookie_list_map_.begin(); |
| 181 it != origin_cookie_list_map_.end(); | 181 it != origin_cookie_list_map_.end(); |
| 182 ++it) { | 182 ++it) { |
| 183 cookie_list.insert(cookie_list.begin(), | 183 cookie_list.insert(cookie_list.begin(), |
| 184 it->second->begin(), | 184 it->second->begin(), |
| 185 it->second->end()); | 185 it->second->end()); |
| 186 } | 186 } |
| 187 callback.Run(cookie_list); | 187 callback.Run(cookie_list); |
| 188 } | 188 } |
| 189 | 189 |
| 190 void CannedBrowsingDataCookieHelper::DeleteCookie( | 190 void CannedBrowsingDataCookieHelper::DeleteCookie( |
| 191 const net::CanonicalCookie& cookie) { | 191 const net::CanonicalCookie& cookie) { |
| 192 for (OriginCookieListMap::iterator it = origin_cookie_list_map_.begin(); | 192 for (OriginCookieListMap::iterator it = origin_cookie_list_map_.begin(); |
| 193 it != origin_cookie_list_map_.end(); | 193 it != origin_cookie_list_map_.end(); |
| 194 ++it) { | 194 ++it) { |
| 195 DeleteMatchingCookie(cookie, it->second); | 195 DeleteMatchingCookie(cookie, it->second); |
| 196 } | 196 } |
| 197 BrowsingDataCookieHelper::DeleteCookie(cookie); | 197 BrowsingDataCookieHelper::DeleteCookie(cookie); |
| 198 } | 198 } |
| 199 | 199 |
| 200 bool CannedBrowsingDataCookieHelper::DeleteMatchingCookie( | 200 bool CannedBrowsingDataCookieHelper::DeleteMatchingCookie( |
| 201 const net::CanonicalCookie& add_cookie, | 201 const net::CanonicalCookie& add_cookie, |
| 202 net::CookieList* cookie_list) { | 202 net::CookieList* cookie_list) { |
| 203 typedef net::CookieList::iterator cookie_iterator; | 203 typedef net::CookieList::iterator cookie_iterator; |
| 204 for (cookie_iterator cookie = cookie_list->begin(); | 204 for (cookie_iterator cookie = cookie_list->begin(); |
| 205 cookie != cookie_list->end(); ++cookie) { | 205 cookie != cookie_list->end(); ++cookie) { |
| 206 if (cookie->Name() == add_cookie.Name() && | 206 if (cookie->Name() == add_cookie.Name() && |
| 207 cookie->Domain() == add_cookie.Domain()&& | 207 cookie->Domain() == add_cookie.Domain() && |
| 208 cookie->Path() == add_cookie.Path()) { | 208 cookie->Path() == add_cookie.Path()) { |
| 209 cookie_list->erase(cookie); | 209 cookie_list->erase(cookie); |
| 210 return true; | 210 return true; |
| 211 } | 211 } |
| 212 } | 212 } |
| 213 return false; | 213 return false; |
| 214 } | 214 } |
| 215 | 215 |
| 216 net::CookieList* CannedBrowsingDataCookieHelper::GetCookiesFor( | 216 net::CookieList* CannedBrowsingDataCookieHelper::GetCookiesFor( |
| 217 const GURL& first_party_origin) { | 217 const GURL& first_party_origin) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 242 // collecting cookies per origin in redirect chains. | 242 // collecting cookies per origin in redirect chains. |
| 243 // TODO(markusheintz): A) Change the GetCookiesCount method to prevent | 243 // TODO(markusheintz): A) Change the GetCookiesCount method to prevent |
| 244 // counting cookies multiple times if they are stored in multiple cookie | 244 // counting cookies multiple times if they are stored in multiple cookie |
| 245 // lists. B) Replace the GetCookieFor method call below with: | 245 // lists. B) Replace the GetCookieFor method call below with: |
| 246 // "GetCookiesFor(frame_url.GetOrigin());" | 246 // "GetCookiesFor(frame_url.GetOrigin());" |
| 247 net::CookieList* cookie_list = | 247 net::CookieList* cookie_list = |
| 248 GetCookiesFor(GURL(kGlobalCookieListURL)); | 248 GetCookiesFor(GURL(kGlobalCookieListURL)); |
| 249 DeleteMatchingCookie(cookie, cookie_list); | 249 DeleteMatchingCookie(cookie, cookie_list); |
| 250 cookie_list->push_back(cookie); | 250 cookie_list->push_back(cookie); |
| 251 } | 251 } |
| OLD | NEW |