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