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 |