Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / managed_mode / chromeos / managed_user_password_service.cc
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.
4
5 #include "chrome/browser/managed_mode/chromeos/managed_user_password_service.h"
6
7 #include "base/bind.h"
8 #include "base/values.h"
9 #include "chrome/browser/chromeos/login/managed/supervised_user_authentication.h"
10 #include "chrome/browser/chromeos/login/supervised_user_manager.h"
11 #include "chrome/browser/chromeos/login/user_manager.h"
12 #include "chrome/browser/managed_mode/managed_user_constants.h"
13 #include "chrome/browser/managed_mode/managed_user_sync_service.h"
14
15 namespace chromeos {
16
17 ManagedUserPasswordService::ManagedUserPasswordService()
18     : weak_ptr_factory_(this) {}
19
20 ManagedUserPasswordService::~ManagedUserPasswordService() {}
21
22 void ManagedUserPasswordService::Init(
23     const std::string& user_id,
24     ManagedUserSharedSettingsService* shared_settings_service) {
25   user_id_ = user_id;
26   settings_service_ = shared_settings_service;
27   settings_service_subscription_ = settings_service_->Subscribe(
28       base::Bind(&ManagedUserPasswordService::OnSharedSettingsChange,
29                  weak_ptr_factory_.GetWeakPtr()));
30
31   // Force value check in case we have missed some notification.
32
33   chromeos::SupervisedUserManager* supervised_user_manager =
34       chromeos::UserManager::Get()->GetSupervisedUserManager();
35
36   OnSharedSettingsChange(supervised_user_manager->GetUserSyncId(user_id),
37                          managed_users::kChromeOSPasswordData);
38 }
39
40 void ManagedUserPasswordService::OnSharedSettingsChange(
41     const std::string& mu_id,
42     const std::string& key) {
43   if (key != managed_users::kChromeOSPasswordData)
44     return;
45   chromeos::SupervisedUserManager* supervised_user_manager =
46       chromeos::UserManager::Get()->GetSupervisedUserManager();
47   const chromeos::User* user = supervised_user_manager->FindBySyncId(mu_id);
48   if (user == NULL) {
49     LOG(WARNING) << "Got notification for user not on device.";
50     return;
51   }
52   DCHECK(user_id_ == user->email());
53   if (user_id_ != user->email())
54     return;
55   const base::Value* value = settings_service_->GetValue(mu_id, key);
56   if (value == NULL) {
57     LOG(WARNING) << "Got empty value from sync.";
58     return;
59   }
60   const base::DictionaryValue* dict;
61   if (!value->GetAsDictionary(&dict)) {
62     LOG(WARNING) << "Got non-dictionary value from sync.";
63     return;
64   }
65   chromeos::SupervisedUserAuthentication* auth =
66       supervised_user_manager->GetAuthentication();
67   if (!auth->NeedPasswordChange(user_id_, dict))
68     return;
69   auth->ScheduleSupervisedPasswordChange(user_id_, dict);
70 }
71
72 void ManagedUserPasswordService::Shutdown() {
73     settings_service_subscription_.reset();
74 }
75
76 }  // namespace chromeos