13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This file's dependencies should be kept to a minimum so that it can be
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// included in WebKit code that doesn't rely on much of common.
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_URL_REQUEST_URL_REQUEST_STATUS_H_
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_URL_REQUEST_URL_REQUEST_STATUS_H_
103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
123f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsennamespace net {
133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Represents the result of a URL request. It encodes errors and various
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// types of success.
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass URLRequestStatus {
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public:
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  enum Status {
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // Request succeeded, os_error() will be 0.
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    SUCCESS = 0,
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // An IO request is pending, and the caller will be informed when it is
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // completed.
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    IO_PENDING,
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // Request was successful but was handled by an external program, so there
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // is no response data. This usually means the current page should not be
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // navigated, but no error should be displayed. os_error will be 0.
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    HANDLED_EXTERNALLY,
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // Request was cancelled programatically.
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    CANCELED,
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // The request failed for some reason. os_error may have more information.
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    FAILED,
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  };
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  URLRequestStatus() : status_(SUCCESS), os_error_(0) {}
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  URLRequestStatus(Status s, int e) : status_(s), os_error_(e) {}
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  Status status() const { return status_; }
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  void set_status(Status s) { status_ = s; }
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  int os_error() const { return os_error_; }
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  void set_os_error(int e) { os_error_ = e; }
46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Returns true if the status is success, which makes some calling code more
48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // convenient because this is the most common test. Note that we do NOT treat
49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // HANDLED_EXTERNALLY as success. For everything except user notifications,
50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // this value should be handled like an error (processing should stop).
51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  bool is_success() const {
52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    return status_ == SUCCESS || status_ == IO_PENDING;
53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Returns true if the request is waiting for IO.
56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  bool is_io_pending() const {
57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    return status_ == IO_PENDING;
58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private:
61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Application level status
62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  Status status_;
63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Error code from the operating system network layer if an error was
65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // encountered
66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  int os_error_;
67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott};
68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
693f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}  // namespace net
703f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif  // NET_URL_REQUEST_URL_REQUEST_STATUS_H_
72