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

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

Issue 10805015: Move browsing_data_helper files into a separate directory. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix chrome_frame build Created 8 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/browsing_data_database_helper.h"
6
7 #include "base/bind.h"
8 #include "base/callback.h"
9 #include "base/file_util.h"
10 #include "base/message_loop.h"
11 #include "base/utf_string_conversions.h"
12 #include "chrome/browser/browsing_data_helper.h"
13 #include "chrome/browser/profiles/profile.h"
14 #include "content/public/browser/browser_thread.h"
15 #include "net/base/completion_callback.h"
16 #include "net/base/net_errors.h"
17 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCString.h "
18 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h"
20
21 using content::BrowserContext;
22 using content::BrowserThread;
23 using WebKit::WebSecurityOrigin;
24
25 BrowsingDataDatabaseHelper::DatabaseInfo::DatabaseInfo(
26 const std::string& host,
27 const std::string& database_name,
28 const std::string& origin_identifier,
29 const std::string& description,
30 const std::string& origin,
31 int64 size,
32 base::Time last_modified)
33 : host(host),
34 database_name(database_name),
35 origin_identifier(origin_identifier),
36 description(description),
37 origin(origin),
38 size(size),
39 last_modified(last_modified) {
40 }
41
42 BrowsingDataDatabaseHelper::DatabaseInfo::~DatabaseInfo() {}
43
44 BrowsingDataDatabaseHelper::BrowsingDataDatabaseHelper(Profile* profile)
45 : is_fetching_(false),
46 tracker_(BrowserContext::GetDatabaseTracker(profile)) {
47 }
48
49 BrowsingDataDatabaseHelper::~BrowsingDataDatabaseHelper() {
50 }
51
52 void BrowsingDataDatabaseHelper::StartFetching(
53 const base::Callback<void(const std::list<DatabaseInfo>&)>& callback) {
54 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
55 DCHECK(!is_fetching_);
56 DCHECK_EQ(false, callback.is_null());
57
58 is_fetching_ = true;
59 database_info_.clear();
60 completion_callback_ = callback;
61 BrowserThread::PostTask(
62 BrowserThread::FILE, FROM_HERE,
63 base::Bind(&BrowsingDataDatabaseHelper::FetchDatabaseInfoOnFileThread,
64 this));
65 }
66
67 void BrowsingDataDatabaseHelper::DeleteDatabase(const std::string& origin,
68 const std::string& name) {
69 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
70 BrowserThread::PostTask(
71 BrowserThread::FILE, FROM_HERE,
72 base::Bind(&BrowsingDataDatabaseHelper::DeleteDatabaseOnFileThread, this,
73 origin, name));
74 }
75
76 void BrowsingDataDatabaseHelper::FetchDatabaseInfoOnFileThread() {
77 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
78 std::vector<webkit_database::OriginInfo> origins_info;
79 if (tracker_.get() && tracker_->GetAllOriginsInfo(&origins_info)) {
80 for (std::vector<webkit_database::OriginInfo>::const_iterator ori =
81 origins_info.begin(); ori != origins_info.end(); ++ori) {
82 WebSecurityOrigin web_security_origin =
83 WebSecurityOrigin::createFromDatabaseIdentifier(ori->GetOrigin());
84 GURL origin_url(web_security_origin.toString().utf8());
85 if (!BrowsingDataHelper::HasWebScheme(origin_url)) {
86 // Non-websafe state is not considered browsing data.
87 continue;
88 }
89 std::vector<string16> databases;
90 ori->GetAllDatabaseNames(&databases);
91 for (std::vector<string16>::const_iterator db = databases.begin();
92 db != databases.end(); ++db) {
93 FilePath file_path = tracker_->GetFullDBFilePath(ori->GetOrigin(), *db);
94 base::PlatformFileInfo file_info;
95 if (file_util::GetFileInfo(file_path, &file_info)) {
96 database_info_.push_back(DatabaseInfo(
97 web_security_origin.host().utf8(),
98 UTF16ToUTF8(*db),
99 UTF16ToUTF8(ori->GetOrigin()),
100 UTF16ToUTF8(ori->GetDatabaseDescription(*db)),
101 origin_url.spec(),
102 file_info.size,
103 file_info.last_modified));
104 }
105 }
106 }
107 }
108
109 BrowserThread::PostTask(
110 BrowserThread::UI, FROM_HERE,
111 base::Bind(&BrowsingDataDatabaseHelper::NotifyInUIThread, this));
112 }
113
114 void BrowsingDataDatabaseHelper::NotifyInUIThread() {
115 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
116 DCHECK(is_fetching_);
117 completion_callback_.Run(database_info_);
118 completion_callback_.Reset();
119 is_fetching_ = false;
120 database_info_.clear();
121 }
122
123 void BrowsingDataDatabaseHelper::DeleteDatabaseOnFileThread(
124 const std::string& origin,
125 const std::string& name) {
126 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
127 if (!tracker_.get())
128 return;
129 tracker_->DeleteDatabase(UTF8ToUTF16(origin), UTF8ToUTF16(name),
130 net::CompletionCallback());
131 }
132
133 CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo::PendingDatabaseInfo(
134 const GURL& origin,
135 const std::string& name,
136 const std::string& description)
137 : origin(origin),
138 name(name),
139 description(description) {
140 }
141
142 CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo::~PendingDatabaseInfo() {}
143
144 bool CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo::operator<(
145 const PendingDatabaseInfo& other) const {
146 if (origin == other.origin)
147 return name < other.name;
148 return origin < other.origin;
149 }
150
151 CannedBrowsingDataDatabaseHelper::CannedBrowsingDataDatabaseHelper(
152 Profile* profile)
153 : BrowsingDataDatabaseHelper(profile),
154 profile_(profile) {
155 }
156
157 CannedBrowsingDataDatabaseHelper* CannedBrowsingDataDatabaseHelper::Clone() {
158 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
159 CannedBrowsingDataDatabaseHelper* clone =
160 new CannedBrowsingDataDatabaseHelper(profile_);
161
162 base::AutoLock auto_lock(lock_);
163 clone->pending_database_info_ = pending_database_info_;
164 return clone;
165 }
166
167 void CannedBrowsingDataDatabaseHelper::AddDatabase(
168 const GURL& origin,
169 const std::string& name,
170 const std::string& description) {
171 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
172 base::AutoLock auto_lock(lock_);
173 if (BrowsingDataHelper::HasWebScheme(origin)) {
174 pending_database_info_.insert(PendingDatabaseInfo(
175 origin, name, description));
176 }
177 }
178
179 void CannedBrowsingDataDatabaseHelper::Reset() {
180 base::AutoLock auto_lock(lock_);
181 pending_database_info_.clear();
182 }
183
184 bool CannedBrowsingDataDatabaseHelper::empty() const {
185 base::AutoLock auto_lock(lock_);
186 return pending_database_info_.empty();
187 }
188
189 size_t CannedBrowsingDataDatabaseHelper::GetDatabaseCount() const {
190 base::AutoLock auto_lock(lock_);
191 return pending_database_info_.size();
192 }
193
194 const std::set<CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo>&
195 CannedBrowsingDataDatabaseHelper::GetPendingDatabaseInfo() {
196 return pending_database_info_;
197 }
198
199 void CannedBrowsingDataDatabaseHelper::StartFetching(
200 const base::Callback<void(const std::list<DatabaseInfo>&)>& callback) {
201 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
202 DCHECK(!is_fetching_);
203 DCHECK_EQ(false, callback.is_null());
204
205 is_fetching_ = true;
206 completion_callback_ = callback;
207 BrowserThread::PostTask(
208 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE,
209 base::Bind(&CannedBrowsingDataDatabaseHelper::ConvertInfoInWebKitThread,
210 this));
211 }
212
213 CannedBrowsingDataDatabaseHelper::~CannedBrowsingDataDatabaseHelper() {}
214
215 void CannedBrowsingDataDatabaseHelper::ConvertInfoInWebKitThread() {
216 base::AutoLock auto_lock(lock_);
217 database_info_.clear();
218 for (std::set<PendingDatabaseInfo>::const_iterator
219 info = pending_database_info_.begin();
220 info != pending_database_info_.end(); ++info) {
221 WebSecurityOrigin web_security_origin =
222 WebSecurityOrigin::createFromString(
223 UTF8ToUTF16(info->origin.spec()));
224 std::string origin_identifier =
225 web_security_origin.databaseIdentifier().utf8();
226
227 database_info_.push_back(DatabaseInfo(
228 web_security_origin.host().utf8(),
229 info->name,
230 origin_identifier,
231 info->description,
232 web_security_origin.toString().utf8(),
233 0,
234 base::Time()));
235 }
236
237 BrowserThread::PostTask(
238 BrowserThread::UI, FROM_HERE,
239 base::Bind(&CannedBrowsingDataDatabaseHelper::NotifyInUIThread, this));
240 }
OLDNEW
« no previous file with comments | « chrome/browser/browsing_data_database_helper.h ('k') | chrome/browser/browsing_data_database_helper_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698