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

Unified Diff: components/cronet/ios/cronet_bidirectional_stream.cc

Issue 2369053002: [Cronet] Use WeakPtr in CronetBidirectionalStream on iOS. (Closed)
Patch Set: Remove build/config/sanitizers/BUILD.gn changes. Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: components/cronet/ios/cronet_bidirectional_stream.cc
diff --git a/components/cronet/ios/cronet_bidirectional_stream.cc b/components/cronet/ios/cronet_bidirectional_stream.cc
index 59a82085f8f268df0e99e330369c0642d2497126..a39721a26ef077a852e1a29b8e996089a51833fc 100644
--- a/components/cronet/ios/cronet_bidirectional_stream.cc
+++ b/components/cronet/ios/cronet_bidirectional_stream.cc
@@ -73,7 +73,10 @@ CronetBidirectionalStream::CronetBidirectionalStream(
pending_write_data_(new WriteBuffers()),
flushing_write_data_(new WriteBuffers()),
sending_write_data_(new WriteBuffers()),
- delegate_(delegate) {}
+ delegate_(delegate),
+ weak_factory_(this) {
+ weak_this_ = weak_factory_.GetWeakPtr();
+}
CronetBidirectionalStream::~CronetBidirectionalStream() {
DCHECK(environment_->IsOnNetworkThread());
@@ -98,9 +101,8 @@ int CronetBidirectionalStream::Start(const char* url,
write_end_of_stream_ = end_of_stream;
DCHECK(environment_);
environment_->PostToNetworkThread(
- FROM_HERE,
- base::Bind(&CronetBidirectionalStream::StartOnNetworkThread,
- base::Unretained(this), base::Passed(&request_info)));
+ FROM_HERE, base::Bind(&CronetBidirectionalStream::StartOnNetworkThread,
+ weak_this_, base::Passed(&request_info)));
return 0;
}
@@ -112,7 +114,7 @@ bool CronetBidirectionalStream::ReadData(char* buffer, int capacity) {
environment_->PostToNetworkThread(
FROM_HERE, base::Bind(&CronetBidirectionalStream::ReadDataOnNetworkThread,
- base::Unretained(this), read_buffer, capacity));
+ weak_this_, read_buffer, capacity));
return true;
}
@@ -128,20 +130,20 @@ bool CronetBidirectionalStream::WriteData(const char* buffer,
environment_->PostToNetworkThread(
FROM_HERE,
base::Bind(&CronetBidirectionalStream::WriteDataOnNetworkThread,
- base::Unretained(this), write_buffer, count, end_of_stream));
+ weak_this_, write_buffer, count, end_of_stream));
return true;
}
void CronetBidirectionalStream::Flush() {
environment_->PostToNetworkThread(
- FROM_HERE, base::Bind(&CronetBidirectionalStream::FlushOnNetworkThread,
- base::Unretained(this)));
+ FROM_HERE,
+ base::Bind(&CronetBidirectionalStream::FlushOnNetworkThread, weak_this_));
}
void CronetBidirectionalStream::Cancel() {
environment_->PostToNetworkThread(
FROM_HERE, base::Bind(&CronetBidirectionalStream::CancelOnNetworkThread,
- base::Unretained(this)));
+ weak_this_));
}
void CronetBidirectionalStream::Destroy() {
@@ -234,8 +236,9 @@ void CronetBidirectionalStream::OnTrailersReceived(
void CronetBidirectionalStream::OnFailed(int error) {
DCHECK(environment_->IsOnNetworkThread());
- bidi_stream_.reset();
read_state_ = write_state_ = ERROR;
+ bidi_stream_.reset();
+ weak_factory_.InvalidateWeakPtrs();
delegate_->OnFailed(error);
}
@@ -327,6 +330,7 @@ void CronetBidirectionalStream::FlushOnNetworkThread() {
}
void CronetBidirectionalStream::SendFlushingWriteData() {
+ DCHECK(bidi_stream_);
// If previous send is not done, or there is nothing to flush, then exit.
if (write_state_ == WRITING || flushing_write_data_->Empty())
return;
@@ -344,6 +348,7 @@ void CronetBidirectionalStream::CancelOnNetworkThread() {
return;
read_state_ = write_state_ = CANCELED;
bidi_stream_.reset();
+ weak_factory_.InvalidateWeakPtrs();
delegate_->OnCanceled();
}
@@ -357,6 +362,7 @@ void CronetBidirectionalStream::MaybeOnSucceded() {
if (read_state_ == READING_DONE && write_state_ == WRITING_DONE) {
read_state_ = write_state_ = SUCCESS;
bidi_stream_.reset();
+ weak_factory_.InvalidateWeakPtrs();
delegate_->OnSucceeded();
}
}
« no previous file with comments | « components/cronet/ios/cronet_bidirectional_stream.h ('k') | components/cronet/ios/test/cronet_bidirectional_stream_test.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698