diff options
Diffstat (limited to 'net/socket_stream/socket_stream.cc')
-rw-r--r-- | net/socket_stream/socket_stream.cc | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/net/socket_stream/socket_stream.cc b/net/socket_stream/socket_stream.cc index 1682ddc..5aacd4a 100644 --- a/net/socket_stream/socket_stream.cc +++ b/net/socket_stream/socket_stream.cc @@ -87,11 +87,13 @@ void SocketStream::ResponseHeaders::Realloc(size_t new_size) { SocketStream::ResponseHeaders::~ResponseHeaders() { data_ = NULL; } -SocketStream::SocketStream(const GURL& url, Delegate* delegate) +SocketStream::SocketStream(const GURL& url, Delegate* delegate, + URLRequestContext* context, + CookieStore* cookie_store) : delegate_(delegate), url_(url), max_pending_send_allowed_(kMaxPendingSendAllowed), - context_(NULL), + context_(context), next_state_(STATE_NONE), factory_(ClientSocketFactory::GetDefaultFactory()), proxy_mode_(kDirectConnection), @@ -108,12 +110,24 @@ SocketStream::SocketStream(const GURL& url, Delegate* delegate) waiting_for_write_completion_(false), closing_(false), server_closed_(false), - metrics_(new SocketStreamMetrics(url)) { + metrics_(new SocketStreamMetrics(url)), + cookie_store_(cookie_store) { DCHECK(base::MessageLoop::current()) << "The current base::MessageLoop must exist"; DCHECK(base::MessageLoopForIO::IsCurrent()) << "The current base::MessageLoop must be TYPE_IO"; DCHECK(delegate_); + + if (context_) { + if (!cookie_store_) + cookie_store_ = context_->cookie_store(); + + net_log_ = BoundNetLog::Make( + context->net_log(), + NetLog::SOURCE_SOCKET_STREAM); + + net_log_.BeginEvent(NetLog::TYPE_REQUEST_ALIVE); + } } SocketStream::UserData* SocketStream::GetUserData( @@ -132,28 +146,20 @@ bool SocketStream::is_secure() const { return url_.SchemeIs("wss"); } -void SocketStream::set_context(URLRequestContext* context) { - const URLRequestContext* prev_context = context_; - - context_ = context; - - if (prev_context != context) { - if (prev_context && pac_request_) { - prev_context->proxy_service()->CancelPacRequest(pac_request_); - pac_request_ = NULL; - } +void SocketStream::DetachContext() { + if (!context_) + return; - net_log_.EndEvent(NetLog::TYPE_REQUEST_ALIVE); - net_log_ = BoundNetLog(); + if (pac_request_) { + context_->proxy_service()->CancelPacRequest(pac_request_); + pac_request_ = NULL; + } - if (context) { - net_log_ = BoundNetLog::Make( - context->net_log(), - NetLog::SOURCE_SOCKET_STREAM); + net_log_.EndEvent(NetLog::TYPE_REQUEST_ALIVE); + net_log_ = BoundNetLog(); - net_log_.BeginEvent(NetLog::TYPE_REQUEST_ALIVE); - } - } + context_ = NULL; + cookie_store_ = NULL; } void SocketStream::CheckPrivacyMode() { @@ -318,7 +324,7 @@ void SocketStream::ContinueDespiteError() { } SocketStream::~SocketStream() { - set_context(NULL); + DetachContext(); DCHECK(!delegate_); DCHECK(!pac_request_); } @@ -1342,4 +1348,8 @@ int SocketStream::HandleCertificateError(int result) { return ERR_IO_PENDING; } +CookieStore* SocketStream::cookie_store() const { + return cookie_store_; +} + } // namespace net |