blob: 7207df2fa52818dab4c6da7f0319f3c37b75565f [file] [log] [blame]
// Copyright 2015 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.
#include "net/url_request/url_request_status.h"
#include "base/logging.h"
#include "net/base/net_errors.h"
namespace net {
URLRequestStatus::URLRequestStatus(Status status, int error)
: status_(status), error_(error) {
// URLRequestStatus should get folded into error. However, it is possible to
// create URLRequestStatuses with inconsistent |status_| and |error_|
// fields. As callers are cleaned up, these assertions avoid regressing any
// invariants that have been established.
//
// https://crbug.com/490311
DCHECK_GE(0, error_);
switch (status_) {
case SUCCESS:
DCHECK_EQ(OK, error_);
break;
case IO_PENDING:
// TODO(davidben): Switch all IO_PENDING status to ERR_IO_PENDING.
DCHECK(error_ == 0 || error_ == ERR_IO_PENDING);
break;
case CANCELED:
case FAILED:
DCHECK_NE(OK, error_);
DCHECK_NE(ERR_IO_PENDING, error_);
break;
}
}
URLRequestStatus URLRequestStatus::FromError(int error) {
if (error == OK) {
return URLRequestStatus(SUCCESS, OK);
} else if (error == ERR_IO_PENDING) {
return URLRequestStatus(IO_PENDING, ERR_IO_PENDING);
} else if (error == ERR_ABORTED) {
return URLRequestStatus(CANCELED, ERR_ABORTED);
} else {
return URLRequestStatus(FAILED, error);
}
}
Error URLRequestStatus::ToNetError() const {
switch (status_) {
case SUCCESS:
return OK;
case IO_PENDING:
return ERR_IO_PENDING;
case CANCELED:
return ERR_ABORTED;
case FAILED:
return static_cast<Error>(error_);
}
NOTREACHED();
return ERR_FAILED;
}
} // namespace net