| 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 524c5023270d86b40bd04e02dd912b4ff9142c47..b9b3082f9da15f2441a6b5aca7858c253b5638c6 100644
|
| --- a/components/arc/user_data/arc_user_data_service.cc
|
| +++ b/components/arc/user_data/arc_user_data_service.cc
|
| @@ -10,7 +10,6 @@
|
| #include "chromeos/chromeos_switches.h"
|
| #include "chromeos/cryptohome/cryptohome_parameters.h"
|
| #include "chromeos/dbus/dbus_thread_manager.h"
|
| -#include "chromeos/dbus/session_manager_client.h"
|
| #include "components/prefs/pref_member.h"
|
| #include "components/signin/core/account_id/account_id.h"
|
| #include "components/user_manager/user_manager.h"
|
| @@ -31,7 +30,7 @@ ArcUserDataService::ArcUserDataService(
|
| arc_enabled_pref_->GetPrefName(),
|
| base::Bind(&ArcUserDataService::OnOptInPreferenceChanged,
|
| weak_ptr_factory_.GetWeakPtr()));
|
| - ClearIfDisabled();
|
| + WipeIfRequired();
|
| }
|
|
|
| ArcUserDataService::~ArcUserDataService() {
|
| @@ -50,30 +49,38 @@ void ArcUserDataService::OnBridgeStopped(ArcBridgeService::StopReason reason) {
|
| primary_user_account_id_ = EmptyAccountId();
|
| return;
|
| }
|
| - ClearIfDisabled();
|
| + WipeIfRequired();
|
| }
|
|
|
| -void ArcUserDataService::ClearIfDisabled() {
|
| +void ArcUserDataService::RequireUserDataWiped(const ArcDataCallback& callback) {
|
| + VLOG(1) << "Require ARC user data to be wiped.";
|
| + arc_user_data_wipe_required_ = true;
|
| + callback_ = callback;
|
| +}
|
| +
|
| +void ArcUserDataService::WipeIfRequired() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| if (!arc_bridge_service()->stopped()) {
|
| - LOG(ERROR) << "ARC instance not stopped, user data can't be cleared";
|
| + LOG(ERROR) << "ARC instance not stopped, user data can't be wiped";
|
| return;
|
| }
|
| - if ((arc_enabled_pref_->GetValue() && !arc_disabled_) ||
|
| + if ((arc_enabled_pref_->GetValue() && !arc_user_data_wipe_required_) ||
|
| base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| chromeos::switches::kDisableArcDataWipe)) {
|
| return;
|
| }
|
| - arc_disabled_ = false;
|
| + VLOG(1) << "Wipe ARC user data.";
|
| + arc_user_data_wipe_required_ = 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);
|
| + session_manager_client->RemoveArcData(cryptohome_id, callback_);
|
| + callback_.Reset();
|
| }
|
|
|
| void ArcUserDataService::OnOptInPreferenceChanged() {
|
| if (!arc_enabled_pref_->GetValue())
|
| - arc_disabled_ = true;
|
| + arc_user_data_wipe_required_ = true;
|
| }
|
|
|
| } // namespace arc
|
|
|