1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/url_request/url_request_simple_job.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/compiler_specific.h" 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/message_loop.h" 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/base/io_buffer.h" 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/base/net_errors.h" 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/url_request/url_request_status.h" 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace net { 1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenURLRequestSimpleJob::URLRequestSimpleJob(URLRequest* request) 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott : URLRequestJob(request), 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen data_offset_(0), 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {} 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid URLRequestSimpleJob::Start() { 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Start reading asynchronously so that all error reporting and data 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // callbacks happen as they would for network requests. 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MessageLoop::current()->PostTask( 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FROM_HERE, 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen method_factory_.NewRunnableMethod(&URLRequestSimpleJob::StartAsync)); 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool URLRequestSimpleJob::GetMimeType(std::string* mime_type) const { 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott *mime_type = mime_type_; 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return true; 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool URLRequestSimpleJob::GetCharset(std::string* charset) { 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott *charset = charset_; 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return true; 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenURLRequestSimpleJob::~URLRequestSimpleJob() {} 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenbool URLRequestSimpleJob::ReadRawData(IOBuffer* buf, int buf_size, 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int* bytes_read) { 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DCHECK(bytes_read); 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int remaining = static_cast<int>(data_.size()) - data_offset_; 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (buf_size > remaining) 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott buf_size = remaining; 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott memcpy(buf->data(), data_.data() + data_offset_, buf_size); 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott data_offset_ += buf_size; 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott *bytes_read = buf_size; 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return true; 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid URLRequestSimpleJob::StartAsync() { 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (!request_) 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return; 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (GetData(&mime_type_, &charset_, &data_)) { 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Notify that the headers are complete 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott NotifyHeadersComplete(); 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } else { 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // what should the error code be? 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, 6221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ERR_INVALID_URL)); 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 6521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 6621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} // namespace net 67