| // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "net/http/http_stream_request.h" | 
 |  | 
 | #include <utility> | 
 |  | 
 | #include "base/run_loop.h" | 
 | #include "base/test/scoped_task_environment.h" | 
 | #include "net/http/http_stream_factory.h" | 
 | #include "net/http/http_stream_factory_job.h" | 
 | #include "net/http/http_stream_factory_job_controller.h" | 
 | #include "net/http/http_stream_factory_test_util.h" | 
 | #include "net/proxy_resolution/proxy_resolution_service.h" | 
 | #include "net/spdy/spdy_test_util_common.h" | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | using testing::_; | 
 |  | 
 | namespace net { | 
 |  | 
 | // Make sure that Request passes on its priority updates to its jobs. | 
 | TEST(HttpStreamRequestTest, SetPriority) { | 
 |   base::test::ScopedTaskEnvironment scoped_task_environment; | 
 |  | 
 |   SequencedSocketData data; | 
 |   data.set_connect_data(MockConnect(ASYNC, OK)); | 
 |   auto ssl_data = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); | 
 |   SpdySessionDependencies session_deps(ProxyResolutionService::CreateDirect()); | 
 |   session_deps.socket_factory->AddSocketDataProvider(&data); | 
 |   session_deps.socket_factory->AddSSLSocketDataProvider(ssl_data.get()); | 
 |  | 
 |   std::unique_ptr<HttpNetworkSession> session = | 
 |       SpdySessionDependencies::SpdyCreateSession(&session_deps); | 
 |   HttpStreamFactory* factory = session->http_stream_factory(); | 
 |   MockHttpStreamRequestDelegate request_delegate; | 
 |   TestJobFactory job_factory; | 
 |   HttpRequestInfo request_info; | 
 |   request_info.url = GURL("http://www.example.com/"); | 
 |   auto job_controller = std::make_unique<HttpStreamFactory::JobController>( | 
 |       factory, &request_delegate, session.get(), &job_factory, request_info, | 
 |       /* is_preconnect = */ false, | 
 |       /* is_websocket = */ false, | 
 |       /* enable_ip_based_pooling = */ true, | 
 |       /* enable_alternative_services = */ true, SSLConfig(), SSLConfig()); | 
 |   HttpStreamFactory::JobController* job_controller_raw_ptr = | 
 |       job_controller.get(); | 
 |   factory->job_controller_set_.insert(std::move(job_controller)); | 
 |  | 
 |   std::unique_ptr<HttpStreamRequest> request(job_controller_raw_ptr->Start( | 
 |       &request_delegate, nullptr, NetLogWithSource(), | 
 |       HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); | 
 |   EXPECT_TRUE(job_controller_raw_ptr->main_job()); | 
 |   EXPECT_EQ(DEFAULT_PRIORITY, job_controller_raw_ptr->main_job()->priority()); | 
 |  | 
 |   request->SetPriority(MEDIUM); | 
 |   EXPECT_EQ(MEDIUM, job_controller_raw_ptr->main_job()->priority()); | 
 |  | 
 |   EXPECT_CALL(request_delegate, OnStreamFailed(_, _, _)).Times(1); | 
 |   job_controller_raw_ptr->OnStreamFailed(job_factory.main_job(), ERR_FAILED, | 
 |                                          SSLConfig()); | 
 |  | 
 |   request->SetPriority(IDLE); | 
 |   EXPECT_EQ(IDLE, job_controller_raw_ptr->main_job()->priority()); | 
 |   EXPECT_TRUE(data.AllReadDataConsumed()); | 
 |   EXPECT_TRUE(data.AllWriteDataConsumed()); | 
 | } | 
 | }  // namespace net |