blob: 574bb338f428be3acd1dfe54446070f74481ed82 [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/arc/optin/arc_terms_of_service_default_negotiator.h"
#include <string>
#include "chrome/browser/ash/arc/optin/arc_optin_preference_handler.h"
namespace arc {
ArcTermsOfServiceDefaultNegotiator::ArcTermsOfServiceDefaultNegotiator(
PrefService* pref_service,
ArcSupportHost* support_host,
metrics::MetricsService* metrics_service)
: pref_service_(pref_service),
support_host_(support_host),
metrics_service_(metrics_service) {
DCHECK(pref_service_);
DCHECK(support_host_);
DCHECK(metrics_service_);
}
ArcTermsOfServiceDefaultNegotiator::~ArcTermsOfServiceDefaultNegotiator() {
support_host_->SetTermsOfServiceDelegate(nullptr);
}
void ArcTermsOfServiceDefaultNegotiator::StartNegotiationImpl() {
DCHECK(!preference_handler_);
preference_handler_ = std::make_unique<ArcOptInPreferenceHandler>(
this, pref_service_, metrics_service_);
// This automatically updates all preferences.
preference_handler_->Start();
support_host_->SetTermsOfServiceDelegate(this);
support_host_->ShowTermsOfService();
}
void ArcTermsOfServiceDefaultNegotiator::OnTermsRejected() {
// User cancels terms-of-service agreement UI by clicking "Cancel" button
// or closing the window directly.
DCHECK(preference_handler_);
support_host_->SetTermsOfServiceDelegate(nullptr);
preference_handler_.reset();
ReportResult(false);
}
void ArcTermsOfServiceDefaultNegotiator::OnTermsAgreed(
bool is_metrics_enabled,
bool is_backup_and_restore_enabled,
bool is_location_service_enabled) {
DCHECK(preference_handler_);
support_host_->SetTermsOfServiceDelegate(nullptr);
// Update the preferences with the value passed from UI.
preference_handler_->EnableBackupRestore(is_backup_and_restore_enabled);
preference_handler_->EnableLocationService(is_location_service_enabled);
// This should be called last since the callback resets |preference_handler_|
// and makes the callback that terms of service has successfully negotiated.
preference_handler_->EnableMetrics(
is_metrics_enabled,
base::BindOnce(&ArcTermsOfServiceDefaultNegotiator::OnMetricsPrefsUpdated,
weak_ptr_factory_.GetWeakPtr()));
}
void ArcTermsOfServiceDefaultNegotiator::OnTermsRetryClicked() {
support_host_->ShowTermsOfService();
}
void ArcTermsOfServiceDefaultNegotiator::OnMetricsModeChanged(bool enabled,
bool managed) {
support_host_->SetMetricsPreferenceCheckbox(enabled, managed);
}
void ArcTermsOfServiceDefaultNegotiator::OnBackupAndRestoreModeChanged(
bool enabled,
bool managed) {
support_host_->SetBackupAndRestorePreferenceCheckbox(enabled, managed);
}
void ArcTermsOfServiceDefaultNegotiator::OnLocationServicesModeChanged(
bool enabled,
bool managed) {
support_host_->SetLocationServicesPreferenceCheckbox(enabled, managed);
}
void ArcTermsOfServiceDefaultNegotiator::OnMetricsPrefsUpdated() {
preference_handler_.reset();
ReportResult(true);
}
} // namespace arc