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

Side by Side Diff: net/tools/quic/quic_in_memory_cache.h

Issue 1777083002: Make QuicSimpleServerStream supports multipart response body (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@quicsmaller
Patch Set: Rebased Created 4 years, 9 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
« no previous file with comments | « net/tools/quic/end_to_end_test.cc ('k') | net/tools/quic/quic_in_memory_cache.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef NET_TOOLS_QUIC_QUIC_IN_MEMORY_CACHE_H_ 5 #ifndef NET_TOOLS_QUIC_QUIC_IN_MEMORY_CACHE_H_
6 #define NET_TOOLS_QUIC_QUIC_IN_MEMORY_CACHE_H_ 6 #define NET_TOOLS_QUIC_QUIC_IN_MEMORY_CACHE_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <unordered_map> 10 #include <unordered_map>
11 #include <vector>
11 12
12 #include "base/containers/hash_tables.h" 13 #include "base/containers/hash_tables.h"
13 #include "base/macros.h" 14 #include "base/macros.h"
14 #include "base/memory/singleton.h" 15 #include "base/memory/singleton.h"
15 #include "base/strings/string_piece.h" 16 #include "base/strings/string_piece.h"
16 #include "net/quic/spdy_utils.h" 17 #include "net/quic/spdy_utils.h"
17 #include "net/spdy/spdy_framer.h" 18 #include "net/spdy/spdy_framer.h"
18 #include "url/gurl.h" 19 #include "url/gurl.h"
19 20
20 using base::StringPiece; 21 using base::StringPiece;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 GURL request_url; 53 GURL request_url;
53 net::SpdyHeaderBlock headers; 54 net::SpdyHeaderBlock headers;
54 net::SpdyPriority priority; 55 net::SpdyPriority priority;
55 string body; 56 string body;
56 }; 57 };
57 58
58 enum SpecialResponseType { 59 enum SpecialResponseType {
59 REGULAR_RESPONSE, // Send the headers and body like a server should. 60 REGULAR_RESPONSE, // Send the headers and body like a server should.
60 CLOSE_CONNECTION, // Close the connection (sending the close packet). 61 CLOSE_CONNECTION, // Close the connection (sending the close packet).
61 IGNORE_REQUEST, // Do nothing, expect the client to time out. 62 IGNORE_REQUEST, // Do nothing, expect the client to time out.
63 BIDIRECTIONAL, // Send headers, multiple chuncks of body and trailers.
62 }; 64 };
63 65
64 // Container for response header/body pairs. 66 // Container for response header/body pairs.
65 class Response { 67 class Response {
66 public: 68 public:
67 Response(); 69 Response();
68 ~Response(); 70 ~Response();
69 71
70 SpecialResponseType response_type() const { return response_type_; } 72 SpecialResponseType response_type() const { return response_type_; }
71 const SpdyHeaderBlock& headers() const { return headers_; } 73 const SpdyHeaderBlock& headers() const { return headers_; }
72 const SpdyHeaderBlock& trailers() const { return trailers_; } 74 const SpdyHeaderBlock& trailers() const { return trailers_; }
73 const base::StringPiece body() const { return base::StringPiece(body_); } 75 const base::StringPiece body() const { return base::StringPiece(body_); }
76 const std::vector<std::string>& body_chunks() const { return body_chunks_; }
74 77
75 void set_response_type(SpecialResponseType response_type) { 78 void set_response_type(SpecialResponseType response_type) {
76 response_type_ = response_type; 79 response_type_ = response_type;
77 } 80 }
78 void set_headers(const SpdyHeaderBlock& headers) { headers_ = headers; } 81 void set_headers(const SpdyHeaderBlock& headers) { headers_ = headers; }
79 void set_trailers(const SpdyHeaderBlock& trailers) { trailers_ = trailers; } 82 void set_trailers(const SpdyHeaderBlock& trailers) { trailers_ = trailers; }
80 void set_body(base::StringPiece body) { body.CopyToString(&body_); } 83 void set_body(base::StringPiece body) { body.CopyToString(&body_); }
84 void SetBodyChunks(std::vector<std::string> body_chunks) {
85 for (auto i : body_chunks) {
86 body_chunks_.push_back(i);
87 }
88 }
81 89
82 private: 90 private:
83 SpecialResponseType response_type_; 91 SpecialResponseType response_type_;
84 SpdyHeaderBlock headers_; 92 SpdyHeaderBlock headers_;
85 SpdyHeaderBlock trailers_; 93 SpdyHeaderBlock trailers_;
86 std::string body_; 94 std::string body_;
95 std::vector<std::string> body_chunks_;
87 96
88 DISALLOW_COPY_AND_ASSIGN(Response); 97 DISALLOW_COPY_AND_ASSIGN(Response);
89 }; 98 };
90 99
91 // Returns the singleton instance of the cache. 100 // Returns the singleton instance of the cache.
92 static QuicInMemoryCache* GetInstance(); 101 static QuicInMemoryCache* GetInstance();
93 102
94 // Retrieve a response from this cache for a given host and path.. 103 // Retrieve a response from this cache for a given host and path..
95 // If no appropriate response exists, nullptr is returned. 104 // If no appropriate response exists, nullptr is returned.
96 const Response* GetResponse(base::StringPiece host, 105 const Response* GetResponse(base::StringPiece host,
97 base::StringPiece path) const; 106 base::StringPiece path) const;
98 107
99 // Adds a simple response to the cache. The response headers will 108 // Adds a simple response to the cache. The response headers will
100 // only contain the "content-length" header with the length of |body|. 109 // only contain the "content-length" header with the length of |body|.
101 void AddSimpleResponse(base::StringPiece host, 110 void AddSimpleResponse(base::StringPiece host,
102 base::StringPiece path, 111 base::StringPiece path,
103 int response_code, 112 int response_code,
104 base::StringPiece body); 113 base::StringPiece body);
105 114
115 void AddBidirectionalResponse(StringPiece host,
116 StringPiece path,
117 int response_code,
118 const std::vector<std::string>& body_chunks,
119 const SpdyHeaderBlock& response_trailers);
120
106 // Add a simple response to the cache as AddSimpleResponse() does, and add 121 // Add a simple response to the cache as AddSimpleResponse() does, and add
107 // some server push resources(resource path, corresponding response status and 122 // some server push resources(resource path, corresponding response status and
108 // path) associated with it. 123 // path) associated with it.
109 // Push resource implicitly come from the same host. 124 // Push resource implicitly come from the same host.
110 void AddSimpleResponseWithServerPushResources( 125 void AddSimpleResponseWithServerPushResources(
111 base::StringPiece host, 126 base::StringPiece host,
112 base::StringPiece path, 127 base::StringPiece path,
113 int response_code, 128 int response_code,
114 base::StringPiece body, 129 base::StringPiece body,
115 std::list<ServerPushInfo> push_resources); 130 std::list<ServerPushInfo> push_resources);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 168
154 void ResetForTests(); 169 void ResetForTests();
155 170
156 void AddResponseImpl(base::StringPiece host, 171 void AddResponseImpl(base::StringPiece host,
157 base::StringPiece path, 172 base::StringPiece path,
158 SpecialResponseType response_type, 173 SpecialResponseType response_type,
159 const SpdyHeaderBlock& response_headers, 174 const SpdyHeaderBlock& response_headers,
160 base::StringPiece response_body, 175 base::StringPiece response_body,
161 const SpdyHeaderBlock& response_trailers); 176 const SpdyHeaderBlock& response_trailers);
162 177
178 void AddResponseImpl(base::StringPiece host,
179 base::StringPiece path,
180 SpecialResponseType response_type,
181 const SpdyHeaderBlock& response_headers,
182 base::StringPiece response_body,
183 const std::vector<std::string>& body_chunks,
184 const SpdyHeaderBlock& response_trailers);
185
163 string GetKey(base::StringPiece host, base::StringPiece path) const; 186 string GetKey(base::StringPiece host, base::StringPiece path) const;
164 187
165 // Add some server push urls with given responses for specified 188 // Add some server push urls with given responses for specified
166 // request if these push resources are not associated with this request yet. 189 // request if these push resources are not associated with this request yet.
167 void MaybeAddServerPushResources(base::StringPiece request_host, 190 void MaybeAddServerPushResources(base::StringPiece request_host,
168 base::StringPiece request_path, 191 base::StringPiece request_path,
169 std::list<ServerPushInfo> push_resources); 192 std::list<ServerPushInfo> push_resources);
170 193
171 // Check if push resource(push_host/push_path) associated with given request 194 // Check if push resource(push_host/push_path) associated with given request
172 // url already exists in server push map. 195 // url already exists in server push map.
173 bool PushResourceExistsInCache(string original_request_url, 196 bool PushResourceExistsInCache(string original_request_url,
174 ServerPushInfo resource); 197 ServerPushInfo resource);
175 198
176 // Cached responses. 199 // Cached responses.
177 ResponseMap responses_; 200 ResponseMap responses_;
178 201
179 // The default response for cache misses, if set. 202 // The default response for cache misses, if set.
180 scoped_ptr<Response> default_response_; 203 scoped_ptr<Response> default_response_;
181 204
182 // A map from request URL to associated server push responses (if any). 205 // A map from request URL to associated server push responses (if any).
183 std::multimap<string, ServerPushInfo> server_push_resources_; 206 std::multimap<string, ServerPushInfo> server_push_resources_;
184 207
185 DISALLOW_COPY_AND_ASSIGN(QuicInMemoryCache); 208 DISALLOW_COPY_AND_ASSIGN(QuicInMemoryCache);
186 }; 209 };
187 210
188 } // namespace net 211 } // namespace net
189 212
190 #endif // NET_TOOLS_QUIC_QUIC_IN_MEMORY_CACHE_H_ 213 #endif // NET_TOOLS_QUIC_QUIC_IN_MEMORY_CACHE_H_
OLDNEW
« no previous file with comments | « net/tools/quic/end_to_end_test.cc ('k') | net/tools/quic/quic_in_memory_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698