Home | History | Annotate | Download | only in url_request
      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