blob: 818250095ef94eab25439b6767f5ab2150f6ce25 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_FINGERPRINTING_PROTECTION_CANVAS_NOISE_TOKEN_DATA_H_
#define CONTENT_BROWSER_FINGERPRINTING_PROTECTION_CANVAS_NOISE_TOKEN_DATA_H_
#include <cstdint>
#include "base/rand_util.h"
#include "content/public/browser/browser_context.h"
#include "third_party/blink/public/common/fingerprinting_protection/noise_token.h"
#include "url/origin.h"
namespace content {
// TODO(https://crbug.com/442616874): Key CanvasNoiseTokens by (BrowserContext,
// StorageKey) instead of (BrowserContext, Origin).
// A user data class that generates and stores BrowserContext-associated noise
// tokens used for canvas noising.
class CONTENT_EXPORT CanvasNoiseTokenData
: public base::SupportsUserData::Data {
public:
CanvasNoiseTokenData() = default;
// Gets the 64 bit BrowserContext-associated noise token computed with the
// main frame's |origin|. If the origin is opaque, a random value will be
// used.
static blink::NoiseToken GetToken(BrowserContext* context,
const url::Origin& origin);
// Regenerates the noise token, returning the updated token value.
static blink::NoiseToken SetNewToken(BrowserContext* context);
private:
// Helper to generate the 64 bit BrowserContext-associated token, which will
// be different per BrowserContext.
static blink::NoiseToken GetBrowserToken(BrowserContext* context);
blink::NoiseToken session_token_{base::RandUint64()};
};
} // namespace content
#endif // CONTENT_BROWSER_FINGERPRINTING_PROTECTION_CANVAS_NOISE_TOKEN_DATA_H_