blob: 17916ff64116ebba15c08e176c6a74dbf6e9adab [file] [log] [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.
#include "components/commerce/core/metrics/metrics_utils.h"
#include "base/metrics/histogram_functions.h"
#include "components/commerce/core/proto/price_tracking.pb.h"
#include "components/optimization_guide/core/optimization_guide_decision.h"
#include "components/optimization_guide/core/optimization_guide_permissions_util.h"
namespace commerce::metrics {
const char kPDPStateHistogramName[] = "Commerce.PDPStateOnNavigation";
void RecordPDPStateToUma(ShoppingPDPState state) {
base::UmaHistogramEnumeration(kPDPStateHistogramName, state);
}
ShoppingPDPState ComputeStateForOptGuideResult(
optimization_guide::OptimizationGuideDecision decision,
const optimization_guide::OptimizationMetadata& metadata) {
if (decision != optimization_guide::OptimizationGuideDecision::kTrue ||
!metadata.any_metadata().has_value()) {
return ShoppingPDPState::kNotPDP;
}
absl::optional<PriceTrackingData> parsed_any =
optimization_guide::ParsedAnyMetadata<PriceTrackingData>(
metadata.any_metadata().value());
if (!parsed_any.has_value() || !parsed_any.value().IsInitialized())
return ShoppingPDPState::kNotPDP;
const PriceTrackingData& price_data = parsed_any.value();
if (price_data.has_buyable_product() &&
price_data.buyable_product().has_product_cluster_id()) {
return ShoppingPDPState::kIsPDPWithClusterId;
}
return ShoppingPDPState::kIsPDPWithoutClusterId;
}
void RecordPDPStateForNavigation(
optimization_guide::OptimizationGuideDecision decision,
const optimization_guide::OptimizationMetadata& metadata,
PrefService* pref_service,
bool is_off_the_record) {
// If optimization guide isn't allowed to run, don't attempt to query and
// record the metrics.
if (!pref_service ||
!optimization_guide::IsUserPermittedToFetchFromRemoteOptimizationGuide(
is_off_the_record, pref_service)) {
return;
}
RecordPDPStateToUma(ComputeStateForOptGuideResult(decision, metadata));
}
} // namespace commerce::metrics