blob: 999c0bb59b480739a7cf8cd0822f10afa2b1eea8 [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 "third_party/blink/public/common/origin_trials/origin_trial_feature.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 `feature` has been persistently enabled 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 IsFeaturePersistedForOrigin(const url::Origin& origin,
const url::Origin& partition_origin,
blink::OriginTrialFeature feature,
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_