|  | // Copyright 2017 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_HTTP_HTTP_RAW_REQUEST_HEADERS_H_ | 
|  | #define NET_HTTP_HTTP_RAW_REQUEST_HEADERS_H_ | 
|  |  | 
|  | #include <string> | 
|  | #include <utility> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/callback.h" | 
|  | #include "base/macros.h" | 
|  | #include "base/strings/string_piece.h" | 
|  | #include "net/base/net_export.h" | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | // This contains actual headers sent to the remote party, as passed to | 
|  | // RequestHeadersCallback associated with URLRequest. | 
|  | // The headers come in actual wire order and include those provided by | 
|  | // BeforeSendHeaders hooks and headers added or modified by the net stack, | 
|  | // as well as SPDY & QUIC internal headers (':method' etc). | 
|  | // In case of non-multiplexed HTTP, request_line also provides the first | 
|  | // line of the HTTP request (i.e. "METHOD <url> VERSION\r\n"). | 
|  |  | 
|  | class NET_EXPORT HttpRawRequestHeaders { | 
|  | public: | 
|  | using HeaderPair = std::pair<std::string, std::string>; | 
|  | using HeaderVector = std::vector<HeaderPair>; | 
|  |  | 
|  | HttpRawRequestHeaders(); | 
|  | HttpRawRequestHeaders(HttpRawRequestHeaders&&); | 
|  | HttpRawRequestHeaders& operator=(HttpRawRequestHeaders&&); | 
|  | ~HttpRawRequestHeaders(); | 
|  |  | 
|  | void Assign(HttpRawRequestHeaders other) { *this = std::move(other); } | 
|  |  | 
|  | void Add(base::StringPiece key, base::StringPiece value); | 
|  | void set_request_line(base::StringPiece line) { | 
|  | request_line_ = line.as_string(); | 
|  | } | 
|  |  | 
|  | const HeaderVector& headers() const { return headers_; } | 
|  | const std::string& request_line() const { return request_line_; } | 
|  | bool FindHeaderForTest(base::StringPiece key, std::string* value) const; | 
|  |  | 
|  | private: | 
|  | HeaderVector headers_; | 
|  | std::string request_line_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(HttpRawRequestHeaders); | 
|  | }; | 
|  |  | 
|  | // A callback of this type can be passed to | 
|  | // URLRequest::SetRequestHeadersCallback to obtain HttpRawRequestHeaders just | 
|  | // before these hit the socket. | 
|  | using RequestHeadersCallback = | 
|  | base::RepeatingCallback<void(HttpRawRequestHeaders)>; | 
|  |  | 
|  | }  // namespace net | 
|  |  | 
|  | #endif  // NET_HTTP_HTTP_RAW_REQUEST_HEADERS_H_ |