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

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

Issue 2334943002: Add a new QuicChromiumClientSession::Handle class (Closed)
Patch Set: cleanup Created 3 years, 7 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
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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 namespace test { 59 namespace test {
60 class QuicChromiumClientSessionPeer; 60 class QuicChromiumClientSessionPeer;
61 } // namespace test 61 } // namespace test
62 62
63 class NET_EXPORT_PRIVATE QuicChromiumClientSession 63 class NET_EXPORT_PRIVATE QuicChromiumClientSession
64 : public QuicClientSessionBase, 64 : public QuicClientSessionBase,
65 public MultiplexedSession, 65 public MultiplexedSession,
66 public QuicChromiumPacketReader::Visitor, 66 public QuicChromiumPacketReader::Visitor,
67 public QuicChromiumPacketWriter::Delegate { 67 public QuicChromiumPacketWriter::Delegate {
68 public: 68 public:
69 // An interface for observing events on a session. 69 class StreamRequest;
70 class NET_EXPORT_PRIVATE Observer { 70
71 // 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 // the Handle are safe to use even after the underlying session is destroyed.
74 class NET_EXPORT_PRIVATE Handle : public MultiplexedSessionHandle {
xunjieli 2017/05/04 16:54:42 Can we disallow copy and assign for this class so
Ryan Hamilton 2017/05/05 03:50:24 Done.
71 public: 75 public:
72 virtual ~Observer() {} 76 explicit Handle(const base::WeakPtr<QuicChromiumClientSession>& session);
73 virtual void OnCryptoHandshakeConfirmed() = 0; 77 Handle(const Handle& other);
74 virtual void OnSuccessfulVersionNegotiation(const QuicVersion& version) = 0; 78 ~Handle();
75 virtual void OnSessionClosed(int error, bool port_migration_detected) = 0; 79
80 // Returns true if the session is still connected.
81 bool IsConnected() const;
82
83 // Returns true if the handshake has been confirmed.
84 // the handle is not valid.
xunjieli 2017/05/04 16:54:42 nit: delete the second line.
Ryan Hamilton 2017/05/05 03:50:25 Done.
85 bool IsCryptoHandshakeConfirmed() const;
86
87 // Returns a new stream request which can be used to create a new
88 // QUIC stream. If |requires_confirmation| is true, then the requested
89 // stream will not be created until the handshake as been confirmed.
xunjieli 2017/05/04 16:54:42 nit: s/as/has
Ryan Hamilton 2017/05/05 03:50:24 Removed this method completely. Yay! :)
90 std::unique_ptr<StreamRequest> CreateStreamRequest(
91 bool requires_confirmation) const;
92
93 // Sends Rst for the stream, and makes sure that future calls to
94 // IsClosedStream(id) return true, which ensures that any subsequent
95 // frames related to this stream will be ignored (modulo flow
96 // control accounting).
97 void ResetPromised(QuicStreamId id, QuicRstStreamErrorCode error_code);
98
99 // Returns a new packet bundler while will cause writes to be batched up
100 // until a packet is full, or the last bundler is destroyed.
101 std::unique_ptr<QuicConnection::ScopedPacketBundler> CreatePacketBundler(
102 QuicConnection::AckBundling bundling_mode);
103
104 // Populates network error details for this session.
105 void PopulateNetErrorDetails(NetErrorDetails* details) const;
106
107 // Returns the connection timing for the handshake of this session.
108 const LoadTimingInfo::ConnectTiming& GetConnectTiming();
109
110 // Signs the exported keying material used for Token Binding using key
111 // |*key| and puts the signature in |*out|. Returns a net error code.
112 Error GetTokenBindingSignature(crypto::ECPrivateKey* key,
113 TokenBindingType tb_type,
114 std::vector<uint8_t>* out);
115
116 // Returns true if |other| is a handle to the same session as this handle.
117 bool SharesSameSession(const Handle& other) const;
118
119 // Returns the QUIC version used by the session.
120 QuicVersion GetQuicVersion() const;
121
122 // Copies the remote udp address into |address| and returns a net error
123 // code.
124 int GetPeerAddress(IPEndPoint* address) const;
125
126 // Returns the push promise index associated with the session.
127 QuicClientPushPromiseIndex* GetPushPromiseIndex();
128
129 // Returns the session's server ID.
130 QuicServerId server_id() const { return server_id_; }
131
132 // Returns the session's net log.
133 const NetLogWithSource& net_log() const { return net_log_; }
134
135 private:
136 friend class QuicChromiumClientSession;
137 friend class QuicChromiumClientSession::StreamRequest;
138
139 // Waits for the handshake to be confirmed and invokes |callback| when
140 // that happens. If the handshake has already been confirmed, returns OK.
141 // If the connection has already been closed, returns a net error. If the
142 // connection closes before the handshake is confirmed, |callback| will
143 // be invoked with an error.
144 int WaitForHandshakeConfirmation(const CompletionCallback& callback);
145
146 // Called when the handshake is confirmed.
147 void OnCryptoHandshakeConfirmed();
148
149 // Called when the session is closed with a net error.
150 void OnSessionClosed(int error, bool port_migration_detected);
151
152 // Called by |request| to create a stream.
153 int TryCreateStream(StreamRequest* request);
154
155 // Called by |request| to cancel stream request.
156 void CancelRequest(StreamRequest* request);
157
158 base::WeakPtr<QuicChromiumClientSession> session_;
159 NetLogWithSource net_log_;
160
161 // Information latched from the session when it is closed.
xunjieli 2017/05/04 16:54:42 nit: consider rephrasing "latched" to "saved" or s
Ryan Hamilton 2017/05/05 03:50:24 Heh, sure. "latched" is pretty common vocabulary i
162 bool was_handshake_confirmed_;
163 int error_;
164 bool port_migration_detected_;
165 QuicServerId server_id_;
166 QuicVersion quic_version_;
167 LoadTimingInfo::ConnectTiming connect_timing_;
168 QuicClientPushPromiseIndex* push_promise_index_;
76 }; 169 };
77 170
78 // A helper class used to manage a request to create a stream. 171 // A helper class used to manage a request to create a stream.
79 class NET_EXPORT_PRIVATE StreamRequest { 172 class NET_EXPORT_PRIVATE StreamRequest {
80 public: 173 public:
81 // Cancels any pending stream creation request and resets |stream_| if 174 // Cancels any pending stream creation request and resets |stream_| if
82 // it has not yet been released. 175 // it has not yet been released.
83 ~StreamRequest(); 176 ~StreamRequest();
84 177
85 // Starts a request to create a stream. If OK is returned, then 178 // Starts a request to create a stream. If OK is returned, then
86 // |stream_| will be updated with the newly created stream. If 179 // |stream_| will be updated with the newly created stream. If
87 // ERR_IO_PENDING is returned, then when the request is eventuallly 180 // ERR_IO_PENDING is returned, then when the request is eventuallly
88 // complete |callback| will be called. 181 // complete |callback| will be called.
89 int StartRequest(const CompletionCallback& callback); 182 int StartRequest(const CompletionCallback& callback);
90 183
91 // Releases |stream_| to the caller 184 // Releases |stream_| to the caller
92 QuicChromiumClientStream* ReleaseStream(); 185 QuicChromiumClientStream* ReleaseStream();
93 186
94 private: 187 private:
95 friend class QuicChromiumClientSession; 188 friend class QuicChromiumClientSession;
96 189
97 enum State { 190 enum State {
98 STATE_NONE, 191 STATE_NONE,
99 STATE_WAIT_FOR_CONFIRMATION, 192 STATE_WAIT_FOR_CONFIRMATION,
100 STATE_WAIT_FOR_CONFIRMATION_COMPLETE, 193 STATE_WAIT_FOR_CONFIRMATION_COMPLETE,
101 STATE_REQUEST_STREAM, 194 STATE_REQUEST_STREAM,
102 STATE_REQUEST_STREAM_COMPLETE, 195 STATE_REQUEST_STREAM_COMPLETE,
103 }; 196 };
104 197
105 StreamRequest(const base::WeakPtr<QuicChromiumClientSession>& session, 198 StreamRequest(QuicChromiumClientSession::Handle session,
106 bool requires_confirmation); 199 bool requires_confirmation);
107 200
108 void OnIOComplete(int rv); 201 void OnIOComplete(int rv);
109 void DoCallback(int rv); 202 void DoCallback(int rv);
110 203
111 int DoLoop(int rv); 204 int DoLoop(int rv);
112 int DoWaitForConfirmation(); 205 int DoWaitForConfirmation();
113 int DoWaitForConfirmationComplete(int rv); 206 int DoWaitForConfirmationComplete(int rv);
114 int DoRequestStream(); 207 int DoRequestStream();
115 int DoRequestStreamComplete(int rv); 208 int DoRequestStreamComplete(int rv);
116 209
117 // Called by |session_| for an asynchronous request when the stream 210 // Called by |session_| for an asynchronous request when the stream
118 // request has finished successfully. 211 // request has finished successfully.
119 void OnRequestCompleteSuccess(QuicChromiumClientStream* stream); 212 void OnRequestCompleteSuccess(QuicChromiumClientStream* stream);
120 213
121 // Called by |session_| for an asynchronous request when the stream 214 // Called by |session_| for an asynchronous request when the stream
122 // request has finished with an error. Also called with ERR_ABORTED 215 // request has finished with an error. Also called with ERR_ABORTED
123 // if |session_| is destroyed while the stream request is still pending. 216 // if |session_| is destroyed while the stream request is still pending.
124 void OnRequestCompleteFailure(int rv); 217 void OnRequestCompleteFailure(int rv);
125 218
126 base::WeakPtr<QuicChromiumClientSession> session_; 219 QuicChromiumClientSession::Handle session_;
127 const bool requires_confirmation_; 220 const bool requires_confirmation_;
128 CompletionCallback callback_; 221 CompletionCallback callback_;
129 QuicChromiumClientStream* stream_; 222 QuicChromiumClientStream* stream_;
130 // For tracking how much time pending stream requests wait. 223 // For tracking how much time pending stream requests wait.
131 base::TimeTicks pending_start_time_; 224 base::TimeTicks pending_start_time_;
132 State next_state_; 225 State next_state_;
133 226
134 base::WeakPtrFactory<StreamRequest> weak_factory_; 227 base::WeakPtrFactory<StreamRequest> weak_factory_;
135 228
136 DISALLOW_COPY_AND_ASSIGN(StreamRequest); 229 DISALLOW_COPY_AND_ASSIGN(StreamRequest);
(...skipping 22 matching lines...) Expand all
159 base::TimeTicks dns_resolution_end_time, 252 base::TimeTicks dns_resolution_end_time,
160 QuicClientPushPromiseIndex* push_promise_index, 253 QuicClientPushPromiseIndex* push_promise_index,
161 ServerPushDelegate* push_delegate, 254 ServerPushDelegate* push_delegate,
162 base::TaskRunner* task_runner, 255 base::TaskRunner* task_runner,
163 std::unique_ptr<SocketPerformanceWatcher> socket_performance_watcher, 256 std::unique_ptr<SocketPerformanceWatcher> socket_performance_watcher,
164 NetLog* net_log); 257 NetLog* net_log);
165 ~QuicChromiumClientSession() override; 258 ~QuicChromiumClientSession() override;
166 259
167 void Initialize() override; 260 void Initialize() override;
168 261
169 void AddObserver(Observer* observer); 262 void AddHandle(Handle* handle);
170 void RemoveObserver(Observer* observer); 263 void RemoveHandle(Handle* handle);
171 264
172 // Waits for the handshake to be confirmed and invokes |callback| when 265 // Waits for the handshake to be confirmed and invokes |callback| when
173 // that happens. If the handshake has already been confirmed, returns OK. 266 // that happens. If the handshake has already been confirmed, returns OK.
174 // If the connection has already been closed, returns a net error. If the 267 // If the connection has already been closed, returns a net error. If the
175 // connection closes before the handshake is confirmed, |callback| will 268 // connection closes before the handshake is confirmed, |callback| will
176 // be invoked with an error. 269 // be invoked with an error.
177 int WaitForHandshakeConfirmation(const CompletionCallback& callback); 270 int WaitForHandshakeConfirmation(const CompletionCallback& callback);
178 271
179 // Returns a new stream request which can be used to create a new
180 // QUIC stream. If |requires_confirmation| is true, then the requested
181 // stream will not be created until the handshake as been confirmed.
182 std::unique_ptr<StreamRequest> CreateStreamRequest(
183 bool requires_confirmation);
184
185 // Attempts to create a new stream. If the stream can be 272 // Attempts to create a new stream. If the stream can be
186 // created immediately, returns OK. If the open stream limit 273 // created immediately, returns OK. If the open stream limit
187 // has been reached, returns ERR_IO_PENDING, and |request| 274 // has been reached, returns ERR_IO_PENDING, and |request|
188 // will be added to the stream requets queue and will 275 // will be added to the stream requets queue and will
189 // be completed asynchronously. 276 // be completed asynchronously.
190 // TODO(rch): remove |stream| from this and use setter on |request| 277 // TODO(rch): remove |stream| from this and use setter on |request|
191 // and fix in spdy too. 278 // and fix in spdy too.
192 int TryCreateStream(StreamRequest* request); 279 int TryCreateStream(StreamRequest* request);
193 280
194 // Cancels the pending stream creation request. 281 // Cancels the pending stream creation request.
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 344
258 // Close the session because of |net_error| and notifies the factory 345 // Close the session because of |net_error| and notifies the factory
259 // that this session has been closed, which will delete the session. 346 // that this session has been closed, which will delete the session.
260 void CloseSessionOnError(int net_error, QuicErrorCode quic_error); 347 void CloseSessionOnError(int net_error, QuicErrorCode quic_error);
261 348
262 std::unique_ptr<base::Value> GetInfoAsValue( 349 std::unique_ptr<base::Value> GetInfoAsValue(
263 const std::set<HostPortPair>& aliases); 350 const std::set<HostPortPair>& aliases);
264 351
265 const NetLogWithSource& net_log() const { return net_log_; } 352 const NetLogWithSource& net_log() const { return net_log_; }
266 353
267 base::WeakPtr<QuicChromiumClientSession> GetWeakPtr(); 354 // Return a Handle to this session.
355 QuicChromiumClientSession::Handle GetHandle();
268 356
269 // Returns the number of client hello messages that have been sent on the 357 // Returns the number of client hello messages that have been sent on the
270 // crypto stream. If the handshake has completed then this is one greater 358 // crypto stream. If the handshake has completed then this is one greater
271 // than the number of round-trips needed for the handshake. 359 // than the number of round-trips needed for the handshake.
272 int GetNumSentClientHellos() const; 360 int GetNumSentClientHellos() const;
273 361
274 // Returns the stream id of the push stream if it is not claimed yet, or 0 362 // Returns the stream id of the push stream if it is not claimed yet, or 0
275 // otherwise. 363 // otherwise.
276 QuicStreamId GetStreamIdForPush(const GURL& pushed_url); 364 QuicStreamId GetStreamIdForPush(const GURL& pushed_url);
277 365
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 const NetLogWithSource& net_log); 397 const NetLogWithSource& net_log);
310 398
311 // Schedules a migration alarm to wait for a new network. 399 // Schedules a migration alarm to wait for a new network.
312 void OnNoNewNetwork(); 400 void OnNoNewNetwork();
313 401
314 // Called when migration alarm fires. If migration has not occurred 402 // Called when migration alarm fires. If migration has not occurred
315 // since alarm was set, closes session with error. 403 // since alarm was set, closes session with error.
316 void OnMigrationTimeout(size_t num_sockets); 404 void OnMigrationTimeout(size_t num_sockets);
317 405
318 // Populates network error details for this session. 406 // Populates network error details for this session.
319 void PopulateNetErrorDetails(NetErrorDetails* details); 407 void PopulateNetErrorDetails(NetErrorDetails* details) const;
320 408
321 // Returns current default socket. This is the socket over which all 409 // Returns current default socket. This is the socket over which all
322 // QUIC packets are sent. This default socket can change, so do not store the 410 // QUIC packets are sent. This default socket can change, so do not store the
323 // returned socket. 411 // returned socket.
324 const DatagramClientSocket* GetDefaultSocket() const; 412 const DatagramClientSocket* GetDefaultSocket() const;
325 413
326 bool IsAuthorized(const std::string& hostname) override; 414 bool IsAuthorized(const std::string& hostname) override;
327 415
328 // Returns true if session has one ore more streams marked as non-migratable. 416 // Returns true if session has one ore more streams marked as non-migratable.
329 bool HasNonMigratableStreams() const; 417 bool HasNonMigratableStreams() const;
(...skipping 23 matching lines...) Expand all
353 // QuicSession methods: 441 // QuicSession methods:
354 bool ShouldCreateIncomingDynamicStream(QuicStreamId id) override; 442 bool ShouldCreateIncomingDynamicStream(QuicStreamId id) override;
355 bool ShouldCreateOutgoingDynamicStream() override; 443 bool ShouldCreateOutgoingDynamicStream() override;
356 444
357 QuicChromiumClientStream* CreateIncomingDynamicStream( 445 QuicChromiumClientStream* CreateIncomingDynamicStream(
358 QuicStreamId id) override; 446 QuicStreamId id) override;
359 447
360 private: 448 private:
361 friend class test::QuicChromiumClientSessionPeer; 449 friend class test::QuicChromiumClientSessionPeer;
362 450
363 typedef std::set<Observer*> ObserverSet; 451 typedef std::set<Handle*> HandleSet;
364 typedef std::list<StreamRequest*> StreamRequestQueue; 452 typedef std::list<StreamRequest*> StreamRequestQueue;
365 453
366 QuicChromiumClientStream* CreateOutgoingReliableStreamImpl(); 454 QuicChromiumClientStream* CreateOutgoingReliableStreamImpl();
367 QuicChromiumClientStream* CreateIncomingReliableStreamImpl(QuicStreamId id); 455 QuicChromiumClientStream* CreateIncomingReliableStreamImpl(QuicStreamId id);
368 // A completion callback invoked when a read completes. 456 // A completion callback invoked when a read completes.
369 void OnReadComplete(int result); 457 void OnReadComplete(int result);
370 458
371 void OnClosedStream(); 459 void OnClosedStream();
372 460
373 void CloseAllStreams(int net_error); 461 void CloseAllStreams(int net_error);
374 void CloseAllObservers(int net_error); 462 void CloseAllHandles(int net_error);
375 void CancelAllRequests(int net_error); 463 void CancelAllRequests(int net_error);
376 void NotifyRequestsOfConfirmation(int net_error); 464 void NotifyRequestsOfConfirmation(int net_error);
377 465
378 // Notifies the factory that this session is going away and no more streams 466 // Notifies the factory that this session is going away and no more streams
379 // should be created from it. This needs to be called before closing any 467 // should be created from it. This needs to be called before closing any
380 // streams, because closing a stream may cause a new stream to be created. 468 // streams, because closing a stream may cause a new stream to be created.
381 void NotifyFactoryOfSessionGoingAway(); 469 void NotifyFactoryOfSessionGoingAway();
382 470
383 // Posts a task to notify the factory that this session has been closed. 471 // Posts a task to notify the factory that this session has been closed.
384 void NotifyFactoryOfSessionClosedLater(); 472 void NotifyFactoryOfSessionClosedLater();
385 473
386 // Notifies the factory that this session has been closed which will 474 // Notifies the factory that this session has been closed which will
387 // delete |this|. 475 // delete |this|.
388 void NotifyFactoryOfSessionClosed(); 476 void NotifyFactoryOfSessionClosed();
389 477
390 QuicServerId server_id_; 478 QuicServerId server_id_;
391 bool require_confirmation_; 479 bool require_confirmation_;
392 std::unique_ptr<QuicCryptoClientStream> crypto_stream_; 480 std::unique_ptr<QuicCryptoClientStream> crypto_stream_;
393 QuicStreamFactory* stream_factory_; 481 QuicStreamFactory* stream_factory_;
394 std::vector<std::unique_ptr<DatagramClientSocket>> sockets_; 482 std::vector<std::unique_ptr<DatagramClientSocket>> sockets_;
395 TransportSecurityState* transport_security_state_; 483 TransportSecurityState* transport_security_state_;
396 std::unique_ptr<QuicServerInfo> server_info_; 484 std::unique_ptr<QuicServerInfo> server_info_;
397 std::unique_ptr<CertVerifyResult> cert_verify_result_; 485 std::unique_ptr<CertVerifyResult> cert_verify_result_;
398 std::unique_ptr<ct::CTVerifyResult> ct_verify_result_; 486 std::unique_ptr<ct::CTVerifyResult> ct_verify_result_;
399 std::string pinning_failure_log_; 487 std::string pinning_failure_log_;
400 bool pkp_bypassed_; 488 bool pkp_bypassed_;
401 ObserverSet observers_; 489 HandleSet handles_;
402 StreamRequestQueue stream_requests_; 490 StreamRequestQueue stream_requests_;
403 std::vector<CompletionCallback> waiting_for_confirmation_callbacks_; 491 std::vector<CompletionCallback> waiting_for_confirmation_callbacks_;
404 CompletionCallback callback_; 492 CompletionCallback callback_;
405 size_t num_total_streams_; 493 size_t num_total_streams_;
406 base::TaskRunner* task_runner_; 494 base::TaskRunner* task_runner_;
407 NetLogWithSource net_log_; 495 NetLogWithSource net_log_;
408 std::vector<std::unique_ptr<QuicChromiumPacketReader>> packet_readers_; 496 std::vector<std::unique_ptr<QuicChromiumPacketReader>> packet_readers_;
409 LoadTimingInfo::ConnectTiming connect_timing_; 497 LoadTimingInfo::ConnectTiming connect_timing_;
410 std::unique_ptr<QuicConnectionLogger> logger_; 498 std::unique_ptr<QuicConnectionLogger> logger_;
411 // True when the session is going away, and streams may no longer be created 499 // True when the session is going away, and streams may no longer be created
(...skipping 11 matching lines...) Expand all
423 uint64_t bytes_pushed_count_; 511 uint64_t bytes_pushed_count_;
424 uint64_t bytes_pushed_and_unclaimed_count_; 512 uint64_t bytes_pushed_and_unclaimed_count_;
425 // Stores packet that witnesses socket write error. This packet is 513 // Stores packet that witnesses socket write error. This packet is
426 // written to a new socket after migration completes. 514 // written to a new socket after migration completes.
427 scoped_refptr<StringIOBuffer> packet_; 515 scoped_refptr<StringIOBuffer> packet_;
428 // TODO(jri): Replace use of migration_pending_ sockets_.size(). 516 // TODO(jri): Replace use of migration_pending_ sockets_.size().
429 // When a task is posted for MigrateSessionOnError, pass in 517 // When a task is posted for MigrateSessionOnError, pass in
430 // sockets_.size(). Then in MigrateSessionOnError, check to see if 518 // sockets_.size(). Then in MigrateSessionOnError, check to see if
431 // the current sockets_.size() == the passed in value. 519 // the current sockets_.size() == the passed in value.
432 bool migration_pending_; // True while migration is underway. 520 bool migration_pending_; // True while migration is underway.
521 std::unique_ptr<Handle> self_handle_; // Handle to this session
433 base::WeakPtrFactory<QuicChromiumClientSession> weak_factory_; 522 base::WeakPtrFactory<QuicChromiumClientSession> weak_factory_;
434 523
435 DISALLOW_COPY_AND_ASSIGN(QuicChromiumClientSession); 524 DISALLOW_COPY_AND_ASSIGN(QuicChromiumClientSession);
436 }; 525 };
437 526
438 } // namespace net 527 } // namespace net
439 528
440 #endif // NET_QUIC_CHROMIUM_QUIC_CHROMIUM_CLIENT_SESSION_H_ 529 #endif // NET_QUIC_CHROMIUM_QUIC_CHROMIUM_CLIENT_SESSION_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698