Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(792)

Side by Side Diff: net/filter/sdch_stream_source.h

Issue 1662763002: [ON HOLD] Implement pull-based design for content decoding (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef NET_FILTER_SDCH_STREAM_SOURCE_H
6 #define NET_FILTER_SDCH_STREAM_SOURCE_H
7
8 #include <memory>
9
10 #include "net/base/sdch_dictionary.h"
11 #include "net/base/sdch_manager.h"
12 #include "net/filter/filter_stream_source.h"
13 #include "net/filter/sdch_stream_source_delegate.h"
14
15 namespace open_vcdiff {
16
17 class VCDiffStreamingDecoder;
18
19 } // namespace open_vcdiff
20
21 namespace net {
22
23 class BlockBuffer;
24
25 class SdchStreamSource : public FilterStreamSource {
26 public:
27 SdchStreamSource(std::unique_ptr<StreamSource> previous,
28 SdchStreamSourceDelegate* delegate);
29 ~SdchStreamSource() override;
30
31 bool Init() override;
32
33 // For use by SdchStreamSourceDelegate. Switches this stream source into
34 // "passthrough" mode, where it will not decode any further output with
35 // vcdiff. This method can only be called during an invocation of the
36 // delegate's HandleDictionaryError or HandleDecodingError functions.
37 virtual void StopDecoding();
38
39 // For use by SdchStreamSourceDelegate. Replaces the entire output of this
40 // stream
41 // with the supplied |data|, which is of length |size|. Note that calling this
42 // method also stops vcdiff decoding as a side-effect - |data| should not
43 // point to vcdiff-encoded data. This method can only be called during an
44 // invocation of the delegate's HandleDictionaryError or HandleDecodingError
45 // functions.
46 virtual void ReplaceOutput(const char* data, size_t size);
47
48 private:
49 enum SdchStreamState {
50 SDCH_STREAM_ERROR,
51 SDCH_STREAM_MORE_INPUT,
52 SDCH_STREAM_MORE_OUTPUT_SPACE,
53 };
54
55 // StreamSource implementation:
56 Error ReadInternal(IOBuffer* dest,
57 size_t buffer_size,
58 size_t* bytes_read) override;
59
60 SdchStreamState Decompress(IOBuffer* dest_buffer,
61 size_t buffer_size,
62 size_t* bytes_read);
63 SdchStreamState Passthrough(IOBuffer* dest_buffer,
64 size_t buffer_size,
65 size_t* bytes_read);
66 SdchStreamState Flush(IOBuffer* dest_buffer,
67 size_t buffer_size,
68 size_t* bytes_read);
69
70 bool LoadDictionary();
71
72 // Returns whether |id| looks like a dictionary ID, meaning 8 characters of
73 // base64url followed by a null character.
74 bool CouldBeDictionaryId(const std::string& id) const;
75
76 bool AskDelegateToHandleDictionaryError();
77 bool AskDelegateToHandleDecodingError();
78
79 std::unique_ptr<open_vcdiff::VCDiffStreamingDecoder> decoder_;
80 SdchStreamSourceDelegate* delegate_;
81
82 // Buffer used to accumulate the dictionary ID.
83 std::string dictionary_id_;
84
85 // Since vcdiff may generate quite a bit of output at once, SdchStreamSource
86 // has to buffer excess output (more than requested by the caller) here to
87 // return later. This could maybe become quite large.
88 std::string buffered_output_;
89
90 bool output_replaced_;
91 bool passthrough_;
92 bool dictionary_tried_load_;
93
94 bool in_delegate_handler_;
95 };
96
97 } // namespace net
98
99 #endif // NET_FILTER_SDCH_STREAM_SOURCE_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698