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

Side by Side Diff: net/quic/chromium/quic_chromium_client_session.h

Issue 2948143002: Add an async method to QuicChromiumClientSession::Handle for (Closed)
Patch Set: ASAN Created 3 years, 5 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 | « no previous file | net/quic/chromium/quic_chromium_client_session.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 // A client specific QuicSession subclass. This class owns the underlying 5 // A client specific QuicSession subclass. This class owns the underlying
6 // QuicConnection and QuicConnectionHelper objects. The connection stores 6 // QuicConnection and QuicConnectionHelper objects. The connection stores
7 // a non-owning pointer to the helper so this session needs to ensure that 7 // a non-owning pointer to the helper so this session needs to ensure that
8 // the helper outlives the connection. 8 // the helper outlives the connection.
9 9
10 #ifndef NET_QUIC_CHROMIUM_QUIC_CHROMIUM_CLIENT_SESSION_H_ 10 #ifndef NET_QUIC_CHROMIUM_QUIC_CHROMIUM_CLIENT_SESSION_H_
(...skipping 14 matching lines...) Expand all
25 #include "net/base/load_timing_info.h" 25 #include "net/base/load_timing_info.h"
26 #include "net/base/net_error_details.h" 26 #include "net/base/net_error_details.h"
27 #include "net/base/net_export.h" 27 #include "net/base/net_export.h"
28 #include "net/cert/ct_verify_result.h" 28 #include "net/cert/ct_verify_result.h"
29 #include "net/log/net_log_with_source.h" 29 #include "net/log/net_log_with_source.h"
30 #include "net/proxy/proxy_server.h" 30 #include "net/proxy/proxy_server.h"
31 #include "net/quic/chromium/quic_chromium_client_stream.h" 31 #include "net/quic/chromium/quic_chromium_client_stream.h"
32 #include "net/quic/chromium/quic_chromium_packet_reader.h" 32 #include "net/quic/chromium/quic_chromium_packet_reader.h"
33 #include "net/quic/chromium/quic_chromium_packet_writer.h" 33 #include "net/quic/chromium/quic_chromium_packet_writer.h"
34 #include "net/quic/chromium/quic_connection_logger.h" 34 #include "net/quic/chromium/quic_connection_logger.h"
35 #include "net/quic/core/quic_client_push_promise_index.h"
35 #include "net/quic/core/quic_client_session_base.h" 36 #include "net/quic/core/quic_client_session_base.h"
36 #include "net/quic/core/quic_crypto_client_stream.h" 37 #include "net/quic/core/quic_crypto_client_stream.h"
37 #include "net/quic/core/quic_packets.h" 38 #include "net/quic/core/quic_packets.h"
38 #include "net/quic/core/quic_server_id.h" 39 #include "net/quic/core/quic_server_id.h"
39 #include "net/quic/core/quic_time.h" 40 #include "net/quic/core/quic_time.h"
40 #include "net/socket/socket_performance_watcher.h" 41 #include "net/socket/socket_performance_watcher.h"
41 #include "net/spdy/chromium/multiplexed_session.h" 42 #include "net/spdy/chromium/multiplexed_session.h"
42 #include "net/spdy/chromium/server_push_delegate.h" 43 #include "net/spdy/chromium/server_push_delegate.h"
43 44
44 namespace net { 45 namespace net {
(...skipping 19 matching lines...) Expand all
64 : public QuicClientSessionBase, 65 : public QuicClientSessionBase,
65 public MultiplexedSession, 66 public MultiplexedSession,
66 public QuicChromiumPacketReader::Visitor, 67 public QuicChromiumPacketReader::Visitor,
67 public QuicChromiumPacketWriter::Delegate { 68 public QuicChromiumPacketWriter::Delegate {
68 public: 69 public:
69 class StreamRequest; 70 class StreamRequest;
70 71
71 // Wrapper for interacting with the session in a restricted fashion which 72 // Wrapper for interacting with the session in a restricted fashion which
72 // hides the details of the underlying session's lifetime. All methods of 73 // hides the details of the underlying session's lifetime. All methods of
73 // the Handle are safe to use even after the underlying session is destroyed. 74 // the Handle are safe to use even after the underlying session is destroyed.
74 class NET_EXPORT_PRIVATE Handle : public MultiplexedSessionHandle { 75 class NET_EXPORT_PRIVATE Handle
76 : public MultiplexedSessionHandle,
77 public QuicClientPushPromiseIndex::Delegate {
75 public: 78 public:
76 explicit Handle(const base::WeakPtr<QuicChromiumClientSession>& session); 79 explicit Handle(const base::WeakPtr<QuicChromiumClientSession>& session);
77 Handle(const Handle& other) = delete; 80 Handle(const Handle& other) = delete;
78 ~Handle() override; 81 ~Handle() override;
79 82
80 // Returns true if the session is still connected. 83 // Returns true if the session is still connected.
81 bool IsConnected() const; 84 bool IsConnected() const;
82 85
83 // Returns true if the handshake has been confirmed. 86 // Returns true if the handshake has been confirmed.
84 bool IsCryptoHandshakeConfirmed() const; 87 bool IsCryptoHandshakeConfirmed() const;
85 88
89 // Starts a request to rendezvous with a promised a stream. If OK is
90 // returned, then |push_stream_| will be updated with the promised
91 // stream. If ERR_IO_PENDING is returned, then when the rendezvous is
92 // eventually completed |callback| will be called.
93 int RendezvousWithPromised(const SpdyHeaderBlock& headers,
94 const CompletionCallback& callback);
95
86 // Starts a request to create a stream. If OK is returned, then 96 // Starts a request to create a stream. If OK is returned, then
87 // |stream_| will be updated with the newly created stream. If 97 // |stream_| will be updated with the newly created stream. If
88 // ERR_IO_PENDING is returned, then when the request is eventuallly 98 // ERR_IO_PENDING is returned, then when the request is eventuallly
89 // complete |callback| will be called. 99 // complete |callback| will be called.
90 int RequestStream(bool requires_confirmation, 100 int RequestStream(bool requires_confirmation,
91 const CompletionCallback& callback); 101 const CompletionCallback& callback);
92 102
93 // Releases |stream_| to the caller. 103 // Releases |stream_| to the caller.
94 std::unique_ptr<QuicChromiumClientStream::Handle> ReleaseStream(); 104 std::unique_ptr<QuicChromiumClientStream::Handle> ReleaseStream();
95 105
106 // Releases |push_stream_| to the caller.
107 std::unique_ptr<QuicChromiumClientStream::Handle> ReleasePromisedStream();
108
96 // Sends Rst for the stream, and makes sure that future calls to 109 // Sends Rst for the stream, and makes sure that future calls to
97 // IsClosedStream(id) return true, which ensures that any subsequent 110 // IsClosedStream(id) return true, which ensures that any subsequent
98 // frames related to this stream will be ignored (modulo flow 111 // frames related to this stream will be ignored (modulo flow
99 // control accounting). 112 // control accounting).
100 void ResetPromised(QuicStreamId id, QuicRstStreamErrorCode error_code); 113 void ResetPromised(QuicStreamId id, QuicRstStreamErrorCode error_code);
101 114
102 // Returns a new packet bundler while will cause writes to be batched up 115 // Returns a new packet bundler while will cause writes to be batched up
103 // until a packet is full, or the last bundler is destroyed. 116 // until a packet is full, or the last bundler is destroyed.
104 std::unique_ptr<QuicConnection::ScopedPacketBundler> CreatePacketBundler( 117 std::unique_ptr<QuicConnection::ScopedPacketBundler> CreatePacketBundler(
105 QuicConnection::AckBundling bundling_mode); 118 QuicConnection::AckBundling bundling_mode);
(...skipping 22 matching lines...) Expand all
128 141
129 // Returns the push promise index associated with the session. 142 // Returns the push promise index associated with the session.
130 QuicClientPushPromiseIndex* GetPushPromiseIndex(); 143 QuicClientPushPromiseIndex* GetPushPromiseIndex();
131 144
132 // Returns the session's server ID. 145 // Returns the session's server ID.
133 QuicServerId server_id() const { return server_id_; } 146 QuicServerId server_id() const { return server_id_; }
134 147
135 // Returns the session's net log. 148 // Returns the session's net log.
136 const NetLogWithSource& net_log() const { return net_log_; } 149 const NetLogWithSource& net_log() const { return net_log_; }
137 150
151 // QuicClientPushPromiseIndex::Delegate implementation
152 bool CheckVary(const SpdyHeaderBlock& client_request,
153 const SpdyHeaderBlock& promise_request,
154 const SpdyHeaderBlock& promise_response) override;
155 void OnRendezvousResult(QuicSpdyStream* stream) override;
156
138 private: 157 private:
139 friend class QuicChromiumClientSession; 158 friend class QuicChromiumClientSession;
140 friend class QuicChromiumClientSession::StreamRequest; 159 friend class QuicChromiumClientSession::StreamRequest;
141 160
142 // Waits for the handshake to be confirmed and invokes |callback| when 161 // Waits for the handshake to be confirmed and invokes |callback| when
143 // that happens. If the handshake has already been confirmed, returns OK. 162 // that happens. If the handshake has already been confirmed, returns OK.
144 // If the connection has already been closed, returns a net error. If the 163 // If the connection has already been closed, returns a net error. If the
145 // connection closes before the handshake is confirmed, |callback| will 164 // connection closes before the handshake is confirmed, |callback| will
146 // be invoked with an error. 165 // be invoked with an error.
147 int WaitForHandshakeConfirmation(const CompletionCallback& callback); 166 int WaitForHandshakeConfirmation(const CompletionCallback& callback);
(...skipping 22 matching lines...) Expand all
170 // Information saved from the session which can be used even after the 189 // Information saved from the session which can be used even after the
171 // session is destroyed. 190 // session is destroyed.
172 NetLogWithSource net_log_; 191 NetLogWithSource net_log_;
173 bool was_handshake_confirmed_; 192 bool was_handshake_confirmed_;
174 int error_; 193 int error_;
175 bool port_migration_detected_; 194 bool port_migration_detected_;
176 QuicServerId server_id_; 195 QuicServerId server_id_;
177 QuicVersion quic_version_; 196 QuicVersion quic_version_;
178 LoadTimingInfo::ConnectTiming connect_timing_; 197 LoadTimingInfo::ConnectTiming connect_timing_;
179 QuicClientPushPromiseIndex* push_promise_index_; 198 QuicClientPushPromiseIndex* push_promise_index_;
199
200 // |QuicClientPromisedInfo| owns this. It will be set when |Try()|
201 // is asynchronous, i.e. it returned QUIC_PENDING, and remains valid
202 // until |OnRendezvouResult()| fires or |push_handle_->Cancel()| is
203 // invoked.
204 QuicClientPushPromiseIndex::TryHandle* push_handle_;
205 CompletionCallback push_callback_;
206 std::unique_ptr<QuicChromiumClientStream::Handle> push_stream_;
180 }; 207 };
181 208
182 // A helper class used to manage a request to create a stream. 209 // A helper class used to manage a request to create a stream.
183 class NET_EXPORT_PRIVATE StreamRequest { 210 class NET_EXPORT_PRIVATE StreamRequest {
184 public: 211 public:
185 // Cancels any pending stream creation request and resets |stream_| if 212 // Cancels any pending stream creation request and resets |stream_| if
186 // it has not yet been released. 213 // it has not yet been released.
187 ~StreamRequest(); 214 ~StreamRequest();
188 215
189 // Starts a request to create a stream. If OK is returned, then 216 // Starts a request to create a stream. If OK is returned, then
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 // the current sockets_.size() == the passed in value. 560 // the current sockets_.size() == the passed in value.
534 bool migration_pending_; // True while migration is underway. 561 bool migration_pending_; // True while migration is underway.
535 base::WeakPtrFactory<QuicChromiumClientSession> weak_factory_; 562 base::WeakPtrFactory<QuicChromiumClientSession> weak_factory_;
536 563
537 DISALLOW_COPY_AND_ASSIGN(QuicChromiumClientSession); 564 DISALLOW_COPY_AND_ASSIGN(QuicChromiumClientSession);
538 }; 565 };
539 566
540 } // namespace net 567 } // namespace net
541 568
542 #endif // NET_QUIC_CHROMIUM_QUIC_CHROMIUM_CLIENT_SESSION_H_ 569 #endif // NET_QUIC_CHROMIUM_QUIC_CHROMIUM_CLIENT_SESSION_H_
OLDNEW
« no previous file with comments | « no previous file | net/quic/chromium/quic_chromium_client_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698