1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_EXTENSIONS_FILE_READER_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_EXTENSIONS_FILE_READER_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/callback.h"
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension_resource.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MessageLoop;
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This file defines an interface for reading a file asynchronously on a
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// background thread.
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Consider abstracting out a FilePathProvider (ExtensionResource) and moving
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// back to chrome/browser/net if other subsystems want to use it.
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass FileReader : public base::RefCountedThreadSafe<FileReader> {
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Reports success or failure and the data of the file upon success.
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  typedef Callback2<bool, const std::string&>::Type Callback;
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FileReader(const ExtensionResource& resource, Callback* callback);
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Called to start reading the file on a background thread.  Upon completion,
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the callback will be notified of the results.
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Start();
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  friend class base::RefCountedThreadSafe<FileReader>;
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual ~FileReader();
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ReadFileOnBackgroundThread();
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void RunCallback(bool success, const std::string& data);
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionResource resource_;
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Callback* callback_;
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MessageLoop* origin_loop_;
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_EXTENSIONS_FILE_READER_H_
46