// Copyright (c) 2012 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. #ifndef NET_TEST_URL_REQUEST_URL_REQUEST_FAILED_JOB_H_ #define NET_TEST_URL_REQUEST_URL_REQUEST_FAILED_JOB_H_ #include #include "base/compiler_specific.h" #include "base/memory/weak_ptr.h" #include "net/url_request/url_request_job.h" #include "url/gurl.h" namespace net { // This class simulates a URLRequestJob failing with a given error code while // trying to connect. class URLRequestFailedJob : public URLRequestJob { public: URLRequestFailedJob(URLRequest* request, NetworkDelegate* network_delegate, int net_error); void Start() override; // Adds the testing URLs to the URLRequestFilter. static void AddUrlHandler(); static void AddUrlHandlerForHostname(const std::string& hostname); // Given a net error code, constructs a mock URL that will return that error // asynchronously when started. |net_error| must be a valid net error code // other than net::OK and net::ERR_IO_PENDING. static GURL GetMockHttpUrl(int net_error); static GURL GetMockHttpsUrl(int net_error); // URLRequestFailedJob must be added as a handler for |hostname| for // the returned URL to return |net_error|. static GURL GetMockHttpUrlForHostname(int net_error, const std::string& hostname); static GURL GetMockHttpsUrlForHostname(int net_error, const std::string& hostname); protected: ~URLRequestFailedJob() override; private: static URLRequestJob* Factory(URLRequest* request, NetworkDelegate* network_delegate, const std::string& scheme); // Simulate a failure. void StartAsync(); const int net_error_; base::WeakPtrFactory weak_factory_; DISALLOW_COPY_AND_ASSIGN(URLRequestFailedJob); }; } // namespace net #endif // NET_TEST_URL_REQUEST_URL_REQUEST_FAILED_JOB_H_