1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/net/url_request_failed_dns_job.h"
6
7#include "base/compiler_specific.h"
8#include "base/message_loop.h"
9#include "googleurl/src/gurl.h"
10#include "net/base/net_errors.h"
11#include "net/url_request/url_request.h"
12#include "net/url_request/url_request_filter.h"
13
14const char URLRequestFailedDnsJob::kTestUrl[] =
15    "http://url.handled.by.fake.dns/";
16
17URLRequestFailedDnsJob::URLRequestFailedDnsJob(net::URLRequest* request)
18    : net::URLRequestJob(request),
19      ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {}
20
21URLRequestFailedDnsJob::~URLRequestFailedDnsJob() {}
22
23void URLRequestFailedDnsJob::Start() {
24  MessageLoop::current()->PostTask(
25      FROM_HERE,
26      method_factory_.NewRunnableMethod(
27          &URLRequestFailedDnsJob::StartAsync));
28}
29
30// static
31void URLRequestFailedDnsJob::AddUrlHandler() {
32  net::URLRequestFilter* filter = net::URLRequestFilter::GetInstance();
33  filter->AddUrlHandler(GURL(kTestUrl),
34                        &URLRequestFailedDnsJob::Factory);
35}
36
37/*static */
38net::URLRequestJob* URLRequestFailedDnsJob::Factory(net::URLRequest* request,
39    const std::string& scheme) {
40  return new URLRequestFailedDnsJob(request);
41}
42
43void URLRequestFailedDnsJob::StartAsync() {
44  NotifyStartError(net::URLRequestStatus(net::URLRequestStatus::FAILED,
45                                    net::ERR_NAME_NOT_RESOLVED));
46}
47