Index: chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc |
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc |
index 8013781b33e53b38ec244248c3bc05a4e199ca9e..78512a0c0193e24f2dd0c8aa44b01fcd69cc693d 100644 |
--- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc |
+++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc |
@@ -13,6 +13,7 @@ |
#include "base/metrics/histogram_macros.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/task_scheduler/post_task.h" |
+#include "chrome/browser/chromeos/arc/arc_session_manager.h" |
#include "chrome/browser/chromeos/arc/arc_util.h" |
#include "chrome/browser/chromeos/arc/policy/arc_policy_util.h" |
#include "chrome/browser/profiles/profile.h" |
@@ -141,9 +142,13 @@ void DeleteAppFolderFromFileThread(const base::FilePath& path) { |
DCHECK(deleted); |
} |
-bool IsArcEnabled() { |
+// TODO(crbug.com/672829): Due to shutdown procedure dependency, |
+// ArcAppListPrefs may try to touch ArcSessionManager related stuff. |
+// Specifically, this returns false on shutdown phase. |
+// Remove this check after the shutdown behavior is fixed. |
+bool IsArcAlive() { |
const auto* arc_session_manager = arc::ArcSessionManager::Get(); |
- return arc_session_manager && arc_session_manager->IsArcPlayStoreEnabled(); |
+ return arc_session_manager && arc_session_manager->IsAllowed(); |
} |
bool GetInt64FromPref(const base::DictionaryValue* dict, |
@@ -269,7 +274,8 @@ void ArcAppListPrefs::StartPrefs() { |
// only if the given Profile meets ARC's requirement. |
// Anyway, just in case, check it here. |
DCHECK_EQ(profile_, arc_session_manager->profile()); |
- OnArcPlayStoreEnabledChanged(arc_session_manager->IsArcPlayStoreEnabled()); |
+ OnArcPlayStoreEnabledChanged( |
+ arc::IsArcPlayStoreEnabledForProfile(profile_)); |
} |
arc_session_manager->AddObserver(this); |
@@ -391,7 +397,7 @@ bool ArcAppListPrefs::HasObserver(Observer* observer) { |
std::unique_ptr<ArcAppListPrefs::PackageInfo> ArcAppListPrefs::GetPackage( |
const std::string& package_name) const { |
- if (!IsArcEnabled()) |
+ if (!IsArcAlive() || !arc::IsArcPlayStoreEnabledForProfile(profile_)) |
return nullptr; |
const base::DictionaryValue* package = nullptr; |
@@ -423,7 +429,7 @@ std::unique_ptr<ArcAppListPrefs::PackageInfo> ArcAppListPrefs::GetPackage( |
} |
std::vector<std::string> ArcAppListPrefs::GetAppIds() const { |
- if (!IsArcEnabled()) { |
+ if (!IsArcAlive() || !arc::IsArcPlayStoreEnabledForProfile(profile_)) { |
// Default ARC apps available before OptIn. |
std::vector<std::string> ids; |
for (const auto& default_app : default_apps_.app_map()) { |
@@ -456,7 +462,8 @@ std::vector<std::string> ArcAppListPrefs::GetAppIdsNoArcEnabledCheck() const { |
std::unique_ptr<ArcAppListPrefs::AppInfo> ArcAppListPrefs::GetApp( |
const std::string& app_id) const { |
// Information for default app is available before ARC enabled. |
- if (!IsArcEnabled() && !default_apps_.HasApp(app_id)) |
+ if ((!IsArcAlive() || !arc::IsArcPlayStoreEnabledForProfile(profile_)) && |
+ !default_apps_.HasApp(app_id)) |
return std::unique_ptr<AppInfo>(); |
const base::DictionaryValue* app = nullptr; |
@@ -511,7 +518,8 @@ std::unique_ptr<ArcAppListPrefs::AppInfo> ArcAppListPrefs::GetApp( |
} |
bool ArcAppListPrefs::IsRegistered(const std::string& app_id) const { |
- if (!IsArcEnabled() && !default_apps_.HasApp(app_id)) |
+ if ((!IsArcAlive() || !arc::IsArcPlayStoreEnabledForProfile(profile_)) && |
+ !default_apps_.HasApp(app_id)) |
return false; |
const base::DictionaryValue* app = nullptr; |
@@ -710,7 +718,7 @@ void ArcAppListPrefs::MaybeAddNonLaunchableApp( |
const base::Optional<std::string>& name, |
const std::string& package_name, |
const std::string& activity) { |
- DCHECK(IsArcEnabled()); |
+ DCHECK(arc::IsArcPlayStoreEnabledForProfile(profile_)); |
if (IsRegistered(GetAppId(package_name, activity))) |
return; |
@@ -847,7 +855,7 @@ void ArcAppListPrefs::RemoveApp(const std::string& app_id) { |
void ArcAppListPrefs::AddOrUpdatePackagePrefs( |
PrefService* prefs, const arc::mojom::ArcPackageInfo& package) { |
- DCHECK(IsArcEnabled()); |
+ DCHECK(arc::IsArcPlayStoreEnabledForProfile(profile_)); |
const std::string& package_name = package.package_name; |
default_apps_.MaybeMarkPackageUninstalled(package_name, false); |
if (package_name.empty()) { |
@@ -870,7 +878,7 @@ void ArcAppListPrefs::AddOrUpdatePackagePrefs( |
void ArcAppListPrefs::RemovePackageFromPrefs(PrefService* prefs, |
const std::string& package_name) { |
- DCHECK(IsArcEnabled()); |
+ DCHECK(arc::IsArcPlayStoreEnabledForProfile(profile_)); |
default_apps_.MaybeMarkPackageUninstalled(package_name, true); |
if (!default_apps_.HasPackage(package_name)) { |
DictionaryPrefUpdate update(prefs, prefs::kArcPackages); |
@@ -887,7 +895,7 @@ void ArcAppListPrefs::RemovePackageFromPrefs(PrefService* prefs, |
void ArcAppListPrefs::OnAppListRefreshed( |
std::vector<arc::mojom::AppInfoPtr> apps) { |
- DCHECK(IsArcEnabled()); |
+ DCHECK(arc::IsArcPlayStoreEnabledForProfile(profile_)); |
std::vector<std::string> old_apps = GetAppIds(); |
ready_apps_.clear(); |
@@ -1176,7 +1184,7 @@ bool ArcAppListPrefs::IsUnknownPackage(const std::string& package_name) const { |
void ArcAppListPrefs::OnPackageAdded( |
arc::mojom::ArcPackageInfoPtr package_info) { |
- DCHECK(IsArcEnabled()); |
+ DCHECK(arc::IsArcPlayStoreEnabledForProfile(profile_)); |
// Ignore packages installed by internal sync. |
DCHECK(sync_service_); |
@@ -1194,7 +1202,7 @@ void ArcAppListPrefs::OnPackageAdded( |
void ArcAppListPrefs::OnPackageModified( |
arc::mojom::ArcPackageInfoPtr package_info) { |
- DCHECK(IsArcEnabled()); |
+ DCHECK(arc::IsArcPlayStoreEnabledForProfile(profile_)); |
AddOrUpdatePackagePrefs(prefs_, *package_info); |
for (auto& observer : observer_list_) |
observer.OnPackageModified(*package_info); |
@@ -1202,7 +1210,7 @@ void ArcAppListPrefs::OnPackageModified( |
void ArcAppListPrefs::OnPackageListRefreshed( |
std::vector<arc::mojom::ArcPackageInfoPtr> packages) { |
- DCHECK(IsArcEnabled()); |
+ DCHECK(arc::IsArcPlayStoreEnabledForProfile(profile_)); |
const std::vector<std::string> old_packages(GetPackagesFromPrefs()); |
std::unordered_set<std::string> current_packages; |
@@ -1234,7 +1242,8 @@ std::vector<std::string> ArcAppListPrefs::GetPackagesFromPrefs() const { |
std::vector<std::string> ArcAppListPrefs::GetPackagesFromPrefs( |
bool installed) const { |
std::vector<std::string> packages; |
- if (!IsArcEnabled() && installed) |
+ if ((!IsArcAlive() || !arc::IsArcPlayStoreEnabledForProfile(profile_)) && |
+ installed) |
return packages; |
const base::DictionaryValue* package_prefs = |