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

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, 4 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 "base/logging.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/time.h"
11 #include "chrome/browser/profiles/profile.h"
12 #include "content/browser/browser_thread.h"
13 #include "googleurl/src/gurl.h"
14 #include "net/url_request/url_request_context.h"
15 #include "net/url_request/url_request_context_getter.h"
16
17 using base::Time;
18
19 BrowsingDataCookieHelper::BrowsingDataCookieHelper(Profile* profile)
20 : is_fetching_(false),
21 profile_(profile),
22 request_context_getter_(profile->GetRequestContext()) {
erikwright (departed) 2011/07/25 16:50:48 DCHECK constructed in UI thread.
ycxiao 2011/07/26 15:35:38 Done.
23 }
24
25 BrowsingDataCookieHelper::~BrowsingDataCookieHelper() {
26 }
27
28 void BrowsingDataCookieHelper::StartFetching(
29 const net::CookieMonster::GetCookieListCallback& callback) {
erikwright (departed) 2011/07/25 16:50:48 Change the declaration of this parameter to match
ycxiao 2011/07/26 15:35:38 Done.
30 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
31 DCHECK(!is_fetching_);
32 DCHECK(!callback.is_null());
33 DCHECK(completion_callback_.is_null());
34 is_fetching_ = true;
35 completion_callback_ = callback;
36 BrowserThread::PostTask(
37 BrowserThread::IO, FROM_HERE,
38 base::Bind(&BrowsingDataCookieHelper::FetchCookiesOnIOThread, this));
39 }
40
41 void BrowsingDataCookieHelper::CancelNotification() {
42 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
43 completion_callback_.Reset();
44 }
45
46 void BrowsingDataCookieHelper::DeleteCookie(
47 const net::CookieMonster::CanonicalCookie& cookie) {
48 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
49 BrowserThread::PostTask(
50 BrowserThread::IO, FROM_HERE,
51 base::Bind(&BrowsingDataCookieHelper::DeleteCookieOnIOThread,
52 this, cookie));
53 }
54
55 void BrowsingDataCookieHelper::FetchCookiesOnIOThread() {
56 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
57 scoped_refptr<net::CookieMonster> cookie_monster =
58 request_context_getter_->GetURLRequestContext()->
59 cookie_store()->GetCookieMonster();
60 if (cookie_monster) {
61 cookie_monster->GetAllCookiesAsync(
62 base::Bind(&BrowsingDataCookieHelper::OnFetchComplete, this));
63 } else {
64 OnFetchComplete(net::CookieList());
65 }
66 }
67
68 void BrowsingDataCookieHelper::OnFetchComplete(const net::CookieList& cookies) {
69 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
70 BrowserThread::PostTask(
71 BrowserThread::UI, FROM_HERE,
72 base::Bind(&BrowsingDataCookieHelper::NotifyInUIThread, this, cookies));
73 }
74
75 void BrowsingDataCookieHelper::NotifyInUIThread(
76 const net::CookieList& cookies) {
77 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
78 DCHECK(is_fetching_);
79 is_fetching_ = false;
80 if (!completion_callback_.is_null()) {
81 completion_callback_.Run(cookies);
82 completion_callback_.Reset();
83 }
84 }
85
86 void BrowsingDataCookieHelper::DeleteCookieOnIOThread(
87 const net::CookieMonster::CanonicalCookie& cookie) {
88 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
89 scoped_refptr<net::CookieMonster> cookie_monster =
90 request_context_getter_->GetURLRequestContext()->
91 cookie_store()->GetCookieMonster();
92 if (cookie_monster) {
93 cookie_monster->DeleteCanonicalCookieAsync(
94 cookie, net::CookieMonster::DeleteCookieCallback());
95 }
96 }
97
98 CannedBrowsingDataCookieHelper::CannedBrowsingDataCookieHelper(
99 Profile* profile)
100 : BrowsingDataCookieHelper(profile),
101 profile_(profile) {
102 }
103
104 CannedBrowsingDataCookieHelper::~CannedBrowsingDataCookieHelper() {}
105
106 CannedBrowsingDataCookieHelper* CannedBrowsingDataCookieHelper::Clone() {
107 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
108 CannedBrowsingDataCookieHelper* clone =
109 new CannedBrowsingDataCookieHelper(profile_);
110
111 clone->cookie_list_ = cookie_list_;
112 return clone;
113 }
114
115 void CannedBrowsingDataCookieHelper::AddReadCookie(
116 const GURL& url,
117 const net::CookieList& cookie_list) {
118 typedef net::CookieList::const_iterator cookie_iterator;
119 for (cookie_iterator add_cookie = cookie_list.begin();
120 add_cookie != cookie_list.end(); ++add_cookie) {
121 DeleteMetchingCookie(*add_cookie);
122 cookie_list_.push_back(*add_cookie);
123 }
124 }
125
126 void CannedBrowsingDataCookieHelper::AddChangeCookie(
127 const GURL& url,
128 const std::string& cookie_line,
129 const net::CookieOptions& options) {
130 typedef net::CookieList::iterator cookie_iterator;
131
132 net::CookieMonster::ParsedCookie pc(cookie_line);
133 if (options.exclude_httponly() && pc.IsHttpOnly()) {
134 return;
135 }
136
137 scoped_ptr<net::CookieMonster::CanonicalCookie> cc;
138 cc.reset(new net::CookieMonster::CanonicalCookie(url, pc));
139 if (cc->Domain() == "") {
140 return;
141 }
142
143 if (cc.get()) {
144 for (cookie_iterator cookie = cookie_list_.begin();
145 cookie != cookie_list_.end(); ++cookie) {
146 if (cookie->Name() == cc->Name() &&
147 cookie->Domain() == cc->Domain()&&
148 cookie->Path() == cc->Path()) {
149 cookie_list_.erase(cookie);
150 break;
151 }
152 }
153 cookie_list_.push_back(*cc);
154 }
155 }
156
157 void CannedBrowsingDataCookieHelper::Reset() {
158 cookie_list_.clear();
159 }
160
161 bool CannedBrowsingDataCookieHelper::empty() const {
162 return cookie_list_.empty();
163 }
164
165 void CannedBrowsingDataCookieHelper::StartFetching(
166 const net::CookieMonster::GetCookieListCallback& callback) {
167 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
168 if (!callback.is_null())
169 callback.Run(cookie_list_);
170 }
171
172 void CannedBrowsingDataCookieHelper::CancelNotification() {}
173
174 bool CannedBrowsingDataCookieHelper::DeleteMetchingCookie(
175 const net::CookieMonster::CanonicalCookie& add_cookie) {
176 typedef net::CookieList::iterator cookie_iterator;
177 for (cookie_iterator cookie = cookie_list_.begin();
178 cookie != cookie_list_.end(); ++cookie) {
179 if (cookie->Name() == add_cookie.Name() &&
180 cookie->Domain() == add_cookie.Domain()&&
181 cookie->Path() == add_cookie.Path()) {
182 cookie_list_.erase(cookie);
183 return true;
184 }
185 }
186 return false;
187 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698