1 // Copyright 2018 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "components/sync_user_events/user_event_model_type_controller.h" 6 7 #include <utility> 8 9 #include "base/bind.h" 10 #include "components/sync/driver/sync_auth_util.h" 11 #include "components/sync/driver/sync_service.h" 12 #include "components/sync/driver/sync_user_settings.h" 13 #include "google_apis/gaia/google_service_auth_error.h" 14 15 namespace syncer { 16 UserEventModelTypeController(SyncService * sync_service,std::unique_ptr<ModelTypeControllerDelegate> delegate_for_full_sync_mode)17UserEventModelTypeController::UserEventModelTypeController( 18 SyncService* sync_service, 19 std::unique_ptr<ModelTypeControllerDelegate> delegate_for_full_sync_mode) 20 : ModelTypeController(syncer::USER_EVENTS, 21 std::move(delegate_for_full_sync_mode)), 22 sync_service_(sync_service) { 23 DCHECK(sync_service_); 24 sync_service_->AddObserver(this); 25 } 26 ~UserEventModelTypeController()27UserEventModelTypeController::~UserEventModelTypeController() { 28 sync_service_->RemoveObserver(this); 29 } 30 Stop(syncer::ShutdownReason shutdown_reason,StopCallback callback)31void UserEventModelTypeController::Stop(syncer::ShutdownReason shutdown_reason, 32 StopCallback callback) { 33 DCHECK(CalledOnValidThread()); 34 switch (shutdown_reason) { 35 case syncer::STOP_SYNC: 36 // Special case: For USER_EVENT, we want to clear all data even when Sync 37 // is stopped temporarily. 38 shutdown_reason = syncer::DISABLE_SYNC; 39 break; 40 case syncer::DISABLE_SYNC: 41 case syncer::BROWSER_SHUTDOWN: 42 break; 43 } 44 ModelTypeController::Stop(shutdown_reason, std::move(callback)); 45 } 46 47 DataTypeController::PreconditionState GetPreconditionState() const48UserEventModelTypeController::GetPreconditionState() const { 49 if (sync_service_->GetUserSettings()->IsUsingSecondaryPassphrase()) { 50 return PreconditionState::kMustStopAndClearData; 51 } 52 // TODO(crbug.com/938819): Remove the syncer::IsWebSignout() check once we 53 // stop sync in this state. Also remove the "+google_apis/gaia" include 54 // dependency and the "//google_apis" build dependency of sync_user_events. 55 if (syncer::IsWebSignout(sync_service_->GetAuthError())) { 56 return PreconditionState::kMustStopAndClearData; 57 } 58 return PreconditionState::kPreconditionsMet; 59 } 60 OnStateChanged(syncer::SyncService * sync)61void UserEventModelTypeController::OnStateChanged(syncer::SyncService* sync) { 62 sync->DataTypePreconditionChanged(type()); 63 } 64 65 } // namespace syncer 66