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

Side by Side Diff: components/grpc_support/cronet_c_for_grpc.cc

Issue 2273403003: Moving gRPC support interfaces out of cronet and into a new component. (Closed)
Patch Set: Add cronet_c_for_graph back to sources. Might fix GN, probably won't compile 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 unified diff | Download patch
OLDNEW
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_c_for_grpc.h" 5 #include "components/grpc_support/cronet_c_for_grpc.h"
6 6
7 #include <stdbool.h> 7 #include <stdbool.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <string> 10 #include <string>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/location.h" 14 #include "base/location.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/macros.h" 16 #include "base/macros.h"
17 #include "base/memory/ref_counted.h" 17 #include "base/memory/ref_counted.h"
18 #include "base/strings/string_number_conversions.h" 18 #include "base/strings/string_number_conversions.h"
19 #include "base/strings/string_split.h" 19 #include "base/strings/string_split.h"
20 #include "components/cronet/ios/cronet_bidirectional_stream.h" 20 #include "components/grpc_support/cronet_bidirectional_stream.h"
21 #include "components/cronet/ios/cronet_environment.h" 21 #include "components/grpc_support/environment.h"
22 #include "net/base/io_buffer.h" 22 #include "net/base/io_buffer.h"
23 #include "net/base/net_errors.h" 23 #include "net/base/net_errors.h"
24 #include "net/base/request_priority.h" 24 #include "net/base/request_priority.h"
25 #include "net/http/bidirectional_stream.h" 25 #include "net/http/bidirectional_stream.h"
26 #include "net/http/bidirectional_stream_request_info.h" 26 #include "net/http/bidirectional_stream_request_info.h"
27 #include "net/http/http_network_session.h" 27 #include "net/http/http_network_session.h"
28 #include "net/http/http_response_headers.h" 28 #include "net/http/http_response_headers.h"
29 #include "net/http/http_status_code.h" 29 #include "net/http/http_status_code.h"
30 #include "net/http/http_transaction_factory.h" 30 #include "net/http/http_transaction_factory.h"
31 #include "net/http/http_util.h" 31 #include "net/http/http_util.h"
(...skipping 30 matching lines...) Expand all
62 headers[i].value = headers_strings_[i].second.c_str(); 62 headers[i].value = headers_strings_[i].second.c_str();
63 ++i; 63 ++i;
64 } 64 }
65 } 65 }
66 66
67 HeadersArray::~HeadersArray() { 67 HeadersArray::~HeadersArray() {
68 delete[] headers; 68 delete[] headers;
69 } 69 }
70 70
71 class CronetBidirectionalStreamAdapter 71 class CronetBidirectionalStreamAdapter
72 : public cronet::CronetBidirectionalStream::Delegate { 72 : public grpc_support::CronetBidirectionalStream::Delegate {
73 public: 73 public:
74 CronetBidirectionalStreamAdapter( 74 CronetBidirectionalStreamAdapter(
75 cronet_engine* engine, 75 cronet_engine* engine,
76 cronet_bidirectional_stream* stream, 76 cronet_bidirectional_stream* stream,
77 cronet_bidirectional_stream_callback* callback); 77 cronet_bidirectional_stream_callback* callback);
78 78
79 virtual ~CronetBidirectionalStreamAdapter(); 79 virtual ~CronetBidirectionalStreamAdapter();
80 80
81 void OnStreamReady() override; 81 void OnStreamReady() override;
82 82
83 void OnHeadersReceived(const net::SpdyHeaderBlock& headers_block, 83 void OnHeadersReceived(const net::SpdyHeaderBlock& headers_block,
84 const char* negotiated_protocol) override; 84 const char* negotiated_protocol) override;
85 85
86 void OnDataRead(char* data, int size) override; 86 void OnDataRead(char* data, int size) override;
87 87
88 void OnDataSent(const char* data) override; 88 void OnDataSent(const char* data) override;
89 89
90 void OnTrailersReceived(const net::SpdyHeaderBlock& trailers_block) override; 90 void OnTrailersReceived(const net::SpdyHeaderBlock& trailers_block) override;
91 91
92 void OnSucceeded() override; 92 void OnSucceeded() override;
93 93
94 void OnFailed(int error) override; 94 void OnFailed(int error) override;
95 95
96 void OnCanceled() override; 96 void OnCanceled() override;
97 97
98 static cronet::CronetBidirectionalStream* GetCronetStream( 98 static grpc_support::CronetBidirectionalStream* GetCronetStream(
99 cronet_bidirectional_stream* stream); 99 cronet_bidirectional_stream* stream);
100 100
101 static void DestroyAdapterForStream(cronet_bidirectional_stream* stream); 101 static void DestroyAdapterForStream(cronet_bidirectional_stream* stream);
102 102
103 private: 103 private:
104 void DestroyOnNetworkThread(); 104 void DestroyOnNetworkThread();
105 105
106 // None of these objects are owned by |this|. 106 // None of these objects are owned by |this|.
107 cronet::CronetEnvironment* cronet_environment_; 107 grpc_support::Environment* environment_;
108 cronet::CronetBidirectionalStream* cronet_bidirectional_stream_; 108 grpc_support::CronetBidirectionalStream* cronet_bidirectional_stream_;
109 // C side 109 // C side
110 cronet_bidirectional_stream* stream_; 110 cronet_bidirectional_stream* stream_;
111 cronet_bidirectional_stream_callback* callback_; 111 cronet_bidirectional_stream_callback* callback_;
112 }; 112 };
113 113
114 CronetBidirectionalStreamAdapter::CronetBidirectionalStreamAdapter( 114 CronetBidirectionalStreamAdapter::CronetBidirectionalStreamAdapter(
115 cronet_engine* engine, 115 cronet_engine* engine,
116 cronet_bidirectional_stream* stream, 116 cronet_bidirectional_stream* stream,
117 cronet_bidirectional_stream_callback* callback) 117 cronet_bidirectional_stream_callback* callback)
118 : cronet_environment_( 118 : environment_(
119 reinterpret_cast<cronet::CronetEnvironment*>(engine->obj)), 119 reinterpret_cast<grpc_support::Environment*>(engine->obj)),
120 stream_(stream), 120 stream_(stream),
121 callback_(callback) { 121 callback_(callback) {
122 DCHECK(cronet_environment_); 122 DCHECK(environment_);
123 cronet_bidirectional_stream_ = 123 cronet_bidirectional_stream_ =
124 new cronet::CronetBidirectionalStream(cronet_environment_, this); 124 new grpc_support::CronetBidirectionalStream(environment_, this);
125 } 125 }
126 126
127 CronetBidirectionalStreamAdapter::~CronetBidirectionalStreamAdapter() {} 127 CronetBidirectionalStreamAdapter::~CronetBidirectionalStreamAdapter() {}
128 128
129 void CronetBidirectionalStreamAdapter::OnStreamReady() { 129 void CronetBidirectionalStreamAdapter::OnStreamReady() {
130 DCHECK(callback_->on_response_headers_received); 130 DCHECK(callback_->on_response_headers_received);
131 callback_->on_stream_ready(stream_); 131 callback_->on_stream_ready(stream_);
132 } 132 }
133 133
134 void CronetBidirectionalStreamAdapter::OnHeadersReceived( 134 void CronetBidirectionalStreamAdapter::OnHeadersReceived(
(...skipping 30 matching lines...) Expand all
165 void CronetBidirectionalStreamAdapter::OnFailed(int error) { 165 void CronetBidirectionalStreamAdapter::OnFailed(int error) {
166 DCHECK(callback_->on_failed); 166 DCHECK(callback_->on_failed);
167 callback_->on_failed(stream_, error); 167 callback_->on_failed(stream_, error);
168 } 168 }
169 169
170 void CronetBidirectionalStreamAdapter::OnCanceled() { 170 void CronetBidirectionalStreamAdapter::OnCanceled() {
171 DCHECK(callback_->on_canceled); 171 DCHECK(callback_->on_canceled);
172 callback_->on_canceled(stream_); 172 callback_->on_canceled(stream_);
173 } 173 }
174 174
175 cronet::CronetBidirectionalStream* 175 grpc_support::CronetBidirectionalStream*
176 CronetBidirectionalStreamAdapter::GetCronetStream( 176 CronetBidirectionalStreamAdapter::GetCronetStream(
177 cronet_bidirectional_stream* stream) { 177 cronet_bidirectional_stream* stream) {
178 DCHECK(stream); 178 DCHECK(stream);
179 CronetBidirectionalStreamAdapter* adapter = 179 CronetBidirectionalStreamAdapter* adapter =
180 static_cast<CronetBidirectionalStreamAdapter*>(stream->obj); 180 static_cast<CronetBidirectionalStreamAdapter*>(stream->obj);
181 DCHECK(adapter->stream_ == stream); 181 DCHECK(adapter->stream_ == stream);
182 DCHECK(adapter->cronet_bidirectional_stream_); 182 DCHECK(adapter->cronet_bidirectional_stream_);
183 return adapter->cronet_bidirectional_stream_; 183 return adapter->cronet_bidirectional_stream_;
184 } 184 }
185 185
186 void CronetBidirectionalStreamAdapter::DestroyAdapterForStream( 186 void CronetBidirectionalStreamAdapter::DestroyAdapterForStream(
187 cronet_bidirectional_stream* stream) { 187 cronet_bidirectional_stream* stream) {
188 DCHECK(stream); 188 DCHECK(stream);
189 CronetBidirectionalStreamAdapter* adapter = 189 CronetBidirectionalStreamAdapter* adapter =
190 static_cast<CronetBidirectionalStreamAdapter*>(stream->obj); 190 static_cast<CronetBidirectionalStreamAdapter*>(stream->obj);
191 DCHECK(adapter->stream_ == stream); 191 DCHECK(adapter->stream_ == stream);
192 // Destroy could be called from any thread, including network thread (if 192 // Destroy could be called from any thread, including network thread (if
193 // posting task to executor throws an exception), but is posted, so |this| 193 // posting task to executor throws an exception), but is posted, so |this|
194 // is valid until calling task is complete. 194 // is valid until calling task is complete.
195 adapter->cronet_bidirectional_stream_->Destroy(); 195 adapter->cronet_bidirectional_stream_->Destroy();
196 adapter->cronet_environment_->PostToNetworkThread( 196 adapter->environment_->PostToNetworkThread(
197 FROM_HERE, 197 FROM_HERE,
198 base::Bind(&CronetBidirectionalStreamAdapter::DestroyOnNetworkThread, 198 base::Bind(&CronetBidirectionalStreamAdapter::DestroyOnNetworkThread,
199 base::Unretained(adapter))); 199 base::Unretained(adapter)));
200 } 200 }
201 201
202 void CronetBidirectionalStreamAdapter::DestroyOnNetworkThread() { 202 void CronetBidirectionalStreamAdapter::DestroyOnNetworkThread() {
203 DCHECK(cronet_environment_->IsOnNetworkThread()); 203 DCHECK(environment_->IsOnNetworkThread());
204 delete this; 204 delete this;
205 } 205 }
206 206
207 } // namespace 207 } // namespace
208 208
209 cronet_bidirectional_stream* cronet_bidirectional_stream_create( 209 cronet_bidirectional_stream* cronet_bidirectional_stream_create(
210 cronet_engine* engine, 210 cronet_engine* engine,
211 void* annotation, 211 void* annotation,
212 cronet_bidirectional_stream_callback* callback) { 212 cronet_bidirectional_stream_callback* callback) {
213 // Allocate C |stream| object. 213 // Allocate C |stream| object.
(...skipping 24 matching lines...) Expand all
238 ->delay_headers_until_flush(delay_headers_until_flush); 238 ->delay_headers_until_flush(delay_headers_until_flush);
239 } 239 }
240 240
241 int cronet_bidirectional_stream_start( 241 int cronet_bidirectional_stream_start(
242 cronet_bidirectional_stream* stream, 242 cronet_bidirectional_stream* stream,
243 const char* url, 243 const char* url,
244 int priority, 244 int priority,
245 const char* method, 245 const char* method,
246 const cronet_bidirectional_stream_header_array* headers, 246 const cronet_bidirectional_stream_header_array* headers,
247 bool end_of_stream) { 247 bool end_of_stream) {
248 cronet::CronetBidirectionalStream* cronet_stream = 248 grpc_support::CronetBidirectionalStream* cronet_stream =
249 CronetBidirectionalStreamAdapter::GetCronetStream(stream); 249 CronetBidirectionalStreamAdapter::GetCronetStream(stream);
250 net::HttpRequestHeaders request_headers; 250 net::HttpRequestHeaders request_headers;
251 if (headers) { 251 if (headers) {
252 for (size_t i = 0; i < headers->count; ++i) { 252 for (size_t i = 0; i < headers->count; ++i) {
253 std::string name(headers->headers[i].key); 253 std::string name(headers->headers[i].key);
254 std::string value(headers->headers[i].value); 254 std::string value(headers->headers[i].value);
255 if (!net::HttpUtil::IsValidHeaderName(name) || 255 if (!net::HttpUtil::IsValidHeaderName(name) ||
256 !net::HttpUtil::IsValidHeaderValue(value)) { 256 !net::HttpUtil::IsValidHeaderValue(value)) {
257 DLOG(ERROR) << "Invalid Header " << name << "=" << value; 257 DLOG(ERROR) << "Invalid Header " << name << "=" << value;
258 return i + 1; 258 return i + 1;
(...skipping 20 matching lines...) Expand all
279 buffer, count, end_of_stream); 279 buffer, count, end_of_stream);
280 } 280 }
281 281
282 void cronet_bidirectional_stream_flush(cronet_bidirectional_stream* stream) { 282 void cronet_bidirectional_stream_flush(cronet_bidirectional_stream* stream) {
283 return CronetBidirectionalStreamAdapter::GetCronetStream(stream)->Flush(); 283 return CronetBidirectionalStreamAdapter::GetCronetStream(stream)->Flush();
284 } 284 }
285 285
286 void cronet_bidirectional_stream_cancel(cronet_bidirectional_stream* stream) { 286 void cronet_bidirectional_stream_cancel(cronet_bidirectional_stream* stream) {
287 CronetBidirectionalStreamAdapter::GetCronetStream(stream)->Cancel(); 287 CronetBidirectionalStreamAdapter::GetCronetStream(stream)->Cancel();
288 } 288 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698