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