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

Side by Side Diff: net/http/http_network_transaction_unittest.cc

Issue 2226323003: Fix Alt-Svc and proxy interaction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase on https://crrev.com/2219133002. Created 4 years, 4 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
« no previous file with comments | « no previous file | net/http/http_stream_factory_impl_job.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "net/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <math.h> // ceil 7 #include <math.h> // ceil
8 #include <stdarg.h> 8 #include <stdarg.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 11012 matching lines...) Expand 10 before | Expand all | Expand 10 after
11023 const net::CompletionCallback& callback, 11023 const net::CompletionCallback& callback,
11024 std::unique_ptr<Request>* request) override { 11024 std::unique_ptr<Request>* request) override {
11025 resolver->reset(new ForwardingProxyResolver(resolver_)); 11025 resolver->reset(new ForwardingProxyResolver(resolver_));
11026 return OK; 11026 return OK;
11027 } 11027 }
11028 11028
11029 private: 11029 private:
11030 ProxyResolver* resolver_; 11030 ProxyResolver* resolver_;
11031 }; 11031 };
11032 11032
11033 // Test that proxy is resolved using the origin url,
11034 // regardless of the alternative server.
11035 TEST_F(HttpNetworkTransactionTest, UseOriginNotAlternativeForProxy) {
11036 // Configure proxy to bypass www.example.org, which is the origin URL.
11037 ProxyConfig proxy_config;
11038 proxy_config.proxy_rules().ParseFromString("myproxy:70");
11039 proxy_config.proxy_rules().bypass_rules.AddRuleFromString("www.example.org");
11040 auto proxy_config_service =
11041 base::MakeUnique<ProxyConfigServiceFixed>(proxy_config);
11042
11043 CapturingProxyResolver capturing_proxy_resolver;
11044 auto proxy_resolver_factory = base::MakeUnique<CapturingProxyResolverFactory>(
11045 &capturing_proxy_resolver);
11046
11047 TestNetLog net_log;
11048
11049 session_deps_.proxy_service = base::MakeUnique<ProxyService>(
11050 std::move(proxy_config_service), std::move(proxy_resolver_factory),
11051 &net_log);
11052
11053 session_deps_.net_log = &net_log;
11054
11055 // Configure alternative service with a hostname that is not bypassed by the
11056 // proxy.
11057 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
11058 HttpServerProperties* http_server_properties =
11059 session->http_server_properties();
11060 url::SchemeHostPort server("https", "www.example.org", 443);
11061 HostPortPair alternative("www.example.com", 443);
11062 AlternativeService alternative_service(
11063 AlternateProtocolFromNextProto(kProtoHTTP2), alternative);
11064 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
11065 http_server_properties->SetAlternativeService(server, alternative_service,
11066 expiration);
11067
11068 // Non-alternative job should hang.
11069 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING);
11070 StaticSocketDataProvider hanging_alternate_protocol_socket(nullptr, 0,
11071 nullptr, 0);
11072 hanging_alternate_protocol_socket.set_connect_data(never_finishing_connect);
11073 session_deps_.socket_factory->AddSocketDataProvider(
11074 &hanging_alternate_protocol_socket);
11075
11076 SSLSocketDataProvider ssl_http2(ASYNC, OK);
11077 ssl_http2.next_proto = kProtoHTTP2;
11078 ssl_http2.cert =
11079 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
11080 ASSERT_TRUE(ssl_http2.cert);
11081 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2);
11082
11083 HttpRequestInfo request;
11084 request.method = "GET";
11085 request.url = GURL("https://www.example.org/");
11086 request.load_flags = 0;
11087
11088 SpdySerializedFrame req(
11089 spdy_util_.ConstructSpdyGet("https://www.example.org/", 1, LOWEST));
11090
11091 MockWrite spdy_writes[] = {CreateMockWrite(req, 0)};
11092
11093 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
11094 SpdySerializedFrame data(spdy_util_.ConstructSpdyDataFrame(1, true));
11095 MockRead spdy_reads[] = {
11096 CreateMockRead(resp, 1), CreateMockRead(data, 2), MockRead(ASYNC, 0, 3),
11097 };
11098
11099 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
11100 arraysize(spdy_writes));
11101 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
11102
11103 TestCompletionCallback callback;
11104
11105 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
11106
11107 int rv = trans.Start(&request, callback.callback(), BoundNetLog());
11108 EXPECT_THAT(callback.GetResult(rv), IsOk());
11109
11110 const HttpResponseInfo* response = trans.GetResponseInfo();
11111 ASSERT_TRUE(response);
11112 ASSERT_TRUE(response->headers);
11113 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine());
11114 EXPECT_TRUE(response->was_fetched_via_spdy);
11115 EXPECT_TRUE(response->was_npn_negotiated);
11116
11117 std::string response_data;
11118 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk());
11119 EXPECT_EQ("hello!", response_data);
11120
11121 // Origin host bypasses proxy, no resolution should have happened.
11122 ASSERT_TRUE(capturing_proxy_resolver.resolved().empty());
11123 }
11124
11033 TEST_F(HttpNetworkTransactionTest, UseAlternativeServiceForTunneledNpnSpdy) { 11125 TEST_F(HttpNetworkTransactionTest, UseAlternativeServiceForTunneledNpnSpdy) {
11034 ProxyConfig proxy_config; 11126 ProxyConfig proxy_config;
11035 proxy_config.set_auto_detect(true); 11127 proxy_config.set_auto_detect(true);
11036 proxy_config.set_pac_url(GURL("http://fooproxyurl")); 11128 proxy_config.set_pac_url(GURL("http://fooproxyurl"));
11037 11129
11038 CapturingProxyResolver capturing_proxy_resolver; 11130 CapturingProxyResolver capturing_proxy_resolver;
11039 session_deps_.proxy_service.reset(new ProxyService( 11131 session_deps_.proxy_service.reset(new ProxyService(
11040 base::WrapUnique(new ProxyConfigServiceFixed(proxy_config)), 11132 base::WrapUnique(new ProxyConfigServiceFixed(proxy_config)),
11041 base::WrapUnique( 11133 base::WrapUnique(
11042 new CapturingProxyResolverFactory(&capturing_proxy_resolver)), 11134 new CapturingProxyResolverFactory(&capturing_proxy_resolver)),
(...skipping 4532 matching lines...) Expand 10 before | Expand all | Expand 10 after
15575 base::RunLoop().RunUntilIdle(); 15667 base::RunLoop().RunUntilIdle();
15576 15668
15577 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); 15669 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy);
15578 HttpRequestHeaders headers; 15670 HttpRequestHeaders headers;
15579 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); 15671 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers));
15580 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); 15672 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding));
15581 } 15673 }
15582 #endif // !defined(OS_IOS) 15674 #endif // !defined(OS_IOS)
15583 15675
15584 } // namespace net 15676 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/http/http_stream_factory_impl_job.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698