blob: 05f1e255727928cc22dfb7a852be8a11a93b93a1 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/segmentation_platform/segmentation_platform_config.h"
#include <memory>
#include "base/feature_list.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "components/optimization_guide/proto/models.pb.h"
#include "components/segmentation_platform/public/config.h"
#include "components/segmentation_platform/public/segmentation_platform_service.h"
#if defined(OS_ANDROID)
#include "chrome/browser/flags/android/chrome_feature_list.h"
#endif
using optimization_guide::proto::OptimizationTarget;
namespace segmentation_platform {
namespace {
// Default TTL for segment selection and unknown selection:
#if defined(OS_ANDROID)
constexpr int kAdaptiveToolbarDefaultSelectionTTLDays = 28;
constexpr int kChromeStartDefaultSelectionTTLDays = 30;
constexpr int kChromeStartDefaultUnknownTTLDays = 7;
// DEFAULT_NUM_DAYS_KEEP_SHOWING_QUERY_TILES
constexpr int kQueryTilesDefaultSelectionTTLDays = 28;
// DEFAULT_NUM_DAYS_MV_CLICKS_BELOW_THRESHOLD
constexpr int kQueryTilesDefaultUnknownTTLDays = 7;
#endif // defined(OS_ANDROID)
std::unique_ptr<Config> GetConfigForAdaptiveToolbar() {
auto config = std::make_unique<Config>();
config->segmentation_key = kAdaptiveToolbarSegmentationKey;
#if defined(OS_ANDROID)
int segment_selection_ttl_days = base::GetFieldTrialParamByFeatureAsInt(
chrome::android::kAdaptiveButtonInTopToolbarCustomizationV2,
"segment_selection_ttl_days", kAdaptiveToolbarDefaultSelectionTTLDays);
config->segment_selection_ttl = base::Days(segment_selection_ttl_days);
// Do not set unknown TTL so that the platform ignores unknown results.
#endif
// A hardcoded list of segment IDs known to the segmentation platform.
config->segment_ids = {
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_NEW_TAB,
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_SHARE,
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_VOICE,
};
return config;
}
std::unique_ptr<Config> GetConfigForDummyFeature() {
auto config = std::make_unique<Config>();
config->segmentation_key = kDummySegmentationKey;
config->segment_ids = {
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_DUMMY,
};
// TTL can be added as result TTL in metadata if needed.
return config;
}
#if defined(OS_ANDROID)
std::unique_ptr<Config> GetConfigForChromeStartAndroid() {
auto config = std::make_unique<Config>();
config->segmentation_key = kChromeStartAndroidSegmentationKey;
config->segment_ids = {
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_CHROME_START_ANDROID,
};
int segment_selection_ttl_days = base::GetFieldTrialParamByFeatureAsInt(
chrome::android::kStartSurfaceAndroid, "segment_selection_ttl_days",
kChromeStartDefaultSelectionTTLDays);
int unknown_selection_ttl_days = base::GetFieldTrialParamByFeatureAsInt(
chrome::android::kStartSurfaceAndroid,
"segment_unknown_selection_ttl_days", kChromeStartDefaultUnknownTTLDays);
config->segment_selection_ttl = base::Days(segment_selection_ttl_days);
config->unknown_selection_ttl = base::Days(unknown_selection_ttl_days);
return config;
}
std::unique_ptr<Config> GetConfigForQueryTiles() {
auto config = std::make_unique<Config>();
config->segmentation_key = kQueryTilesSegmentationKey;
config->segment_ids = {
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_QUERY_TILES,
};
// TODO(ssid): use experiment params to configure these.
config->segment_selection_ttl =
base::Days(kQueryTilesDefaultSelectionTTLDays);
config->unknown_selection_ttl = base::Days(kQueryTilesDefaultUnknownTTLDays);
return config;
}
#endif // defined(OS_ANDROID)
} // namespace
std::vector<std::unique_ptr<Config>> GetSegmentationPlatformConfig() {
std::vector<std::unique_ptr<Config>> configs;
configs.emplace_back(GetConfigForAdaptiveToolbar());
configs.emplace_back(GetConfigForDummyFeature());
#if defined(OS_ANDROID)
configs.emplace_back(GetConfigForChromeStartAndroid());
configs.emplace_back(GetConfigForQueryTiles());
#endif
return configs;
}
} // namespace segmentation_platform