blob: 61fa71493ba4deb8300e0d22a403956ab5f0d5de [file] [log] [blame]
// Copyright 2016 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_ui_service.h"
#include "base/bind.h"
#include "base/single_thread_task_runner.h"
#include "url/gurl.h"
namespace previews {
PreviewsUIService::PreviewsUIService(
std::unique_ptr<PreviewsDeciderImpl> previews_decider_impl,
std::unique_ptr<blacklist::OptOutStore> previews_opt_out_store,
std::unique_ptr<PreviewsOptimizationGuide> previews_opt_guide,
const PreviewsIsEnabledCallback& is_enabled_callback,
std::unique_ptr<PreviewsLogger> logger,
blacklist::BlacklistData::AllowedTypesAndVersions allowed_previews,
network::NetworkQualityTracker* network_quality_tracker)
: previews_decider_impl_(std::move(previews_decider_impl)),
logger_(std::move(logger)),
network_quality_tracker_(network_quality_tracker) {
DCHECK(logger_);
DCHECK(previews_decider_impl_);
DCHECK(network_quality_tracker_);
previews_decider_impl_->Initialize(
this, std::move(previews_opt_out_store), std::move(previews_opt_guide),
is_enabled_callback, std::move(allowed_previews));
network_quality_tracker_->AddEffectiveConnectionTypeObserver(this);
}
PreviewsUIService::~PreviewsUIService() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
network_quality_tracker_->RemoveEffectiveConnectionTypeObserver(this);
}
void PreviewsUIService::AddPreviewNavigation(const GURL& url,
PreviewsType type,
bool opt_out,
uint64_t page_id) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
previews_decider_impl_->AddPreviewNavigation(url, opt_out, type, page_id);
}
void PreviewsUIService::LogPreviewNavigation(const GURL& url,
PreviewsType type,
bool opt_out,
base::Time time,
uint64_t page_id) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
logger_->LogPreviewNavigation(url, type, opt_out, time, page_id);
}
void PreviewsUIService::LogPreviewDecisionMade(
PreviewsEligibilityReason reason,
const GURL& url,
base::Time time,
PreviewsType type,
std::vector<PreviewsEligibilityReason>&& passed_reasons,
uint64_t page_id) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
logger_->LogPreviewDecisionMade(reason, url, time, type,
std::move(passed_reasons), page_id);
}
void PreviewsUIService::OnNewBlacklistedHost(const std::string& host,
base::Time time) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
logger_->OnNewBlacklistedHost(host, time);
}
void PreviewsUIService::OnUserBlacklistedStatusChange(bool blacklisted) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
logger_->OnUserBlacklistedStatusChange(blacklisted);
}
void PreviewsUIService::OnBlacklistCleared(base::Time time) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
logger_->OnBlacklistCleared(time);
}
void PreviewsUIService::SetIgnorePreviewsBlacklistDecision(bool ignored) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
previews_decider_impl_->SetIgnorePreviewsBlacklistDecision(ignored);
}
void PreviewsUIService::OnIgnoreBlacklistDecisionStatusChanged(bool ignored) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
logger_->OnIgnoreBlacklistDecisionStatusChanged(ignored);
}
std::vector<std::string>
PreviewsUIService::GetResourceLoadingHintsResourcePatternsToBlock(
const GURL& document_gurl) const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
std::vector<std::string> resource_patterns_to_block;
if (previews_decider_impl_) {
previews_decider_impl_->GetResourceLoadingHints(
document_gurl, &resource_patterns_to_block);
}
return resource_patterns_to_block;
}
PreviewsLogger* PreviewsUIService::previews_logger() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return logger_.get();
}
PreviewsDeciderImpl* PreviewsUIService::previews_decider_impl() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return previews_decider_impl_.get();
}
// When triggering previews, prevent long term black list rules.
void PreviewsUIService::SetIgnoreLongTermBlackListForServerPreviews(
bool ignore_long_term_black_list_rules_allowed) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
previews_decider_impl_->SetIgnoreLongTermBlackListForServerPreviews(
ignore_long_term_black_list_rules_allowed);
}
void PreviewsUIService::ClearBlackList(base::Time begin_time,
base::Time end_time) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
previews_decider_impl_->ClearBlackList(begin_time, end_time);
}
void PreviewsUIService::OnEffectiveConnectionTypeChanged(
net::EffectiveConnectionType type) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
current_effective_connection_type_ = type;
previews_decider_impl_->SetEffectiveConnectionType(type);
}
} // namespace previews