1// Copyright (c) 2012 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 "net/url_request/ftp_protocol_handler.h"
6
7#include "base/logging.h"
8#include "net/base/net_errors.h"
9#include "net/base/net_util.h"
10#include "net/ftp/ftp_auth_cache.h"
11#include "net/url_request/url_request.h"
12#include "net/url_request/url_request_error_job.h"
13#include "net/url_request/url_request_ftp_job.h"
14#include "url/gurl.h"
15
16namespace net {
17
18FtpProtocolHandler::FtpProtocolHandler(
19    FtpTransactionFactory* ftp_transaction_factory)
20    : ftp_transaction_factory_(ftp_transaction_factory),
21      ftp_auth_cache_(new FtpAuthCache) {
22  DCHECK(ftp_transaction_factory_);
23}
24
25FtpProtocolHandler::~FtpProtocolHandler() {
26}
27
28URLRequestJob* FtpProtocolHandler::MaybeCreateJob(
29    URLRequest* request, NetworkDelegate* network_delegate) const {
30  int port = request->url().IntPort();
31  if (request->url().has_port() &&
32      !IsPortAllowedByFtp(port) && !IsPortAllowedByOverride(port)) {
33    return new URLRequestErrorJob(request, network_delegate, ERR_UNSAFE_PORT);
34  }
35
36  return new URLRequestFtpJob(request,
37                              network_delegate,
38                              ftp_transaction_factory_,
39                              ftp_auth_cache_.get());
40}
41
42}  // namespace net
43