http_stream_factory_impl_request_unittest.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// found in the LICENSE file.
43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/http/http_stream_factory_impl_request.h"
63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/http/http_stream_factory_impl_job.h"
83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/proxy/proxy_info.h"
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/proxy/proxy_service.h"
103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/spdy/spdy_test_util_common.h"
113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace net {
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class HttpStreamFactoryImplRequestTest
163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    : public ::testing::Test,
173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      public ::testing::WithParamInterface<NextProto> {};
183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    NextProto,
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    HttpStreamFactoryImplRequestTest,
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    testing::Values(kProtoDeprecatedSPDY2,
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                    kProtoSPDY3, kProtoSPDY31, kProtoSPDY4a2,
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                    kProtoHTTP2Draft04));
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace {
273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class DoNothingRequestDelegate : public HttpStreamRequest::Delegate {
293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public:
303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  DoNothingRequestDelegate() {}
313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual ~DoNothingRequestDelegate() {}
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // HttpStreamRequest::Delegate
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void OnStreamReady(
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const SSLConfig& used_ssl_config,
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const ProxyInfo& used_proxy_info,
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      HttpStreamBase* stream) OVERRIDE {}
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void OnWebSocketStreamReady(
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const SSLConfig& used_ssl_config,
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const ProxyInfo& used_proxy_info,
423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      WebSocketStreamBase* stream) OVERRIDE {}
433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void OnStreamFailed(
443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      int status,
453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const SSLConfig& used_ssl_config) OVERRIDE {}
463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void OnCertificateError(
473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      int status,
483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const SSLConfig& used_ssl_config,
493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const SSLInfo& ssl_info) OVERRIDE {}
503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void OnNeedsProxyAuth(const HttpResponseInfo& proxy_response,
513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                const SSLConfig& used_ssl_config,
523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                const ProxyInfo& used_proxy_info,
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                HttpAuthController* auth_controller) OVERRIDE {}
543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void OnNeedsClientAuth(const SSLConfig& used_ssl_config,
553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                 SSLCertRequestInfo* cert_info) OVERRIDE {}
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void OnHttpsProxyTunnelResponse(const HttpResponseInfo& response_info,
573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                          const SSLConfig& used_ssl_config,
583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                          const ProxyInfo& used_proxy_info,
593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                          HttpStreamBase* stream) OVERRIDE {}
603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)};
613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}  // namespace
633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Make sure that Request passes on its priority updates to its jobs.
653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_P(HttpStreamFactoryImplRequestTest, SetPriority) {
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  SpdySessionDependencies session_deps(GetParam(),
673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                       ProxyService::CreateDirect());
683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  scoped_refptr<HttpNetworkSession>
703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      session(SpdySessionDependencies::SpdyCreateSession(&session_deps));
713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  HttpStreamFactoryImpl* factory =
723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      static_cast<HttpStreamFactoryImpl*>(session->http_stream_factory());
733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  DoNothingRequestDelegate request_delegate;
753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  HttpStreamFactoryImpl::Request request(
763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GURL(), factory, &request_delegate, NULL, BoundNetLog());
773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  HttpStreamFactoryImpl::Job* job =
793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      new HttpStreamFactoryImpl::Job(factory,
803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                     session,
813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                     HttpRequestInfo(),
823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                     DEFAULT_PRIORITY,
833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                     SSLConfig(),
843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                     SSLConfig(),
853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                     NULL);
863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  request.AttachJob(job);
873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(DEFAULT_PRIORITY, job->priority());
883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  request.SetPriority(MEDIUM);
903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(MEDIUM, job->priority());
913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Make |job| the bound job.
933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  request.OnStreamFailed(job, ERR_FAILED, SSLConfig());
943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  request.SetPriority(IDLE);
963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(IDLE, job->priority());
973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}  // namespace net
100