• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef EXTENSIONS_BROWSER_FILE_READER_H_
6 #define EXTENSIONS_BROWSER_FILE_READER_H_
7 
8 #include <string>
9 
10 #include "base/callback.h"
11 #include "base/memory/ref_counted.h"
12 #include "extensions/common/extension_resource.h"
13 
14 namespace base {
15 class MessageLoop;
16 }
17 
18 // This file defines an interface for reading a file asynchronously on a
19 // background thread.
20 // Consider abstracting out a FilePathProvider (ExtensionResource) and moving
21 // back to chrome/browser/net if other subsystems want to use it.
22 class FileReader : public base::RefCountedThreadSafe<FileReader> {
23  public:
24   // Reports success or failure and the data of the file upon success.
25   typedef base::Callback<void(bool, const std::string&)> Callback;
26 
27   FileReader(const extensions::ExtensionResource& resource,
28              const Callback& callback);
29 
30   // Called to start reading the file on a background thread.  Upon completion,
31   // the callback will be notified of the results.
32   void Start();
33 
34  private:
35   friend class base::RefCountedThreadSafe<FileReader>;
36 
37   virtual ~FileReader();
38 
39   void ReadFileOnBackgroundThread();
40 
41   extensions::ExtensionResource resource_;
42   Callback callback_;
43   base::MessageLoop* origin_loop_;
44 };
45 
46 #endif  // EXTENSIONS_BROWSER_FILE_READER_H_
47