Commit d5403810 authored by antrim@chromium.org's avatar antrim@chromium.org

Supervised users import: make sure users are up-to-date.

Cancel button should not be disabled.

BUG=360589, 343076
R=nkostylev@chromium.org

Review URL: https://codereview.chromium.org/256223003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@267014 0039d316-1c4b-4281-b951-d872f2087c98
parent 0945421b
...@@ -30,6 +30,7 @@ LocallyManagedUserCreationFlow::LocallyManagedUserCreationFlow( ...@@ -30,6 +30,7 @@ LocallyManagedUserCreationFlow::LocallyManagedUserCreationFlow(
: ExtendedUserFlow(manager_id), : ExtendedUserFlow(manager_id),
token_validated_(false), token_validated_(false),
logged_in_(false), logged_in_(false),
session_started_(false),
manager_profile_(NULL) {} manager_profile_(NULL) {}
LocallyManagedUserCreationFlow::~LocallyManagedUserCreationFlow() {} LocallyManagedUserCreationFlow::~LocallyManagedUserCreationFlow() {}
...@@ -63,8 +64,11 @@ void LocallyManagedUserCreationFlow::HandleOAuthTokenStatusChange( ...@@ -63,8 +64,11 @@ void LocallyManagedUserCreationFlow::HandleOAuthTokenStatusChange(
// authentication happens before oauth token validation). // authentication happens before oauth token validation).
token_validated_ = true; token_validated_ = true;
if (token_validated_ && logged_in_) if (token_validated_ && logged_in_) {
GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_); if (!session_started_)
GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_);
session_started_ = true;
}
} }
...@@ -93,10 +97,13 @@ void LocallyManagedUserCreationFlow::LaunchExtraSteps( ...@@ -93,10 +97,13 @@ void LocallyManagedUserCreationFlow::LaunchExtraSteps(
profile, profile,
true); true);
if (token_validated_ && logged_in_) if (token_validated_ && logged_in_) {
GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_); if (!session_started_)
else GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_);
session_started_ = true;
} else {
GetScreen(host())->OnManagerCryptohomeAuthenticated(); GetScreen(host())->OnManagerCryptohomeAuthenticated();
}
} }
} // namespace chromeos } // namespace chromeos
...@@ -43,6 +43,10 @@ class LocallyManagedUserCreationFlow : public ExtendedUserFlow { ...@@ -43,6 +43,10 @@ class LocallyManagedUserCreationFlow : public ExtendedUserFlow {
// local cryptohome. // local cryptohome.
bool logged_in_; bool logged_in_;
// Indicates that cryptohome is mounted and OAuth2 token is validated.
// Used to avoid multiple notifications.
bool session_started_;
Profile* manager_profile_; Profile* manager_profile_;
DISALLOW_COPY_AND_ASSIGN(LocallyManagedUserCreationFlow); DISALLOW_COPY_AND_ASSIGN(LocallyManagedUserCreationFlow);
......
...@@ -89,6 +89,7 @@ LocallyManagedUserCreationScreen::LocallyManagedUserCreationScreen( ...@@ -89,6 +89,7 @@ LocallyManagedUserCreationScreen::LocallyManagedUserCreationScreen(
actor_(actor), actor_(actor),
on_error_screen_(false), on_error_screen_(false),
last_page_(kNameOfIntroScreen), last_page_(kNameOfIntroScreen),
sync_service_(NULL),
image_decoder_(NULL), image_decoder_(NULL),
apply_photo_after_decoding_(false), apply_photo_after_decoding_(false),
selected_image_(0) { selected_image_(0) {
...@@ -99,6 +100,8 @@ LocallyManagedUserCreationScreen::LocallyManagedUserCreationScreen( ...@@ -99,6 +100,8 @@ LocallyManagedUserCreationScreen::LocallyManagedUserCreationScreen(
LocallyManagedUserCreationScreen::~LocallyManagedUserCreationScreen() { LocallyManagedUserCreationScreen::~LocallyManagedUserCreationScreen() {
CameraPresenceNotifier::GetInstance()->RemoveObserver(this); CameraPresenceNotifier::GetInstance()->RemoveObserver(this);
if (sync_service_)
sync_service_->RemoveObserver(this);
if (actor_) if (actor_)
actor_->SetDelegate(NULL); actor_->SetDelegate(NULL);
if (image_decoder_.get()) if (image_decoder_.get())
...@@ -332,6 +335,7 @@ void LocallyManagedUserCreationScreen::OnManagerLoginFailure() { ...@@ -332,6 +335,7 @@ void LocallyManagedUserCreationScreen::OnManagerLoginFailure() {
void LocallyManagedUserCreationScreen::OnManagerFullyAuthenticated( void LocallyManagedUserCreationScreen::OnManagerFullyAuthenticated(
Profile* manager_profile) { Profile* manager_profile) {
LOG(ERROR) << "-----------------------------OnManagerFullyAuthenticated";
DCHECK(controller_.get()); DCHECK(controller_.get());
// For manager user, move desktop to locked container so that windows created // For manager user, move desktop to locked container so that windows created
// during the user image picker step are below it. // during the user image picker step are below it.
...@@ -343,11 +347,17 @@ void LocallyManagedUserCreationScreen::OnManagerFullyAuthenticated( ...@@ -343,11 +347,17 @@ void LocallyManagedUserCreationScreen::OnManagerFullyAuthenticated(
actor_->ShowUsernamePage(); actor_->ShowUsernamePage();
last_page_ = kNameOfNewUserParametersScreen; last_page_ = kNameOfNewUserParametersScreen;
CHECK(!sync_service_);
sync_service_ = ManagedUserSyncServiceFactory::GetForProfile(manager_profile);
sync_service_->AddObserver(this);
OnManagedUsersChanged();
}
ManagedUserSyncServiceFactory::GetForProfile(manager_profile)-> void LocallyManagedUserCreationScreen::OnManagedUsersChanged() {
GetManagedUsersAsync(base::Bind( CHECK(sync_service_);
&LocallyManagedUserCreationScreen::OnGetManagedUsers, sync_service_->GetManagedUsersAsync(
weak_factory_.GetWeakPtr())); base::Bind(&LocallyManagedUserCreationScreen::OnGetManagedUsers,
weak_factory_.GetWeakPtr()));
} }
void LocallyManagedUserCreationScreen::OnManagerCryptohomeAuthenticated() { void LocallyManagedUserCreationScreen::OnManagerCryptohomeAuthenticated() {
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "chrome/browser/chromeos/login/screens/wizard_screen.h" #include "chrome/browser/chromeos/login/screens/wizard_screen.h"
#include "chrome/browser/chromeos/net/network_portal_detector.h" #include "chrome/browser/chromeos/net/network_portal_detector.h"
#include "chrome/browser/image_decoder.h" #include "chrome/browser/image_decoder.h"
#include "chrome/browser/managed_mode/managed_user_sync_service.h"
#include "chrome/browser/ui/webui/chromeos/login/locally_managed_user_creation_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/locally_managed_user_creation_screen_handler.h"
#include "ui/gfx/image/image_skia.h" #include "ui/gfx/image/image_skia.h"
...@@ -28,6 +29,7 @@ class LocallyManagedUserCreationScreen ...@@ -28,6 +29,7 @@ class LocallyManagedUserCreationScreen
: public WizardScreen, : public WizardScreen,
public LocallyManagedUserCreationScreenHandler::Delegate, public LocallyManagedUserCreationScreenHandler::Delegate,
public ManagedUserCreationController::StatusConsumer, public ManagedUserCreationController::StatusConsumer,
public ManagedUserSyncServiceObserver,
public ImageDecoder::Delegate, public ImageDecoder::Delegate,
public NetworkPortalDetector::Observer, public NetworkPortalDetector::Observer,
public CameraPresenceNotifier::Observer { public CameraPresenceNotifier::Observer {
...@@ -63,6 +65,12 @@ class LocallyManagedUserCreationScreen ...@@ -63,6 +65,12 @@ class LocallyManagedUserCreationScreen
// CameraPresenceNotifier::Observer implementation: // CameraPresenceNotifier::Observer implementation:
virtual void OnCameraPresenceCheckDone(bool is_camera_present) OVERRIDE; virtual void OnCameraPresenceCheckDone(bool is_camera_present) OVERRIDE;
// ManagedUserSyncServiceObserver implementation
virtual void OnManagedUserAcknowledged(
const std::string& managed_user_id) OVERRIDE {}
virtual void OnManagedUsersSyncingStopped() OVERRIDE {}
virtual void OnManagedUsersChanged() OVERRIDE;
// WizardScreen implementation: // WizardScreen implementation:
virtual void PrepareToShow() OVERRIDE; virtual void PrepareToShow() OVERRIDE;
virtual void Show() OVERRIDE; virtual void Show() OVERRIDE;
...@@ -126,6 +134,8 @@ class LocallyManagedUserCreationScreen ...@@ -126,6 +134,8 @@ class LocallyManagedUserCreationScreen
bool on_error_screen_; bool on_error_screen_;
std::string last_page_; std::string last_page_;
ManagedUserSyncService* sync_service_;
gfx::ImageSkia user_photo_; gfx::ImageSkia user_photo_;
scoped_refptr<ImageDecoder> image_decoder_; scoped_refptr<ImageDecoder> image_decoder_;
bool apply_photo_after_decoding_; bool apply_photo_after_decoding_;
......
...@@ -370,6 +370,14 @@ login.createScreen('LocallyManagedUserCreationScreen', ...@@ -370,6 +370,14 @@ login.createScreen('LocallyManagedUserCreationScreen',
return this.children; return this.children;
}, },
/**
* Returns selected pod.
* @type {Node}
*/
get selectedPod() {
return this.selectedPod_;
},
addPod: function(user) { addPod: function(user) {
var importPod = new ImportPod({user: user}); var importPod = new ImportPod({user: user});
this.appendChild(importPod); this.appendChild(importPod);
...@@ -835,6 +843,7 @@ login.createScreen('LocallyManagedUserCreationScreen', ...@@ -835,6 +843,7 @@ login.createScreen('LocallyManagedUserCreationScreen',
if (this.disabled) if (this.disabled)
return; return;
this.disabled = true; this.disabled = true;
this.context_.managedName = userName; this.context_.managedName = userName;
chrome.send('specifyLocallyManagedUserCreationFlowUserData', chrome.send('specifyLocallyManagedUserCreationFlowUserData',
[userName, firstPassword]); [userName, firstPassword]);
...@@ -1301,6 +1310,7 @@ login.createScreen('LocallyManagedUserCreationScreen', ...@@ -1301,6 +1310,7 @@ login.createScreen('LocallyManagedUserCreationScreen',
control.disabled = value; control.disabled = value;
} }
$('login-header-bar').disabled = value; $('login-header-bar').disabled = value;
$('cancel-add-user-button').disabled = false;
}, },
/** /**
...@@ -1542,8 +1552,12 @@ login.createScreen('LocallyManagedUserCreationScreen', ...@@ -1542,8 +1552,12 @@ login.createScreen('LocallyManagedUserCreationScreen',
}, },
setExistingManagedUsers: function(users) { setExistingManagedUsers: function(users) {
var userList = users; var selectedUser = null;
// Store selected user
if (this.importList_.selectedPod)
selectedUser = this.importList_.selectedPod.user.id;
var userList = users;
userList.sort(function(a, b) { userList.sort(function(a, b) {
// Put existing users last. // Put existing users last.
if (a.exists != b.exists) if (a.exists != b.exists)
...@@ -1553,14 +1567,21 @@ login.createScreen('LocallyManagedUserCreationScreen', ...@@ -1553,14 +1567,21 @@ login.createScreen('LocallyManagedUserCreationScreen',
}); });
this.importList_.clearPods(); this.importList_.clearPods();
for (var i = 0; i < userList.length; ++i) var selectedIndex = -1;
for (var i = 0; i < userList.length; ++i) {
this.importList_.addPod(userList[i]); this.importList_.addPod(userList[i]);
if (selectedUser == userList[i].id)
selectedIndex = i;
}
if (userList.length == 1) if (userList.length == 1)
this.importList_.selectPod(this.managerList_.pods[0]); this.importList_.selectPod(this.importList_.pods[0]);
if (selectedIndex >= 0)
this.importList_.selectPod(this.importList_.pods[selectedIndex]);
if (userList.length > 0 && this.currentPage_ == 'username') if (this.currentPage_ == 'username')
this.getScreenElement('import-link').hidden = false; this.getScreenElement('import-link').hidden = (userList.length == 0);
}, },
}; };
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment