1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 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#include "chrome/browser/extensions/file_reader.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_util.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h" 9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension_resource.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFileReader::FileReader(const ExtensionResource& resource, Callback* callback) 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : resource_(resource), 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch callback_(callback), 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch origin_loop_(MessageLoop::current()) { 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(callback_); 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid FileReader::Start() { 20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::FILE, FROM_HERE, 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NewRunnableMethod(this, &FileReader::ReadFileOnBackgroundThread)); 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickFileReader::~FileReader() {} 26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid FileReader::ReadFileOnBackgroundThread() { 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string data; 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool success = file_util::ReadFileToString(resource_.GetFilePath(), &data); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch origin_loop_->PostTask(FROM_HERE, NewRunnableMethod( 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch this, &FileReader::RunCallback, success, data)); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid FileReader::RunCallback(bool success, const std::string& data) { 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch callback_->Run(success, data); 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delete callback_; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 38