electron/brightray/browser/devtools_file_system_indexer.h
deepak1556 f32e59d4b2 Update devtools_file_system_indexer
* Switch DevToolsFileSystemIndexer to use SequencedTaskRunner
  https://chromium-review.googlesource.com/c/chromium/src/+/545200
* Remove dead code from devtools_file_system_indexer.cc
  https://codereview.chromium.org/2508443002
* Fix DCHECKs and a crash in DevToolsFileSystemIndexer
  https://chromium-review.googlesource.com/c/chromium/src/+/553958
* reset trigram cache when devtools window closes
  https://chromium-review.googlesource.com/c/chromium/src/+/969969
* Directly use base::File instead of FileProxy in DevToolsFileSystemIndexer
  https://chromium-review.googlesource.com/c/chromium/src/+/544793
2018-06-19 11:46:59 +10:00

108 lines
3.5 KiB
C++

// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BRIGHTRAY_BROWSER_DEVTOOLS_FILE_SYSTEM_INDEXER_H_
#define BRIGHTRAY_BROWSER_DEVTOOLS_FILE_SYSTEM_INDEXER_H_
#include <stdint.h>
#include <map>
#include <memory>
#include <string>
#include <vector>
#include "base/callback.h"
#include "base/files/file.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
namespace base {
class FilePath;
class FileEnumerator;
class Time;
} // namespace base
namespace brightray {
class DevToolsFileSystemIndexer
: public base::RefCountedThreadSafe<DevToolsFileSystemIndexer> {
public:
typedef base::Callback<void(int)> TotalWorkCallback;
typedef base::Callback<void(int)> WorkedCallback;
typedef base::Callback<void()> DoneCallback;
typedef base::Callback<void(const std::vector<std::string>&)> SearchCallback;
class FileSystemIndexingJob
: public base::RefCountedThreadSafe<FileSystemIndexingJob> {
public:
void Stop();
private:
friend class base::RefCountedThreadSafe<FileSystemIndexingJob>;
friend class DevToolsFileSystemIndexer;
FileSystemIndexingJob(const base::FilePath& file_system_path,
const TotalWorkCallback& total_work_callback,
const WorkedCallback& worked_callback,
const DoneCallback& done_callback);
virtual ~FileSystemIndexingJob();
void Start();
void StopOnImplSequence();
void CollectFilesToIndex();
void IndexFiles();
void ReadFromFile();
void OnRead(base::File::Error error, const char* data, int bytes_read);
void FinishFileIndexing(bool success);
void CloseFile();
void ReportWorked();
base::FilePath file_system_path_;
TotalWorkCallback total_work_callback_;
WorkedCallback worked_callback_;
DoneCallback done_callback_;
std::unique_ptr<base::FileEnumerator> file_enumerator_;
typedef std::map<base::FilePath, base::Time> FilePathTimesMap;
FilePathTimesMap file_path_times_;
FilePathTimesMap::const_iterator indexing_it_;
base::File current_file_;
int64_t current_file_offset_;
typedef int32_t Trigram;
std::vector<Trigram> current_trigrams_;
// The index in this vector is the trigram id.
std::vector<bool> current_trigrams_set_;
base::TimeTicks last_worked_notification_time_;
int files_indexed_;
bool stopped_;
};
DevToolsFileSystemIndexer();
// Performs file system indexing for given |file_system_path| and sends
// progress callbacks.
scoped_refptr<FileSystemIndexingJob> IndexPath(
const std::string& file_system_path,
const TotalWorkCallback& total_work_callback,
const WorkedCallback& worked_callback,
const DoneCallback& done_callback);
// Performs trigram search for given |query| in |file_system_path|.
void SearchInPath(const std::string& file_system_path,
const std::string& query,
const SearchCallback& callback);
private:
friend class base::RefCountedThreadSafe<DevToolsFileSystemIndexer>;
virtual ~DevToolsFileSystemIndexer();
void SearchInPathOnImplSequence(const std::string& file_system_path,
const std::string& query,
const SearchCallback& callback);
DISALLOW_COPY_AND_ASSIGN(DevToolsFileSystemIndexer);
};
} // namespace brightray
#endif // BRIGHTRAY_BROWSER_DEVTOOLS_FILE_SYSTEM_INDEXER_H_