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