0

[Merchant Trust]: Let validation logic handle kNoResult status

We were preemptively returning when no data was fetched from the
optimization service. We're now letting the validation logic take care
of it; in this way the histogram is logged correctly and the total
count represents the number of optimization requests.

Bug: 400379039
Change-Id: I84015bd29edadeaeab3fe016097ca462b1351ccf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6317305
Reviewed-by: Olesia Marukhno <olesiamarukhno@google.com>
Auto-Submit: Nicola Tommasi <tommasin@chromium.org>
Commit-Queue: Nicola Tommasi <tommasin@chromium.org>
Commit-Queue: Olesia Marukhno <olesiamarukhno@google.com>
Cr-Commit-Position: refs/heads/main@{#1427065}
This commit is contained in:
Nicola Tommasi
2025-03-03 05:04:07 -08:00
committed by Chromium LUCI CQ
parent f4ef014be0
commit b51cc938a0
3 changed files with 30 additions and 5 deletions

@ -142,11 +142,9 @@ void MerchantTrustService::OnCanApplyOptimizationComplete(
if (decision != optimization_guide::OptimizationGuideDecision::kUnknown) {
std::optional<commerce::MerchantTrustSignalsV2> merchant_trust_metadata =
metadata.ParsedMetadata<commerce::MerchantTrustSignalsV2>();
if (merchant_trust_metadata.has_value()) {
std::move(callback).Run(
url, GetMerchantDataFromProto(merchant_trust_metadata));
return;
}
std::move(callback).Run(url,
GetMerchantDataFromProto(merchant_trust_metadata));
return;
}
if (kMerchantTrustEnabledWithSampleData.Get()) {

@ -229,6 +229,29 @@ TEST_F(MerchantTrustServiceTest, SampleData) {
run_loop.Run();
}
// Tests that if the proto is empty, no data is returned.
TEST_F(MerchantTrustServiceTest, NoResult) {
base::HistogramTester t;
OptimizationMetadata metadata;
metadata.set_any_metadata({});
SetResponse(GURL("https://foo.com"), OptimizationGuideDecision::kTrue,
metadata);
base::RunLoop run_loop;
service()->GetMerchantTrustInfo(
GURL("https://foo.com"),
base::BindOnce(
[](base::RunLoop* run_loop, const GURL& url,
std::optional<page_info::MerchantData> info) {
ASSERT_FALSE(info.has_value());
run_loop->Quit();
},
&run_loop));
run_loop.Run();
t.ExpectUniqueSample("Security.PageInfo.MerchantTrustStatus",
MerchantTrustStatus::kNoResult, 1);
}
// Tests that status is recorded as not valid when a proto is missing a field
// and no data is returned.
TEST_F(MerchantTrustServiceTest, InvalidProto) {

@ -19,6 +19,10 @@ commerce::MerchantTrustSignalsV2 GetSampleProto() {
return proto;
}
TEST(MerchantTrustValidation, NoResult) {
EXPECT_EQ(ValidateProto(std::nullopt), MerchantTrustStatus::kNoResult);
}
// Tests that correct proto messages are accepted.
TEST(MerchantTrustValidation, ValidProto) {
auto proto = GetSampleProto();