// Copyright (c) 2011 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.

#ifndef CHROME_BROWSER_RENDERER_HOST_CHROME_URL_REQUEST_USER_DATA_H_
#define CHROME_BROWSER_RENDERER_HOST_CHROME_URL_REQUEST_USER_DATA_H_

#include "base/supports_user_data.h"

namespace net {
class URLRequest;
}

class ChromeURLRequestUserData : public base::SupportsUserData::Data {
 public:
  bool is_prerender() const { return is_prerender_; }
  void set_is_prerender(bool is_prerender) { is_prerender_ = is_prerender; }

  // Creates a new ChromeURLRequestUserData instance and attaches it
  // to |request|. |request| must not have an existing ChromeURLRequestUserData
  // instance attached to it, and must be non-NULL. The returned instance
  // is owned by |request|.
  static ChromeURLRequestUserData* Create(net::URLRequest* request);

  // Delete the ChromeURLRequestUserData from a |request|. |request| must be
  // non-NULL.
  static void Delete(net::URLRequest* request);

  // Gets the ChromeURLRequestUserData instance attached to |request|, or
  // returns NULL if one is not attached. |request| must be non-NULL.
  static ChromeURLRequestUserData* Get(const net::URLRequest* request);

 private:
  ChromeURLRequestUserData();

  bool is_prerender_;

  DISALLOW_COPY_AND_ASSIGN(ChromeURLRequestUserData);
};

#endif  // CHROME_BROWSER_RENDERER_HOST_CHROME_URL_REQUEST_USER_DATA_H_
