url_request_job_factory_impl_unittest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_job_factory_impl.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_job.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_test_util.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockURLRequestJob : public URLRequestJob {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockURLRequestJob(URLRequest* request,
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    NetworkDelegate* network_delegate,
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const URLRequestStatus& status)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : URLRequestJob(request, network_delegate),
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        status_(status),
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Start() OVERRIDE {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Start reading asynchronously so that all error reporting and data
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // callbacks happen as they would for network requests.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MessageLoop::current()->PostTask(
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        FROM_HERE,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&MockURLRequestJob::StartAsync,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   weak_factory_.GetWeakPtr()));
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~MockURLRequestJob() {}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void StartAsync() {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetStatus(status_);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NotifyHeadersComplete();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestStatus status_;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WeakPtrFactory<MockURLRequestJob> weak_factory_;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DummyProtocolHandler : public URLRequestJobFactory::ProtocolHandler {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual URLRequestJob* MaybeCreateJob(
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      URLRequest* request, NetworkDelegate* network_delegate) const OVERRIDE {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return new MockURLRequestJob(
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        request,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        network_delegate,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        URLRequestStatus(URLRequestStatus::SUCCESS, OK));
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DummyInterceptor : public URLRequestJobFactory::Interceptor {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DummyInterceptor()
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : did_intercept_(false),
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        handle_all_protocols_(false) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual URLRequestJob* MaybeIntercept(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      URLRequest* request, NetworkDelegate* network_delegate) const OVERRIDE {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    did_intercept_ = true;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return new MockURLRequestJob(
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        request,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        network_delegate,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        URLRequestStatus(URLRequestStatus::FAILED, ERR_FAILED));
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual URLRequestJob* MaybeInterceptRedirect(
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL&                       /* location */,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      URLRequest*                       /* request */,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NetworkDelegate* network_delegate /* network delegate */) const OVERRIDE {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual URLRequestJob* MaybeInterceptResponse(
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      URLRequest*                       /* request */,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NetworkDelegate* network_delegate /* network delegate */) const OVERRIDE {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool WillHandleProtocol(
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string& /* protocol */) const OVERRIDE {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return handle_all_protocols_;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable bool did_intercept_;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable bool handle_all_protocols_;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLRequestJobFactoryTest, NoProtocolHandler) {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDelegate delegate;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequestContext request_context;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequest request(GURL("foo://bar"), &delegate, &request_context);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request.Start();
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MessageLoop::current()->Run();
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(URLRequestStatus::FAILED, request.status().status());
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ERR_UNKNOWN_URL_SCHEME, request.status().error());
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLRequestJobFactoryTest, BasicProtocolHandler) {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDelegate delegate;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestJobFactoryImpl job_factory;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequestContext request_context;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request_context.set_job_factory(&job_factory);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  job_factory.SetProtocolHandler("foo", new DummyProtocolHandler);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequest request(GURL("foo://bar"), &delegate, &request_context);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request.Start();
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MessageLoop::current()->Run();
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(URLRequestStatus::SUCCESS, request.status().status());
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(OK, request.status().error());
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLRequestJobFactoryTest, DeleteProtocolHandler) {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestJobFactoryImpl job_factory;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequestContext request_context;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request_context.set_job_factory(&job_factory);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  job_factory.SetProtocolHandler("foo", new DummyProtocolHandler);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  job_factory.SetProtocolHandler("foo", NULL);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLRequestJobFactoryTest, BasicInterceptor) {
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDelegate delegate;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestJobFactoryImpl job_factory;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequestContext request_context;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request_context.set_job_factory(&job_factory);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  job_factory.AddInterceptor(new DummyInterceptor);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequest request(GURL("http://bar"), &delegate, &request_context);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request.Start();
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MessageLoop::current()->Run();
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(URLRequestStatus::FAILED, request.status().status());
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ERR_FAILED, request.status().error());
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLRequestJobFactoryTest, InterceptorNeedsValidSchemeStill) {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDelegate delegate;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestJobFactoryImpl job_factory;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequestContext request_context;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request_context.set_job_factory(&job_factory);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  job_factory.AddInterceptor(new DummyInterceptor);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequest request(GURL("foo://bar"), &delegate, &request_context);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request.Start();
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MessageLoop::current()->Run();
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(URLRequestStatus::FAILED, request.status().status());
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ERR_UNKNOWN_URL_SCHEME, request.status().error());
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLRequestJobFactoryTest, InterceptorOverridesProtocolHandler) {
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDelegate delegate;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestJobFactoryImpl job_factory;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequestContext request_context;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request_context.set_job_factory(&job_factory);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  job_factory.SetProtocolHandler("foo", new DummyProtocolHandler);
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  job_factory.AddInterceptor(new DummyInterceptor);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequest request(GURL("foo://bar"), &delegate, &request_context);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request.Start();
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MessageLoop::current()->Run();
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(URLRequestStatus::FAILED, request.status().status());
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ERR_FAILED, request.status().error());
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLRequestJobFactoryTest, InterceptorDoesntInterceptUnknownProtocols) {
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDelegate delegate;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestJobFactoryImpl job_factory;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequestContext request_context;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request_context.set_job_factory(&job_factory);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DummyInterceptor* interceptor = new DummyInterceptor;
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  job_factory.AddInterceptor(interceptor);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequest request(GURL("foo://bar"), &delegate, &request_context);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request.Start();
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MessageLoop::current()->Run();
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(interceptor->did_intercept_);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLRequestJobFactoryTest, InterceptorInterceptsHandledUnknownProtocols) {
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDelegate delegate;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestJobFactoryImpl job_factory;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequestContext request_context;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request_context.set_job_factory(&job_factory);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DummyInterceptor* interceptor = new DummyInterceptor;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  interceptor->handle_all_protocols_ = true;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  job_factory.AddInterceptor(interceptor);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequest request(GURL("foo://bar"), &delegate, &request_context);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request.Start();
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MessageLoop::current()->Run();
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(interceptor->did_intercept_);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(URLRequestStatus::FAILED, request.status().status());
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ERR_FAILED, request.status().error());
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLRequestJobFactoryTest, InterceptorAffectsIsHandledProtocol) {
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DummyInterceptor* interceptor = new DummyInterceptor;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestJobFactoryImpl job_factory;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  job_factory.AddInterceptor(interceptor);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(interceptor->WillHandleProtocol("anything"));
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(job_factory.IsHandledProtocol("anything"));
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  interceptor->handle_all_protocols_ = true;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(interceptor->WillHandleProtocol("anything"));
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(job_factory.IsHandledProtocol("anything"));
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
219