Index: chrome/browser/chromeos/arc/arc_user_data_service.cc |
diff --git a/components/arc/user_data/arc_user_data_service.cc b/chrome/browser/chromeos/arc/arc_user_data_service.cc |
similarity index 64% |
rename from components/arc/user_data/arc_user_data_service.cc |
rename to chrome/browser/chromeos/arc/arc_user_data_service.cc |
index 524c5023270d86b40bd04e02dd912b4ff9142c47..d5c3356cbbb0eee9e0b0444e815b8494ddd2da06 100644 |
--- a/components/arc/user_data/arc_user_data_service.cc |
+++ b/chrome/browser/chromeos/arc/arc_user_data_service.cc |
@@ -2,11 +2,15 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "components/arc/user_data/arc_user_data_service.h" |
+#include "chrome/browser/chromeos/arc/arc_user_data_service.h" |
#include <utility> |
+#include "base/bind.h" |
#include "base/command_line.h" |
+#include "base/logging.h" |
+#include "base/threading/thread_task_runner_handle.h" |
+#include "chrome/browser/chromeos/arc/arc_auth_service.h" |
#include "chromeos/chromeos_switches.h" |
#include "chromeos/cryptohome/cryptohome_parameters.h" |
#include "chromeos/dbus/dbus_thread_manager.h" |
@@ -24,19 +28,22 @@ ArcUserDataService::ArcUserDataService( |
: ArcService(bridge_service), |
arc_enabled_pref_(std::move(arc_enabled_pref)), |
primary_user_account_id_(account_id), |
+ binding_(this), |
weak_ptr_factory_(this) { |
arc_bridge_service()->AddObserver(this); |
+ arc_bridge_service()->enterprise_reporting()->AddObserver(this); |
pref_change_registrar_.Init(arc_enabled_pref_->prefs()); |
pref_change_registrar_.Add( |
arc_enabled_pref_->GetPrefName(), |
base::Bind(&ArcUserDataService::OnOptInPreferenceChanged, |
weak_ptr_factory_.GetWeakPtr())); |
- ClearIfDisabled(); |
+ ClearIfRequired(); |
} |
ArcUserDataService::~ArcUserDataService() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
arc_bridge_service()->RemoveObserver(this); |
+ arc_bridge_service()->enterprise_reporting()->RemoveObserver(this); |
} |
void ArcUserDataService::OnBridgeStopped(ArcBridgeService::StopReason reason) { |
@@ -50,21 +57,43 @@ void ArcUserDataService::OnBridgeStopped(ArcBridgeService::StopReason reason) { |
primary_user_account_id_ = EmptyAccountId(); |
return; |
} |
- ClearIfDisabled(); |
+ ClearIfRequired(); |
+ |
+ if (restart_required_) { |
+ restart_required_ = false; |
+ base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FROM_HERE, base::Bind(&ArcUserDataService::RestartArc, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ } |
} |
-void ArcUserDataService::ClearIfDisabled() { |
+void ArcUserDataService::OnInstanceReady() { |
+ arc_bridge_service()->enterprise_reporting()->instance()->Init( |
+ binding_.CreateInterfacePtrAndBind()); |
+} |
+ |
+void ArcUserDataService::ReportManagementState(mojom::ManagementState state) { |
+ VLOG(1) << "ReportManagementState state=" << state; |
+ if (state == mojom::ManagementState::MANAGED_DO_LOST) { |
+ clean_required_ = true; |
+ restart_required_ = true; |
+ ArcAuthService::Get()->StopArc(); |
+ } |
+} |
+ |
+void ArcUserDataService::ClearIfRequired() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
if (!arc_bridge_service()->stopped()) { |
LOG(ERROR) << "ARC instance not stopped, user data can't be cleared"; |
return; |
} |
- if ((arc_enabled_pref_->GetValue() && !arc_disabled_) || |
+ if ((arc_enabled_pref_->GetValue() && !clean_required_) || |
base::CommandLine::ForCurrentProcess()->HasSwitch( |
chromeos::switches::kDisableArcDataWipe)) { |
return; |
} |
- arc_disabled_ = false; |
+ VLOG(1) << "Wipe ARC user data."; |
+ clean_required_ = false; |
const cryptohome::Identification cryptohome_id(primary_user_account_id_); |
chromeos::SessionManagerClient* session_manager_client = |
chromeos::DBusThreadManager::Get()->GetSessionManagerClient(); |
@@ -73,7 +102,12 @@ void ArcUserDataService::ClearIfDisabled() { |
void ArcUserDataService::OnOptInPreferenceChanged() { |
if (!arc_enabled_pref_->GetValue()) |
- arc_disabled_ = true; |
+ clean_required_ = true; |
+} |
+ |
+void ArcUserDataService::RestartArc() { |
+ VLOG(1) << "Restart ARC"; |
+ ArcAuthService::Get()->EnableArc(); |
} |
} // namespace arc |