15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_URL_REQUEST_URL_REQUEST_SIMPLE_JOB_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_URL_REQUEST_URL_REQUEST_SIMPLE_JOB_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/completion_callback.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_export.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/url_request/url_range_request_job.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequest;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class NET_EXPORT URLRequestSimpleJob : public URLRangeRequestJob {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestSimpleJob(URLRequest* request, NetworkDelegate* network_delegate);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Start() OVERRIDE;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ReadRawData(IOBuffer* buf,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int buf_size,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int *bytes_read) OVERRIDE;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetMimeType(std::string* mime_type) const OVERRIDE;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetCharset(std::string* charset) OVERRIDE;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~URLRequestSimpleJob();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Subclasses must override the way response data is determined.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The return value should be:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  - OK if data is obtained;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  - ERR_IO_PENDING if async processing is needed to finish obtaining data.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //    This is the only case when |callback| should be called after
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //    completion of the operation. In other situations |callback| should
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //    never be called;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  - any other ERR_* code to indicate an error. This code will be used
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //    as the error code in the URLRequestStatus when the URLRequest
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //    is finished.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetData(std::string* mime_type,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      std::string* charset,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      std::string* data,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const CompletionCallback& callback) const = 0;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void StartAsync();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnGetDataCompleted(int result);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  HttpByteRange byte_range_;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string mime_type_;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string charset_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string data_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int data_offset_;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WeakPtrFactory<URLRequestSimpleJob> weak_factory_;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // NET_URL_REQUEST_URL_REQUEST_SIMPLE_JOB_H_
65