// Copyright (c) 2012 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 CONTENT_PUBLIC_COMMON_SECURITY_STYLE_H_
#define CONTENT_PUBLIC_COMMON_SECURITY_STYLE_H_

namespace content {

// Various aspects of the UI change their appearance according to the security
// context in which they are displayed.  For example, the location bar displays
// a lock icon when it is displayed during a valid SSL connection.
// SecuritySyle enumerates these styles, but it is up to the UI elements to
// adjust their display appropriately.
enum SecurityStyle {
  // SECURITY_STYLE_UNKNOWN indicates that we do not know the proper security
  // style for this object.
  SECURITY_STYLE_UNKNOWN,

  // SECURITY_STYLE_UNAUTHENTICATED means the authenticity of this object can
  // not be determined, either because it was retrieved using an unauthenticated
  // protocol, such as HTTP or FTP, or it was retrieved using a protocol that
  // supports authentication, such as HTTPS, but there were errors during
  // transmission that render us uncertain to the object's authenticity.
  SECURITY_STYLE_UNAUTHENTICATED,

  // SECURITY_STYLE_AUTHENTICATION_BROKEN indicates that we tried to retrieve
  // this object in an authenticated manner but were unable to do so.
  SECURITY_STYLE_AUTHENTICATION_BROKEN,

  // SECURITY_STYLE_AUTHENTICATED indicates that we successfully retrieved this
  // object over an authenticated protocol, such as HTTPS.
  SECURITY_STYLE_AUTHENTICATED,
};

}  // namespace content

#endif  // CONTENT_PUBLIC_COMMON_SECURITY_STYLE_H_
