blob: f9dd53f96510d0acf8dc58e977a14e66a2361b8c [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/sync/invalidations/sync_invalidations_service_impl.h"
#include <utility>
#include "components/sync/invalidations/fcm_handler.h"
#include "components/sync/invalidations/interested_data_types_handler.h"
namespace syncer {
namespace {
constexpr char kSenderId[] = "361488507004";
constexpr char kApplicationId[] = "com.google.chrome.sync.invalidations";
} // namespace
SyncInvalidationsServiceImpl::SyncInvalidationsServiceImpl(
gcm::GCMDriver* gcm_driver,
instance_id::InstanceIDDriver* instance_id_driver) {
fcm_handler_ = std::make_unique<FCMHandler>(gcm_driver, instance_id_driver,
kSenderId, kApplicationId);
}
SyncInvalidationsServiceImpl::~SyncInvalidationsServiceImpl() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}
void SyncInvalidationsServiceImpl::AddListener(
InvalidationsListener* listener) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
fcm_handler_->AddListener(listener);
}
bool SyncInvalidationsServiceImpl::HasListener(
InvalidationsListener* listener) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return fcm_handler_->HasListener(listener);
}
void SyncInvalidationsServiceImpl::RemoveListener(
InvalidationsListener* listener) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
fcm_handler_->RemoveListener(listener);
}
void SyncInvalidationsServiceImpl::AddTokenObserver(
FCMRegistrationTokenObserver* observer) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
fcm_handler_->AddTokenObserver(observer);
}
void SyncInvalidationsServiceImpl::RemoveTokenObserver(
FCMRegistrationTokenObserver* observer) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
fcm_handler_->RemoveTokenObserver(observer);
}
void SyncInvalidationsServiceImpl::StartListening() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (fcm_handler_->IsListening()) {
return;
}
fcm_handler_->StartListening();
}
void SyncInvalidationsServiceImpl::StopListening() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
fcm_handler_->StopListening();
}
void SyncInvalidationsServiceImpl::StopListeningPermanently() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (!fcm_handler_->IsListening()) {
return;
}
fcm_handler_->StopListeningPermanently();
}
std::optional<std::string>
SyncInvalidationsServiceImpl::GetFCMRegistrationToken() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return fcm_handler_->GetFCMRegistrationToken();
}
void SyncInvalidationsServiceImpl::SetInterestedDataTypesHandler(
InterestedDataTypesHandler* handler) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(!interested_data_types_handler_ || !handler);
interested_data_types_handler_ = handler;
}
std::optional<DataTypeSet>
SyncInvalidationsServiceImpl::GetInterestedDataTypes() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return interested_data_types_;
}
void SyncInvalidationsServiceImpl::SetInterestedDataTypes(
const DataTypeSet& data_types) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(interested_data_types_handler_);
interested_data_types_ = data_types;
interested_data_types_handler_->OnInterestedDataTypesChanged();
}
void SyncInvalidationsServiceImpl::
SetCommittedAdditionalInterestedDataTypesCallback(
InterestedDataTypesAppliedCallback callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(interested_data_types_handler_);
interested_data_types_handler_
->SetCommittedAdditionalInterestedDataTypesCallback(std::move(callback));
}
void SyncInvalidationsServiceImpl::Shutdown() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
fcm_handler_.reset();
}
FCMHandler* SyncInvalidationsServiceImpl::GetFCMHandlerForTesting() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return fcm_handler_.get();
}
} // namespace syncer