[Protected Audience] Use vector<uint_8> for received compression groups.
This CL makes CompressionGroupResult store the compressed body of each compression group as a vector<uint8_t> rather than a string. This will be more efficient when receiving the body over Mojo, since we can just pass the IPC buffer around as a span, and save a copy. Bug: 333445540 Change-Id: Id97b8c63e18db19472d7e88b6ef9ca19a0cadf88 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5758763 Reviewed-by: Russ Hamilton <behamilton@google.com> Commit-Queue: mmenke <mmenke@chromium.org> Cr-Commit-Position: refs/heads/main@{#1337920}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
ea461aabf1
commit
eb2496bd74
content/services/auction_worklet
@ -170,13 +170,11 @@ ParseCompressionGroup(
|
||||
return base::unexpected(TrustedSignalsKVv2ResponseParser::ErrorInfo(
|
||||
"Compression group content is not type of Byte String."));
|
||||
}
|
||||
const cbor::Value::BinaryValue& content = content_value.GetBytestring();
|
||||
std::string content_string = std::string(content.begin(), content.end());
|
||||
|
||||
compression_group_id_out =
|
||||
static_cast<int>(compression_group_id_value.GetInteger());
|
||||
return CompressionGroupResult(compression_scheme, std::move(content_string),
|
||||
ttl);
|
||||
return CompressionGroupResult(compression_scheme,
|
||||
content_value.GetBytestring(), ttl);
|
||||
}
|
||||
|
||||
// Extract compression schema and cbor string from response body base on
|
||||
@ -620,7 +618,7 @@ CompressionGroupResult::CompressionGroupResult() = default;
|
||||
|
||||
CompressionGroupResult::CompressionGroupResult(
|
||||
auction_worklet::mojom::TrustedSignalsCompressionScheme scheme,
|
||||
std::string content,
|
||||
std::vector<uint8_t> content,
|
||||
base::TimeDelta ttl)
|
||||
: compression_scheme(scheme), content(std::move(content)), ttl(ttl) {}
|
||||
|
||||
|
@ -219,7 +219,7 @@ class CONTENT_EXPORT TrustedBiddingSignalsKVv2RequestHelperBuilder
|
||||
struct CONTENT_EXPORT CompressionGroupResult {
|
||||
CompressionGroupResult();
|
||||
CompressionGroupResult(mojom::TrustedSignalsCompressionScheme scheme,
|
||||
std::string content,
|
||||
std::vector<uint8_t> content,
|
||||
base::TimeDelta ttl);
|
||||
CompressionGroupResult(CompressionGroupResult&&);
|
||||
CompressionGroupResult& operator=(CompressionGroupResult&&);
|
||||
@ -230,7 +230,7 @@ struct CONTENT_EXPORT CompressionGroupResult {
|
||||
mojom::TrustedSignalsCompressionScheme compression_scheme;
|
||||
|
||||
// The compressed content string.
|
||||
std::string content;
|
||||
std::vector<uint8_t> content;
|
||||
|
||||
// Time until the response expires.
|
||||
base::TimeDelta ttl;
|
||||
|
@ -48,6 +48,16 @@ const char kTrustedSignalsUrl[] = "https://url.test/";
|
||||
const char kOriginFooUrl[] = "https://foo.test/";
|
||||
const char kOriginBarUrl[] = "https://bar.test/";
|
||||
|
||||
// GzipCompress() doesn't support writing to a vector, only a std::string. This
|
||||
// wrapper provides that capability, at the cost of an extra copy.
|
||||
std::vector<std::uint8_t> GzipCompressHelper(
|
||||
const std::vector<std::uint8_t>& in) {
|
||||
std::string compressed_string;
|
||||
EXPECT_TRUE(compression::GzipCompress(in, &compressed_string));
|
||||
return std::vector<std::uint8_t>(compressed_string.begin(),
|
||||
compressed_string.end());
|
||||
}
|
||||
|
||||
void ExpectCompressionGroupMapEquals(
|
||||
const TrustedSignalsKVv2ResponseParser::CompressionGroupResultMap& map1,
|
||||
const TrustedSignalsKVv2ResponseParser::CompressionGroupResultMap& map2) {
|
||||
@ -531,14 +541,9 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"223A317D7DA2647461677381646B657973696B657956616C756573A1646B657943A16576"
|
||||
"616C75656B2276616C7565466F724322";
|
||||
std::vector<uint8_t> compression_group0_bytes;
|
||||
std::string compression_group0_string;
|
||||
base::HexStringToBytes(kCompressionGroup0Hex, &compression_group0_bytes);
|
||||
base::HexStringToString(kCompressionGroup0Hex, &compression_group0_string);
|
||||
std::string compressed_group0_string;
|
||||
compression::GzipCompress(compression_group0_bytes,
|
||||
&compressed_group0_string);
|
||||
std::vector<uint8_t> compressed_group0_bytes(compressed_group0_string.begin(),
|
||||
compressed_group0_string.end());
|
||||
std::vector<uint8_t> compressed_group0_bytes =
|
||||
GzipCompressHelper(compression_group0_bytes);
|
||||
|
||||
// User cbor.me to convert from
|
||||
// [
|
||||
@ -576,14 +581,9 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"7B227369676E616C44223A317D7DA2647461677381646B657973696B657956616C756573"
|
||||
"A1646B657944A16576616C75656B2276616C7565466F724422";
|
||||
std::vector<uint8_t> compression_group1_bytes;
|
||||
std::string compression_group1_string;
|
||||
base::HexStringToBytes(kCompressionGroup1Hex, &compression_group1_bytes);
|
||||
base::HexStringToString(kCompressionGroup1Hex, &compression_group1_string);
|
||||
std::string compressed_group1_string;
|
||||
compression::GzipCompress(compression_group1_bytes,
|
||||
&compressed_group1_string);
|
||||
std::vector<uint8_t> compressed_group1_bytes(compressed_group1_string.begin(),
|
||||
compressed_group1_string.end());
|
||||
std::vector<uint8_t> compressed_group1_bytes =
|
||||
GzipCompressHelper(compression_group1_bytes);
|
||||
|
||||
// Construct a CBOR body:
|
||||
// {
|
||||
@ -604,15 +604,15 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
compression_group0.try_emplace(cbor::Value("compressionGroupId"),
|
||||
cbor::Value(0));
|
||||
compression_group0.try_emplace(cbor::Value("ttlMs"), cbor::Value(100));
|
||||
compression_group0.try_emplace(
|
||||
cbor::Value("content"), cbor::Value(std::move(compressed_group0_bytes)));
|
||||
compression_group0.try_emplace(cbor::Value("content"),
|
||||
cbor::Value(compressed_group0_bytes));
|
||||
|
||||
cbor::Value::MapValue compression_group1;
|
||||
compression_group1.try_emplace(cbor::Value("compressionGroupId"),
|
||||
cbor::Value(1));
|
||||
compression_group1.try_emplace(cbor::Value("ttlMs"), cbor::Value(200));
|
||||
compression_group1.try_emplace(
|
||||
cbor::Value("content"), cbor::Value(std::move(compressed_group1_bytes)));
|
||||
compression_group1.try_emplace(cbor::Value("content"),
|
||||
cbor::Value(compressed_group1_bytes));
|
||||
|
||||
cbor::Value::ArrayValue compression_groups;
|
||||
compression_groups.emplace_back(std::move(compression_group0));
|
||||
@ -641,10 +641,10 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
|
||||
CompressionGroupResult group0 = CompressionGroupResult(
|
||||
auction_worklet::mojom::TrustedSignalsCompressionScheme::kGzip,
|
||||
compressed_group0_string, base::Milliseconds(100));
|
||||
std::move(compressed_group0_bytes), base::Milliseconds(100));
|
||||
CompressionGroupResult group1 = CompressionGroupResult(
|
||||
auction_worklet::mojom::TrustedSignalsCompressionScheme::kGzip,
|
||||
compressed_group1_string, base::Milliseconds(200));
|
||||
std::move(compressed_group1_bytes), base::Milliseconds(200));
|
||||
TrustedSignalsKVv2ResponseParser::CompressionGroupResultMap
|
||||
expected_fetch_result;
|
||||
expected_fetch_result.emplace(0, std::move(group0));
|
||||
@ -937,7 +937,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
auction_worklet::mojom::TrustedSignalsCompressionScheme::kGzip;
|
||||
// []
|
||||
hex_string = "80";
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Failed to decompress content string with Gzip.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -950,7 +950,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
// Random 20 bytes hex string.
|
||||
hex_string = "666f421a72ed47aade0c63826288d5d1bbf2dc2a";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Failed to parse content to CBOR.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -959,7 +959,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
// "1"
|
||||
hex_string = "6131";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Content is not type of Array.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -968,7 +968,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
// [1]
|
||||
hex_string = "8101";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Partition is not type of Map.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -981,7 +981,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
// ]
|
||||
hex_string = "81A16F6B657947726F75704F75747075747380";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Key \"id\" is missing in partition map.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -994,7 +994,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
// ]
|
||||
hex_string = "81A162696400";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Key \"keyGroupOutputs\" is missing in partition map.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1008,7 +1008,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
// ]
|
||||
hex_string = "81A262696461306F6B657947726F75704F75747075747380";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Partition id is not type of Integer.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1022,7 +1022,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
// ]
|
||||
hex_string = "81A26269641A800000006F6B657947726F75704F75747075747380";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Partition id is out of range for int.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1036,7 +1036,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
// ]
|
||||
hex_string = "81A2626964006F6B657947726F75704F7574707574731864";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Partition key group outputs is not type of Array.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1053,7 +1053,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"81A3626964006B6461746156657273696F6E633130326F6B657947726F75704F75747075"
|
||||
"747380";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("DataVersion is not type of Integer.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1070,7 +1070,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"81A3626964006B6461746156657273696F6E1B00000001000000006F6B657947726F7570"
|
||||
"4F75747075747380";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("DataVersion field is out of range for uint32.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1084,7 +1084,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
// ]
|
||||
hex_string = "81A2626964006F6B657947726F75704F757470757473811864";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("KeyGroupOutput value is not type of Map.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1109,7 +1109,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"67726F757044A16576616C756578207B227072696F72697479566563746F72223A7B2273"
|
||||
"69676E616C44223A317D7D";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Key \"tags\" is missing in keyGroupOutputs map.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1131,7 +1131,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"81A2626964006F6B657947726F75704F75747075747381A164746167738172696E746572"
|
||||
"65737447726F75704E616D6573";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Key \"keyValues\" is missing in keyGroupOutputs map.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1157,7 +1157,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"737447726F75704E616D6573696B657956616C756573A16667726F757044A16576616C75"
|
||||
"6578207B227072696F72697479566563746F72223A7B227369676E616C44223A317D7D";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Tags value in keyGroupOutputs map is not type of Array.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1183,7 +1183,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"74616732696B657956616C756573A16667726F757044A16576616C756578207B22707269"
|
||||
"6F72697479566563746F72223A7B227369676E616C44223A317D7D";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Tags array must only have one tag.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1211,7 +1211,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"6563"
|
||||
"746F72223A7B227369676E616C44223A317D7D";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ(
|
||||
"Tag value in tags array of keyGroupOutputs map is not type of String.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
@ -1249,7 +1249,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"A16667726F757044A16576616C756578207B227072696F72697479566563746F72223A7B"
|
||||
"227369676E616C42223A317D7D";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Duplicate tag \"interestGroupNames\" detected in keyGroupOutputs.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1272,7 +1272,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"81A2626964006F6B657947726F75704F75747075747381A264746167738172696E746572"
|
||||
"65737447726F75704E616D6573696B657956616C7565731864";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("KeyValue value in keyGroupOutputs map is not type of Map.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1297,7 +1297,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"81A2626964006F6B657947726F75704F75747075747381A264746167738172696E746572"
|
||||
"65737447726F75704E616D6573696B657956616C756573A16667726F7570411864";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Value of \"groupA\" is not type of Map.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1325,7 +1325,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"65737447726F75704E616D6573696B657956616C756573A16667726F757041A16376616C"
|
||||
"60";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Failed to find key \"value\" in the map.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1353,7 +1353,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"65737447726F75704E616D6573696B657956616C756573A16667726F757041A16576616C"
|
||||
"75651864";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Failed to read value of key \"value\" as type String.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1381,7 +1381,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"65737447726F75704E616D6573696B657956616C756573A16667726F757041A16576616C"
|
||||
"7565677369676E616C3A";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Failed to create V8 value from key group output data.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
@ -1408,7 +1408,7 @@ TEST_F(TrustedSignalsKVv2ResponseParserTest,
|
||||
"81A2626964006F6B657947726F75704F75747075747381A2647461677381646B65797369"
|
||||
"6B657956616C756573A1646B657941A16576616C7565643130303A";
|
||||
result_map[0].content.clear();
|
||||
base::HexStringToString(hex_string, &result_map[0].content);
|
||||
base::HexStringToBytes(hex_string, &result_map[0].content);
|
||||
EXPECT_EQ("Failed to parse key-value string to JSON.",
|
||||
GetErrorMessageFromParseBiddingSignalsFetchResultToResultMap(
|
||||
helper_, kInterestGroupNames, kBiddingKeys, result_map));
|
||||
|
Reference in New Issue
Block a user