blob: 81cf8af7c7d48f2a8c7ad3fbf399a409554e8513 [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(
PreviewsDeciderImpl* previews_decider_impl,
const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
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)
: io_task_runner_(io_task_runner),
logger_(std::move(logger)),
weak_factory_(this) {
DCHECK(logger_);
previews_decider_impl->Initialize(
weak_factory_.GetWeakPtr(), std::move(previews_opt_out_store),
std::move(previews_opt_guide), is_enabled_callback,
std::move(allowed_previews));
}
PreviewsUIService::~PreviewsUIService() {
DCHECK(thread_checker_.CalledOnValidThread());
}
void PreviewsUIService::SetIOData(
base::WeakPtr<PreviewsDeciderImpl> previews_decider_impl) {
DCHECK(thread_checker_.CalledOnValidThread());
previews_decider_impl_ = previews_decider_impl;
}
void PreviewsUIService::AddPreviewNavigation(const GURL& url,
PreviewsType type,
bool opt_out,
uint64_t page_id) {
DCHECK(thread_checker_.CalledOnValidThread());
io_task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&PreviewsDeciderImpl::AddPreviewNavigation,
previews_decider_impl_, 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(thread_checker_.CalledOnValidThread());
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(thread_checker_.CalledOnValidThread());
logger_->LogPreviewDecisionMade(reason, url, time, type,
std::move(passed_reasons), page_id);
}
void PreviewsUIService::OnNewBlacklistedHost(const std::string& host,
base::Time time) {
DCHECK(thread_checker_.CalledOnValidThread());
logger_->OnNewBlacklistedHost(host, time);
}
void PreviewsUIService::OnUserBlacklistedStatusChange(bool blacklisted) {
DCHECK(thread_checker_.CalledOnValidThread());
logger_->OnUserBlacklistedStatusChange(blacklisted);
}
void PreviewsUIService::OnBlacklistCleared(base::Time time) {
DCHECK(thread_checker_.CalledOnValidThread());
logger_->OnBlacklistCleared(time);
}
void PreviewsUIService::SetIgnorePreviewsBlacklistDecision(bool ignored) {
DCHECK(thread_checker_.CalledOnValidThread());
io_task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&PreviewsDeciderImpl::SetIgnorePreviewsBlacklistDecision,
previews_decider_impl_, ignored));
}
void PreviewsUIService::OnIgnoreBlacklistDecisionStatusChanged(bool ignored) {
DCHECK(thread_checker_.CalledOnValidThread());
logger_->OnIgnoreBlacklistDecisionStatusChanged(ignored);
}
PreviewsLogger* PreviewsUIService::previews_logger() const {
DCHECK(thread_checker_.CalledOnValidThread());
return logger_.get();
}
void PreviewsUIService::ClearBlackList(base::Time begin_time,
base::Time end_time) {
DCHECK(thread_checker_.CalledOnValidThread());
io_task_runner_->PostTask(
FROM_HERE, base::BindOnce(&PreviewsDeciderImpl::ClearBlackList,
previews_decider_impl_, begin_time, end_time));
}
} // namespace previews