diff options
-rw-r--r-- | chrome/browser/net/chrome_url_request_context.cc | 3 | ||||
-rw-r--r-- | chrome/browser/net/chrome_url_request_context.h | 4 | ||||
-rw-r--r-- | net/socket_stream/socket_stream.cc | 21 | ||||
-rw-r--r-- | net/socket_stream/socket_stream.h | 5 | ||||
-rw-r--r-- | net/socket_stream/socket_stream_unittest.cc | 62 | ||||
-rw-r--r-- | net/url_request/url_request_context.h | 3 |
6 files changed, 16 insertions, 82 deletions
diff --git a/chrome/browser/net/chrome_url_request_context.cc b/chrome/browser/net/chrome_url_request_context.cc index c39ebec..a52fb1a 100644 --- a/chrome/browser/net/chrome_url_request_context.cc +++ b/chrome/browser/net/chrome_url_request_context.cc @@ -298,7 +298,8 @@ ChromeURLRequestContextGetter::CreateOffTheRecordForIsolatedApp( ChromeURLRequestContext::ChromeURLRequestContext( ContextType type, chrome_browser_net::LoadTimeStats* load_time_stats) - : load_time_stats_(load_time_stats) { + : weak_factory_(this), + load_time_stats_(load_time_stats) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); if (load_time_stats_) load_time_stats_->RegisterURLRequestContext(this, type); diff --git a/chrome/browser/net/chrome_url_request_context.h b/chrome/browser/net/chrome_url_request_context.h index 86f09fc..db09992 100644 --- a/chrome/browser/net/chrome_url_request_context.h +++ b/chrome/browser/net/chrome_url_request_context.h @@ -41,13 +41,15 @@ class ChromeURLRequestContext : public net::URLRequestContext { virtual ~ChromeURLRequestContext(); base::WeakPtr<ChromeURLRequestContext> GetWeakPtr() { - return base::AsWeakPtr(this); + return weak_factory_.GetWeakPtr(); } // Copies the state from |other| into this context. void CopyFrom(ChromeURLRequestContext* other); private: + base::WeakPtrFactory<ChromeURLRequestContext> weak_factory_; + // --------------------------------------------------------------------------- // Important: When adding any new members below, consider whether they need to // be added to CopyFrom. diff --git a/net/socket_stream/socket_stream.cc b/net/socket_stream/socket_stream.cc index 2060d8a..dcf0b0f 100644 --- a/net/socket_stream/socket_stream.cc +++ b/net/socket_stream/socket_stream.cc @@ -90,6 +90,7 @@ SocketStream::SocketStream(const GURL& url, Delegate* delegate) : delegate_(delegate), url_(url), max_pending_send_allowed_(kMaxPendingSendAllowed), + context_(NULL), next_state_(STATE_NONE), factory_(ClientSocketFactory::GetDefaultFactory()), proxy_mode_(kDirectConnection), @@ -130,13 +131,9 @@ bool SocketStream::is_secure() const { } void SocketStream::set_context(URLRequestContext* context) { - const URLRequestContext* prev_context = context_.get(); + const URLRequestContext* prev_context = context_; - if (context) { - context_ = context->AsWeakPtr(); - } else { - context_.reset(); - } + context_ = context; if (prev_context != context) { if (prev_context && pac_request_) { @@ -158,7 +155,7 @@ void SocketStream::set_context(URLRequestContext* context) { } void SocketStream::CheckPrivacyMode() { - if (context_.get() && context_->network_delegate()) { + if (context_ && context_->network_delegate()) { bool enable = context_->network_delegate()->CanEnablePrivacyMode(url_, url_); privacy_mode_ = enable ? kPrivacyModeEnabled : kPrivacyModeDisabled; @@ -173,7 +170,7 @@ void SocketStream::Connect() { << "The current base::MessageLoop must exist"; DCHECK_EQ(base::MessageLoop::TYPE_IO, base::MessageLoop::current()->type()) << "The current base::MessageLoop must be TYPE_IO"; - if (context_.get()) { + if (context_) { context_->ssl_config_service()->GetSSLConfig(&server_ssl_config_); proxy_ssl_config_ = server_ssl_config_; } @@ -451,7 +448,7 @@ void SocketStream::OnWriteCompleted(int result) { void SocketStream::DoLoop(int result) { // If context was not set, close immediately. - if (!context_.get()) + if (!context_) next_state_ = STATE_CLOSE; if (next_state_ == STATE_NONE) @@ -577,10 +574,8 @@ void SocketStream::DoLoop(int result) { int SocketStream::DoBeforeConnect() { next_state_ = STATE_BEFORE_CONNECT_COMPLETE; - if (!context_.get() || !context_->network_delegate()) { - // TODO(yhirano): This should not be OK. + if (!context_ || !context_->network_delegate()) return OK; - } int result = context_->network_delegate()->NotifyBeforeSocketStreamConnect( this, io_callback_); @@ -1294,7 +1289,7 @@ int SocketStream::HandleCertificateError(int result) { SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(socket_.get()); DCHECK(ssl_socket); - if (!context_.get()) + if (!context_) return result; if (SSLClientSocket::IgnoreCertError(result, LOAD_IGNORE_ALL_CERT_ERRORS)) { diff --git a/net/socket_stream/socket_stream.h b/net/socket_stream/socket_stream.h index 9a21c6e..5004060 100644 --- a/net/socket_stream/socket_stream.h +++ b/net/socket_stream/socket_stream.h @@ -12,7 +12,6 @@ #include "base/memory/linked_ptr.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" -#include "base/memory/weak_ptr.h" #include "net/base/address_list.h" #include "net/base/completion_callback.h" #include "net/base/io_buffer.h" @@ -130,7 +129,7 @@ class NET_EXPORT SocketStream Delegate* delegate() const { return delegate_; } int max_pending_send_allowed() const { return max_pending_send_allowed_; } - URLRequestContext* context() { return context_.get(); } + URLRequestContext* context() { return context_; } // There're some asynchronous operations and members that are constructed from // |context|. Be careful when you use this for the second time or more. void set_context(URLRequestContext* context); @@ -342,7 +341,7 @@ class NET_EXPORT SocketStream // sum of the size of buffers in |pending_write_bufs_| // exceeds this limit, SendData() fails. int max_pending_send_allowed_; - base::WeakPtr<URLRequestContext> context_; + URLRequestContext* context_; UserDataMap user_data_; diff --git a/net/socket_stream/socket_stream_unittest.cc b/net/socket_stream/socket_stream_unittest.cc index 212f88e..bd0a348 100644 --- a/net/socket_stream/socket_stream_unittest.cc +++ b/net/socket_stream/socket_stream_unittest.cc @@ -962,66 +962,4 @@ TEST_F(SocketStreamTest, OnErrorDetachDelegate) { EXPECT_EQ(OK, test_callback.WaitForResult()); } -// A test for the WeakPtr workaround patch which should be deleted -// in the future. -TEST_F(SocketStreamTest, ContextDestroyedBeforeDoBeforeConnect) { - TestCompletionCallback test_callback; - - scoped_ptr<SocketStreamEventRecorder> delegate( - new SocketStreamEventRecorder(test_callback.callback())); - - scoped_ptr<TestURLRequestContext> context(new TestURLRequestContext); - TestSocketStreamNetworkDelegate network_delegate; - network_delegate.SetBeforeConnectResult(OK); - context->set_network_delegate(&network_delegate); - - scoped_refptr<SocketStream> socket_stream( - new SocketStream(GURL("ws://example.com/demo"), delegate.get())); - - socket_stream->set_context(context.get()); - - socket_stream->Connect(); - context.reset(); - - ASSERT_EQ(0U, delegate->GetSeenEvents().size()); - - test_callback.WaitForResult(); - - const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); - ASSERT_EQ(1U, events.size()); - - EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[0].event_type); -} - -// A test for the WeakPtr workaround patch which should be deleted -// in the future. -TEST_F(SocketStreamTest, SocketStreamResetBeforeDoBeforeConnect) { - TestCompletionCallback test_callback; - - scoped_ptr<SocketStreamEventRecorder> delegate( - new SocketStreamEventRecorder(test_callback.callback())); - - scoped_ptr<TestURLRequestContext> context(new TestURLRequestContext); - TestSocketStreamNetworkDelegate network_delegate; - network_delegate.SetBeforeConnectResult(OK); - context->set_network_delegate(&network_delegate); - - scoped_refptr<SocketStream> socket_stream( - new SocketStream(GURL("ws://example.com/demo"), delegate.get())); - - socket_stream->set_context(context.get()); - - socket_stream->Connect(); - socket_stream = NULL; - context.reset(); - - ASSERT_EQ(0U, delegate->GetSeenEvents().size()); - test_callback.WaitForResult(); - - const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); - ASSERT_EQ(1U, events.size()); - - EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[0].event_type); -} - } // namespace net diff --git a/net/url_request/url_request_context.h b/net/url_request/url_request_context.h index ea55540..53da67d 100644 --- a/net/url_request/url_request_context.h +++ b/net/url_request/url_request_context.h @@ -45,8 +45,7 @@ class URLRequestThrottlerManager; // these member variables, since they may be shared. For the ones that aren't // shared, URLRequestContextStorage can be helpful in defining their storage. class NET_EXPORT URLRequestContext - : NON_EXPORTED_BASE(public base::NonThreadSafe), - public base::SupportsWeakPtr<URLRequestContext> { + : NON_EXPORTED_BASE(public base::NonThreadSafe) { public: URLRequestContext(); virtual ~URLRequestContext(); |