blob: ec8c6cf103711376aaea15065a0f134342bcc032 [file] [log] [blame]
// Copyright 2020 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 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;
bool operator==(const PermissionUsageSession& other) const;
bool operator!=(const PermissionUsageSession& other) const;
// 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_