Update WriteHeaders check with request idempotency.
Since in cl: https://chromium-review.googlesource.com/c/chromium/src/+/2508299 we allow 0-RTT for POST request if the request is idempotent, we update the DCHECK in net/quic/quic_chromium_client_stream.cc Change-Id: I02a8a4c6a1da7eb945b65a8453c92957f10cd945 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2565453 Reviewed-by: David Schinazi <dschinazi@chromium.org> Commit-Queue: Yu Su <yuyansu@google.com> Cr-Commit-Position: refs/heads/master@{#833563}
This commit is contained in:
@ -1038,6 +1038,7 @@ int HttpNetworkTransaction::DoSendRequest() {
|
||||
send_start_time_ = base::TimeTicks::Now();
|
||||
next_state_ = STATE_SEND_REQUEST_COMPLETE;
|
||||
|
||||
stream_->SetRequestIdempotency(request_->idempotency);
|
||||
return stream_->SendRequest(request_headers_, &response_, io_callback_);
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
#include "base/macros.h"
|
||||
#include "net/base/completion_once_callback.h"
|
||||
#include "net/base/idempotency.h"
|
||||
#include "net/base/net_error_details.h"
|
||||
#include "net/base/net_errors.h"
|
||||
#include "net/base/net_export.h"
|
||||
@ -187,6 +188,9 @@ class NET_EXPORT_PRIVATE HttpStream {
|
||||
|
||||
virtual void SetRequestHeadersCallback(RequestHeadersCallback callback) = 0;
|
||||
|
||||
// Set the idempotency of the request. No-op by default.
|
||||
virtual void SetRequestIdempotency(Idempotency idempotency) {}
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(HttpStream);
|
||||
};
|
||||
|
@ -399,6 +399,15 @@ int QuicChromiumClientStream::Handle::HandleIOComplete(int rv) {
|
||||
return net_error_;
|
||||
}
|
||||
|
||||
void QuicChromiumClientStream::Handle::SetRequestIdempotency(
|
||||
Idempotency idempotency) {
|
||||
idempotency_ = idempotency;
|
||||
}
|
||||
|
||||
Idempotency QuicChromiumClientStream::Handle::GetRequestIdempotency() const {
|
||||
return idempotency_;
|
||||
}
|
||||
|
||||
QuicChromiumClientStream::QuicChromiumClientStream(
|
||||
quic::QuicStreamId id,
|
||||
quic::QuicSpdyClientSessionBase* session,
|
||||
@ -541,7 +550,9 @@ size_t QuicChromiumClientStream::WriteHeaders(
|
||||
if (!session()->OneRttKeysAvailable()) {
|
||||
auto entry = header_block.find(":method");
|
||||
DCHECK(entry != header_block.end());
|
||||
DCHECK_NE("POST", entry->second);
|
||||
DCHECK(
|
||||
entry->second != "POST" ||
|
||||
(handle_ != nullptr && handle_->GetRequestIdempotency() == IDEMPOTENT));
|
||||
}
|
||||
net_log_.AddEvent(
|
||||
NetLogEventType::QUIC_CHROMIUM_CLIENT_STREAM_SEND_REQUEST_HEADERS,
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "base/callback_forward.h"
|
||||
#include "base/macros.h"
|
||||
#include "net/base/completion_once_callback.h"
|
||||
#include "net/base/idempotency.h"
|
||||
#include "net/base/ip_endpoint.h"
|
||||
#include "net/base/net_export.h"
|
||||
#include "net/base/upload_data_stream.h"
|
||||
@ -134,6 +135,11 @@ class NET_EXPORT_PRIVATE QuicChromiumClientStream
|
||||
|
||||
const NetLogWithSource& net_log() const;
|
||||
|
||||
// Sets the idempotency of the request.
|
||||
void SetRequestIdempotency(Idempotency idempotency);
|
||||
// Returns the idempotency of the request.
|
||||
Idempotency GetRequestIdempotency() const;
|
||||
|
||||
private:
|
||||
friend class QuicChromiumClientStream;
|
||||
|
||||
@ -188,6 +194,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientStream
|
||||
bool is_done_reading_;
|
||||
bool is_first_stream_;
|
||||
size_t num_bytes_consumed_;
|
||||
Idempotency idempotency_ = DEFAULT_IDEMPOTENCY;
|
||||
|
||||
int net_error_;
|
||||
|
||||
|
@ -791,4 +791,11 @@ int QuicHttpStream::ComputeResponseStatus() const {
|
||||
return ERR_QUIC_PROTOCOL_ERROR;
|
||||
}
|
||||
|
||||
void QuicHttpStream::SetRequestIdempotency(Idempotency idempotency) {
|
||||
if (stream_ == nullptr) {
|
||||
return;
|
||||
}
|
||||
stream_->SetRequestIdempotency(idempotency);
|
||||
}
|
||||
|
||||
} // namespace net
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "base/macros.h"
|
||||
#include "base/memory/weak_ptr.h"
|
||||
#include "net/base/completion_once_callback.h"
|
||||
#include "net/base/idempotency.h"
|
||||
#include "net/base/io_buffer.h"
|
||||
#include "net/base/load_timing_info.h"
|
||||
#include "net/base/net_export.h"
|
||||
@ -66,6 +67,7 @@ class NET_EXPORT_PRIVATE QuicHttpStream : public MultiplexedHttpStream {
|
||||
AlternativeService* alternative_service) const override;
|
||||
void PopulateNetErrorDetails(NetErrorDetails* details) override;
|
||||
void SetPriority(RequestPriority priority) override;
|
||||
void SetRequestIdempotency(Idempotency idempotency) override;
|
||||
|
||||
static HttpResponseInfo::ConnectionInfo ConnectionInfoFromQuicVersion(
|
||||
quic::ParsedQuicVersion quic_version);
|
||||
|
Reference in New Issue
Block a user