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

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

Issue 8370026: base::Bind: Convert BrowsingDataFileSystemHelper::StartFetching. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 2 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
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_file_system_helper.h" 5 #include "chrome/browser/browsing_data_file_system_helper.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/compiler_specific.h"
8 #include "base/file_util.h" 9 #include "base/file_util.h"
9 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop.h" 11 #include "base/message_loop.h"
11 #include "base/string_util.h" 12 #include "base/string_util.h"
12 #include "base/utf_string_conversions.h" 13 #include "base/utf_string_conversions.h"
13 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
14 #include "content/browser/browser_thread.h" 15 #include "content/browser/browser_thread.h"
15 #include "webkit/fileapi/file_system_quota_util.h" 16 #include "webkit/fileapi/file_system_quota_util.h"
16 #include "webkit/fileapi/file_system_context.h" 17 #include "webkit/fileapi/file_system_context.h"
17 #include "webkit/fileapi/file_system_types.h" 18 #include "webkit/fileapi/file_system_types.h"
18 #include "webkit/fileapi/sandbox_mount_point_provider.h" 19 #include "webkit/fileapi/sandbox_mount_point_provider.h"
19 20
20 namespace { 21 namespace {
21 22
22 // An implementation of the BrowsingDataFileSystemHelper interface that pulls 23 // An implementation of the BrowsingDataFileSystemHelper interface that pulls
23 // data from a given |profile| and returns a list of FileSystemInfo items to a 24 // data from a given |profile| and returns a list of FileSystemInfo items to a
24 // client. 25 // client.
25 class BrowsingDataFileSystemHelperImpl : public BrowsingDataFileSystemHelper { 26 class BrowsingDataFileSystemHelperImpl : public BrowsingDataFileSystemHelper {
26 public: 27 public:
27 // BrowsingDataFileSystemHelper implementation 28 // BrowsingDataFileSystemHelper implementation
28 explicit BrowsingDataFileSystemHelperImpl(Profile* profile); 29 explicit BrowsingDataFileSystemHelperImpl(Profile* profile);
29 virtual void StartFetching( 30 virtual void StartFetching(const base::Callback<
30 Callback1<const std::list<FileSystemInfo>& >::Type* callback); 31 void(const std::list<FileSystemInfo>&)>& callback) OVERRIDE;
31 virtual void CancelNotification(); 32 virtual void CancelNotification() OVERRIDE;
32 virtual void DeleteFileSystemOrigin(const GURL& origin); 33 virtual void DeleteFileSystemOrigin(const GURL& origin) OVERRIDE;
33 34
34 private: 35 private:
35 virtual ~BrowsingDataFileSystemHelperImpl(); 36 virtual ~BrowsingDataFileSystemHelperImpl();
36 37
37 // Enumerates all filesystem files, storing the resulting list into 38 // Enumerates all filesystem files, storing the resulting list into
38 // file_system_file_ for later use. This must be called on the FILE thread. 39 // file_system_file_ for later use. This must be called on the FILE thread.
39 void FetchFileSystemInfoInFileThread(); 40 void FetchFileSystemInfoInFileThread();
40 41
41 // Triggers the success callback as the end of a StartFetching workflow. This 42 // Triggers the success callback as the end of a StartFetching workflow. This
42 // must be called on the UI thread. 43 // must be called on the UI thread.
43 void NotifyOnUIThread(); 44 void NotifyOnUIThread();
44 45
45 // Deletes all file systems associated with |origin|. This must be called on 46 // Deletes all file systems associated with |origin|. This must be called on
46 // the FILE thread. 47 // the FILE thread.
47 void DeleteFileSystemOriginInFileThread(const GURL& origin); 48 void DeleteFileSystemOriginInFileThread(const GURL& origin);
48 49
49 // We don't own the Profile object. Clients are responsible for destroying the 50 // We don't own the Profile object. Clients are responsible for destroying the
50 // object when it's no longer used. 51 // object when it's no longer used.
51 Profile* profile_; 52 Profile* profile_;
52 53
53 // Holds the current list of file systems returned to the client after 54 // Holds the current list of file systems returned to the client after
54 // StartFetching is called. This only mutates in the FILE thread. 55 // StartFetching is called. This only mutates in the FILE thread.
55 std::list<FileSystemInfo> file_system_info_; 56 std::list<FileSystemInfo> file_system_info_;
56 57
57 // Holds the callback passed in at the beginning of the StartFetching workflow 58 // Holds the callback passed in at the beginning of the StartFetching workflow
58 // so that it can be triggered via NotifyOnUIThread. This only mutates on the 59 // so that it can be triggered via NotifyOnUIThread. This only mutates on the
59 // UI thread. 60 // UI thread.
60 scoped_ptr<Callback1<const std::list<FileSystemInfo>& >::Type > 61 base::Callback<void(const std::list<FileSystemInfo>&)> completion_callback_;
61 completion_callback_;
62 62
63 // Indicates whether or not we're currently fetching information: set to true 63 // Indicates whether or not we're currently fetching information: set to true
64 // when StartFetching is called on the UI thread, and reset to false when 64 // when StartFetching is called on the UI thread, and reset to false when
65 // NotifyOnUIThread triggers the success callback. 65 // NotifyOnUIThread triggers the success callback.
66 // This property only mutates on the UI thread. 66 // This property only mutates on the UI thread.
67 bool is_fetching_; 67 bool is_fetching_;
68 68
69 DISALLOW_COPY_AND_ASSIGN(BrowsingDataFileSystemHelperImpl); 69 DISALLOW_COPY_AND_ASSIGN(BrowsingDataFileSystemHelperImpl);
70 }; 70 };
71 71
72 BrowsingDataFileSystemHelperImpl::BrowsingDataFileSystemHelperImpl( 72 BrowsingDataFileSystemHelperImpl::BrowsingDataFileSystemHelperImpl(
73 Profile* profile) 73 Profile* profile)
74 : profile_(profile), 74 : profile_(profile),
75 is_fetching_(false) { 75 is_fetching_(false) {
76 DCHECK(profile_); 76 DCHECK(profile_);
77 } 77 }
78 78
79 BrowsingDataFileSystemHelperImpl::~BrowsingDataFileSystemHelperImpl() { 79 BrowsingDataFileSystemHelperImpl::~BrowsingDataFileSystemHelperImpl() {
80 } 80 }
81 81
82 void BrowsingDataFileSystemHelperImpl::StartFetching( 82 void BrowsingDataFileSystemHelperImpl::StartFetching(
83 Callback1<const std::list<FileSystemInfo>& >::Type* callback) { 83 const base::Callback<void(const std::list<FileSystemInfo>&)>& callback) {
84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
85 DCHECK(!is_fetching_); 85 DCHECK(!is_fetching_);
86 DCHECK(callback); 86 DCHECK_EQ(false, callback.is_null());
87 is_fetching_ = true; 87 is_fetching_ = true;
88 completion_callback_.reset(callback); 88 completion_callback_ = callback;
89 BrowserThread::PostTask( 89 BrowserThread::PostTask(
90 BrowserThread::FILE, FROM_HERE, 90 BrowserThread::FILE, FROM_HERE,
91 base::Bind( 91 base::Bind(
92 &BrowsingDataFileSystemHelperImpl::FetchFileSystemInfoInFileThread, 92 &BrowsingDataFileSystemHelperImpl::FetchFileSystemInfoInFileThread,
93 this)); 93 this));
94 } 94 }
95 95
96 void BrowsingDataFileSystemHelperImpl::CancelNotification() { 96 void BrowsingDataFileSystemHelperImpl::CancelNotification() {
97 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 97 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
98 completion_callback_.reset(); 98 completion_callback_.Reset();
99 } 99 }
100 100
101 void BrowsingDataFileSystemHelperImpl::DeleteFileSystemOrigin( 101 void BrowsingDataFileSystemHelperImpl::DeleteFileSystemOrigin(
102 const GURL& origin) { 102 const GURL& origin) {
103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
104 BrowserThread::PostTask( 104 BrowserThread::PostTask(
105 BrowserThread::FILE, FROM_HERE, 105 BrowserThread::FILE, FROM_HERE,
106 base::Bind( 106 base::Bind(
107 &BrowsingDataFileSystemHelperImpl::DeleteFileSystemOriginInFileThread, 107 &BrowsingDataFileSystemHelperImpl::DeleteFileSystemOriginInFileThread,
108 this, origin)); 108 this, origin));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 BrowserThread::PostTask( 145 BrowserThread::PostTask(
146 BrowserThread::UI, FROM_HERE, 146 BrowserThread::UI, FROM_HERE,
147 base::Bind(&BrowsingDataFileSystemHelperImpl::NotifyOnUIThread, this)); 147 base::Bind(&BrowsingDataFileSystemHelperImpl::NotifyOnUIThread, this));
148 } 148 }
149 149
150 void BrowsingDataFileSystemHelperImpl::NotifyOnUIThread() { 150 void BrowsingDataFileSystemHelperImpl::NotifyOnUIThread() {
151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
152 DCHECK(is_fetching_); 152 DCHECK(is_fetching_);
153 // completion_callback_ mutates only in the UI thread, so we're safe to test 153 // completion_callback_ mutates only in the UI thread, so we're safe to test
154 // it here. 154 // it here.
155 if (completion_callback_ != NULL) { 155 if (!completion_callback_.is_null()) {
156 completion_callback_->Run(file_system_info_); 156 completion_callback_.Run(file_system_info_);
157 completion_callback_.reset(); 157 completion_callback_.Reset();
158 } 158 }
159 is_fetching_ = false; 159 is_fetching_ = false;
160 } 160 }
161 161
162 void BrowsingDataFileSystemHelperImpl::DeleteFileSystemOriginInFileThread( 162 void BrowsingDataFileSystemHelperImpl::DeleteFileSystemOriginInFileThread(
163 const GURL& origin) { 163 const GURL& origin) {
164 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 164 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
165 profile_->GetFileSystemContext()->DeleteDataForOriginOnFileThread(origin); 165 profile_->GetFileSystemContext()->DeleteDataForOriginOnFileThread(origin);
166 } 166 }
167 167
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 247
248 void CannedBrowsingDataFileSystemHelper::Reset() { 248 void CannedBrowsingDataFileSystemHelper::Reset() {
249 file_system_info_.clear(); 249 file_system_info_.clear();
250 } 250 }
251 251
252 bool CannedBrowsingDataFileSystemHelper::empty() const { 252 bool CannedBrowsingDataFileSystemHelper::empty() const {
253 return file_system_info_.empty(); 253 return file_system_info_.empty();
254 } 254 }
255 255
256 void CannedBrowsingDataFileSystemHelper::StartFetching( 256 void CannedBrowsingDataFileSystemHelper::StartFetching(
257 Callback1<const std::list<FileSystemInfo>& >::Type* callback) { 257 const base::Callback<void(const std::list<FileSystemInfo>&)>& callback) {
258 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 258 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
259 DCHECK(!is_fetching_); 259 DCHECK(!is_fetching_);
260 DCHECK(callback); 260 DCHECK_EQ(false, callback.is_null());
261 is_fetching_ = true; 261 is_fetching_ = true;
262 completion_callback_.reset(callback); 262 completion_callback_ = callback;
263 263
264 BrowserThread::PostTask( 264 BrowserThread::PostTask(
265 BrowserThread::UI, FROM_HERE, 265 BrowserThread::UI, FROM_HERE,
266 base::Bind(&CannedBrowsingDataFileSystemHelper::NotifyOnUIThread, this)); 266 base::Bind(&CannedBrowsingDataFileSystemHelper::NotifyOnUIThread, this));
267 } 267 }
268 268
269 void CannedBrowsingDataFileSystemHelper::NotifyOnUIThread() { 269 void CannedBrowsingDataFileSystemHelper::NotifyOnUIThread() {
270 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 270 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
271 DCHECK(is_fetching_); 271 DCHECK(is_fetching_);
272 if (completion_callback_ != NULL) { 272 if (!completion_callback_.is_null()) {
273 completion_callback_->Run(file_system_info_); 273 completion_callback_.Run(file_system_info_);
274 completion_callback_.reset(); 274 completion_callback_.Reset();
275 } 275 }
276 is_fetching_ = false; 276 is_fetching_ = false;
277 } 277 }
278 278
279 void CannedBrowsingDataFileSystemHelper::CancelNotification() { 279 void CannedBrowsingDataFileSystemHelper::CancelNotification() {
280 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 280 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
281 completion_callback_.reset(); 281 completion_callback_.Reset();
282 } 282 }
OLDNEW
« no previous file with comments | « chrome/browser/browsing_data_file_system_helper.h ('k') | chrome/browser/browsing_data_file_system_helper_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698