| // 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 |