Chromium Code Reviews| 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, |
|
Luis Héctor Chávez
2016/07/22 17:00:15
IIUC this is racy. What needs to happen is that th
Polina Bondarenko
2016/07/25 16:17:59
Done.
|
| + 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() { |
|
Luis Héctor Chávez
2016/07/22 17:00:15
This method does not access any members, so it can
Polina Bondarenko
2016/07/25 16:17:59
Moved this method to ArcEnterpriseReportingService
|
| + VLOG(1) << "Restart ARC"; |
| + ArcAuthService::Get()->EnableArc(); |
| } |
| } // namespace arc |