Index: chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc |
diff --git a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc |
index 3e54f436ce08f75489b8ed750b4eb85ced66871b..c98036fd6fe916b0500cef23cfaf80c6ad6aecb3 100644 |
--- a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc |
+++ b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc |
@@ -15,9 +15,8 @@ |
namespace chromeos { |
// static |
-ArcKioskAppService* ArcKioskAppService::Create(Profile* profile, |
- ArcAppListPrefs* prefs) { |
- return new ArcKioskAppService(profile, prefs); |
+ArcKioskAppService* ArcKioskAppService::Create(Profile* profile) { |
+ return new ArcKioskAppService(profile); |
} |
// static |
@@ -25,6 +24,11 @@ ArcKioskAppService* ArcKioskAppService::Get(content::BrowserContext* context) { |
return ArcKioskAppServiceFactory::GetForBrowserContext(context); |
} |
+void ArcKioskAppService::Shutdown() { |
+ ArcAppListPrefs::Get(profile_)->RemoveObserver(this); |
+ app_manager_->RemoveObserver(this); |
+} |
+ |
void ArcKioskAppService::OnAppRegistered( |
const std::string& app_id, |
const ArcAppListPrefs::AppInfo& app_info) { |
@@ -62,14 +66,21 @@ void ArcKioskAppService::OnTaskDestroyed(int32_t task_id) { |
} |
} |
-ArcKioskAppService::ArcKioskAppService(Profile* profile, ArcAppListPrefs* prefs) |
- : profile_(profile), prefs_(prefs) { |
- if (prefs_) |
- prefs_->AddObserver(this); |
+void ArcKioskAppService::OnMaintenanceSessionCreated() { |
+ maintenance_session_running_ = true; |
+ PreconditionsChanged(); |
+} |
+ |
+void ArcKioskAppService::OnMaintenanceSessionFinished() { |
+ maintenance_session_running_ = false; |
+ PreconditionsChanged(); |
+} |
+ |
+ArcKioskAppService::ArcKioskAppService(Profile* profile) : profile_(profile) { |
+ ArcAppListPrefs::Get(profile_)->AddObserver(this); |
app_manager_ = ArcKioskAppManager::Get(); |
- if (app_manager_) { |
- app_manager_->AddObserver(this); |
- } |
+ DCHECK(app_manager_); |
+ app_manager_->AddObserver(this); |
pref_change_registrar_.reset(new PrefChangeRegistrar()); |
pref_change_registrar_->Init(profile_->GetPrefs()); |
// Try to start/stop kiosk app on policy compliance state change. |
@@ -80,22 +91,19 @@ ArcKioskAppService::ArcKioskAppService(Profile* profile, ArcAppListPrefs* prefs) |
PreconditionsChanged(); |
} |
-ArcKioskAppService::~ArcKioskAppService() { |
- if (prefs_) |
- prefs_->RemoveObserver(this); |
- if (app_manager_) |
- app_manager_->RemoveObserver(this); |
-} |
+ArcKioskAppService::~ArcKioskAppService() = default; |
void ArcKioskAppService::PreconditionsChanged() { |
app_id_ = GetAppId(); |
if (app_id_.empty()) |
return; |
- app_info_ = prefs_->GetApp(app_id_); |
+ app_info_ = ArcAppListPrefs::Get(profile_)->GetApp(app_id_); |
if (app_info_ && app_info_->ready && |
- profile_->GetPrefs()->GetBoolean(prefs::kArcPolicyCompliant)) { |
+ profile_->GetPrefs()->GetBoolean(prefs::kArcPolicyCompliant) && |
+ !maintenance_session_running_) { |
if (!app_launcher_) |
- app_launcher_.reset(new ArcKioskAppLauncher(profile_, prefs_, app_id_)); |
+ app_launcher_.reset(new ArcKioskAppLauncher( |
+ profile_, ArcAppListPrefs::Get(profile_), app_id_)); |
} else if (task_id_ != -1) { |
arc::CloseTask(task_id_); |
} |
@@ -108,7 +116,8 @@ std::string ArcKioskAppService::GetAppId() { |
if (!app) |
return std::string(); |
std::unordered_set<std::string> app_ids = |
- prefs_->GetAppsForPackage(app->app_info().package_name()); |
+ ArcAppListPrefs::Get(profile_)->GetAppsForPackage( |
+ app->app_info().package_name()); |
if (app_ids.empty()) |
return std::string(); |
// TODO(poromov@): Choose appropriate app id to launch. See |