blob: 93ef9e966f79411d7dc8d4321eeec5bae57b8fce [file] [log] [blame]
// Copyright 2022 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_BROWSER_ORIGIN_TRIALS_CONTROLLER_DELEGATE_H_
#define CONTENT_PUBLIC_BROWSER_ORIGIN_TRIALS_CONTROLLER_DELEGATE_H_
#include <string>
#include "base/containers/flat_set.h"
#include "base/strings/string_piece.h"
#include "base/time/time.h"
#include "content/common/content_export.h"
#include "url/origin.h"
namespace content {
// The |OriginTrialsControllerDelegate| interface exposes the functionality
// of the origin_trials component to the browser process.
//
// Use this class to check if a given persistent origin trial has been enabled
// for the current profile.
//
// See |components/origin_trials/README.md| for more information.
// TODO(https://crbug.com/1410180): Switch |partition_origin| to use Cookie
// partitioning. This interface uses the last committed origin from the
// outermost frame or document as partitioning as an interim measure to get a
// stable partitioning key until cookie partitioning is fully rolled out.
class CONTENT_EXPORT OriginTrialsControllerDelegate {
public:
virtual ~OriginTrialsControllerDelegate() = default;
// Persist all enabled and persistable tokens in the |header_tokens|.
//
// Token persistence is partitioned based on |partition_origin|, meaning that
// the storage keeps track of which |partition_origin|s have been seen when
// persisting tokens for a given trial and origin.
//
// Subsequent calls to this method will update the registration of a token
// for an origin. Passing an empty |header_tokens| will effectively clear the
// persistence of tokens for the |origin| and |partition_origin|.
// TODO(https://crbug.com/1410180): Switch |partition_origin| to use Cookie
// partitioning.
virtual void PersistTrialsFromTokens(
const url::Origin& origin,
const url::Origin& partition_origin,
const base::span<const std::string> header_tokens,
const base::Time current_time) = 0;
// Appends all enabled and persistable |tokens| to the set of already enabled
// trials for |origin|. By passing |script_origins|, this method can be used
// to append third-party origin trials as well. If a token in |tokens| is a
// third-party origin trial token, and the corresponding origin is present in
// |script_tokens|, then the trial will be enabled for the origin stored in
// the token itself, rather than any origin found in |script_origins|. This
// limitation means that subdomain matching does not work for third-party
// origin trial tokens using this method.
virtual void PersistAdditionalTrialsFromTokens(
const url::Origin& origin,
const url::Origin& partition_origin,
base::span<const url::Origin> script_origins,
const base::span<const std::string> tokens,
const base::Time current_time) = 0;
// Returns |true| if |trial_name| has been persisted for |origin|,
// partitioned by |partition_origin| and is still valid. This method should
// be used by origin trial owners to check if the feature under trial should
// be enabled.
// TODO(https://crbug.com/1410180): Switch |partition_origin| to use Cookie
// partitioning.
virtual bool IsTrialPersistedForOrigin(const url::Origin& origin,
const url::Origin& partition_origin,
const base::StringPiece trial_name,
const base::Time current_time) = 0;
// Return the list of persistent origin trials that have been saved for
// |origin|, partitioned by |partition_origin|, and haven't expired given the
// |current_time| parameter.
// TODO(https://crbug.com/1410180): Switch |partition_origin| to use Cookie
// partitioning.
virtual base::flat_set<std::string> GetPersistedTrialsForOrigin(
const url::Origin& origin,
const url::Origin& partition_origin,
base::Time current_time) = 0;
// Remove all persisted tokens. Used to clear browsing data.
virtual void ClearPersistedTokens() = 0;
};
} // namespace content
#endif // CONTENT_PUBLIC_BROWSER_ORIGIN_TRIALS_CONTROLLER_DELEGATE_H_