Clone of chromium aad1ce808763f59c7a3753e08f1500a104ecc6fd refs/remotes/origin/HEAD
diff --git a/net/test/url_request/url_request_failed_job.h b/net/test/url_request/url_request_failed_job.h
new file mode 100644
index 0000000..6d3cf2d
--- /dev/null
+++ b/net/test/url_request/url_request_failed_job.h
@@ -0,0 +1,64 @@
+// 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 <string>
+
+#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);
+
+ virtual 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:
+ virtual ~URLRequestFailedJob();
+
+ private:
+ static URLRequestJob* Factory(URLRequest* request,
+ NetworkDelegate* network_delegate,
+ const std::string& scheme);
+
+ // Simulate a failure.
+ void StartAsync();
+
+ const int net_error_;
+
+ base::WeakPtrFactory<URLRequestFailedJob> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(URLRequestFailedJob);
+};
+
+} // namespace net
+
+#endif // NET_TEST_URL_REQUEST_URL_REQUEST_FAILED_JOB_H_