1 // Copyright (c) 2006-2008 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 #include "net/url_request/url_request_simple_job.h" 6 7 #include "base/message_loop.h" 8 #include "net/base/io_buffer.h" 9 #include "net/base/net_errors.h" 10 #include "net/url_request/url_request_status.h" 11 12 URLRequestSimpleJob::URLRequestSimpleJob(URLRequest* request) 13 : URLRequestJob(request), 14 data_offset_(0) { 15 } 16 17 void URLRequestSimpleJob::Start() { 18 // Start reading asynchronously so that all error reporting and data 19 // callbacks happen as they would for network requests. 20 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( 21 this, &URLRequestSimpleJob::StartAsync)); 22 } 23 24 bool URLRequestSimpleJob::GetMimeType(std::string* mime_type) const { 25 *mime_type = mime_type_; 26 return true; 27 } 28 29 bool URLRequestSimpleJob::GetCharset(std::string* charset) { 30 *charset = charset_; 31 return true; 32 } 33 34 bool URLRequestSimpleJob::ReadRawData(net::IOBuffer* buf, int buf_size, 35 int* bytes_read) { 36 DCHECK(bytes_read); 37 int remaining = static_cast<int>(data_.size()) - data_offset_; 38 if (buf_size > remaining) 39 buf_size = remaining; 40 memcpy(buf->data(), data_.data() + data_offset_, buf_size); 41 data_offset_ += buf_size; 42 *bytes_read = buf_size; 43 return true; 44 } 45 46 void URLRequestSimpleJob::StartAsync() { 47 if (!request_) 48 return; 49 50 if (GetData(&mime_type_, &charset_, &data_)) { 51 // Notify that the headers are complete 52 NotifyHeadersComplete(); 53 } else { 54 // what should the error code be? 55 NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, 56 net::ERR_INVALID_URL)); 57 } 58 } 59