// Copyright (c) 2011 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 EXTENSIONS_BROWSER_FILE_READER_H_ #define EXTENSIONS_BROWSER_FILE_READER_H_ #include #include #include "base/callback.h" #include "base/memory/ref_counted.h" #include "base/single_thread_task_runner.h" #include "extensions/common/extension_resource.h" #include "third_party/abseil-cpp/absl/types/optional.h" // This file defines an interface for reading files asynchronously on a // background sequence. // Consider abstracting out a FilePathProvider (ExtensionResource) and moving // back to chrome/browser/net if other subsystems want to use it. class FileReader : public base::RefCountedThreadSafe { public: // Passes the result of loading the files in `data`, or reports the // encountered error in `error`. If there was an error, `data` will be empty. using DoneCallback = base::OnceCallback> data, absl::optional error)>; // Lets the caller accomplish tasks on the file data, after the file content // has been read. This is called once per file successfully read (it is not // invoked if a file read fails). using OptionalFileSequenceTask = base::RepeatingCallback; FileReader(std::vector resources, OptionalFileSequenceTask file_sequence_task, DoneCallback done_callback); // Called to start reading the files on a background sequence. Upon // completion, the callback will be notified of the results. void Start(); private: friend class base::RefCountedThreadSafe; ~FileReader(); void ReadFilesOnFileSequence(); std::vector resources_; OptionalFileSequenceTask optional_file_sequence_task_; DoneCallback done_callback_; const scoped_refptr origin_task_runner_; DISALLOW_COPY_AND_ASSIGN(FileReader); }; #endif // EXTENSIONS_BROWSER_FILE_READER_H_