| Index: net/http/http_network_transaction_unittest.cc
|
| diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
|
| index 5f8dac2f87db6b6f3c1121fb3c5a6b00f5747882..e59333e04aa99e7c38e2bf53b074e3cfe1c396b6 100644
|
| --- a/net/http/http_network_transaction_unittest.cc
|
| +++ b/net/http/http_network_transaction_unittest.cc
|
| @@ -15,6 +15,7 @@
|
| #include "base/files/file_path.h"
|
| #include "base/json/json_writer.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/weak_ptr.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "base/test/test_file_util.h"
|
| @@ -11680,4 +11681,161 @@ TEST_P(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) {
|
| EXPECT_EQ("bar", foo);
|
| }
|
|
|
| +namespace {
|
| +
|
| +// Fake HttpStreamRequest that simply records calls to SetPriority().
|
| +class FakeStreamRequest : public HttpStreamRequest,
|
| + public base::SupportsWeakPtr<FakeStreamRequest> {
|
| + public:
|
| + explicit FakeStreamRequest(RequestPriority priority) : priority_(priority) {}
|
| + virtual ~FakeStreamRequest() {}
|
| +
|
| + RequestPriority priority() const { return priority_; }
|
| +
|
| + virtual int RestartTunnelWithProxyAuth(
|
| + const AuthCredentials& credentials) OVERRIDE {
|
| + ADD_FAILURE();
|
| + return ERR_UNEXPECTED;
|
| + }
|
| +
|
| + virtual LoadState GetLoadState() const OVERRIDE {
|
| + ADD_FAILURE();
|
| + return LoadState();
|
| + }
|
| +
|
| + virtual void SetPriority(RequestPriority priority) OVERRIDE {
|
| + priority_ = priority;
|
| + }
|
| +
|
| + virtual bool was_npn_negotiated() const OVERRIDE {
|
| + ADD_FAILURE();
|
| + return false;
|
| + }
|
| +
|
| + virtual NextProto protocol_negotiated() const OVERRIDE {
|
| + ADD_FAILURE();
|
| + return kProtoUnknown;
|
| + }
|
| +
|
| + virtual bool using_spdy() const OVERRIDE {
|
| + ADD_FAILURE();
|
| + return false;
|
| + }
|
| +
|
| + private:
|
| + RequestPriority priority_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(FakeStreamRequest);
|
| +};
|
| +
|
| +// Fake HttpStreamFactory that vends FakeStreamRequests.
|
| +class FakeStreamFactory : public HttpStreamFactory {
|
| + public:
|
| + FakeStreamFactory() {}
|
| + virtual ~FakeStreamFactory() {}
|
| +
|
| + // Returns a WeakPtr<> to the last HttpStreamRequest returned by
|
| + // RequestStream() (which may be NULL if it was destroyed already).
|
| + base::WeakPtr<FakeStreamRequest> last_stream_request() {
|
| + return last_stream_request_;
|
| + }
|
| +
|
| + virtual HttpStreamRequest* RequestStream(
|
| + const HttpRequestInfo& info,
|
| + RequestPriority priority,
|
| + const SSLConfig& server_ssl_config,
|
| + const SSLConfig& proxy_ssl_config,
|
| + HttpStreamRequest::Delegate* delegate,
|
| + const BoundNetLog& net_log) OVERRIDE {
|
| + FakeStreamRequest* fake_request = new FakeStreamRequest(priority);
|
| + last_stream_request_ = fake_request->AsWeakPtr();
|
| + return fake_request;
|
| + }
|
| +
|
| + virtual HttpStreamRequest* RequestWebSocketStream(
|
| + const HttpRequestInfo& info,
|
| + RequestPriority priority,
|
| + const SSLConfig& server_ssl_config,
|
| + const SSLConfig& proxy_ssl_config,
|
| + HttpStreamRequest::Delegate* delegate,
|
| + WebSocketStreamBase::Factory* factory,
|
| + const BoundNetLog& net_log) OVERRIDE {
|
| + ADD_FAILURE();
|
| + return NULL;
|
| + }
|
| +
|
| + virtual void PreconnectStreams(int num_streams,
|
| + const HttpRequestInfo& info,
|
| + RequestPriority priority,
|
| + const SSLConfig& server_ssl_config,
|
| + const SSLConfig& proxy_ssl_config) OVERRIDE {
|
| + ADD_FAILURE();
|
| + }
|
| +
|
| + virtual base::Value* PipelineInfoToValue() const OVERRIDE {
|
| + ADD_FAILURE();
|
| + return NULL;
|
| + }
|
| +
|
| + virtual const HostMappingRules* GetHostMappingRules() const OVERRIDE {
|
| + ADD_FAILURE();
|
| + return NULL;
|
| + }
|
| +
|
| + private:
|
| + base::WeakPtr<FakeStreamRequest> last_stream_request_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(FakeStreamFactory);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +// Make sure that HttpNetworkTransaction passes on its priority to its
|
| +// stream request on start.
|
| +TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriorityOnStart) {
|
| + scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
|
| + HttpNetworkSessionPeer peer(session);
|
| + FakeStreamFactory* fake_factory = new FakeStreamFactory();
|
| + peer.SetHttpStreamFactory(fake_factory);
|
| +
|
| + HttpNetworkTransaction trans(LOW, session);
|
| +
|
| + ASSERT_TRUE(fake_factory->last_stream_request() == NULL);
|
| +
|
| + HttpRequestInfo request;
|
| + TestCompletionCallback callback;
|
| + EXPECT_EQ(ERR_IO_PENDING,
|
| + trans.Start(&request, callback.callback(), BoundNetLog()));
|
| +
|
| + base::WeakPtr<FakeStreamRequest> fake_request =
|
| + fake_factory->last_stream_request();
|
| + ASSERT_TRUE(fake_request != NULL);
|
| + EXPECT_EQ(LOW, fake_request->priority());
|
| +}
|
| +
|
| +// Make sure that HttpNetworkTransaction passes on its priority
|
| +// updates to its stream request.
|
| +TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriority) {
|
| + scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
|
| + HttpNetworkSessionPeer peer(session);
|
| + FakeStreamFactory* fake_factory = new FakeStreamFactory();
|
| + peer.SetHttpStreamFactory(fake_factory);
|
| +
|
| + HttpNetworkTransaction trans(LOW, session);
|
| +
|
| + HttpRequestInfo request;
|
| + TestCompletionCallback callback;
|
| + EXPECT_EQ(ERR_IO_PENDING,
|
| + trans.Start(&request, callback.callback(), BoundNetLog()));
|
| +
|
| + base::WeakPtr<FakeStreamRequest> fake_request =
|
| + fake_factory->last_stream_request();
|
| + ASSERT_TRUE(fake_request != NULL);
|
| + EXPECT_EQ(LOW, fake_request->priority());
|
| +
|
| + trans.SetPriority(LOWEST);
|
| + ASSERT_TRUE(fake_request != NULL);
|
| + EXPECT_EQ(LOWEST, fake_request->priority());
|
| +}
|
| +
|
| } // namespace net
|
|
|