// 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_); } NOTREACHED(); return ERR_FAILED; } } // namespace net