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
14namespace base {
15class 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.
22class 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