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

Side by Side Diff: components/grpc_support/test/get_stream_engine.cc

Issue 2273403003: Moving gRPC support interfaces out of cronet and into a new component. (Closed)
Patch Set: Address comments Created 4 years, 1 month 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/macros.h"
6 #include "base/memory/ptr_util.h"
7 #include "base/memory/ref_counted.h"
8 #include "base/threading/thread.h"
9 #include "components/grpc_support/include/bidirectional_stream_c.h"
10 #include "components/grpc_support/test/quic_test_server.h"
11 #include "net/cert/mock_cert_verifier.h"
12 #include "net/dns/mapped_host_resolver.h"
13 #include "net/dns/mock_host_resolver.h"
14 #include "net/http/http_server_properties_impl.h"
15 #include "net/url_request/url_request_test_util.h"
16
17 namespace grpc_support {
18 namespace {
19
20 // URLRequestContextGetter for BidirectionalStreamTest. This is used instead of
21 // net::TestURLRequestContextGetter because the URLRequestContext needs to be
22 // created on the test_io_thread_ for the test, and TestURLRequestContextGetter
23 // does not allow for lazy instantiation of the URLRequestContext if additional
24 // setup is required.
25 class BidirectionalStreamTestURLRequestContextGetter
26 : public net::URLRequestContextGetter {
27 public:
28 BidirectionalStreamTestURLRequestContextGetter(
29 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
30 : task_runner_(task_runner) {}
31
32 net::URLRequestContext* GetURLRequestContext() override {
33 if (!request_context_.get()) {
34 request_context_.reset(new net::TestURLRequestContext(
35 true /* delay_initialization */));
36 host_resolver_.reset(new net::MappedHostResolver(
37 net::HostResolver::CreateDefaultResolver(nullptr)));
38 host_resolver_->SetRulesFromString("MAP test.example.com 127.0.0.1,"
39 "MAP notfound.example.com ~NOTFOUND");
40 mock_cert_verifier_.reset(new net::MockCertVerifier());
41 mock_cert_verifier_->set_default_result(net::OK);
42 server_properties_.reset(new net::HttpServerPropertiesImpl());
43
44 // Need to enable QUIC for the test server.
45 auto params = base::MakeUnique<net::HttpNetworkSession::Params>();
46 params->enable_quic = true;
47 params->enable_http2 = true;
48 net::AlternativeService alternative_service(net::AlternateProtocol::QUIC,
49 "", kTestServerPort);
50 url::SchemeHostPort quic_hint_server("https", kTestServerDomain,
51 kTestServerPort);
52 server_properties_->SetAlternativeService(
53 quic_hint_server, alternative_service, base::Time::Max());
54 params->quic_host_whitelist.insert(kTestServerHost);
55
56 request_context_->set_cert_verifier(mock_cert_verifier_.get());
57 request_context_->set_host_resolver(host_resolver_.get());
58 request_context_->set_http_server_properties(server_properties_.get());
59 request_context_->set_http_network_session_params(std::move(params));
60
61 request_context_->Init();
62 }
63 return request_context_.get();
64 }
65
66 scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner()
67 const override {
68 return task_runner_;
69 }
70
71 private:
72 ~BidirectionalStreamTestURLRequestContextGetter() override {}
73
74 std::unique_ptr<net::HttpServerProperties> server_properties_;
75 std::unique_ptr<net::MockCertVerifier> mock_cert_verifier_;
76 std::unique_ptr<net::MappedHostResolver> host_resolver_;
77 std::unique_ptr<net::TestURLRequestContext> request_context_;
78 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
79
80 DISALLOW_COPY_AND_ASSIGN(BidirectionalStreamTestURLRequestContextGetter);
81 };
82
83 } // namespace
84
85 stream_engine* GetTestStreamEngine() {
86 static scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
87 static stream_engine engine;
88 if (request_context_getter_.get() == nullptr) {
89 static base::Thread* test_io_thread_ = new base::Thread(
90 "grpc_support_test_io_thread");
91 base::Thread::Options options;
92 options.message_loop_type = base::MessageLoop::TYPE_IO;
93 DCHECK(test_io_thread_->StartWithOptions(options));
94
95 request_context_getter_ =
96 new BidirectionalStreamTestURLRequestContextGetter(
97 test_io_thread_->task_runner());
98 engine.obj = request_context_getter_.get();
99 }
100 return &engine;
101 }
102
103 } // namespace grpc_support
OLDNEW
« no previous file with comments | « components/grpc_support/test/get_stream_engine.h ('k') | components/grpc_support/test/quic_test_server.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698