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

Unified Diff: net/tools/quic/quic_client_base.h

Issue 2368183003: Move QuicClient::ClientQuicDataToResend from QuicClient to QuicClientBase. (Closed)
Patch Set: Rebase Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/tools/quic/quic_client.cc ('k') | net/tools/quic/quic_client_base.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/tools/quic/quic_client_base.h
diff --git a/net/tools/quic/quic_client_base.h b/net/tools/quic/quic_client_base.h
index f15f25fe6ae9b75eb3814ab81365e65f59f72b43..5bc4014a47138622cb8f04127bbfd46a4e834a2a 100644
--- a/net/tools/quic/quic_client_base.h
+++ b/net/tools/quic/quic_client_base.h
@@ -31,7 +31,8 @@ namespace net {
class ProofVerifier;
class QuicServerId;
-class QuicClientBase {
+class QuicClientBase : public QuicClientPushPromiseIndex::Delegate,
+ public QuicSpdyStream::Visitor {
public:
// The client uses these objects to keep track of any data to resend upon
// receipt of a stateless reject. Recall that the client API allows callers
@@ -69,7 +70,7 @@ class QuicClientBase {
QuicAlarmFactory* alarm_factory,
std::unique_ptr<ProofVerifier> proof_verifier);
- ~QuicClientBase();
+ ~QuicClientBase() override;
// Initializes the client to create a connection. Should be called exactly
// once before calling StartConnect or Connect. Returns true if the
@@ -91,6 +92,11 @@ class QuicClientBase {
// Wait for events until the handshake is confirmed.
void WaitForCryptoHandshakeConfirmed();
+ // Sends an HTTP request and does not wait for response before returning.
+ virtual void SendRequest(const SpdyHeaderBlock& headers,
+ base::StringPiece body,
+ bool fin) = 0;
+
// Wait up to 50ms, and handle any events which occur.
// Returns true if there are any outstanding requests.
virtual bool WaitForEvents() = 0;
@@ -204,6 +210,17 @@ class QuicClientBase {
return &push_promise_index_;
}
+ bool CheckVary(const SpdyHeaderBlock& client_request,
+ const SpdyHeaderBlock& promise_request,
+ const SpdyHeaderBlock& promise_response) override;
+ void OnRendezvousResult(QuicSpdyStream*) override;
+
+ // If the crypto handshake has not yet been confirmed, adds the data to the
+ // queue of data to resend if the client receives a stateless reject.
+ // Otherwise, deletes the data.
+ void MaybeAddQuicDataToResend(
+ std::unique_ptr<QuicDataToResend> data_to_resend);
+
protected:
// Takes ownership of |connection|.
virtual QuicClientSession* CreateQuicClientSession(
@@ -222,6 +239,21 @@ class QuicClientBase {
// connection ID).
virtual QuicConnectionId GenerateNewConnectionId();
+ // If the crypto handshake has not yet been confirmed, adds the data to the
+ // queue of data to resend if the client receives a stateless reject.
+ // Otherwise, deletes the data.
+ void MaybeAddDataToResend(const SpdyHeaderBlock& headers,
+ base::StringPiece body,
+ bool fin);
+
+ void ClearDataToResend();
+
+ void ResendSavedData();
+
+ void AddPromiseDataToResend(const SpdyHeaderBlock& headers,
+ base::StringPiece body,
+ bool fin);
+
QuicConnectionHelperInterface* helper() { return helper_.get(); }
QuicAlarmFactory* alarm_factory() { return alarm_factory_.get(); }
@@ -235,6 +267,28 @@ class QuicClientBase {
}
private:
+ // Specific QuicClient class for storing data to resend.
+ class ClientQuicDataToResend : public QuicDataToResend {
+ public:
+ ClientQuicDataToResend(std::unique_ptr<SpdyHeaderBlock> headers,
+ base::StringPiece body,
+ bool fin,
+ QuicClientBase* client)
+ : QuicDataToResend(std::move(headers), body, fin), client_(client) {
+ DCHECK(headers_);
+ DCHECK(client);
+ }
+
+ ~ClientQuicDataToResend() override {}
+
+ void Resend() override;
+
+ private:
+ QuicClientBase* client_;
+
+ DISALLOW_COPY_AND_ASSIGN(ClientQuicDataToResend);
+ };
+
// |server_id_| is a tuple (hostname, port, is_https) of the server.
QuicServerId server_id_;
@@ -290,6 +344,12 @@ class QuicClientBase {
QuicClientPushPromiseIndex push_promise_index_;
+ // Keeps track of any data that must be resent upon a subsequent successful
+ // connection, in case the client receives a stateless reject.
+ std::vector<std::unique_ptr<QuicDataToResend>> data_to_resend_on_connect_;
+
+ std::unique_ptr<ClientQuicDataToResend> push_promise_data_to_resend_;
+
DISALLOW_COPY_AND_ASSIGN(QuicClientBase);
};
« no previous file with comments | « net/tools/quic/quic_client.cc ('k') | net/tools/quic/quic_client_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698