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

Unified Diff: net/base/directory_lister.h

Issue 5710002: Create base::WorkerPoolJob. Use it for HostResolverImpl and DirectoryLister. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments. Created 10 years 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 side-by-side diff with in-line comments
Download patch
Index: net/base/directory_lister.h
diff --git a/net/base/directory_lister.h b/net/base/directory_lister.h
index b531880898b713390bbc8c6f217b2569208105a2..d565049e9c57dfbff13955e9115ef8282cd37a7a 100644
--- a/net/base/directory_lister.h
+++ b/net/base/directory_lister.h
@@ -6,46 +6,40 @@
#define NET_BASE_DIRECTORY_LISTER_H_
#pragma once
-#include <vector>
-
-#include "base/cancellation_flag.h"
+#include "base/basictypes.h"
#include "base/file_path.h"
#include "base/file_util.h"
-#include "base/platform_thread.h"
#include "base/ref_counted.h"
-#include "base/task.h"
-
-class MessageLoop;
+#include "base/worker_pool_job.h"
namespace net {
-//
// This class provides an API for listing the contents of a directory on the
// filesystem asynchronously. It spawns a background thread, and enumerates
// the specified directory on that thread. It marshalls WIN32_FIND_DATA
// structs over to the main application thread. The consumer of this class
// is insulated from any of the multi-threading details.
//
-class DirectoryLister : public base::RefCountedThreadSafe<DirectoryLister>,
- public PlatformThread::Delegate {
+class DirectoryLister {
public:
// Represents one file found.
- struct DirectoryListerData {
+ struct Data {
file_util::FileEnumerator::FindInfo info;
FilePath path;
};
// Implement this class to receive directory entries.
- class DirectoryListerDelegate {
+ class Delegate {
public:
// Called for each file found by the lister.
- virtual void OnListFile(const DirectoryListerData& data) = 0;
+ virtual void OnListFile(const Data& data) = 0;
- // Called when the listing is complete.
+ // Called when the listing is complete. May not be called if Cancel() is
+ // called.
virtual void OnListDone(int error) = 0;
protected:
- virtual ~DirectoryListerDelegate() {}
+ virtual ~Delegate() {}
};
// Sort options
@@ -60,54 +54,27 @@ class DirectoryLister : public base::RefCountedThreadSafe<DirectoryLister>,
FULL_PATH
};
- DirectoryLister(const FilePath& dir,
- DirectoryListerDelegate* delegate);
+ DirectoryLister(const FilePath& dir, Delegate* delegate);
DirectoryLister(const FilePath& dir,
bool recursive,
SORT_TYPE sort,
- DirectoryListerDelegate* delegate);
-
+ Delegate* delegate);
+ ~DirectoryLister();
// Call this method to start the directory enumeration thread.
- bool Start();
+ void Start();
- // Call this method to asynchronously stop directory enumeration. The
- // delegate will receive the OnListDone notification with an error code of
- // net::ERR_ABORTED.
+ // Only valid to call this after Start() is called, and before
+ // Delegate::OnListDone() is invoked.
void Cancel();
- // The delegate pointer may be modified at any time.
- DirectoryListerDelegate* delegate() const { return delegate_; }
- void set_delegate(DirectoryListerDelegate* d) { delegate_ = d; }
-
- // PlatformThread::Delegate implementation
- virtual void ThreadMain();
-
private:
- friend class base::RefCountedThreadSafe<DirectoryLister>;
- friend class DirectoryDataEvent;
-
- // Comparison methods for sorting, chosen based on |sort_|.
- static bool CompareAlphaDirsFirst(const DirectoryListerData& a,
- const DirectoryListerData& b);
- static bool CompareDate(const DirectoryListerData& a,
- const DirectoryListerData& b);
- static bool CompareFullPath(const DirectoryListerData& a,
- const DirectoryListerData& b);
-
- ~DirectoryLister();
+ class Job;
- void OnReceivedData(const DirectoryListerData* data, int count);
- void OnDone(int error);
+ base::WorkerPoolJob::ScopedHandle<Job> job_handle_;
- FilePath dir_;
- bool recursive_;
- DirectoryListerDelegate* delegate_;
- SORT_TYPE sort_;
- MessageLoop* message_loop_;
- PlatformThreadHandle thread_;
- base::CancellationFlag canceled_;
+ DISALLOW_COPY_AND_ASSIGN(DirectoryLister);
};
} // namespace net

Powered by Google App Engine
This is Rietveld 408576698