| // 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_MOCK_SOURCE_STREAM_H_ |
| #define NET_FILTER_MOCK_SOURCE_STREAM_H_ |
| |
| #include <string> |
| |
| #include "base/containers/queue.h" |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| #include "net/base/completion_once_callback.h" |
| #include "net/base/net_errors.h" |
| #include "net/filter/source_stream.h" |
| |
| namespace net { |
| |
| class IOBuffer; |
| |
| // A SourceStream implementation used in tests. This allows tests to specify |
| // what data to return for each Read() call. |
| class MockSourceStream : public SourceStream { |
| public: |
| enum Mode { |
| SYNC, |
| ASYNC, |
| }; |
| MockSourceStream(); |
| // The destructor will crash in debug build if there is any pending read. |
| ~MockSourceStream() override; |
| |
| // SourceStream implementation |
| int Read(IOBuffer* dest_buffer, |
| int buffer_size, |
| CompletionOnceCallback callback) override; |
| std::string Description() const override; |
| |
| // Enqueues a result to be returned by |Read|. This method does not make a |
| // copy of |data|, so |data| must outlive this object. If |mode| is SYNC, |
| // |Read| will return the supplied data synchronously; otherwise, consumer |
| // needs to call |CompleteNextRead| |
| void AddReadResult(const char* data, int len, Error error, Mode mode); |
| |
| // Completes a pending Read() call. Crash in debug build if there is no |
| // pending read. |
| void CompleteNextRead(); |
| |
| // Affects behavior or AddReadResult. When set to true, each character in |
| // |data| passed to AddReadResult will be read as an individual byte, instead |
| // of all at once. Default to false. |
| // Note that setting it only affects future calls to AddReadResult, not |
| // previous ones. |
| void set_read_one_byte_at_a_time(bool read_one_byte_at_a_time) { |
| read_one_byte_at_a_time_ = read_one_byte_at_a_time; |
| } |
| |
| // Returns true if a read is waiting to be completed. |
| bool awaiting_completion() const { return awaiting_completion_; } |
| |
| private: |
| struct QueuedResult { |
| QueuedResult(const char* data, int len, Error error, Mode mode); |
| |
| const char* data; |
| const int len; |
| const Error error; |
| const Mode mode; |
| }; |
| |
| bool read_one_byte_at_a_time_; |
| base::queue<QueuedResult> results_; |
| bool awaiting_completion_; |
| scoped_refptr<IOBuffer> dest_buffer_; |
| CompletionOnceCallback callback_; |
| int dest_buffer_size_; |
| |
| DISALLOW_COPY_AND_ASSIGN(MockSourceStream); |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_FILTER_MOCK_SOURCE_STREAM_H_ |