blob: a2761460a367b5a11154572dc627cff0d4160517 [file] [log] [blame]
// Copyright 2017 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 "components/previews/content/previews_user_data.h"
#include "base/rand_util.h"
namespace previews {
const void* const kPreviewsUserDataKey = &kPreviewsUserDataKey;
PreviewsUserData::PreviewsUserData(uint64_t page_id)
: page_id_(page_id),
random_coin_flip_for_navigation_(base::RandInt(0, 1)),
server_lite_page_info_(nullptr) {}
PreviewsUserData::~PreviewsUserData() {}
PreviewsUserData::PreviewsUserData(const PreviewsUserData& other)
: page_id_(other.page_id_),
random_coin_flip_for_navigation_(other.random_coin_flip_for_navigation_),
navigation_ect_(other.navigation_ect_),
data_savings_inflation_percent_(other.data_savings_inflation_percent_),
cache_control_no_transform_directive_(
other.cache_control_no_transform_directive_),
offline_preview_used_(other.offline_preview_used_),
black_listed_for_lite_page_(other.black_listed_for_lite_page_),
committed_previews_type_without_holdback_(
other.committed_previews_type_without_holdback_),
allowed_previews_state_without_holdback_(
other.allowed_previews_state_without_holdback_),
committed_previews_state_without_holdback_(
other.committed_previews_state_without_holdback_),
coin_flip_holdback_result_(other.coin_flip_holdback_result_),
preview_eligibility_reasons_(other.preview_eligibility_reasons_),
serialized_hint_version_string_(other.serialized_hint_version_string_) {
if (other.server_lite_page_info_) {
server_lite_page_info_ =
std::make_unique<ServerLitePageInfo>(*other.server_lite_page_info_);
}
}
void PreviewsUserData::SetCommittedPreviewsType(
previews::PreviewsType previews_type) {
DCHECK(committed_previews_type_without_holdback_ == PreviewsType::NONE);
committed_previews_type_without_holdback_ = previews_type;
}
void PreviewsUserData::SetCommittedPreviewsTypeForTesting(
previews::PreviewsType previews_type) {
committed_previews_type_without_holdback_ = previews_type;
}
bool PreviewsUserData::CoinFlipForNavigation() const {
if (params::ShouldOverrideNavigationCoinFlipToHoldback())
return true;
if (params::ShouldOverrideNavigationCoinFlipToAllowed())
return false;
return random_coin_flip_for_navigation_;
}
void PreviewsUserData::SetEligibilityReasonForPreview(
PreviewsType preview,
PreviewsEligibilityReason reason) {
preview_eligibility_reasons_[preview] = reason;
}
base::Optional<PreviewsEligibilityReason>
PreviewsUserData::EligibilityReasonForPreview(PreviewsType preview) {
auto iter = preview_eligibility_reasons_.find(preview);
if (iter == preview_eligibility_reasons_.end())
return base::nullopt;
return iter->second;
}
bool PreviewsUserData::HasCommittedPreviewsType() const {
return CommittedPreviewsType() != PreviewsType::NONE;
}
previews::PreviewsType PreviewsUserData::PreHoldbackCommittedPreviewsType()
const {
return committed_previews_type_without_holdback_;
}
previews::PreviewsType PreviewsUserData::CommittedPreviewsType() const {
if (coin_flip_holdback_result_ == CoinFlipHoldbackResult::kHoldback)
return PreviewsType::NONE;
return committed_previews_type_without_holdback_;
}
content::PreviewsState PreviewsUserData::PreHoldbackAllowedPreviewsState()
const {
return allowed_previews_state_without_holdback_;
}
content::PreviewsState PreviewsUserData::AllowedPreviewsState() const {
if (coin_flip_holdback_result_ == CoinFlipHoldbackResult::kHoldback)
return content::PREVIEWS_OFF;
return allowed_previews_state_without_holdback_;
}
content::PreviewsState PreviewsUserData::PreHoldbackCommittedPreviewsState()
const {
return committed_previews_state_without_holdback_;
}
content::PreviewsState PreviewsUserData::CommittedPreviewsState() const {
if (coin_flip_holdback_result_ == CoinFlipHoldbackResult::kHoldback)
return content::PREVIEWS_OFF;
return committed_previews_state_without_holdback_;
}
} // namespace previews