Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(873)

Side by Side Diff: chrome/browser/browsing_data_cookie_helper.cc

Issue 7355025: Creat BrowsingDataCookieHelper and CannedBrowsingDataCookieHelper for logging cookies at UI thread. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/browsing_data_cookie_helper.h"
6
7 #include "base/bind.h"
8 #include "chrome/browser/net/chrome_url_request_context.h"
erikwright (departed) 2011/07/18 02:08:30 why do you need chrome_url_request_context and not
ycxiao1 2011/07/19 22:12:48 Done.
9 #include "chrome/browser/profiles/profile.h"
10 #include "content/browser/browser_thread.h"
11
erikwright (departed) 2011/07/18 02:08:30 #include base::Time, DCHECK, scoped_ptr
ycxiao1 2011/07/19 22:12:48 Done.
12 using base::Time;
13
14 BrowsingDataCookieHelper::BrowsingDataCookieHelper(Profile* profile)
15 : is_fetching_(false),
16 profile_(profile),
17 request_context_getter_(profile->GetRequestContext()) {
18 }
19
20 void BrowsingDataCookieHelper::StartFetching(
21 const net::CookieMonster::GetCookieListCallback& callback) {
22 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
erikwright (departed) 2011/07/18 02:08:30 DCHECK that the member completion_callback_ is nul
ycxiao1 2011/07/19 22:12:48 Done.
23 DCHECK(!is_fetching_);
24 DCHECK(!callback.is_null());
25 is_fetching_ = true;
26 cookie_list_.clear();
27 completion_callback_ = callback;
28 BrowserThread::PostTask(
29 BrowserThread::IO, FROM_HERE,
30 base::Bind(&BrowsingDataCookieHelper::StartFetching, this, callback));
31 return;
32 }
33
34 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
erikwright (departed) 2011/07/18 02:08:30 Separate the UI and IO thread portions of this met
ycxiao1 2011/07/19 22:12:48 Done.
35 scoped_refptr<net::CookieMonster> cookie_monster =
36 request_context_getter_->GetURLRequestContext()->
37 cookie_store()->GetCookieMonster();
38 if (cookie_monster)
erikwright (departed) 2011/07/18 02:08:30 if !cookie_monster, unset is_fetching_ and invoke
ycxiao1 2011/07/19 22:12:48 Done.
39 cookie_monster->GetAllCookiesAsync(
40 base::Bind(&BrowsingDataCookieHelper::OnFetchComplete, this));
41 }
42
43 void BrowsingDataCookieHelper::CancelNotification() {
44 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
45 completion_callback_.Reset();
46 }
47
48 void BrowsingDataCookieHelper::DeleteCookie(
49 const net::CookieMonster::CanonicalCookie& cookie) {
50 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
51 BrowserThread::PostTask(
52 BrowserThread::IO, FROM_HERE,
53 base::Bind(&BrowsingDataCookieHelper::DeleteCookie, this, cookie));
54 return;
55 }
56
57 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
erikwright (departed) 2011/07/18 02:08:30 Separate into two methods as mentioned above.
ycxiao1 2011/07/19 22:12:48 Done.
58 scoped_refptr<net::CookieMonster> cookie_monster =
59 request_context_getter_->GetURLRequestContext()->
60 cookie_store()->GetCookieMonster();
61 if (cookie_monster)
62 cookie_monster->DeleteCanonicalCookieAsync(
63 cookie,
64 net::CookieMonster::DeleteCookieCallback());
65 }
66
67 const net::CookieList& BrowsingDataCookieHelper::cookie_list() {
68 return cookie_list_;
69 }
70
71 BrowsingDataCookieHelper::~BrowsingDataCookieHelper() {}
72
73 void BrowsingDataCookieHelper::OnFetchComplete(const net::CookieList& cookies) {
erikwright (departed) 2011/07/18 02:08:30 Separate into two methods.
ycxiao1 2011/07/19 22:12:48 Done.
74 if (BrowserThread::CurrentlyOn(BrowserThread::IO)) {
75 BrowserThread::PostTask(
76 BrowserThread::UI, FROM_HERE,
77 base::Bind(&BrowsingDataCookieHelper::OnFetchComplete, this, cookies));
78 return;
79 }
80
81 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
82 DCHECK(is_fetching_);
83 is_fetching_ = false;
84 cookie_list_ = cookies;
85 if (!completion_callback_.is_null()) {
86 completion_callback_.Run(cookie_list_);
87 completion_callback_.Reset();
88 }
89 }
90
91 CannedBrowsingDataCookieHelper::CannedBrowsingDataCookieHelper(
92 Profile* profile)
93 : BrowsingDataCookieHelper(profile),
94 profile_(profile) {
95 }
96
97 CannedBrowsingDataCookieHelper* CannedBrowsingDataCookieHelper::Clone() {
98 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
99 CannedBrowsingDataCookieHelper* clone =
100 new CannedBrowsingDataCookieHelper(profile_);
101
102 clone->cookie_list_ = cookie_list_;
103 return clone;
104 }
105
106 void CannedBrowsingDataCookieHelper::AddReadCookie(
107 const GURL& url,
108 const net::CookieList& cookie_list) {
109 typedef net::CookieList::const_iterator cookie_iterator;
110 for (cookie_iterator add_cookie = cookie_list.begin();
111 add_cookie != cookie_list.end(); ++add_cookie) {
112 // May have multiple set cookies that result in the same system time.
113 Time creation_time = Time::Now();
114 std::string mac_key;
115 std::string mac_algorithm;
116 scoped_ptr<net::CookieMonster::CanonicalCookie> cc;
117 cc.reset(net::CookieMonster::CanonicalCookie::Create(
118 url,
119 add_cookie->Name(),
120 add_cookie->Value(),
121 add_cookie->Domain(),
122 add_cookie->Path(),
123 mac_key, mac_algorithm,
124 creation_time,
125 add_cookie->ExpiryDate(),
126 add_cookie->IsSecure(),
127 add_cookie->IsHttpOnly()));
128
129 if (cc.get() && !HasCookie(*cc)) {
130 cookie_list_.push_back(*cc);
131 }
132 }
133 }
134
135 void CannedBrowsingDataCookieHelper::AddChangeCookie(
136 const GURL& url,
137 const std::string& cookie_line,
138 const net::CookieOptions& options) {
139 typedef net::CookieList::const_iterator cookie_iterator;
140 net::CookieMonster::ParsedCookie pc(cookie_line);
141 scoped_ptr<net::CookieMonster::CanonicalCookie> cc;
142 cc.reset(new net::CookieMonster::CanonicalCookie(url, pc));
143
144 if (cc.get()) {
145 for (cookie_iterator cookie = cookie_list_.begin();
146 cookie != cookie_list_.end(); ++cookie) {
147 if (cookie->Source() == cc->Source() &&
148 cookie->Name() == cc->Name() &&
149 cookie->Value() == cc->Value() &&
150 cookie->Domain() == cc->Domain()&&
151 cookie->Path() == cc->Path()) {
152 return;
153 }
154 }
155 cookie_list_.push_back(*cc);
156 }
157 }
158
159 void CannedBrowsingDataCookieHelper::Reset() {
160 cookie_list_.clear();
161 }
162
163 bool CannedBrowsingDataCookieHelper::empty() const {
164 return cookie_list_.empty();
165 }
166
167 void CannedBrowsingDataCookieHelper::StartFetching(
168 const net::CookieMonster::GetCookieListCallback& callback) {
169 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
170 if (!callback.is_null())
171 callback.Run(cookie_list_);
172 }
173
174 bool CannedBrowsingDataCookieHelper::HasCookie(
175 const net::CookieMonster::CanonicalCookie& add_cookie) {
176 typedef net::CookieList::const_iterator cookie_iterator;
177 for (cookie_iterator cookie = cookie_list_.begin();
178 cookie != cookie_list_.end(); ++cookie) {
179 if (cookie->Source() == add_cookie.Source() &&
180 cookie->Name() == add_cookie.Name() &&
181 cookie->Value() == add_cookie.Value() &&
182 cookie->Domain() == add_cookie.Domain()&&
183 cookie->Path() == add_cookie.Path()) {
184 return true;
185 }
186 }
187 return false;
188 }
189
190 CannedBrowsingDataCookieHelper::~CannedBrowsingDataCookieHelper() {}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698