// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_PERMISSIONS_PERMISSION_USAGE_SESSION_H_
#define COMPONENTS_PERMISSIONS_PERMISSION_USAGE_SESSION_H_

#include "base/time/time.h"
#include "components/content_settings/core/common/content_settings_types.h"
#include "url/origin.h"

namespace permissions {

// Stores information about a permission usage session, which is a continuous
// time interval during which some permission was used by some site. For
// instance, a usage session could be a time interval during which a site
// accessed the camera. {type, origin, usage_start} forms the primary of a
// session.
struct PermissionUsageSession {
  //  The `origin` accessing the capability. Must not be opaque.
  url::Origin origin;

  ContentSettingsType type;

  // The time interval in which the capability was accessed, such that
  // `usage_start` <= `usage_end`, and neither is null.
  base::Time usage_start;
  base::Time usage_end;

  // Specifies if the permission usage started with the browsing context having
  // transient user activation.
  bool had_user_activation;

  // Specifies if the permission usage started in the foreground.
  bool was_foreground;

  // Specifies if the requesting frame had focus at the time the permission.
  // usage started.
  bool had_focus;

  friend bool operator==(const PermissionUsageSession&,
                         const PermissionUsageSession&) = default;

  // Checks if the session satisfies the following constraints:
  // 1) `origin` is not opaque;
  // 2) `usage_start` and `usage_end` are not null;
  // 3) `usage_start` <= `usage_end`.
  bool IsValid() const;
};

}  // namespace permissions

#endif  // COMPONENTS_PERMISSIONS_PERMISSION_USAGE_SESSION_H_
