Pin Chrome's shortcut to the Win10 Start menu on install and OS upgrade.
[chromium-blink-merge.git] / chrome / browser / supervised_user / chromeos / supervised_user_password_service.cc
blob530bfab509b598faf1c22aee5d1e100fd31ebc67
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/supervised_user/chromeos/supervised_user_password_service.h"
7 #include "base/bind.h"
8 #include "base/values.h"
9 #include "chrome/browser/chromeos/login/supervised/supervised_user_authentication.h"
10 #include "chrome/browser/chromeos/login/users/chrome_user_manager.h"
11 #include "chrome/browser/chromeos/login/users/supervised_user_manager.h"
12 #include "chrome/browser/supervised_user/legacy/supervised_user_sync_service.h"
13 #include "chrome/browser/supervised_user/supervised_user_constants.h"
15 namespace chromeos {
17 SupervisedUserPasswordService::SupervisedUserPasswordService()
18 : weak_ptr_factory_(this) {}
20 SupervisedUserPasswordService::~SupervisedUserPasswordService() {}
22 void SupervisedUserPasswordService::Init(
23 const std::string& user_id,
24 SupervisedUserSharedSettingsService* shared_settings_service) {
25 user_id_ = user_id;
26 settings_service_ = shared_settings_service;
27 settings_service_subscription_ = settings_service_->Subscribe(
28 base::Bind(&SupervisedUserPasswordService::OnSharedSettingsChange,
29 weak_ptr_factory_.GetWeakPtr()));
31 // Force value check in case we have missed some notification.
33 chromeos::SupervisedUserManager* supervised_user_manager =
34 ChromeUserManager::Get()->GetSupervisedUserManager();
36 OnSharedSettingsChange(supervised_user_manager->GetUserSyncId(user_id),
37 supervised_users::kChromeOSPasswordData);
40 void SupervisedUserPasswordService::OnSharedSettingsChange(
41 const std::string& su_id,
42 const std::string& key) {
43 if (key != supervised_users::kChromeOSPasswordData)
44 return;
45 chromeos::SupervisedUserManager* supervised_user_manager =
46 ChromeUserManager::Get()->GetSupervisedUserManager();
47 const user_manager::User* user = supervised_user_manager->FindBySyncId(su_id);
48 if (user == NULL) {
49 LOG(WARNING) << "Got notification for user not on device.";
50 return;
52 DCHECK(user_id_ == user->email());
53 if (user_id_ != user->email())
54 return;
55 const base::Value* value = settings_service_->GetValue(su_id, key);
56 if (value == NULL) {
57 LOG(WARNING) << "Got empty value from sync.";
58 return;
60 const base::DictionaryValue* dict;
61 if (!value->GetAsDictionary(&dict)) {
62 LOG(WARNING) << "Got non-dictionary value from sync.";
63 return;
65 chromeos::SupervisedUserAuthentication* auth =
66 supervised_user_manager->GetAuthentication();
67 if (!auth->NeedPasswordChange(user_id_, dict))
68 return;
69 auth->ScheduleSupervisedPasswordChange(user_id_, dict);
72 void SupervisedUserPasswordService::Shutdown() {
73 settings_service_subscription_.reset();
76 } // namespace chromeos