#include "base/threading/thread_restrictions.h"
#include "build/build_config.h"
#include "net/base/file_stream.h"
+#include "net/base/filename_util.h"
#include "net/base/io_buffer.h"
#include "net/base/load_flags.h"
#include "net/base/mime_util.h"
#include "net/base/net_errors.h"
-#include "net/base/net_util.h"
#include "net/filter/filter.h"
#include "net/http/http_util.h"
#include "net/url_request/url_request_error_job.h"
const scoped_refptr<base::TaskRunner>& file_task_runner)
: URLRequestJob(request, network_delegate),
file_path_(file_path),
- stream_(new FileStream(NULL, file_task_runner)),
+ stream_(new FileStream(file_task_runner)),
file_task_runner_(file_task_runner),
remaining_bytes_(0),
weak_ptr_factory_(this) {}
URLRequestJob::Kill();
}
-bool URLRequestFileJob::ReadRawData(IOBuffer* dest, int dest_size,
- int *bytes_read) {
+bool URLRequestFileJob::ReadRawData(IOBuffer* dest,
+ int dest_size,
+ int* bytes_read) {
DCHECK_NE(dest_size, 0);
DCHECK(bytes_read);
DCHECK_GE(remaining_bytes_, 0);
return true;
}
- int rv = stream_->Read(dest, dest_size,
+ int rv = stream_->Read(dest,
+ dest_size,
base::Bind(&URLRequestFileJob::DidRead,
- weak_ptr_factory_.GetWeakPtr()));
+ weak_ptr_factory_.GetWeakPtr(),
+ make_scoped_refptr(dest)));
if (rv >= 0) {
// Data is immediately available.
*bytes_read = rv;
}
}
+void URLRequestFileJob::OnSeekComplete(int64 result) {
+}
+
+void URLRequestFileJob::OnReadComplete(net::IOBuffer* buf, int result) {
+}
+
URLRequestFileJob::~URLRequestFileJob() {
}
}
void URLRequestFileJob::DidSeek(int64 result) {
+ OnSeekComplete(result);
if (result != byte_range_.first_byte_position()) {
NotifyDone(URLRequestStatus(URLRequestStatus::FAILED,
ERR_REQUEST_RANGE_NOT_SATISFIABLE));
NotifyHeadersComplete();
}
-void URLRequestFileJob::DidRead(int result) {
+void URLRequestFileJob::DidRead(scoped_refptr<net::IOBuffer> buf, int result) {
if (result > 0) {
SetStatus(URLRequestStatus()); // Clear the IO_PENDING status
- } else if (result == 0) {
+ remaining_bytes_ -= result;
+ DCHECK_GE(remaining_bytes_, 0);
+ }
+
+ OnReadComplete(buf.get(), result);
+ buf = NULL;
+
+ if (result == 0) {
NotifyDone(URLRequestStatus());
- } else {
+ } else if (result < 0) {
NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, result));
}
- remaining_bytes_ -= result;
- DCHECK_GE(remaining_bytes_, 0);
-
NotifyReadComplete(result);
}