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(
: ExtendedUserFlow(manager_id),
token_validated_(false),
logged_in_(false),
session_started_(false),
manager_profile_(NULL) {}
LocallyManagedUserCreationFlow::~LocallyManagedUserCreationFlow() {}
......@@ -63,8 +64,11 @@ void LocallyManagedUserCreationFlow::HandleOAuthTokenStatusChange(
// authentication happens before oauth token validation).
token_validated_ = true;
if (token_validated_ && logged_in_)
GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_);
if (token_validated_ && logged_in_) {
if (!session_started_)
GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_);
session_started_ = true;
}
}
......@@ -93,10 +97,13 @@ void LocallyManagedUserCreationFlow::LaunchExtraSteps(
profile,
true);
if (token_validated_ && logged_in_)
GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_);
else
if (token_validated_ && logged_in_) {
if (!session_started_)
GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_);
session_started_ = true;
} else {
GetScreen(host())->OnManagerCryptohomeAuthenticated();
}
}
} // namespace chromeos
......@@ -43,6 +43,10 @@ class LocallyManagedUserCreationFlow : public ExtendedUserFlow {
// local cryptohome.
bool logged_in_;
// Indicates that cryptohome is mounted and OAuth2 token is validated.
// Used to avoid multiple notifications.
bool session_started_;
Profile* manager_profile_;
DISALLOW_COPY_AND_ASSIGN(LocallyManagedUserCreationFlow);
......
......@@ -89,6 +89,7 @@ LocallyManagedUserCreationScreen::LocallyManagedUserCreationScreen(
actor_(actor),
on_error_screen_(false),
last_page_(kNameOfIntroScreen),
sync_service_(NULL),
image_decoder_(NULL),
apply_photo_after_decoding_(false),
selected_image_(0) {
......@@ -99,6 +100,8 @@ LocallyManagedUserCreationScreen::LocallyManagedUserCreationScreen(
LocallyManagedUserCreationScreen::~LocallyManagedUserCreationScreen() {
CameraPresenceNotifier::GetInstance()->RemoveObserver(this);
if (sync_service_)
sync_service_->RemoveObserver(this);
if (actor_)
actor_->SetDelegate(NULL);
if (image_decoder_.get())
......@@ -332,6 +335,7 @@ void LocallyManagedUserCreationScreen::OnManagerLoginFailure() {
void LocallyManagedUserCreationScreen::OnManagerFullyAuthenticated(
Profile* manager_profile) {
LOG(ERROR) << "-----------------------------OnManagerFullyAuthenticated";
DCHECK(controller_.get());
// For manager user, move desktop to locked container so that windows created
// during the user image picker step are below it.
......@@ -343,11 +347,17 @@ void LocallyManagedUserCreationScreen::OnManagerFullyAuthenticated(
actor_->ShowUsernamePage();
last_page_ = kNameOfNewUserParametersScreen;
CHECK(!sync_service_);
sync_service_ = ManagedUserSyncServiceFactory::GetForProfile(manager_profile);
sync_service_->AddObserver(this);
OnManagedUsersChanged();
}
ManagedUserSyncServiceFactory::GetForProfile(manager_profile)->
GetManagedUsersAsync(base::Bind(
&LocallyManagedUserCreationScreen::OnGetManagedUsers,
weak_factory_.GetWeakPtr()));
void LocallyManagedUserCreationScreen::OnManagedUsersChanged() {
CHECK(sync_service_);
sync_service_->GetManagedUsersAsync(
base::Bind(&LocallyManagedUserCreationScreen::OnGetManagedUsers,
weak_factory_.GetWeakPtr()));
}
void LocallyManagedUserCreationScreen::OnManagerCryptohomeAuthenticated() {
......
......@@ -14,6 +14,7 @@
#include "chrome/browser/chromeos/login/screens/wizard_screen.h"
#include "chrome/browser/chromeos/net/network_portal_detector.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 "ui/gfx/image/image_skia.h"
......@@ -28,6 +29,7 @@ class LocallyManagedUserCreationScreen
: public WizardScreen,
public LocallyManagedUserCreationScreenHandler::Delegate,
public ManagedUserCreationController::StatusConsumer,
public ManagedUserSyncServiceObserver,
public ImageDecoder::Delegate,
public NetworkPortalDetector::Observer,
public CameraPresenceNotifier::Observer {
......@@ -63,6 +65,12 @@ class LocallyManagedUserCreationScreen
// CameraPresenceNotifier::Observer implementation:
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:
virtual void PrepareToShow() OVERRIDE;
virtual void Show() OVERRIDE;
......@@ -126,6 +134,8 @@ class LocallyManagedUserCreationScreen
bool on_error_screen_;
std::string last_page_;
ManagedUserSyncService* sync_service_;
gfx::ImageSkia user_photo_;
scoped_refptr<ImageDecoder> image_decoder_;
bool apply_photo_after_decoding_;
......
......@@ -370,6 +370,14 @@ login.createScreen('LocallyManagedUserCreationScreen',
return this.children;
},
/**
* Returns selected pod.
* @type {Node}
*/
get selectedPod() {
return this.selectedPod_;
},
addPod: function(user) {
var importPod = new ImportPod({user: user});
this.appendChild(importPod);
......@@ -835,6 +843,7 @@ login.createScreen('LocallyManagedUserCreationScreen',
if (this.disabled)
return;
this.disabled = true;
this.context_.managedName = userName;
chrome.send('specifyLocallyManagedUserCreationFlowUserData',
[userName, firstPassword]);
......@@ -1301,6 +1310,7 @@ login.createScreen('LocallyManagedUserCreationScreen',
control.disabled = value;
}
$('login-header-bar').disabled = value;
$('cancel-add-user-button').disabled = false;
},
/**
......@@ -1542,8 +1552,12 @@ login.createScreen('LocallyManagedUserCreationScreen',
},
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) {
// Put existing users last.
if (a.exists != b.exists)
......@@ -1553,14 +1567,21 @@ login.createScreen('LocallyManagedUserCreationScreen',
});
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]);
if (selectedUser == userList[i].id)
selectedIndex = i;
}
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')
this.getScreenElement('import-link').hidden = false;
if (this.currentPage_ == 'username')
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