Chromium Code Reviews| Index: components/arc/user_data/arc_user_data_service.cc |
| diff --git a/components/arc/user_data/arc_user_data_service.cc b/components/arc/user_data/arc_user_data_service.cc |
| index cb9559575c1e612d6c1871c1ba9835f13c90a615..0e60bada9446cd90da7adbb6689a7dfbfcbb628d 100644 |
| --- a/components/arc/user_data/arc_user_data_service.cc |
| +++ b/components/arc/user_data/arc_user_data_service.cc |
| @@ -20,11 +20,18 @@ namespace arc { |
| ArcUserDataService::ArcUserDataService( |
| ArcBridgeService* bridge_service, |
| std::unique_ptr<BooleanPrefMember> arc_enabled_pref, |
| + PrefService* pref_service, |
| const AccountId& account_id) |
| : ArcService(bridge_service), |
| arc_enabled_pref_(std::move(arc_enabled_pref)), |
| - primary_user_account_id_(account_id) { |
| + primary_user_account_id_(account_id), |
| + weak_ptr_factory_(this) { |
| arc_bridge_service()->AddObserver(this); |
| + pref_change_registrar_.Init(pref_service); |
|
hidehiko
2016/07/15 14:39:23
arc_enabled_pref_->prefs() should work?
|
| + pref_change_registrar_.Add( |
| + arc_enabled_pref_->GetPrefName(), |
| + base::Bind(&ArcUserDataService::OnOptInPreferenceChanged, |
| + weak_ptr_factory_.GetWeakPtr())); |
| ClearIfDisabled(); |
| } |
| @@ -53,15 +60,21 @@ void ArcUserDataService::ClearIfDisabled() { |
| LOG(ERROR) << "ARC instance not stopped, user data can't be cleared"; |
| return; |
| } |
| - if (arc_enabled_pref_->GetValue() || |
| + if ((arc_enabled_pref_->GetValue() && !arc_disabled_) || |
| base::CommandLine::ForCurrentProcess()->HasSwitch( |
| chromeos::switches::kDisableArcDataWipe)) { |
| return; |
| } |
| + arc_disabled_ = false; |
| const cryptohome::Identification cryptohome_id(primary_user_account_id_); |
| chromeos::SessionManagerClient* session_manager_client = |
| chromeos::DBusThreadManager::Get()->GetSessionManagerClient(); |
| session_manager_client->RemoveArcData(cryptohome_id); |
| } |
| +void ArcUserDataService::OnOptInPreferenceChanged() { |
| + if (!arc_enabled_pref_->GetValue()) |
| + arc_disabled_ = true; |
| +} |
| + |
| } // namespace arc |