blob: 55950c852542a4a3b344d14065f274373d52224e [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef NET_URL_REQUEST_URL_REQUEST_SIMPLE_JOB_H_
#define NET_URL_REQUEST_URL_REQUEST_SIMPLE_JOB_H_
#include <stdint.h>
#include <string>
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/strings/string_piece.h"
#include "net/base/completion_callback.h"
#include "net/base/completion_once_callback.h"
#include "net/base/net_export.h"
#include "net/url_request/url_range_request_job.h"
namespace base {
class RefCountedMemory;
}
namespace net {
class URLRequest;
class NET_EXPORT URLRequestSimpleJob : public URLRangeRequestJob {
public:
URLRequestSimpleJob(URLRequest* request, NetworkDelegate* network_delegate);
void Start() override;
void Kill() override;
int ReadRawData(IOBuffer* buf, int buf_size) override;
bool GetMimeType(std::string* mime_type) const override;
bool GetCharset(std::string* charset) override;
protected:
~URLRequestSimpleJob() override;
// Subclasses must override either GetData or GetRefCountedData to define the
// way response data is determined.
// The return value should be:
// - OK if data is obtained;
// - ERR_IO_PENDING if async processing is needed to finish obtaining data.
// This is the only case when |callback| should be called after
// completion of the operation. In other situations |callback| should
// never be called;
// - any other ERR_* code to indicate an error. This code will be used
// as the error code in the URLRequestStatus when the URLRequest
// is finished.
virtual int GetData(std::string* mime_type,
std::string* charset,
std::string* data,
CompletionOnceCallback callback) const;
// Similar to GetData(), except |*data| can share ownership of the bytes
// instead of copying them into a std::string.
virtual int GetRefCountedData(std::string* mime_type,
std::string* charset,
scoped_refptr<base::RefCountedMemory>* data,
CompletionOnceCallback callback) const;
void StartAsync();
private:
void OnGetDataCompleted(int result);
HttpByteRange byte_range_;
std::string mime_type_;
std::string charset_;
scoped_refptr<base::RefCountedMemory> data_;
int64_t next_data_offset_;
base::WeakPtrFactory<URLRequestSimpleJob> weak_factory_;
};
} // namespace net
#endif // NET_URL_REQUEST_URL_REQUEST_SIMPLE_JOB_H_