blob: 1adbb8a6de5652c369e7a3b4ebb3dedd65787049 [file] [log] [blame]
[email protected]b9cf48b72012-07-11 15:45:591// 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
Hans Wennborg0924470b2020-04-27 21:08:057#include "base/check_op.h"
mmenkecd4c7532016-10-19 18:36:058#include "base/memory/ptr_util.h"
[email protected]e841d0622012-07-30 04:16:389#include "net/base/net_errors.h"
eroman9ab64842015-07-21 05:07:5210#include "net/base/port_util.h"
[email protected]e0f35c92013-05-08 16:04:3411#include "net/ftp/ftp_auth_cache.h"
mmenkecd4c7532016-10-19 18:36:0512#include "net/ftp/ftp_network_layer.h"
[email protected]e841d0622012-07-30 04:16:3813#include "net/url_request/url_request.h"
14#include "net/url_request/url_request_error_job.h"
[email protected]b9cf48b72012-07-11 15:45:5915#include "net/url_request/url_request_ftp_job.h"
[email protected]f89276a72013-07-12 06:41:5416#include "url/gurl.h"
[email protected]b9cf48b72012-07-11 15:45:5917
18namespace net {
19
mmenkecd4c7532016-10-19 18:36:0520std::unique_ptr<FtpProtocolHandler> FtpProtocolHandler::Create(
Emily Stark01227982019-06-06 18:45:5621 HostResolver* host_resolver,
22 FtpAuthCache* auth_cache) {
23 DCHECK(auth_cache);
mmenkecd4c7532016-10-19 18:36:0524 return base::WrapUnique(new FtpProtocolHandler(
Emily Stark01227982019-06-06 18:45:5625 base::WrapUnique(new FtpNetworkLayer(host_resolver)), auth_cache));
mmenkecd4c7532016-10-19 18:36:0526}
27
28std::unique_ptr<FtpProtocolHandler> FtpProtocolHandler::CreateForTesting(
Emily Stark01227982019-06-06 18:45:5629 std::unique_ptr<FtpTransactionFactory> ftp_transaction_factory,
30 FtpAuthCache* auth_cache) {
mmenkecd4c7532016-10-19 18:36:0531 return base::WrapUnique(
Emily Stark01227982019-06-06 18:45:5632 new FtpProtocolHandler(std::move(ftp_transaction_factory), auth_cache));
[email protected]e0f35c92013-05-08 16:04:3433}
34
Chris Watkins7a41d3552017-12-01 02:13:2735FtpProtocolHandler::~FtpProtocolHandler() = default;
[email protected]b9cf48b72012-07-11 15:45:5936
37URLRequestJob* FtpProtocolHandler::MaybeCreateJob(
[email protected]9f170462012-08-24 01:06:5838 URLRequest* request, NetworkDelegate* network_delegate) const {
mmenke48154842015-06-08 18:50:4439 DCHECK_EQ("ftp", request->url().scheme());
40
41 if (!IsPortAllowedForScheme(request->url().EffectiveIntPort(),
Daniel Chenge10c0ea2019-04-05 17:19:3842 request->url().scheme_piece())) {
[email protected]9f170462012-08-24 01:06:5843 return new URLRequestErrorJob(request, network_delegate, ERR_UNSAFE_PORT);
[email protected]e841d0622012-07-30 04:16:3844 }
45
mmenkecd4c7532016-10-19 18:36:0546 return new URLRequestFtpJob(request, network_delegate,
Emily Stark01227982019-06-06 18:45:5647 ftp_transaction_factory_.get(), ftp_auth_cache_);
[email protected]b9cf48b72012-07-11 15:45:5948}
49
mmenkecd4c7532016-10-19 18:36:0550FtpProtocolHandler::FtpProtocolHandler(
Emily Stark01227982019-06-06 18:45:5651 std::unique_ptr<FtpTransactionFactory> ftp_transaction_factory,
52 FtpAuthCache* auth_cache)
mmenkecd4c7532016-10-19 18:36:0553 : ftp_transaction_factory_(std::move(ftp_transaction_factory)),
Emily Stark01227982019-06-06 18:45:5654 ftp_auth_cache_(auth_cache) {
mmenkecd4c7532016-10-19 18:36:0555 DCHECK(ftp_transaction_factory_);
56}
57
[email protected]b9cf48b72012-07-11 15:45:5958} // namespace net