|  | // 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 <string> | 
|  |  | 
|  | #include "base/callback.h" | 
|  | #include "base/memory/ref_counted.h" | 
|  | #include "extensions/common/extension_resource.h" | 
|  |  | 
|  | namespace base { | 
|  | class MessageLoop; | 
|  | } | 
|  |  | 
|  | // This file defines an interface for reading a file asynchronously on a | 
|  | // background thread. | 
|  | // 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<FileReader> { | 
|  | public: | 
|  | // Reports success or failure and the data of the file upon success. | 
|  | typedef base::Callback<void(bool, const std::string&)> Callback; | 
|  |  | 
|  | FileReader(const extensions::ExtensionResource& resource, | 
|  | const Callback& callback); | 
|  |  | 
|  | // Called to start reading the file on a background thread.  Upon completion, | 
|  | // the callback will be notified of the results. | 
|  | void Start(); | 
|  |  | 
|  | private: | 
|  | friend class base::RefCountedThreadSafe<FileReader>; | 
|  |  | 
|  | virtual ~FileReader(); | 
|  |  | 
|  | void ReadFileOnBackgroundThread(); | 
|  |  | 
|  | extensions::ExtensionResource resource_; | 
|  | Callback callback_; | 
|  | base::MessageLoop* origin_loop_; | 
|  | }; | 
|  |  | 
|  | #endif  // EXTENSIONS_BROWSER_FILE_READER_H_ |