Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5141)

Unified Diff: chrome/browser/chromeos/login/session/user_session_manager.cc

Issue 971383002: Removing FRE UI for unicorn accounts. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Changing the observer. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/session/user_session_manager.cc
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc
index 246f4880e0b3262da320c88309bf6d33c15c55fb..fc91cf68074e8c953c1843fb400a92044898f99c 100644
--- a/chrome/browser/chromeos/login/session/user_session_manager.cc
+++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -65,6 +65,8 @@
#include "chrome/browser/signin/account_tracker_service_factory.h"
#include "chrome/browser/signin/easy_unlock_service.h"
#include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/supervised_user/child_accounts/child_account_service.h"
+#include "chrome/browser/supervised_user/child_accounts/child_account_service_factory.h"
#include "chrome/browser/ui/app_list/start_page_service.h"
#include "chrome/browser/ui/startup/startup_browser_creator.h"
#include "chrome/common/chrome_switches.h"
@@ -325,7 +327,10 @@ UserSessionManager::UserSessionManager()
session_restore_strategy_(
OAuth2LoginManager::RESTORE_FROM_SAVED_OAUTH2_REFRESH_TOKEN),
running_easy_unlock_key_ops_(false),
- should_launch_browser_(true) {
+ should_launch_browser_(true),
+ requesting_start_urls_(false),
+ profile_fetching_flags_(nullptr),
+ weak_factory_(this) {
net::NetworkChangeNotifier::AddConnectionTypeObserver(this);
user_manager::UserManager::Get()->AddSessionStateObserver(this);
}
@@ -340,6 +345,9 @@ UserSessionManager::~UserSessionManager() {
net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this);
}
+// static
+const int UserSessionManager::kFlagsFetchingLoginTimeoutMs = 1000;
Marc Treib 2015/03/04 16:31:48 Can we make this large enough so that we get a sec
merkulova 2015/03/04 19:06:49 That's a tricky question: we want the FRE UI to ap
+
void UserSessionManager::CompleteGuestSessionLogin(const GURL& start_url) {
VLOG(1) << "Completing guest session login";
@@ -779,6 +787,39 @@ void UserSessionManager::OnProfilePrepared(Profile* profile,
RestorePendingUserSessions();
}
+void UserSessionManager::OnChildAccountStatusChanged() {
+ ChildAccountService* child_service =
+ ChildAccountServiceFactory::GetForProfile(profile_fetching_flags_);
+ StopStatusObserving();
+
+ if (!child_service)
Marc Treib 2015/03/04 16:31:48 Can this actually happen? If so, add a comment ple
merkulova 2015/03/04 19:06:49 I hope not, this all relies on CAServiceFactory. I
Marc Treib 2015/03/05 10:08:07 It might (or might not) happen in some unit tests;
merkulova 2015/03/10 09:18:22 Done.
+ return;
+ if (!child_service->IsChildAccountStatusKnown()) {
Marc Treib 2015/03/04 16:31:48 DCHECK(child_service->IsChildAccountStatusKnown())
merkulova 2015/03/04 19:06:49 Done.
+ NOTREACHED() << "Child account status was changed to UNKNOWN";
+ } else if (requesting_start_urls_) {
Marc Treib 2015/03/04 16:31:48 I think you can move this block into StopStatusObs
merkulova 2015/03/04 19:06:49 Done.
+ InitializeStartUrls();
+ requesting_start_urls_ = false;
+ }
+}
+
+void UserSessionManager::OnStatusObservingCancelled() {
+ StopStatusObserving();
+ if (requesting_start_urls_) {
Marc Treib 2015/03/04 16:31:48 ^^
merkulova 2015/03/04 19:06:49 Done.
+ InitializeStartUrls();
+ requesting_start_urls_ = false;
+ }
+}
+
+void UserSessionManager::StopStatusObserving() {
+ if (!profile_fetching_flags_)
+ return;
+ ChildAccountService* child_service =
+ ChildAccountServiceFactory::GetForProfile(profile_fetching_flags_);
+ if (child_service)
+ child_service->RemoveStatusObserver(this);
+ profile_fetching_flags_ = nullptr;
+}
+
void UserSessionManager::CreateUserSession(const UserContext& user_context,
bool has_auth_cookies) {
user_context_ = user_context;
@@ -1045,10 +1086,12 @@ void UserSessionManager::InitializeStartUrls() const {
std::vector<std::string> start_urls;
user_manager::UserManager* user_manager = user_manager::UserManager::Get();
+
bool can_show_getstarted_guide =
user_manager->GetActiveUser()->GetType() ==
user_manager::USER_TYPE_REGULAR &&
!user_manager->IsCurrentUserNonCryptohomeDataEphemeral();
+
// Skip the default first-run behavior for public accounts.
if (!user_manager->IsLoggedInAsPublicAccount()) {
if (AccessibilityManager::Get()->IsSpokenFeedbackEnabled()) {
@@ -1080,6 +1123,17 @@ void UserSessionManager::InitializeStartUrls() const {
}
bool UserSessionManager::InitializeUserSession(Profile* profile) {
+ ChildAccountService* child_service =
+ ChildAccountServiceFactory::GetForProfile(profile);
+ if (child_service)
Marc Treib 2015/03/04 16:31:48 Here too: Can this actually happen?
merkulova 2015/03/04 19:06:49 I hope no. It all relies on CAServiceFactory. If i
Marc Treib 2015/03/05 10:08:07 Yup, please remove :)
merkulova 2015/03/10 09:18:22 Done.
+ child_service->AddStatusObserver(this);
+ base::MessageLoopProxy::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&UserSessionManager::OnStatusObservingCancelled,
+ weak_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(kFlagsFetchingLoginTimeoutMs));
+ profile_fetching_flags_ = profile;
+
user_manager::UserManager* user_manager = user_manager::UserManager::Get();
// Kiosk apps has their own session initialization pipeline.
@@ -1098,8 +1152,12 @@ bool UserSessionManager::InitializeUserSession(Profile* profile) {
if (user_manager->IsCurrentUserNew() && !skip_post_login_screens) {
// Don't specify start URLs if the administrator has configured the start
// URLs via policy.
- if (!SessionStartupPref::TypeIsManaged(profile->GetPrefs()))
- InitializeStartUrls();
+ if (!SessionStartupPref::TypeIsManaged(profile->GetPrefs())) {
+ if (child_service && child_service->IsChildAccountStatusKnown())
+ InitializeStartUrls();
+ else
+ requesting_start_urls_ = true;
+ }
// Mark the device as registered., i.e. the second part of OOBE as
// completed.

Powered by Google App Engine
This is Rietveld 408576698