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