1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103

content / browser / interest_group / interest_group_update.h [blame]

// Copyright 2022 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_INTEREST_GROUP_INTEREST_GROUP_UPDATE_H_
#define CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_UPDATE_H_

#include <stdint.h>

#include <cstddef>
#include <optional>
#include <string>
#include <vector>

#include "base/containers/flat_map.h"
#include "content/common/content_export.h"
#include "third_party/blink/public/common/interest_group/interest_group.h"
#include "url/gurl.h"
#include "url/origin.h"

namespace content {

// InterestGroupUpdate represents the results of parsing a JSON update for a
// stored blink::InterestGroup file. It contains all updatable fields of a
// InterestGroup - that is, everything but `name`, `origin`, and `expiry`.
// All fields are optional, even ones that are mandatory in an InterestGroup,
// since the value of the original InterestGroup will be
// used when they're not present in an InterestGroupUpdate.
struct CONTENT_EXPORT InterestGroupUpdate {
  InterestGroupUpdate();
  InterestGroupUpdate(const InterestGroupUpdate&);
  InterestGroupUpdate(InterestGroupUpdate&&);
  ~InterestGroupUpdate();

  std::optional<double> priority;
  std::optional<bool> enable_bidding_signals_prioritization;
  std::optional<base::flat_map<std::string, double>> priority_vector;
  // Unlike other fields, this is merged with the previous value, so can keep
  // old overrides around. Keys mapped to nullopt are deleted.
  std::optional<base::flat_map<std::string, std::optional<double>>>
      priority_signals_overrides;
  std::optional<base::flat_map<url::Origin, blink::SellerCapabilitiesType>>
      seller_capabilities;
  std::optional<blink::SellerCapabilitiesType> all_sellers_capabilities;
  std::optional<blink::InterestGroup::ExecutionMode> execution_mode;
  std::optional<GURL> bidding_url;
  std::optional<GURL> bidding_wasm_helper_url;
  std::optional<GURL> daily_update_url;
  std::optional<GURL> trusted_bidding_signals_url;
  std::optional<std::vector<std::string>> trusted_bidding_signals_keys;
  std::optional<blink::InterestGroup::TrustedBiddingSignalsSlotSizeMode>
      trusted_bidding_signals_slot_size_mode;
  std::optional<int32_t> max_trusted_bidding_signals_url_length;
  // The trusted_bidding_signals_coordinator field in the interest group
  // configuration is optional and indicates whether the interest group is using
  // Key-Value v1 or v2. In this update, it has the capability to be cleared
  // when the value is `null` in JSON, allowing for a downgrade from KVv2 to
  // KVv1.
  std::optional<std::optional<url::Origin>> trusted_bidding_signals_coordinator;
  std::optional<std::string> user_bidding_signals;
  std::optional<std::vector<blink::InterestGroup::Ad>> ads, ad_components;
  std::optional<base::flat_map<std::string, blink::AdSize>> ad_sizes;
  std::optional<base::flat_map<std::string, std::vector<std::string>>>
      size_groups;
  std::optional<blink::AuctionServerRequestFlags> auction_server_request_flags;
  std::optional<url::Origin> aggregation_coordinator_origin;
};

// InitialInterestGroupUpdateInfo contains required fields when the update
// process is initialized, which includes interest_group_key for
// KAnonymity update, update_url for generating update request and
// joining_origin for grouped isolation info.
struct CONTENT_EXPORT InterestGroupUpdateParameter {
  InterestGroupUpdateParameter();
  InterestGroupUpdateParameter(blink::InterestGroupKey k,
                               GURL u,
                               url::Origin o);
  ~InterestGroupUpdateParameter();

  blink::InterestGroupKey interest_group_key;
  GURL update_url;
  url::Origin joining_origin;
};

struct CONTENT_EXPORT InterestGroupKanonUpdateParameter {
  explicit InterestGroupKanonUpdateParameter(base::Time update_time);
  InterestGroupKanonUpdateParameter(const InterestGroupKanonUpdateParameter&) =
      delete;
  InterestGroupKanonUpdateParameter(InterestGroupKanonUpdateParameter&& other);
  ~InterestGroupKanonUpdateParameter();

  base::Time update_time;
  // All an interest group's keys, including those that are not k-anonymous or
  // have never been joined.
  std::vector<std::string> hashed_keys;
  // Which keys have been newly added in the join or update that triggered this
  // k-anon update.
  std::vector<std::string> newly_added_hashed_keys;
};

}  // namespace content

#endif  // CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_UPDATE_H_