Index: net/http/http_stream_factory_impl_job.h |
diff --git a/net/http/http_stream_factory_impl_job.h b/net/http/http_stream_factory_impl_job.h |
index 27c5f00ec0fafa39f80396c0413b239326e30e7a..e19d0a9f89a073e33743e4193b2a25ebdf532cb4 100644 |
--- a/net/http/http_stream_factory_impl_job.h |
+++ b/net/http/http_stream_factory_impl_job.h |
@@ -140,6 +140,50 @@ class HttpStreamFactoryImpl::Job { |
STATUS_SUCCEEDED |
}; |
+ // Wrapper class for SpdySessionPool methods to enforce certificate |
+ // requirements for SpdySessions. |
+ class ValidSpdySessionPool { |
+ public: |
+ ValidSpdySessionPool(SpdySessionPool* spdy_session_pool, |
+ GURL& origin_url, |
+ bool is_spdy_alternate); |
+ |
+ // Returns OK if a SpdySession was not found (in which case |spdy_session| |
+ // is set to nullptr), or if one was found (in which case |spdy_session| is |
+ // set to it) and it has an associated SSL certificate with is valid for |
+ // |origin_url_|, or if this requirement does not apply because the Job is |
+ // not a SPDY alternate job. Returns the appropriate error code otherwise, |
+ // in which case |spdy_session| should not be used. |
+ int FindAvailableSession(const SpdySessionKey& key, |
+ const BoundNetLog& net_log, |
+ base::WeakPtr<SpdySession>* spdy_session); |
+ |
+ // Creates a SpdySession and sets |spdy_session| to point to it. Returns OK |
+ // if the associated SSL certificate is valid for |origin_url_|, or if this |
+ // requirement does not apply because the Job is not a SPDY alternate job. |
+ // Returns the appropriate error code otherwise, in which case |
+ // |spdy_session| should not be used. |
+ int CreateAvailableSessionFromSocket( |
+ const SpdySessionKey& key, |
+ scoped_ptr<ClientSocketHandle> connection, |
+ const BoundNetLog& net_log, |
+ int certificate_error_code, |
+ bool is_secure, |
+ base::WeakPtr<SpdySession>* spdy_session); |
+ |
+ private: |
+ // Returns OK if |spdy_session| has an associated SSL certificate with is |
+ // valid for |origin_url_|, or if this requirement does not apply because |
+ // the Job is not a SPDY alternate job, or if |spdy_session| is null. |
+ // Returns appropriate error code otherwise. |
+ int CheckAlternativeServiceValidityForOrigin( |
+ base::WeakPtr<SpdySession> spdy_session); |
+ |
+ SpdySessionPool* const spdy_session_pool_; |
+ const GURL origin_url_; |
+ const bool is_spdy_alternate_; |
+ }; |
+ |
void OnStreamReadyCallback(); |
void OnWebSocketHandshakeStreamReadyCallback(); |
// This callback function is called when a new SPDY session is created. |
@@ -327,6 +371,8 @@ class HttpStreamFactoryImpl::Job { |
// preconnect. |
int num_streams_; |
+ scoped_ptr<ValidSpdySessionPool> valid_spdy_session_pool_; |
+ |
// Initialized when we create a new SpdySession. |
base::WeakPtr<SpdySession> new_spdy_session_; |