1 // Copyright 2013 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.
5 #ifndef CHROME_BROWSER_DEVTOOLS_DEVTOOLS_FILE_SYSTEM_INDEXER_H_
6 #define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_FILE_SYSTEM_INDEXER_H_
12 #include "base/callback.h"
13 #include "base/files/file_proxy.h"
14 #include "base/memory/ref_counted.h"
28 class DevToolsFileSystemIndexer
29 : public base::RefCountedThreadSafe
<DevToolsFileSystemIndexer
> {
32 typedef base::Callback
<void(int)> TotalWorkCallback
;
33 typedef base::Callback
<void(int)> WorkedCallback
;
34 typedef base::Callback
<void()> DoneCallback
;
35 typedef base::Callback
<void(const std::vector
<std::string
>&)> SearchCallback
;
37 class FileSystemIndexingJob
: public base::RefCounted
<FileSystemIndexingJob
> {
42 friend class base::RefCounted
<FileSystemIndexingJob
>;
43 friend class DevToolsFileSystemIndexer
;
44 FileSystemIndexingJob(const base::FilePath
& file_system_path
,
45 const TotalWorkCallback
& total_work_callback
,
46 const WorkedCallback
& worked_callback
,
47 const DoneCallback
& done_callback
);
48 virtual ~FileSystemIndexingJob();
51 void StopOnFileThread();
52 void CollectFilesToIndex();
54 void StartFileIndexing(base::File::Error error
);
56 void OnRead(base::File::Error error
,
59 void FinishFileIndexing(bool success
);
61 void CloseCallback(base::File::Error error
);
64 base::FilePath file_system_path_
;
65 TotalWorkCallback total_work_callback_
;
66 WorkedCallback worked_callback_
;
67 DoneCallback done_callback_
;
68 scoped_ptr
<base::FileEnumerator
> file_enumerator_
;
69 typedef std::map
<base::FilePath
, base::Time
> FilePathTimesMap
;
70 FilePathTimesMap file_path_times_
;
71 FilePathTimesMap::const_iterator indexing_it_
;
72 base::FileProxy current_file_
;
73 int64 current_file_offset_
;
74 typedef int32 Trigram
;
75 std::vector
<Trigram
> current_trigrams_
;
76 // The index in this vector is the trigram id.
77 std::vector
<bool> current_trigrams_set_
;
78 base::TimeTicks last_worked_notification_time_
;
83 DevToolsFileSystemIndexer();
85 // Performs file system indexing for given |file_system_path| and sends
86 // progress callbacks.
87 scoped_refptr
<FileSystemIndexingJob
> IndexPath(
88 const std::string
& file_system_path
,
89 const TotalWorkCallback
& total_work_callback
,
90 const WorkedCallback
& worked_callback
,
91 const DoneCallback
& done_callback
);
93 // Performs trigram search for given |query| in |file_system_path|.
94 void SearchInPath(const std::string
& file_system_path
,
95 const std::string
& query
,
96 const SearchCallback
& callback
);
99 friend class base::RefCountedThreadSafe
<DevToolsFileSystemIndexer
>;
101 virtual ~DevToolsFileSystemIndexer();
103 void SearchInPathOnFileThread(const std::string
& file_system_path
,
104 const std::string
& query
,
105 const SearchCallback
& callback
);
107 DISALLOW_COPY_AND_ASSIGN(DevToolsFileSystemIndexer
);
110 #endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_FILE_SYSTEM_INDEXER_H_