blob: 4b26829c744dbff37cb574f63a07c423d43dcd39 [file] [log] [blame]
// Copyright 2016 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_FILTER_FUZZED_SOURCE_STREAM_H_
#define NET_FILTER_FUZZED_SOURCE_STREAM_H_
#include <string>
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "net/base/completion_once_callback.h"
#include "net/filter/source_stream.h"
namespace base {
class FuzzedDataProvider;
} // namespace base
namespace net {
class IOBuffer;
// A SourceStream implementation used in tests. This allows tests to specify
// what data to return for each Read() call.
class FuzzedSourceStream : public SourceStream {
public:
// |data_provider| is used to determine behavior of the FuzzedSourceStream.
// It must remain valid until after the FuzzedSocket is destroyed.
explicit FuzzedSourceStream(base::FuzzedDataProvider* data_provider);
~FuzzedSourceStream() override;
// SourceStream implementation
int Read(IOBuffer* dest_buffer,
int buffer_size,
CompletionOnceCallback callback) override;
std::string Description() const override;
private:
void OnReadComplete(CompletionOnceCallback callback,
const std::string& fuzzed_data,
scoped_refptr<IOBuffer> read_buf,
int result);
base::FuzzedDataProvider* data_provider_;
// Whether there is a pending Read().
bool read_pending_;
// Last result returned by Read() is an error or 0.
bool end_returned_;
DISALLOW_COPY_AND_ASSIGN(FuzzedSourceStream);
};
} // namespace net
#endif // NET_FILTER_FUZZED_SOURCE_STREAM_H_