| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include "components/cronet/ios/cronet_bidirectional_stream.h" | 5 #include "components/grpc_support/cronet_bidirectional_stream.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/location.h" | 12 #include "base/location.h" |
| 13 #include "base/logging.h" | 13 #include "base/logging.h" |
| 14 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
| 15 #include "base/strings/string_number_conversions.h" | 15 #include "base/strings/string_number_conversions.h" |
| 16 #include "components/cronet/ios/cronet_environment.h" | 16 #include "components/grpc_support/environment.h" |
| 17 #include "net/base/io_buffer.h" | 17 #include "net/base/io_buffer.h" |
| 18 #include "net/base/net_errors.h" | 18 #include "net/base/net_errors.h" |
| 19 #include "net/base/request_priority.h" | 19 #include "net/base/request_priority.h" |
| 20 #include "net/http/bidirectional_stream.h" | 20 #include "net/http/bidirectional_stream.h" |
| 21 #include "net/http/bidirectional_stream_request_info.h" | 21 #include "net/http/bidirectional_stream_request_info.h" |
| 22 #include "net/http/http_network_session.h" | 22 #include "net/http/http_network_session.h" |
| 23 #include "net/http/http_response_headers.h" | 23 #include "net/http/http_response_headers.h" |
| 24 #include "net/http/http_status_code.h" | 24 #include "net/http/http_status_code.h" |
| 25 #include "net/http/http_transaction_factory.h" | 25 #include "net/http/http_transaction_factory.h" |
| 26 #include "net/http/http_util.h" | 26 #include "net/http/http_util.h" |
| 27 #include "net/spdy/spdy_header_block.h" | 27 #include "net/spdy/spdy_header_block.h" |
| 28 #include "net/ssl/ssl_info.h" | 28 #include "net/ssl/ssl_info.h" |
| 29 #include "net/url_request/http_user_agent_settings.h" | 29 #include "net/url_request/http_user_agent_settings.h" |
| 30 #include "net/url_request/url_request_context.h" | 30 #include "net/url_request/url_request_context.h" |
| 31 #include "url/gurl.h" | 31 #include "url/gurl.h" |
| 32 | 32 |
| 33 namespace cronet { | 33 namespace grpc_support { |
| 34 | 34 |
| 35 CronetBidirectionalStream::WriteBuffers::WriteBuffers() {} | 35 CronetBidirectionalStream::WriteBuffers::WriteBuffers() {} |
| 36 | 36 |
| 37 CronetBidirectionalStream::WriteBuffers::~WriteBuffers() {} | 37 CronetBidirectionalStream::WriteBuffers::~WriteBuffers() {} |
| 38 | 38 |
| 39 void CronetBidirectionalStream::WriteBuffers::Clear() { | 39 void CronetBidirectionalStream::WriteBuffers::Clear() { |
| 40 write_buffer_list.clear(); | 40 write_buffer_list.clear(); |
| 41 write_buffer_len_list.clear(); | 41 write_buffer_len_list.clear(); |
| 42 } | 42 } |
| 43 | 43 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 54 std::move(write_buffer_len_list.begin(), write_buffer_len_list.end(), | 54 std::move(write_buffer_len_list.begin(), write_buffer_len_list.end(), |
| 55 std::back_inserter(target->write_buffer_len_list)); | 55 std::back_inserter(target->write_buffer_len_list)); |
| 56 Clear(); | 56 Clear(); |
| 57 } | 57 } |
| 58 | 58 |
| 59 bool CronetBidirectionalStream::WriteBuffers::Empty() const { | 59 bool CronetBidirectionalStream::WriteBuffers::Empty() const { |
| 60 return write_buffer_list.empty(); | 60 return write_buffer_list.empty(); |
| 61 } | 61 } |
| 62 | 62 |
| 63 CronetBidirectionalStream::CronetBidirectionalStream( | 63 CronetBidirectionalStream::CronetBidirectionalStream( |
| 64 CronetEnvironment* environment, | 64 Environment* environment, |
| 65 Delegate* delegate) | 65 Delegate* delegate) |
| 66 : read_state_(NOT_STARTED), | 66 : read_state_(NOT_STARTED), |
| 67 write_state_(NOT_STARTED), | 67 write_state_(NOT_STARTED), |
| 68 write_end_of_stream_(false), | 68 write_end_of_stream_(false), |
| 69 request_headers_sent_(false), | 69 request_headers_sent_(false), |
| 70 disable_auto_flush_(false), | 70 disable_auto_flush_(false), |
| 71 delay_headers_until_flush_(false), | 71 delay_headers_until_flush_(false), |
| 72 environment_(environment), | 72 environment_(environment), |
| 73 pending_write_data_(new WriteBuffers()), | 73 pending_write_data_(new WriteBuffers()), |
| 74 flushing_write_data_(new WriteBuffers()), | 74 flushing_write_data_(new WriteBuffers()), |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 read_state_ = write_state_ = ERROR; | 238 read_state_ = write_state_ = ERROR; |
| 239 delegate_->OnFailed(error); | 239 delegate_->OnFailed(error); |
| 240 } | 240 } |
| 241 | 241 |
| 242 void CronetBidirectionalStream::StartOnNetworkThread( | 242 void CronetBidirectionalStream::StartOnNetworkThread( |
| 243 std::unique_ptr<net::BidirectionalStreamRequestInfo> request_info) { | 243 std::unique_ptr<net::BidirectionalStreamRequestInfo> request_info) { |
| 244 DCHECK(environment_->IsOnNetworkThread()); | 244 DCHECK(environment_->IsOnNetworkThread()); |
| 245 DCHECK(!bidi_stream_); | 245 DCHECK(!bidi_stream_); |
| 246 DCHECK(environment_->GetURLRequestContext()); | 246 DCHECK(environment_->GetURLRequestContext()); |
| 247 request_info->extra_headers.SetHeaderIfMissing( | 247 request_info->extra_headers.SetHeaderIfMissing( |
| 248 net::HttpRequestHeaders::kUserAgent, environment_->user_agent()); | 248 net::HttpRequestHeaders::kUserAgent, environment_->UserAgent()); |
| 249 bidi_stream_.reset(new net::BidirectionalStream( | 249 bidi_stream_.reset(new net::BidirectionalStream( |
| 250 std::move(request_info), environment_->GetURLRequestContext() | 250 std::move(request_info), environment_->GetURLRequestContext() |
| 251 ->http_transaction_factory() | 251 ->http_transaction_factory() |
| 252 ->GetSession(), | 252 ->GetSession(), |
| 253 !delay_headers_until_flush_, this)); | 253 !delay_headers_until_flush_, this)); |
| 254 DCHECK(read_state_ == NOT_STARTED && write_state_ == NOT_STARTED); | 254 DCHECK(read_state_ == NOT_STARTED && write_state_ == NOT_STARTED); |
| 255 read_state_ = write_state_ = STARTED; | 255 read_state_ = write_state_ = STARTED; |
| 256 } | 256 } |
| 257 | 257 |
| 258 void CronetBidirectionalStream::ReadDataOnNetworkThread( | 258 void CronetBidirectionalStream::ReadDataOnNetworkThread( |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 void CronetBidirectionalStream::MaybeOnSucceded() { | 355 void CronetBidirectionalStream::MaybeOnSucceded() { |
| 356 DCHECK(environment_->IsOnNetworkThread()); | 356 DCHECK(environment_->IsOnNetworkThread()); |
| 357 if (read_state_ == READING_DONE && write_state_ == WRITING_DONE) { | 357 if (read_state_ == READING_DONE && write_state_ == WRITING_DONE) { |
| 358 read_state_ = write_state_ = SUCCESS; | 358 read_state_ = write_state_ = SUCCESS; |
| 359 bidi_stream_.reset(); | 359 bidi_stream_.reset(); |
| 360 delegate_->OnSucceeded(); | 360 delegate_->OnSucceeded(); |
| 361 } | 361 } |
| 362 } | 362 } |
| 363 | 363 |
| 364 } // namespace cronet | 364 } // namespace cronet |
| OLD | NEW |